LISP.Стрелки направления на концах полилиний .Не могу написать код
Спасибо за ссылку!Сейчас буду разбирать.Если продвинусь,код кину сюда.
Alan,Спасибо за ссылку!Сейчас буду разбирать.Если продвинусь,код кину сюда.
LISP, C# (ACAD 200[9,12,13,14])
__________________ --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Кулик Алексей aka kpblc Посмотреть профиль Посетить домашнюю страницу Кулик Алексей aka kpblc Найти ещё сообщения от Кулик Алексей aka kpblcАлексей,спасибо огромное!
(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 тянулась в противоположную сторону от направления стрелки. Щас полопачу ещё форум.Ещё раз спасибо!
LISP, C# (ACAD 200[9,12,13,14])
10 мин. ----- Дополнительно: см. функции grread, grdraw и им подобные
__________________ --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Кулик Алексей aka kpblc Посмотреть профиль Посетить домашнюю страницу Кулик Алексей aka kpblc Найти ещё сообщения от Кулик Алексей aka kpblc"Резинку" rotate настроил как нужно, добавил "_non" в некоторых местах,но до конца от багов избавиться пока не смог: при зуммировании чертежа код лагает.Помогите поправить этот косяк в этом коде,ребята.И, если возможно, при этом оставить включенной привязку к Endpoint - она нужна,чтоб выравнивать стрелку точно по линии.
Баги с зуммированием исчезли.Осталось как то добавить привязку.
51 мин. ----- Вроде как разобрался с привязкой к Endpoint : "_non" перед pause убрал,и всё получилось:
LISP, C# (ACAD 200[9,12,13,14])
__________________ --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Кулик Алексей aka kpblc Посмотреть профиль Посетить домашнюю страницу Кулик Алексей aka kpblc Найти ещё сообщения от Кулик Алексей aka kpblcskkk,тоже вариант ,но в данном случае мне нужны только концы стрелок(без размерной линии) - с помощью команды _LE я этого получить не сумел.Ещё один минус - если сравнивать с кодом ,получается 2 клика мышью против 2 кликов+Esc,в пользу кода. И ещё честно говоря,лично по мне - увлекательно это написать в первый раз,пусть корявый,но код.
Алексей,вроде у меня так и есть:сначала получил точки
(setq pt1 (getpoint "Pick arrow end point:")) (setq pt2 (polar pt1 (/ pi 6) l)) (setq pt3 (polar pt2 (/(* pi 3) 2) l))
Код твой проанализировал:он написан на диалекте программиста,как и должно быть , тогда как у меня он больше работает с командами acad.Признаться честно,не совсем понял как реализовать выход Esc из команды на любом этапе,оставляя при этом чертеж в "первозданном" виде,однако на практике вижу что в твоем коде эта возможность реализована так как нужно.Интуиция мне подсказывает,что секрет во многочисленных _end of. ,которых совсем нет в моем коде.
skkkk,идея хороша,не поспоришь. но применима если все полилинии,а их примерно 2 сотни км труб,построены правильно в соответствии с направлением потока воды)Ведь направление стрелки,проставленной в сегмент одним кликом,зависит от этого. я правильно понимаю?)
3 мин. ----- . мне кажется,по-любому,приходим к 2 кликам. меньше не получается,так как то условие построения полилиний,о котором я выше писал,не соблюдается.
skkk,и тогда в среднем получается полтора клика на трубу,учитывая то,что вероятно ,половина труб всё таки случайным образом построена в соответствии с направлением потока
7 мин. ----- skkkk , есть еще один немаловажный момент:геометрия полилинии не должна меняться .Это для того,чтоб в любой момент можно было извлечь длину любой трубы.Или просто скрыть слой стрелок,чтоб не отвлекали внимание,если,скажем, нужно посмотреть общую картину трубопровода на данном участке.
Raznouh, я тут сообразил (туговато с этим делом в начале января на Руси ), что на самом деле, по-хорошему, это те же два клика: первым, левым, ставится стрелка, вторым, правым - подтверждение либо изменения направления (читай: НА ПРОТИВОПОЛОЖНОЕ). то есть, копнув глубже, мы понимаем, что в свете вышеозначенных событий идея всё-таки плоха. Тогда переходим к плану "Б"
План "Б" Зацикливаем запрос полилиний, а правой кнопкой либо Enter'ом (пустой ввод, в зависимости от настроек правой кнопки мыши) реверсируем только что оСТРЕЛенную полилинию и перерисовываем стрелку, удалив старую (всё программно, разумеется). Но тогда выход возможен только по Esc, что тоже не есть хорошо. Но в полтора клика в среднем укладываемся. Можно добавить по правой кнопке выпадающее меню, например (скопируй в командную строку, перед этим включив Динамический ввод, кнопка внизу экрана):
Это больше 1.5, но меньше 2-х кликов в среднем.
Однако, пожалуй, самым правильным будет такой подход: 1. Временно назначаем нужным полилиниям-трубопроводам (надеюсь, они хотя бы на одном слое или, на худой конец отличаются от остальных цветом/типом линий/весом, чтоб их можно было программно выбрать). так вот: назначаем им временно тип линий в виде стрелок, например, такой. 2. Командой ENTREV из набора PL-Tools реверсируем неправильно ориентированные полилинии. 3. Рисуем ВСЕ (!) стрелки одним махом. При таком подходе среднее количество кликов стремится к 0.5 на полилинию.