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

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

LISP.Стрелки направления на концах полилиний .Не могу написать код

Ответ
Поиск в этой теме
Непрочитано 02.01.2014, 20:45 #1
LISP.Стрелки направления на концах полилиний .Не могу написать код
Raznouh
 
Баку, Азербайджан
Регистрация: 13.09.2011
Сообщений: 114

Здравствуйте!
Есть полилинии ,построенные под разными углами (условно - трубы водопроводной сети) .На конце каждой каждой с помощью треугольника-стрелки хочу указать направление (потока воды в трубе).Попытался написать лисп код. Алгоритм предполагал примерно такой : указываю первую точку (PT1),указываю вторую точку (PT2) и на второй точке строится треугольник-стрелка направления ,расположенная под тем же углом ,что и отрезок образованный двумя указанными точками (см прикрепленное фото).
Код построения стрелки-треугольника(см.вложения) я написал (не бейте сильно,писал впервые - он даже не отлажен,сбоит иногда,не могу понять закономерность - когда именно).А как ее поворачивать в соответствии с углом полилинии я найти пока не смог.
Помогите разобраться: хотя бы подскажите какими функциями пользоваться,чтоб сделать это.
Заранее спасибо всем,кто это прочел!

Изображения
Тип файла: jpg Без имени-1.jpg (308.2 Кб, 785 просмотров)

Вложения
Тип файла: lsp fd.lsp (300 байт, 135 просмотров)

Просмотров: 14186
 
Непрочитано 02.01.2014, 20:57
1 | #2
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Сейчас нет компьютера под рукой, но на вскидку, я бы использовал функцию polar
skkkk вне форума  
 
Непрочитано 02.01.2014, 20:58
1 | #3
Alan

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


Цитата:
Сообщение от Raznouh Посмотреть сообщение
Помогите разобраться: хотя бы подскажите какими функциями пользоваться,чтоб сделать это.
Ты хочешь чтобы кто-то поправил твой текст или написал свой? Это не сложно, но чтобы ТЫ сам понял как это делается начни с обычной учёбы ЛИСПу.
Была прекрасная по моему мнению тема http://forum.dwg.ru/showthread.php?t=22894
Почитай её с самого начала, а изучай примерно с того места, где начинают рассматривать построение колонны п.25: ввод данных и т.д.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 02.01.2014, 21:58
#4
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Спасибо за ссылку!Сейчас буду разбирать.Если продвинусь,код кину сюда.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Alan Посмотреть сообщение
Ты хочешь чтобы кто-то поправил твой текст или написал свой? Это не сложно, но чтобы ТЫ сам понял как это делается начни с обычной учёбы ЛИСПу.
Была прекрасная по моему мнению тема http://forum.dwg.ru/showthread.php?t=22894
Почитай её с самого начала, а изучай примерно с того места, где начинают рассматривать построение колонны п.25: ввод данных и т.д.
Alan,Спасибо за ссылку!Сейчас буду разбирать.Если продвинусь,код кину сюда.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от skkkk Посмотреть сообщение
Сейчас нет компьютера под рукой, но на вскидку, я бы использовал функцию polar
Спасибо,возьму на заметку.
Raznouh вне форума  
 
Непрочитано 02.01.2014, 22:57
1 | #5
Кулик Алексей aka kpblc
Moderator

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


Особо думать лень:
Код:
[Выделить все]
 (vl-load-com)

