LISP. Преобразование старых лиспов для работы в современных версиях автокда
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Преобразование старых лиспов для работы в современных версиях автокда

LISP. Преобразование старых лиспов для работы в современных версиях автокда

Ответ
Поиск в этой теме
Непрочитано 12.07.2016, 14:00 #1
LISP. Преобразование старых лиспов для работы в современных версиях автокда
Borikv
 
Регистрация: 24.10.2007
Сообщений: 108

Есть ли какая-то система, трансфомирующая лисп, написанный для старых версий Автокада,
в вид подходящий для современных?
Например симпатичный лисп для обсчёта площадей пряоугольников.
Код:
[Выделить все]
(defun C:PR (/ SS PT H N L SUM POLY S P X Y SH $X $Y $N $SUM $S P1 P2 P13)
;Area calculations 
   (setq *ERROR* STOP)
   (princ "\nSelect Polylines to Compute Area: ")
   (initget 1)
   (setq SS (ssget)
         PT (getpoint "\nText Insertion Point: ")
         NUM (getint "\nFirst Number for Counting <1>: ")
         N 0
         L (sslength SS)
   )
   (if (= NUM nil) (setq NUM 0)
       (setq NUM (1- NUM))
   )
   (initget 6 "Y N")
   (setq REC (getkword (strcat "\nCount Rectangles? " "Y/N <Y>: ")))
   (if (or (eq REC "Y") (eq REC nil))
       (setq COUNT T)
       (setq COUNT nil)
   )
   (setvar "cmdecho" 0)
   ;(if (not (tblsearch "BLOCK" "DIM1"))
       (command "insert" "dim1" "0,0" "" "" "" "erase" (entlast) "")
   ;)
   ;(if (not (tblsearch "STYLE" "GIL"))
   ;    (command "style" "gil" "gil" "" "1" "" "" "y" "")
   ;)
   ;(if (not (tblsearch "STYLE" "MGIL"))
   ;    (command "style" "mgil" "mgil" "" "1" "" "" "y" "")
   ;)
   ;(command "dim" "dimblk" "dim1" "exit")
   (setvar "cmdecho" 1)
   (setq H (/ (getvar "LTSCALE") 0.1))
   (setvar "cmdecho" 0)
;
   (repeat L
      ;(command "layer" "s" "txt" "")
      ;(command "text" "s" "h" command)
      (setq POLY (ssname SS N))
      (command "area" "e" POLY)
      (setq S (getvar "AREA")
            P (getvar "PERIMETER")
            X (/ ( + P (sqrt (- (* P P) (* 16 S)))) 400)
            Y (/ ( - P (sqrt (- (* P P) (* 16 S)))) 400)
            $X (rtos X 2 2)
            $Y (rtos Y 2 2)
            SH (* (atof $X) (atof $Y))
            $S (rtos SH 2 2)
            P1 (cdr (assoc 10 (entget (entnext POLY))))
            P2 (cdr (assoc 10 (entget (entnext (entnext POLY)))))
            P3 (cdr (assoc 10 (entget (entnext (entnext (entnext POLY))))))
            P13 (MIDPT P1 P3)
      )
      ;
     ;Count Rectangles
      (command "clayer" "txt")
      (setq N (1+ N))
      (setq NUM (+ NUM 1))
      (if COUNT
          (command "text" P13 (/ (* 3 H) 2) 0 NUM)
      )
      ;
     ;Write Length x Width = Area
      (command "clayer" "txt")
      (command "text" PT H 0 NUM)
      (command "text" "r" (polar PT 0 (* 8 H)) H 0 $X)
      (command "text" (polar PT 0 (* 13 H)) H 0 "x")
      (command "text" "r" (polar PT 0 (* 20 H)) H 0 $Y)
      (command "text" (polar PT 0 (* 23 H)) H 0 "=")
      (command "text" "r" (polar PT 0 (* 32 H)) H 0 $S)
      (setq PT (polar PT (/ PI -2) (* 3 H)))
      ;
     ;Write Dimensions
      ;(command "layer" "s" "Dim 1-100" "")
      ;(command "dim" "style" "dim" "dimtix" "on" "dimtofl" "on")
      (command "clayer" "Dim 1-100")
      (command "_dimlinear" P1 P2 (polar P1 0 (* 1.6 H)) )
      (command "_dimlinear"  P2 P3 (polar P2 (/ pi 10) (* 2 H)))
   )
   ;(command "clayer" "txt")
   ;(command "text" "s" "h" command)
   ;(setvar "cmdecho" 1)
   (princ)
)
;
(defun MIDPT (PT1 PT2)
   (mapcar '(lambda (x y) (/ (+ x y) 2)) PT1 PT2)
)
;
(defun STOP (msg)
   (cond
      ((or (eq msg "console break")
           (eq msg "Function cancelled")
           (eq msg "quit / exit abort")
        )
        (terpri)
      )
      (T
          (princ "error: ")
          (princ msg)
      )
   )
   (setq *error* nil)
   (PrinC)
)
;
(C:PR)

Просмотров: 2593
 
Непрочитано 12.07.2016, 14:03
#2
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,928


А что не так с лиспом в "современных" автокадах?
engngr вне форума  
 
Автор темы   Непрочитано 12.07.2016, 14:07
#3
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Выдаёт:
error: bad argument type: lentityp nil
Borikv вне форума  
 
Непрочитано 12.07.2016, 14:21
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,179


не запускал, но в глаза бросилось, что нет подчерков (_) перед англ. именами команд, поэтому в русской версии работать не будет. Но в данном случае это легко исправить. Хуже, когда такой недочет в скомпилированном лиспе - *.fas или *.vlx, причем исходников нет, а автор неизвестен/не на связи/забил на свое детище. Тогда прога совсем непригодна к употреблению
kp+ вне форума  
 
Непрочитано 12.07.2016, 14:29
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,422


Borikv, код неполный. Сильно неполный.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.07.2016, 14:49
#6
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Лисп прекрасно работал примерно до версии ACAD 2000. А затем от версии до версии всё хуже и хуже пока совсем не заглох.
На A2007 ещё работал, правда нестабильно

Последний раз редактировалось Borikv, 12.07.2016 в 14:54.
Borikv вне форума  
 
Непрочитано 12.07.2016, 15:13
#7
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,179


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
код неполный. Сильно неполный.
А еще ссылается на какой-то блок dim1. Borikv, что в нем? Пример текстовых и размерных стилей, чтоб не создавать программно? Если можно, выложите
kp+ вне форума  
 
Автор темы   Непрочитано 12.07.2016, 15:50
#8
Borikv


 
Регистрация: 24.10.2007
Сообщений: 108


Вроде так
Вложения
Тип файла: zip Borik - Standard.zip (36.3 Кб, 19 просмотров)
Borikv вне форума  
 
Непрочитано 12.07.2016, 16:06
#9
trushev


 
Регистрация: 12.01.2015
Сообщений: 261


Файл прототипа с блоком dim1 в версии AC1021.
У меня были проблемы с работой лиспа на современных версиях автокада, где использовался файл прототипа версии AC1014.
trushev вне форума  
 
Непрочитано 12.07.2016, 16:55
#10
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Borikv Посмотреть сообщение
Есть ли какая-то система, трансфомирующая лисп, написанный для старых версий Автокада,
в вид подходящий для современных?
Системы нет, но "ручками" эта работа делается во вполне приемлемое время.
Используй Замену в редакторе VLISP
Например: "text" на "_text"
Ну подобные темы уже не раз обсуждались...
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 12.07.2016 в 17:06.
Alan вне форума  
 
Непрочитано 12.07.2016, 17:12
#11
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,179


Код рабочий, в некоторых пределах.
После добавления _ к именам команд и принудительного создания слоя Dim 1-100, которого почему-то нет в шаблоне из #8 - заработал. Но выбор прямоугольников надо выполнять только по одному, если скопом какой-либо рамкой - выдает ошибку. Видимо, в новых версиях логика работы ssname и entnext, на которых вылазит ошибка, отличается от древних. Сейчас разбираться нет возможности
Offtop: Свой уровень и стиль программирования характеризую как "дно", но даже мне 4-кратный entnext не нравится
Цитата:
Сообщение от Alan Посмотреть сообщение
Используй Замену в редакторе VLISP
Например: "text" на "_text"
здорово помогла замена command " на command "_

Последний раз редактировалось kp+, 12.07.2016 в 17:23.
kp+ вне форума  
 
Непрочитано 12.07.2016, 18:05
#12
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Borikv Посмотреть сообщение
Есть ли какая-то система, трансфомирующая лисп, написанный для старых версий Автокада,
в вид подходящий для современных?
найми грамотного программиста, он тебе все (ну почти все) сделает или репетитора, заплатишь один раз и не будешь задавать дурацкие вопросы
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Преобразование старых лиспов для работы в современных версиях автокда



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает lisp на autocad 2014. Lisp предназначен для изменения порядкового номера листа vladykinalex LISP 28 14.07.2023 19:27
Кто понесет уголовную (или прочую) ответственность в случае разрушиния здания/сооружения? VAV Прочее. Архитектура и строительство 317 18.12.2012 03:13
ППР и ППСР, ТК и ТК на сварочные работы. Разница. Tyhig Технология и организация строительства 10 31.03.2012 21:15
Ищу способы упрощения работы с XData (расширенными данными) в VBA, Lisp RasRuf LISP 1 29.01.2009 10:55
Поиск работы Perezz!! Разное 46 21.03.2008 12:50