|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Помогите написать лисп выводящий длину между двумя точками в число на чертеже!
Регистрация: 29.12.2014
Сообщений: 2
|
||
Просмотров: 4419
|
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Для себя накидал вот такую простенькую прогу для замены стандартной команды DIST. В отличии от встроенной _dist, моя выводит длину не только между точками, но и длину отрезка или полилинии по желанию, плюс сохраняет результат в буфер обмена, откуда значение можно вставить в тот же текст на чертеже, калькулятор или exel... Правда не показывает dx, dy и dz, которые мне не нужны.
Может пригодится кому: Код:
__________________
Делай хорошо, плохо само получится. |
|||
![]() |
|
||||
di.lsp
(defun c:di () (kr_distance)) ;(kr_distance) (defun kr_distance (/ p1 p2 dist *error*) (defun *error* (msg) (setq p1 nil dist nil p2 nil)) (if (setq p1 (getpoint "\nНачало отрезка <выбрать отрезок или полилинию>")) (if (setq p2 (getpoint p1 "\nОкончание отрезка")) (setq dist (distance p1 p2)) );if (setq dist (vla-get-length (vlax-ename->vla-object (Kr_entsel "\nВыбери отрезок или полилинию" '("LINE" "LWPOLYLINE") nil)))) );if (if dist (copyToclipboard (rtos dist 2 4))) (if dist (prompt (strcat "\nдлина: " (rtos dist 2 4))) (prompt (strcat "\nотмена"))) (princ) );defun ; ; ! *************************************************************************** ;; ! copyToclipboard ;; ! *************************************************************************** ;; ! Function : Copy text to clipboard ;; ! Argument : 'str' - String ;; ! Returns : nil ;; see http://www.theswamp.org/index.php?topic=21764.new ;; ! **************************************************************************** (defun copyToclipboard ( text / htmlfile result) (setq result (vlax-invoke (vlax-get (vlax-get (setq htmlfile (vlax-create-object "htmlfile")) 'ParentWindow ) 'ClipBoardData ) 'SetData "Text" text ) ) (vlax-release-object htmlfile) result ) ;|Функция Kr_entsel *** Автор Морозов С.В. aka Krieger *** Еденичный выбор объекта, замена функции entsel Возвращает entity name выбранного примитива или nil, точку указки запоминает в переменной LASTPOINT Параметры: promt - предложение выбрать объект (string) filter - фильтр объектов для выбора вида '("LINE" "LWPOLYLINE") entlist - список примитивов которые не надо выбирать (либо список entity name, либо PICKSET) Примеры: (Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") nil) (Kr_entsel "\nВыберите объекты" nil nil) (setq aa nil) (Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (while (setq a (car (entsel))) (setq aa (append aa (list a))))) (Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (ssget)) |; (defun Kr_entsel (promt filter entlist / key n newentlist ent_point promt) (setq key T n 0 newentlist nil) (if (eq (type entlist) 'PICKSET) (progn (while (setq a (ssname entlist n)) (setq newentlist (append newentlist (list a)) n (1+ n))) (setq entlist newentlist) );progn );if (while key (if (or (setq ent_point (entsel promt)) (= (getvar "ERRNO") 7)) (if (or (eq (type ent_point) 'LIST) (not ent_point)) (if ent_point (if (member (setq ent (car ent_point)) entlist) (princ "\nПримитив уже выбран") (if filter (if (not (member (cdr (assoc 0 (entget ent))) filter)) (progn (setq str "\nНе верный выбор, выберите: ") (princ (substr (setq str (foreach n filter (setq str (strcat str n ", ")))) 1 (- (strlen str) 2))) );progn (setq key nil) );if (setq key nil) );if );if (setq key T) );if (setq key nil) );if (setq key nil) );if );while (if (eq (type ent_point) 'LIST) (progn (setvar "LASTPOINT" (cadr ent_point)) ent) ent_point );if );defun Спасибо, огромное.
__________________
tc71 |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка ПОС, искусство проектирования | Tyhig | Технология и организация строительства | 117 | 25.11.2021 17:38 |
Какой язык перспективен для инженера-конструктора с условием | The_Mercy_Seat | Программирование | 705 | 17.03.2021 14:19 |
Интерполяция отметок вершин полилинии между двумя заданными точками | Кочетков Андрей | Программирование | 7 | 22.07.2019 20:14 |
Измерить расстояние между двумя точками в ЛИСТЕ, привязываясь к объектам в МОДЕЛИ | Кочетков Андрей | AutoCAD | 9 | 12.06.2009 22:52 |
Интерполяция между двумя точками | postbudka | Программирование | 27 | 21.05.2009 10:00 |