(defun c:fd (/ start end adoc pt len)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        len  5.
        ) ;_ end of setq
  (while (and (= (type (setq start (vl-catch-all-apply
                                     (function
                                       (lambda ()
                                         (getpoint "\nStart point <Cance> : ")
                                         ) ;_ end of lambda
                                       ) ;_ end of function
                                     ) ;_ end of vl-catch-all-apply
                             ) ;_ end of setq
                       ) ;_ end of type
                 'list
                 ) ;_ end of =
              (= (type
                   (setq end (vl-catch-all-apply (function (lambda () (getpoint start "\nEnd point <Cancel> : ")))))
                   ) ;_ end of type
                 'list
                 ) ;_ end of =
              ) ;_ end of and
    (vla-startundomark adoc)
    (setq pt (mapcar
               (function
                 (lambda (x)
                   (list (car x) (cadr x))
                   ) ;_ end of lambda
                 ) ;_ end of function
               (list start
                     end
                     (polar end (+ (angle start end) (/ (* pi 5.) 6.)) (min len (* (distance start end) 0.2)))
                     (polar end (+ (angle start end) (/ (* pi 7.) 6.)) (min len (* (distance start end) 0.2)))
                     end
                     ) ;_ end of list
               ) ;_ end of mapcar
          ) ;_ end of setq
    (entmakex (append '((0 . "LWPOLYLINE")
                        (100 . "AcDbEntity")
                        (100 . "AcDbPolyline")
                        (90 . 5)
                        (43 . 0.0)
                        (38 . 0.0)
                        (39 . 0.0)
                        )
                      (mapcar (function (lambda (x) (cons 10 x))) pt)
                      ) ;_ end of append
              ) ;_ end of entmakex
    (vla-endundomark adoc)
    ) ;_ end of while
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.01.2014, 23:06
#6
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Алексей,спасибо огромное!

Я написал так:

(defun c:fd ()
(setq ans "Yes")
(setq l 5)

(while (= ans "Yes")
(setq pt1 (getpoint "Pick arrow end point:"))
(setq pt2 (polar pt1 (/(* pi 5) 6) l))
(setq pt3 (polar pt2 (/(* pi 3) 2) l))
(command "pline" pt1 pt2 pt3 pt1 "")
(initget "Yes No")
(command "_rotate" "_L" "" pt1 pause)
)
)


но получаются непредсказуемые результаты - когда указываю точку на пустом пространстве,всё нормально.Но когда ставлю на конце полилинии,привязываясь к её концу - треугольник меняет свою форму и не соответствует введенным размерам.
Еще хочу подумать,чтоб "резинка" rotate тянулась в противоположную сторону от направления стрелки....Щас полопачу ещё форум.Ещё раз спасибо!
Raznouh вне форума  
 
Непрочитано 02.01.2014, 23:10
1 | #7
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/2013/12/19/comman...utre-troubles/

----- добавлено через ~10 мин. -----
Дополнительно: см. функции grread, grdraw и им подобные
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.01.2014, 00:28
#8
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Код:
[Выделить все]
 (defun c:fd ()
(setq ans "Yes")
(setq l 5)

(while (= ans "Yes")
(setq pt1 (getpoint "Pick arrow end point:"))
(setq pt2 (polar pt1 (/ pi  6) l))
(setq pt3 (polar pt2 (/(* pi 3) 2)  l))
(command "pline" "_non" pt1 pt2 pt3 "_c" "")
(initget "Yes No")
(command "_rotate" "_non" "_L" "" "_non" pt1 "_non" pause)
)
)
"Резинку" rotate настроил как нужно, добавил "_non" в некоторых местах,но до конца от багов избавиться пока не смог: при зуммировании чертежа код лагает.Помогите поправить этот косяк в этом коде,ребята.И, если возможно, при этом оставить включенной привязку к Endpoint - она нужна,чтоб выравнивать стрелку точно по линии.

----- добавлено через ~9 мин. -----
В коде сделал замену
(command "pline" "_non" pt1 pt2 pt3 "_c" "")
на
(command "pline" "_non" pt1 "_non" pt2 "_non" pt3 "_c" "")

Код:
[Выделить все]
 (defun c:fd ()
(setq ans "Yes")
(setq l 5)

(while (= ans "Yes")
(setq pt1 (getpoint "Pick arrow end point:"))
(setq pt2 (polar pt1 (/ pi  6) l))
(setq pt3 (polar pt2 (/(* pi 3) 2)  l))
(command "pline" "_non" pt1 "_non"  pt2 "_non" pt3 "_c" "")
(initget "Yes No")
(command "_rotate" "_non" "_L" "" "_non" pt1 "_non" pause)
)
)
Баги с зуммированием исчезли.Осталось как то добавить привязку.

