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

Вернуться   Форум 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)

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

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


А что не так с лиспом в "современных" автокадах?
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,095


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

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


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,095


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


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


Вроде так
Вложения
Тип файла: zip Borik - Standard.zip (36.3 Кб, 17 просмотров)
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,835
<phrase 1=


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

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

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


Код рабочий, в некоторых пределах.
После добавления _ к именам команд и принудительного создания слоя 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