|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
LISP.Стрелки направления на концах полилиний .Не могу написать код
Баку, Азербайджан
Регистрация: 13.09.2011
Сообщений: 114
|
||
Просмотров: 14186
|
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Цитата:
Была прекрасная по моему мнению тема http://forum.dwg.ru/showthread.php?t=22894 Почитай её с самого начала, а изучай примерно с того места, где начинают рассматривать построение колонны п.25: ввод данных и т.д.
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
Спасибо за ссылку!Сейчас буду разбирать.Если продвинусь,код кину сюда.
----- добавлено через ~2 мин. ----- Цитата:
----- добавлено через ~4 мин. ----- Спасибо,возьму на заметку. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Особо думать лень:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 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 тянулась в противоположную сторону от направления стрелки....Щас полопачу ещё форум.Ещё раз спасибо! |
|||
![]() |
|
||||
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-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
Код:
----- добавлено через ~9 мин. ----- В коде сделал замену (command "pline" "_non" pt1 pt2 pt3 "_c" "") на (command "pline" "_non" pt1 "_non" pt2 "_non" pt3 "_c" "") Код:
----- добавлено через ~51 мин. ----- Вроде как разобрался с привязкой к Endpoint : "_non" перед pause убрал,и всё получилось: Код:
Последний раз редактировалось Raznouh, 03.01.2014 в 00:33. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Сначала получай точки (анализируй мой код + http://autolisp.ru/2009/09/13/error-catch/ ), а потом уже выполняй отрисовку. Ну и за компанию перечитай #7
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
Цитата:
И ещё честно говоря,лично по мне - увлекательно это написать в первый раз,пусть корявый,но код. ![]() ----- добавлено через ~45 мин. ----- Цитата:
(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...,которых совсем нет в моем коде. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Цитата:
Идем далее. Представляем ситуацию, что все или некоторые трубопроводы поменяли свое положение на чертеже, например, заказчик передумал. Что тогда? Вертеть каждый треугольник? Или удалять его и штамповать все по новой? Можно, конечно, и реакторы прикрутить на событие "редактирование полилинии", но это уже темный лес и на мой взгляд, - неразумное использование инструментария... В случае с выноской, например, или с типом линий, тут проблем не будет: перенес линии, а стрелочки уже по местам. При правильной организации работы с динамическими блоками я почти уверен, что тоже будет все просто. Поэтому прежде чем изобретать новый велосипед, надо бы посмотреть то, что уже изобретено. Это-то как раз с самого твоего первого сообщения всем ясно ![]() |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
skkkk,конечно же я понимаю - существуют вертикальные решения на базе акада,которые значительно упрощают поставленую задачу в комплексе.Взять,например, тот же Civil .Помимо этого ,есть специализированный софт для работы с водяными сетями:начиная от их моделирования и заканчивая симуляцией подачи воды в сеть и анализом выходных параметров,таких как расход, давление,гид.потери и другие.Эти проги(имею в виду WaterCAD и Epanet) поддерживают импорт-экспорт в dxf и глупо было бы предполагать,что направление потока воды по ним не узнать))Но понимаешь,в моем случае заказчик хочет видить так,как он считает красивым,а не так как правильно, удобно,эргономично и целесообразно - такое в наше время ,увы, случается часто))Вот программа рисует стрелку направления потока в районе середины длины трубы,а ему нравится,чтоб стрелка была замкнутой и не на середине ,а в конце трубы у распределительного узла))Идиотизм,понимаю...но реалии такие,что особо не поспоришь)
![]() |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Специализированный софт в ряде случаев не совсем удовлетворяет, а порой и совсем не удовлетворяет конкретным поставленным задачам и не соответствует нормам. Я о нем и не говорил. Я перечислял возможности голого Автокада, подразумевая, что нужно добиться одинакового результата на бумаге при наименьших кликозатратах. Как насчет отрисовки треугольника одним кликом по выбору полилинии. Не хороша ли идея?
|
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
skkkk,идея хороша,не поспоришь...но применима если все полилинии,а их примерно 2 сотни км труб,построены правильно в соответствии с направлением потока воды)Ведь направление стрелки,проставленной в сегмент одним кликом,зависит от этого...я правильно понимаю?)
----- добавлено через ~3 мин. ----- ...мне кажется,по-любому,приходим к 2 кликам...меньше не получается,так как то условие построения полилиний,о котором я выше писал,не соблюдается. |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
skkk,и тогда в среднем получается полтора клика на трубу,учитывая то,что вероятно ,половина труб всё таки случайным образом построена в соответствии с направлением потока
![]() ----- добавлено через ~7 мин. ----- skkkk , есть еще один немаловажный момент:геометрия полилинии не должна меняться .Это для того,чтоб в любой момент можно было извлечь длину любой трубы.Или просто скрыть слой стрелок,чтоб не отвлекали внимание,если,скажем, нужно посмотреть общую картину трубопровода на данном участке. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Raznouh, я тут сообразил (туговато с этим делом в начале января на Руси ![]() ![]() План "Б" Зацикливаем запрос полилиний, а правой кнопкой либо Enter'ом (пустой ввод, в зависимости от настроек правой кнопки мыши) реверсируем только что оСТРЕЛенную полилинию и перерисовываем стрелку, удалив старую (всё программно, разумеется). Но тогда выход возможен только по Esc, что тоже не есть хорошо... Но в полтора клика в среднем укладываемся. Можно добавить по правой кнопке выпадающее меню, например (скопируй в командную строку, перед этим включив Динамический ввод, кнопка внизу экрана): Код:
Однако, пожалуй, самым правильным будет такой подход: 1. Временно назначаем нужным полилиниям-трубопроводам (надеюсь, они хотя бы на одном слое или, на худой конец отличаются от остальных цветом/типом линий/весом, чтоб их можно было программно выбрать)...так вот: назначаем им временно тип линий в виде стрелок, например, такой. 2. Командой ENTREV из набора PL-Tools реверсируем неправильно ориентированные полилинии. 3. Рисуем ВСЕ (!) стрелки одним махом. При таком подходе среднее количество кликов стремится к 0.5 на полилинию. Цитата:
Цитата:
Последний раз редактировалось skkkk, 04.01.2014 в 11:20. |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
Цитата:
ща загрузил этот тип линий ,он выглядит примерно так: ----->----->----->----->-----> Скорее всего,нарисую свой.Но опять таки выходит одно но :если я соберусь вскормить сеть нарисованную такими линиями ,предварительно переведя чертеж в dxf,программе Epanet для гидравлического анализа ...я не знаю,сможет ли он корректно считать длину каждой трубы,в связи со спецификой стиля полилиний,которыми она построена.Так что воспользоваться им стоит на финальном этапе разработки,когда все расчитанно ,пересчитано,исправлено и снова пересчитанно. Но по-любому - способ четкий:пакетный.Попытаюсь им воспользоваться.Спасибо за подсказку. ![]() Цитата:
![]() ----- добавлено через ~10 ч. ----- Пока читал тему Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу), привел свой код в более "благопристойный" вид: Код:
![]() ----- добавлено через ~3 ч. ----- Оказывается...нужно сделать блок из моей стрелки,чтоб проблемы решились:отрисовать полилинию с началом в точке 0.0,потом сделать из нее блок,потом указать ему нужную точку вставки,а вот когда запросит угол поворота,вот только тогда можно нажать Esc и всё исчезнет))) ![]() Последний раз редактировалось Raznouh, 05.01.2014 в 02:23. |
|||
![]() |
|
||||
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114
|
Выглядит всё это примерно так:
Код:
![]() ЗЫ: если в коде есть косяки ,которые могут помешать длительной работе с ним,подскажите пожалуйста. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какой язык перспективен для инженера-конструктора с условием | 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 |