----- добавлено через ~51 мин. -----
Вроде как разобрался с привязкой к Endpoint : "_non" перед pause убрал,и всё получилось:
Код:
[Выделить все]
 
(defun c:fd ()

(setq ans "Yes")
(setq l 5)

(while (= ans "Yes")
(setq pt1 (getpoint "Pick arrow end point:"))
(setq pt2 (polar pt1 (/ pi  6) l))
(setq pt3 (polar pt2 (/(* pi 3) 2)  l))
(command "pline" "_non" pt1 "_non"  pt2 "_non" pt3 "_c" "")
(initget "Yes No")
(command "_rotate" "_non" "_L" "" "_non" pt1  pause)
 
)
  
)
Еще одна вещь:допустим,ошибочно указал точку и хочу выйти из команды с помощью Esc .Выхожу - остается отрисованная стрелка.Думаю дальше как от этого избавиться.

Последний раз редактировалось Raznouh, 03.01.2014 в 00:33.
Raznouh вне форума  
 
Непрочитано 03.01.2014, 10:18
#9
Кулик Алексей aka kpblc
Moderator

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


Сначала получай точки (анализируй мой код + http://autolisp.ru/2009/09/13/error-catch/ ), а потом уже выполняй отрисовку. Ну и за компанию перечитай #7
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.01.2014, 12:03
1 | #10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Я, конечно, не хочу остудить пыла автора темы, но чем не подходит для отрисовки стрелок штатная командa _qleader?
skkkk вне форума  
 
Автор темы   Непрочитано 03.01.2014, 15:41
#11
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Цитата:
Сообщение от skkkk Посмотреть сообщение
Я, конечно, не хочу остудить пыла автора темы, но чем не подходит для отрисовки стрелок штатная командa _qleader?
skkk,тоже вариант ,но в данном случае мне нужны только концы стрелок(без размерной линии) - с помощью команды _LE я этого получить не сумел.Ещё один минус - если сравнивать с кодом ,получается 2 клика мышью против 2 кликов+Esc,в пользу кода.
И ещё честно говоря,лично по мне - увлекательно это написать в первый раз,пусть корявый,но код.

----- добавлено через ~45 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сначала получай точки (анализируй мой код + http://autolisp.ru/2009/09/13/error-catch/ ), а потом уже выполняй отрисовку. Ну и за компанию перечитай #7
Алексей,вроде у меня так и есть:сначала получил точки

(setq pt1 (getpoint "Pick arrow end point:"))
(setq pt2 (polar pt1 (/ pi 6) l))
(setq pt3 (polar pt2 (/(* pi 3) 2) l))


затем выполнил отрисовку
(command "pline" "_non" pt1 "_non" pt2 "_non" pt3 "_c" "")

Код твой проанализировал:он написан на диалекте программиста,как и должно быть , тогда как у меня он больше работает с командами acad.Признаться честно,не совсем понял как реализовать выход Esc из команды на любом этапе,оставляя при этом чертеж в "первозданном" виде,однако на практике вижу что в твоем коде эта возможность реализована так как нужно.Интуиция мне подсказывает,что секрет во многочисленных _end of...,которых совсем нет в моем коде.
Raznouh вне форума  
 
Непрочитано 03.01.2014, 23:27
#12
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Raznouh Посмотреть сообщение
но в данном случае мне нужны только концы стрелок(без размерной линии) - с помощью команды _LE я этого получить не сумел
Если так, то да - похоже тут без вариантов - убрать линию, но оставить стрелку мне тоже не удалось.
Цитата:
Сообщение от Raznouh Посмотреть сообщение
Ещё один минус - если сравнивать с кодом ,получается 2 клика мышью против 2 кликов+Esc,в пользу кода.
Если задать правильные параметры (нажать клавишу "Вниз" перед отрисовкой выноски), то можно добиться двух кликов. Но раз уж идет борьба за каждый клик (это я люблю и сам), то можно же сделать это одним кликом по нужному сегменту полилинии, а не указывать две точки. Плюс можно попробовать рассмотреть вариант, что называется, совсем без кликов - создать подходящий тип линии, но тут есть большие сомнения, что все будет гладко. Я бы еще попробовал вместо треугольника-полилинии вставлять треугольник-блок, может, с маскировкой (_WIPEOUT). Есть также динамические блоки, возможности которых весьма и весьма обширны. Есть в конце концов параметризация.
Идем далее. Представляем ситуацию, что все или некоторые трубопроводы поменяли свое положение на чертеже, например, заказчик передумал. Что тогда? Вертеть каждый треугольник? Или удалять его и штамповать все по новой? Можно, конечно, и реакторы прикрутить на событие "редактирование полилинии", но это уже темный лес и на мой взгляд, - неразумное использование инструментария... В случае с выноской, например, или с типом линий, тут проблем не будет: перенес линии, а стрелочки уже по местам. При правильной организации работы с динамическими блоками я почти уверен, что тоже будет все просто. Поэтому прежде чем изобретать новый велосипед, надо бы посмотреть то, что уже изобретено.
Цитата:
Сообщение от Raznouh Посмотреть сообщение
увлекательно это написать в первый раз,пусть корявый,но код
Это-то как раз с самого твоего первого сообщения всем ясно Тут таких много любителей собралось, но согласись, гораздо приятней решить ту задачу, которая еще не решена, а таких в AutoCAD'e, поверь, предостаточно!
skkkk вне форума  
 
Автор темы   Непрочитано 03.01.2014, 23:52
#13
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


skkkk,конечно же я понимаю - существуют вертикальные решения на базе акада,которые значительно упрощают поставленую задачу в комплексе.Взять,например, тот же Civil .Помимо этого ,есть специализированный софт для работы с водяными сетями:начиная от их моделирования и заканчивая симуляцией подачи воды в сеть и анализом выходных параметров,таких как расход, давление,гид.потери и другие.Эти проги(имею в виду WaterCAD и Epanet) поддерживают импорт-экспорт в dxf и глупо было бы предполагать,что направление потока воды по ним не узнать))Но понимаешь,в моем случае заказчик хочет видить так,как он считает красивым,а не так как правильно, удобно,эргономично и целесообразно - такое в наше время ,увы, случается часто))Вот программа рисует стрелку направления потока в районе середины длины трубы,а ему нравится,чтоб стрелка была замкнутой и не на середине ,а в конце трубы у распределительного узла))Идиотизм,понимаю...но реалии такие,что особо не поспоришь)
Raznouh вне форума  
 
