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

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 kpblc

skkk,тоже вариант ,но в данном случае мне нужны только концы стрелок(без размерной линии) - с помощью команды _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 на полилинию.

📎📎📎📎📎📎📎📎📎📎