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

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

Макрос конвертировать в лисп

Ответ
Поиск в этой теме
Непрочитано 18.04.2012, 11:06 #1
Макрос конвертировать в лисп
Positron
 
Регистрация: 25.06.2009
Сообщений: 147

Смешно звучит, но не знал, как правильно назвать...
Есть такая штука, макрос:
(setq di1 (getpoint));\(setq di2 (getpoint));\(setq dst (distance di1 di2));_rectang;!di1;d;!dst;18;\_change;last;;p;layer;"01 BASIC";;_-hatch;p;ANSI33;0.5;135;s;l;;;_change;last;;p;layer;"03 HATCH";;

Хочу его через лисп запускать по причине необходимости повторов макроса с нуля(с обнулением переменных "di1", "di2", "dst") и нескольких разных макросов такого типа, чтоб оформить их в меню через мышь для удобства.
1. Например, толщины: 18,16,15 и т.п. списком
2. Направление штриховки вдоль прямоугольника
Просмотров: 2459
 
Непрочитано 18.04.2012, 14:13
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(defun MACROS ( tol ugol)
;;;tol - толщина
;;;ugol - угол поворота
;;;Вызов (macros 18 135)  
;;;(setq di1 (getpoint));\(setq di2 (getpoint));\(setq dst (distance di1 di2));_rectang;!di1;d;!dst;18;\_change;last;;p;lay er;"01 BASIC";;_-hatch;p;ANSI33;0.5;135;s;l;;;_change;last;;p;layer ;"03 HATCH";;
  (setq di1 (getpoint "\nПервая точка <выход>: "))
  (setq di2 (getpoint di1 "\nВторая точка<выход>: "))
  (command "_rectang" "_non" di1 "_d" (distance di1 di2) tol pause)
  (entmod (subst (cons 8 "01 BASIC")(assoc 8 (entget(entlast)))(entget(entlast))))
  (command "_hatch" "_p" "ANSI33" 0.5 ugol "_s" "_l" "" "" "")
  (entmod (subst (cons 8 "03 HATCH")(assoc 8 (entget(entlast)))(entget(entlast))))
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.04.2012, 14:39
#3
Positron


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Код:
[Выделить все]
(defun MACROS ( tol ugol)
;;;tol - толщина
;;;ugol - угол поворота
;;;Вызов (macros 18 135)  
;;;(setq di1 (getpoint));\(setq di2 (getpoint));\(setq dst (distance di1 di2));_rectang;!di1;d;!dst;18;\_change;last;;p;lay er;"01 BASIC";;_-hatch;p;ANSI33;0.5;135;s;l;;;_change;last;;p;layer ;"03 HATCH";;
  (setq di1 (getpoint "\nПервая точка <выход>: "))
  (setq di2 (getpoint di1 "\nВторая точка<выход>: "))
  (command "_rectang" "_non" di1 "_d" (distance di1 di2) tol pause)
  (entmod (subst (cons 8 "01 BASIC")(assoc 8 (entget(entlast)))(entget(entlast))))
  (command "_hatch" "_p" "ANSI33" 0.5 ugol "_s" "_l" "" "" "")
  (entmod (subst (cons 8 "03 HATCH")(assoc 8 (entget(entlast)))(entget(entlast))))
  (princ)
  )
Пасиб!
А возможно ещо скрестить его с
(setq di1 (getpoint));\(setq di2 (getpoint));\(setq dst (distance di1 di2));_rectang;!di1;d;18;!dst;\_change;last;;p;layer;"01 BASIC";;_-hatch;p;ANSI33;0.5;45;s;l;;;_change;last;;p;layer;"03 HATCH";;
в 1м лиспе чтоб он вертикально и горизонтально рисовал с автоопределением самой длиной стороны и вдоль длиной стороны прямоугольника проводил штриховку?
или луче вдоль направления рисования, тогда можно будет под разными углами делать...
Positron вне форума  
 
Непрочитано 18.04.2012, 15:54
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(defun MACROS2 ( tol / di1 di2 ugol )
;;;tol - толщина
;;;ugol - угол поворота
;;;Вызов (macros2 18)  
  (setq di1 (getpoint "\nПервая точка <выход>: "))
  (setq di2 (getpoint di1 "\nВторая точка<выход>: "))
  (command "_rectang" "_non" di1 "_d" (distance di1 di2) tol pause)
  (setq dst (max (distance di1 di2) tol))
  (if (equal dst tol 1e-9)(setq ugol 45)(setq ugol 135))
  (entmod (subst (cons 8 "01 BASIC")(assoc 8 (entget(entlast)))(entget(entlast))))
  (command "_hatch" "_p" "ANSI33" 0.5 ugol "_s" "_l" "" "")
  (entmod (subst (cons 8 "03 HATCH")(assoc 8 (entget(entlast)))(entget(entlast))))
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.04.2012, 16:23
#5
Positron


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


хм... серовно только горизонтально рисует, ет наверно по причине (command "_rectang" "_non" di1 "_d" (distance di1 di2) tol pause) ... там идёт по умолчанию X((distance di1 di2)), а потом Y (18)... а как зделать чтоб привязки не было к 1му направлению?

Command: _rectang
Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]:
Specify other corner point or [Area/Dimensions/Rotation]: R
Specify rotation angle or [Pick points] <0>:

Вот можно добавить переменную угол, чтоб по 2м точкам линия, определяло угол относительно горизонта и в нашу команду вписывало автоматом угол и для штриховки тоже будет...

Последний раз редактировалось Positron, 18.04.2012 в 16:30.
Positron вне форума  
 
Непрочитано 19.04.2012, 10:08
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Не понятно что хочешь. Опиши подробнее. Код из #4 рисует вертикально. Задай длину 2 точками < 18 и посмотри
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 19.04.2012, 12:33
#7
Positron


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


(setq di1 (getpoint));\(setq di2 (getpoint));\(setq dst (distance di1 di2));_rectang;!di1;d;!dst;18;\_change;last;;p;lay er;"01 BASIC";;_-hatch;p;ANSI33;0.5;135;s;l;;;_change;last;;p;layer;"03 HATCH";;

(setq di1 (getpoint));\(setq di2 (getpoint));\(setq dst (distance di1 di2));_rectang;!di1;d;18;!dst;\_change;last;;p;lay er;"01 BASIC";;_-hatch;p;ANSI33;0.5;45;s;l;;;_change;last;;p;layer; "03 HATCH";;

Красным обозначено - углы наклона штриховки
Синим обозначено - положение относительно оси X и Y... то есть рисование горизонтальной и вертикальной длинны. т.к. _rectang; по умолчанию это вносим длину по оси X (1 цифра) и по оси Y (2 цифра).
А мне надо чтоб рисование было 1й командой и по горизонтали и по вертикали.
Я ет вижу так: ставим 2 точки без привязки к орто, например 40градусов относительно оси Х, чтоб нарисовать прямоугольник у нас есть длинна по 2м точкам и заданная ширина "18", также появился новый параметр, угол прямой (нашы 2 точки) относительно оси X.
Думаю, взяв, сей параметр можно задать для прямоугольника вначале угол, а после вносим параметр X и Y.
В результате у нас прямоугольник под углом 40. и штриховка тоже вдоль 2х точек.
Positron вне форума  
 
Непрочитано 19.04.2012, 14:51
1 | #8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(defun MACROS3 ( tol / di1 di2 ugol )
;;;tol - толщина
;;;ugol - угол поворота
;;;Вызов (macros3 18)
  (setq di1 (getpoint "\nПервая точка <выход>: "))
  (setq di2 (getpoint di1 "\nВторая точка<выход>: "))
  (setq ugol (/ (* (angle di1 di2) 180.0) pi))
  (command "_rectang" "_non" di1 "_R" ugol "_d" (distance di1 di2) tol pause)
  (setq dst (max (distance di1 di2) tol))
  (if (equal dst tol 1e-9)(setq ugol (+ 45 ugol))(setq ugol (+ 135 ugol)))
  (entmod (subst (cons 8 "01 BASIC")(assoc 8 (entget(entlast)))(entget(entlast))))
  (command "_-hatch" "_A" "_A" "_Y" "" "_p" "ANSI33" 0.5 ugol  "_s" "_l" "" "")
  (entmod (subst (cons 8 "03 HATCH")(assoc 8 (entget(entlast)))(entget(entlast))))
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 20.04.2012 в 09:54. Причина: добавлена ассоциативность
VVA вне форума  
 
Автор темы   Непрочитано 19.04.2012, 22:20
#9
Positron


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Код:
[Выделить все]
(defun MACROS3 ( tol / di1 di2 ugol )
;;;tol - толщина
;;;ugol - угол поворота
;;;Вызов (macros3 18)  
  (setq di1 (getpoint "\nПервая точка <выход>: "))
  (setq di2 (getpoint di1 "\nВторая точка<выход>: "))
  (setq ugol (/ (* (angle di1 di2) 180.0) pi))
  (command "_rectang" "_non" di1 "_R" ugol "_d" (distance di1 di2) tol pause)
  (setq dst (max (distance di1 di2) tol))
  (if (equal dst tol 1e-9)(setq ugol (+ 45 ugol))(setq ugol (+ 135 ugol)))
  (entmod (subst (cons 8 "01 BASIC")(assoc 8 (entget(entlast)))(entget(entlast))))
  (command "_hatch" "_p" "ANSI33" 0.5 ugol "_s" "_l" "" "")
  (entmod (subst (cons 8 "03 HATCH")(assoc 8 (entget(entlast)))(entget(entlast))))
  (princ)
  )
О, бомба, огромное спасибо!
...
Я тут ещё такую штуку заметил штриховка не привязывается к прямоугольнику, можно подправить? чтоб ассоциировала прямоугольник как свою границу (а то тяну прямоугольник, а штриховка на месте остаётся)

Последний раз редактировалось Positron, 19.04.2012 в 22:33.
Positron вне форума  
 
Непрочитано 20.04.2012, 09:55
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


обновил #8
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 20.04.2012, 12:10
#11
Positron


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


Цитата:
Сообщение от VVA Посмотреть сообщение
обновил #8
Блин, просто супер, с меня пиво
Positron вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Макрос конвертировать в лисп

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что прописать в acad.lsp чтобы всегда загружались пользовательские лисп команды? overband LISP 43 07.02.2013 14:47
Макрос и сохранение Yanic Программирование 10 28.06.2011 18:01
"Расчет ведомости отправочного элемента. Макрос VBA Excel." Вопросы и ответы по програмке. Brain Murder Программирование 4 13.12.2010 18:42
Как можно макрос с кнопки прописать в лисп и закинуть в автозагрузку? dextron3 LISP 5 12.10.2009 09:50
Лисп для копирования данных нескольких мтекстов по принципу расположения. Red Nova LISP 14 18.06.2008 22:08