Непрочитано 04.01.2014, 00:02
#14
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Raznouh Посмотреть сообщение
,есть специализированный софт для работы с водяными сетями
Специализированный софт в ряде случаев не совсем удовлетворяет, а порой и совсем не удовлетворяет конкретным поставленным задачам и не соответствует нормам. Я о нем и не говорил. Я перечислял возможности голого Автокада, подразумевая, что нужно добиться одинакового результата на бумаге при наименьших кликозатратах. Как насчет отрисовки треугольника одним кликом по выбору полилинии. Не хороша ли идея?
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 00:07
#15
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


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

----- добавлено через ~3 мин. -----
...мне кажется,по-любому,приходим к 2 кликам...меньше не получается,так как то условие построения полилиний,о котором я выше писал,не соблюдается.
Raznouh вне форума  
 
Непрочитано 04.01.2014, 00:13
#16
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Правильно, но можно сделать так, чтоб при неверном направлении линии или отрезка по правой кнопке происходило изменение направления.
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 00:17
#17
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


skkk,и тогда в среднем получается полтора клика на трубу,учитывая то,что вероятно ,половина труб всё таки случайным образом построена в соответствии с направлением потока

----- добавлено через ~7 мин. -----
skkkk , есть еще один немаловажный момент:геометрия полилинии не должна меняться .Это для того,чтоб в любой момент можно было извлечь длину любой трубы.Или просто скрыть слой стрелок,чтоб не отвлекали внимание,если,скажем, нужно посмотреть общую картину трубопровода на данном участке.
Raznouh вне форума  
 
Непрочитано 04.01.2014, 10:55
1 | #18
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Raznouh Посмотреть сообщение
skkkk,идея хороша,не поспоришь...но применима если все полилинии,а их примерно 2 сотни км труб,построены правильно в соответствии с направлением потока воды
Вообще говоря, этот момент я подразумевал как само собой разумеющийся, когда предполагал такое решение. Для любой более или менее надежной и работоспособной автоматизации, будь то настоящая САПР или небольшой набор lisp-функций с форума, необходимо соблюдение минимальных требований и принципов по стандартизации. Иными словами, автоматизировать хаос нельзя - должен быть хоть какой-то порядок. Знаю, что приходится работать с чужими чертежами, но госпожу Геометрию это не волнует, как проблемы индейцев известно кого.
Цитата:
Сообщение от Raznouh Посмотреть сообщение
тогда в среднем получается полтора клика на трубу
Raznouh, я тут сообразил (туговато с этим делом в начале января на Руси), что на самом деле, по-хорошему, это те же два клика: первым, левым, ставится стрелка, вторым, правым - подтверждение либо изменения направления (читай: НА ПРОТИВОПОЛОЖНОЕ)?!...то есть, копнув глубже, мы понимаем, что в свете вышеозначенных событий идея всё-таки плоха. Тогда переходим к плану "Б"

План "Б"
Зацикливаем запрос полилиний, а правой кнопкой либо Enter'ом (пустой ввод, в зависимости от настроек правой кнопки мыши) реверсируем только что оСТРЕЛенную полилинию и перерисовываем стрелку, удалив старую (всё программно, разумеется). Но тогда выход возможен только по Esc, что тоже не есть хорошо... Но в полтора клика в среднем укладываемся. Можно добавить по правой кнопке выпадающее меню, например (скопируй в командную строку, перед этим включив Динамический ввод, кнопка внизу экрана):
Код:
[Выделить все]
(getkword "\nВыбрать действие: [Реверсировать/Выход]")
Это больше 1.5, но меньше 2-х кликов в среднем.

Однако, пожалуй, самым правильным
будет такой подход:
1. Временно назначаем нужным полилиниям-трубопроводам (надеюсь, они хотя бы на одном слое или, на худой конец отличаются от остальных цветом/типом линий/весом, чтоб их можно было программно выбрать)...так вот: назначаем им временно тип линий в виде стрелок, например, такой.
2. Командой ENTREV из набора PL-Tools реверсируем неправильно ориентированные полилинии.
3. Рисуем ВСЕ (!) стрелки одним махом.
При таком подходе среднее количество кликов стремится к 0.5 на полилинию.
Цитата:
Сообщение от Raznouh Посмотреть сообщение
skkkk , есть еще один немаловажный момент:геометрия полилинии не должна меняться .Это для того,чтоб в любой момент можно было извлечь длину любой трубы.
При изменении направления линии на строго противоположное длина линии не изменится.
Цитата:
Сообщение от Raznouh Посмотреть сообщение
Признаться честно,не совсем понял как реализовать выход Esc из команды на любом этапе,оставляя при этом чертеж в "первозданном" виде,однако на практике вижу что в твоем коде эта возможность реализована так как нужно.Интуиция мне подсказывает,что секрет во многочисленных _end of...,которых совсем нет в моем коде.
Интуиция на этот раз подвела... "Многочисленные _end of..." - это всего лишь комментарии, созданные для пояснений внутри кода, т.е. всё что в строке после символа точки с запятой - программой не исполняется. Правильный выход по Esc - это обработка ошибок в сочетаниях с функциями vla-StartUndoMark и vla-EndUndoMark (см. также vl-catch-...-функции). Обработка ошибок подробно разобрана в теме указанной Alan'ом в #3.

Последний раз редактировалось skkkk, 04.01.2014 в 11:20.
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 14:47
#19
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Цитата:
Сообщение от skkkk Посмотреть сообщение
так вот: назначаем им временно тип линий в виде стрелок, например, такой.
skkkk,даров.Спасибо тебе за помощь!
ща загрузил этот тип линий ,он выглядит примерно так: ----->----->----->----->----->
Скорее всего,нарисую свой.Но опять таки выходит одно но :если я соберусь вскормить сеть нарисованную такими линиями ,предварительно переведя чертеж в dxf,программе Epanet для гидравлического анализа ...я не знаю,сможет ли он корректно считать длину каждой трубы,в связи со спецификой стиля полилиний,которыми она построена.Так что воспользоваться им стоит на финальном этапе разработки,когда все расчитанно ,пересчитано,исправлено и снова пересчитанно.
Но по-любому - способ четкий:пакетный.Попытаюсь им воспользоваться.Спасибо за подсказку.

Цитата:
Сообщение от skkkk Посмотреть сообщение
Правильный выход по Esc - это обработка ошибок в сочетаниях с функциями vla-StartUndoMark и vla-EndUndoMark (см. также vl-catch-...-функции). Обработка ошибок подробно разобрана в теме указанной Alan'ом в #3.
Поковыряюсь и посмотрю что там Полещук про это писал:надеюсь как бы то не было довести и свой код до ума тоже

----- добавлено через ~10 ч. -----
Пока читал тему Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу), привел свой код в более "благопристойный" вид:
Код:
[Выделить все]
 (defun c:fd (/ pt1 x2 y2 x3 y3 )
(setq pt1 (getpoint "Pick arrow end point:"))
(setq x2 (+ (car pt1) 5))
(setq y2 (+ (car (cdr pt1)) (/ 5 2)))
(setq x3 (+ (car pt1) 5))
(setq y3 (- (car (cdr pt1)) (/ 5 2)))
(command "._pline"
	 "_non" pt1
	 "_non"(list x2 y2)
	 "_non"(list x3 y3)
	 "_close"
(command "_rotate""_non" "_L" "" "_non" pt1 pause)
	 ))
Продолжаю читать.С нетерпением жду когда дойду до места,где раскрывается Тайна отмены кода нажатием Esc и возвращения чертежа в первозданный вид(после того как точка задана , полилиния вычерчена и осталось сделать только поворот).

----- добавлено через ~3 ч. -----
Оказывается...нужно сделать блок из моей стрелки,чтоб проблемы решились:отрисовать полилинию с началом в точке 0.0,потом сделать из нее блок,потом указать ему нужную точку вставки,а вот когда запросит угол поворота,вот только тогда можно нажать Esc и всё исчезнет)))

Последний раз редактировалось Raznouh, 05.01.2014 в 02:23.
Raznouh вне форума  
 
Автор темы   Непрочитано 05.01.2014, 17:21
#20
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


Выглядит всё это примерно так:
Код:
[Выделить все]
 (defun c:fd ()
(defun *error*(msg)
(princ msg);canceled by user
  )
  (if (tblsearch "block" "$arrow$");searching for arrow block if exists
  (command "_-insert" "$arrow$" "_X" 1  "_Y" 1 pause);insert arrow block if exists
(progn (command "_pline"
	 "_non" "0,0"
	 "_non" "5,2.5"
	 "_non" "5,-2.5"
	 "_close");creating arrow using closed _pl
(command "_-block" "$arrow$" "0,0" "_last" "");creating arrow block (if not existing) 
(command "_-insert" "$arrow$" "_X" 1  "_Y" 1 pause);insert new created arrow block 
))
)
Спасибо: Alan,kpblc,skkkk за напутствие и оказанную помощь;VVA за интересную постановку задачи в посте #265 темы Научите лиспу на примере..,а так же Red Nova (пост #289 ) за наглядную реализацию этой задачи.
ЗЫ: если в коде есть косяки ,которые могут помешать длительной работе с ним,подскажите пожалуйста.
Raznouh вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP.Стрелки направления на концах полилиний .Не могу написать код



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Помогите написать макрос для разрыва отрезков и полилиний в AutoCad Green4x Программирование 2 01.12.2013 21:03
Не могу написать примитивную LISP программу PolBlack LISP 2 07.11.2010 18:08
Word не могу над таблицей заголовк написать улетает вниз dextron3 Прочее. Программное обеспечение 8 08.12.2008 11:03
Не могу написать мультитекст в 2008 автокаде. Мельхиор AutoCAD 7 08.10.2008 08:08