Как добавить вершину в полилинию в автокаде
Перейти к содержимому

Как добавить вершину в полилинию в автокаде

  • автор:

Подскажите как добавить точьку/вершину к полилинии

Подскажите как добавить точьку/вершину к полилинии.Между двух точек нужно еще 2. Возможно ли это сделать чтобы не чертитьее заново?

Просмотров: 44251
Регистрация: 11.05.2005
Сообщений: 6,991
1. Команда _PEDIT
2. Новые команды для работы с полилинией
__________________
Как использовать код на Лиспе читаем здесь
Регистрация: 13.08.2009
Сообщений: 46

Если я правельно понял, что это заработало надо какойто плагин скачать? а просто в самой программе это сделать не возможно? таким оброзом как в архикаде просто добавить точку кликнув где надо

Регистрация: 11.05.2005
Сообщений: 6,991
Serjik7,

а просто в самой программе это сделать не возможно?

__________________
Как использовать код на Лиспе читаем здесь
Регистрация: 13.08.2009
Сообщений: 5

[b]Serjik7 — набираеш PEDIT;[/b]
[b]-выделяеш поли линию, ;[/b]
[b]-работаеш с командной строки;[/b]
[b]-жмеш E (Еdit vertex);[/b]
[b]-пользуясь N (next) P (Pervios) добираешся до нужного сегмента;[/b]
[b]-I (insert) встовляеш точку;[/b]

Последний раз редактировалось Кулик Алексей aka kpblc, 13.08.2009 в 21:31 .
Регистрация: 13.08.2009
Сообщений: 46
Спасибо большое все получилос!
Регистрация: 05.10.2006
Сообщений: 122
Давно пользуюсь набором PLTOOLS (мое душевное — VVA). Попробуй!
Регистрация: 16.05.2007
Сообщений: 79

Апну тему. в новых версиях автокада если навести курсор на ручку полилинии появляется менюха где есть пункт добавить вершину. Вершина добавляется в конец полилинии, или между точками. Вопрос — никто не знает параметр чтоб вершина добавлялась от ручки на которой «стоишь» — чтоб акад не «смотрел» начало это или конец.

__________________
Нащяльника,мая AutoCAD паставиль,инсталя сделаль,сапускаю, а она ажамбех пашамбе эшельбе шайтанама!

Регистрация: 17.08.2010
Сообщений: 688
Сообщение от Conan_w

Апну тему. в новых версиях автокада если навести курсор на ручку полилинии появляется менюха где есть пункт добавить вершину. Вершина добавляется в конец полилинии, или между точками. Вопрос — никто не знает параметр чтоб вершина добавлялась от ручки на которой «стоишь» — чтоб акад не «смотрел» начало это или конец.

Может включить объектную привязку «ближайшая», или не то?
__________________
Лучше не обещать, чем обещать и не исполнять.
Регистрация: 16.05.2007
Сообщений: 79
Сообщение от LynxM
Может включить объектную привязку «ближайшая», или не то?
Не, не то. Там привязка не влияет на продолжение полилиний.

__________________
Нащяльника,мая AutoCAD паставиль,инсталя сделаль,сапускаю, а она ажамбех пашамбе эшельбе шайтанама!

Регистрация: 30.08.2012
Сообщений: 9

Апну. Подскажите, плиз, куда копать. Полилиния. Всё было хорошо, наводишь курсор на вершину — появляется меню: добавить, растянуть. Но в один миг пропало всё. При наведении вылазиет только «0». Пробовал всё (привязки, объектные отслеживания..) включать/отключать (если отключить «динамический ввод» — даже нолик не отображается).
Попробую _PEDIT , но вершин у меня много.
А ещё появилась вершина, которая при выделении становится не квадратом, а прямоугольником, а если навести на неё, то появляется куча всего, цифры, линии.. (три нуля в ряд и на выноске точками число какое-то (2.7983))
Автокад 2011

Регистрация: 29.10.2004
Сообщений: 16,333
Asaneck, переменную GRIPMULTIFUNCTIONAL в значение 2 или 3
Регистрация: 30.08.2012
Сообщений: 9
Сообщение от Хмурый
Asaneck, переменную GRIPMULTIFUNCTIONAL в значение 2 или 3

Была 3, сделал 2 — осталось тоже самое, вернул на 2.
Что-то с линией не то. На некоторых вершинах появляется меню «добавить,растянуть..». Ещё при наведении на любое место линии рядом с курсором появляются два прямоугольничка сине-голубых, расположенных встык по диагонали, правый верхний залит цветом.
Создал рядом полилинию — навёл на неё — не появляются. И вершины все норм. работают.

Регистрация: 29.10.2004
Сообщений: 16,333
Asaneck, вершины и сегменты полилинии совпадают. циклический выбор в помощь. GRIPMULTIFUNCTIONAL в 3
Регистрация: 23.05.2012
Сообщений: 1,374
Asaneck, http://forum.dwg.ru/showthread.php?t=75907
__________________
Как-то так.

Конструктор по сути (машиностроитель)

Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391
Немного разжую, автор мог не понять
Сообщение от Asaneck
Ещё при наведении на любое место линии рядом с курсором появляются два прямоугольничка сине-голубых,

Это циклический выбор. Его можно отключить (снизу строка, где всякие кнопки вкл/откл по орто, сетке, шагу и пр.)

__________________
Век живи, век учись — .
Регистрация: 30.08.2012
Сообщений: 9

2 sertor
Ссылку посмотрел.
Сделал вывод, что картинку надо прикрутить
прямоугольнички при наведении на мою полилинию.
https://yadi.sk/i/T41tkDpycEDZn
неквадратный узел полилинии (один такой)
https://yadi.sk/i/yiLyhinmcEEEW
при наведении на этот узел курсора
https://yadi.sk/i/3mTlLtWwcEEQ6

Последний раз редактировалось Asaneck, 23.10.2014 в 13:28 . Причина: картинка
Регистрация: 13.12.2007
Россошь, Воронежская обл.
Сообщений: 307

Asaneck, это параметрическая зависимость.

По добавленному, скорее всего у вас в месте высокого прямоугольника две и более совпадающих вершин. Зажмите Ctrl, после этого кликните правее или левее прямоугольника по полилинии — выберется сегмент. После этого подводите курсор к вершине.

Последний раз редактировалось Spiteful Berkut, 23.10.2014 в 13:34 .

Spiteful Berkut
Посмотреть профиль
Найти ещё сообщения от Spiteful Berkut

Регистрация: 30.08.2012
Сообщений: 9

2 Spiteful Berkut
Спасибо огромное! Всемогучий ctrl спас меня.
5 вершин сидело в той точке.
Исчезли злые прямоугольнички.

Регистрация: 13.12.2007
Россошь, Воронежская обл.
Сообщений: 307
Сообщение от Asaneck
неквадратный узел полилинии

Это фишка 2011 AutoCAD’а так совпадающие вершины обозначать или просто глюк? Знает кто-нибудь, а то я в 2011 версии сижу и мучаюсь, временами, а прямоугольников таких не видел.

Spiteful Berkut
Посмотреть профиль
Найти ещё сообщения от Spiteful Berkut

Как добавить вершину в полилинию нажатием одной кнопки? (Страница 1 из 4)

Форумы CADUser → Программирование → LISP → Как добавить вершину в полилинию нажатием одной кнопки?

Страницы 1 2 3 4 Далее

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения с 1 по 25 из 86

#1 Тема от Azor 30 августа 2005г. 09:05:09

Тема: Как добавить вершину в полилинию нажатием одной кнопки?

Возможно ли добавлять вершину в полилинию путем нажатия одной кнопки, подобно Break at Point, только не разрывая линию? Путем редактирования полилинии (PEDIT-Edit Vertex-Insert) получается слишком муторно.

#2 Ответ от Владимир Громов 30 августа 2005г. 09:29:21

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Вот такая конструкция:

(vl-cmdf "_PEDIT" pause "_E" "_I" pause "_X" "")

плохо работает. Мешает необходимость последовательного выбора вершины, после которой надо добавить новую вершину.

#3 Ответ от Azor 30 августа 2005г. 09:46:09

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Так вот в этом и проблема.. а если вершин много? 20-30 например. Конкретная задача — трассировка нагорной канавы. Допустим мне нужно приблизить дно канавы к определенному уклону, для этого требуется изогнуть канаву в определенном месте рельефа. Добавляю вершину. Я нажимаю Break at Point, рву полилинию в нужном месте, потом склеиваю. Так быстрее получается, нежели до этой вершины скакать, а потом втыкать ее.

#4 Ответ от kpblc 30 августа 2005г. 10:53:43

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Можно попробовать лиспом:

;|============================================================================= * Функция разрыва полилинии и одновременной передвижки новой вершины. * Полилиния не меняет следующих свойств: цвет, слой, тип. * Ограничения: * 1. Не производится отлов ошибок ввода (никто не запрещает работать с арками и * окружностями) * 2. Не производится отлов нажатия Esc - не выполняется восстановление * системных переменных. Обработчик ошибок писать просто некогда. * 3. Не производится проверка usc, в которой работает пользователь. * 4. Неправильное указание точки (не принадлежащей объекту) может свалить * функцию в ноль. * 5. Не отслеживается "заморозка" слоя. * 6. Не отслеживается вариант, когда указывается пересечение двух объектов - * в таком случае работа непредсказуема. * Функция тестировалась на ADT 2005, usc = world. * * Функцию желательно сохранить в файл kpblc-stretch-pline.lsp. Файл должен * быть сохранен в путях поддержки AutoCAD. * Возможный макрос для вызова: ^C^C(if (not "c:kpblc-stretch-pline") (load "kpblc-stretch-pline.lsp"));c:kpblc-stretch-pline; =============================================================================|; (defun c:kpblc-stretch-pline ( / break_point _osmode_ selset_oper) (setq _osmode_ (getvar "osmode")) ;_ end of setq (setvar "osmode" 512) (setq break_point (getpoint "\nУкажите точку разрыва : ") selset_oper (ssget break_point) ) ;_ end of setq (command "_.break" selset_oper break_point break_point) (command "_.pedit" "_M" "_C" break_point break_point "" "_join" 0 "") (command "_.stretch" "_C" break_point break_point "") (setvar "osmode" 1) (while (/= (getvar "cmdactive") 0) (command pause) ) ;_ end of while (setvar "osmode" _osmode_) (princ) ) ;_ end of defun ;;; Конец файла kpblc-stretch-pline.lsp

Как вариант, не более. Для нормальной работы можно еще массу всего понаворотить.

#5 Ответ от Олег(jr.) 30 августа 2005г. 13:07:10

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> Azor
Попробуй такую фичу, указывать полилинию нужно
на том участке, где будет добавлена вершина
~’J’~

;; Вспомогательные функции ;; Группировка списка по числу элементов субсписка (defun group-by-num (lst num / ls ret) (if (= (rem (length lst) num ) 0) (progn (setq ls nil) (repeat (/ (length lst) num) (repeat num (setq ls (cons (car lst) ls) lst (cdr lst))) (setq ret (append ret (list (reverse ls))) ls nil))) ) ret ) ;; Голова списка по номеру: (defun head (lst num ) (if ( < 0 (1- num)) (cons (car lst) (head (cdr lst) (1- num))))) ;; Хвост списка по номеру: (defun tail (lst num / ) (if (>(length lst) (1- num )) (append (tail (reverse (cdr (reverse lst))) num) (list (last lst))))) ;; Добавление элемента в список по номеру позиции (defun add-elt (lst num elt) (if elt (append (head lst num) (cons elt (tail lst num))))) ;; Создание и заполнение безопасного массива точек (defun safe-points (lst / pt_list points) (setq pt_list (apply 'append lst)) (setq points (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length pt_list))) ) pt_list ) ) ) ;; Обработсик ошибок с пошаговым возвратом (defun div-error (msg) (if (vl-position msg '("console break" "Function cancelled" "quit / exit abort" ) ) (princ "Error!") (princ msg) ) (while (> (getvar "cmdactive") 0) (command)) (command "._undo" "_end") (command "._u") (setq *error* olderror) (princ) ) (vl-load-com) (prompt "\n *** Type ADV to execute *** \n") ;; ОСНОВНАЯ ПРОГРАММА ;; (defun C:adv (/ *error* acsp adoc appd coord div-error new_pl olderror pl pn pt pt_list seg_num util ) (or adoc (setq adoc (vla-get-activedocument (vlax-get-acad-object) ) ) ) (or appd (setq appd (vla-get-application adoc))) (or acsp (setq acsp (vla-get-block (vla-get-activelayout adoc) ) ) ) (or util (setq util (vla-get-utility adoc))) (command "._undo" "_end") (command "._undo" "_mark") (setq olderror *error*) (setq *error* div-error) (vla-getentity util 'pl 'pt "\nSelect polyline to add vertex: >>> \n" ) (if pl (progn (setq pn (trans (getpoint "\nSpecify new vertex location: >>> \n") 1 0)) (setq coord (vlax-get pl 'Coordinates) coord (cond ((eq (rem (length coord) 2) 0) (group-by-num coord 2) ) ((eq (rem (length coord) 3) 0) (group-by-num coord 3) ) (T nil) ) coord (mapcar (function (lambda (x) (trans x 1 0))) coord) ) (setq seg_num (+ (fix (vlax-curve-getparamatpoint pl (osnap (vlax-safearray->list pt) "_nea") ) ) 2 ) ) (setq coord (add-elt coord seg_num pn)) (setq pt_list (safe-points coord)) (setq new_pl (vla-addpolyline acsp pt_list)) (vla-delete pl) (mapcar (function (lambda (x) (if (not (vlax-object-released-p x)) (vlax-release-object x) ) ) ) (list pl new_pl) ) ) (princ "\nNothing selected try again\n") ) (vla-zoomextents appd) (vla-regen adoc acactiveviewport) (setq *error* olderror div-error nil ) (command "._undo" "_end") (princ) ) (C:adv) (princ)

#6 Ответ от Владимир Громов 30 августа 2005г. 13:41:08

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> Олег(jr.)
Интересная программа.
Вершины вставляются там, где надо, только замкнутая полилиния размыкается со стиранием замыкающего сегмента, а дуговые сегменты заменяются линейными.

#7 Ответ от Владимир Громов 30 августа 2005г. 13:46:39

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> kpblc
Непонятно, что делать после указания точки разрыва?

#8 Ответ от kpblc 30 августа 2005г. 14:38:35

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> Владимир Громов
Тащить новую вершину на нужное место. На ней (на вершине) просто надо дополнительно щелкнуть — не удалось мне слету указать ее для stretch’a.

#9 Ответ от kpblc 30 августа 2005г. 14:41:20

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Упустил из виду: если таскать сразу не требуется, надо будет закомментировать строки

(command "_.stretch" "_C" break_point break_point "") (setvar "osmode" 1) (while (/= (getvar "cmdactive") 0) (command pause) ) ;_ end of while

Т.е. перед ними поставить ;;

#10 Ответ от shishoq 30 августа 2005г. 17:27:59

Re: Как добавить вершину в полилинию нажатием одной кнопки?

В Toolpac-е есть такая функция:
указываешь курсором место новой вершины, потом — сегмент, который разрывается и дотягивается до неё. Там же есть и опция удаления ненужной вершины. Toolpac > Polyline > Vertex > . Только после этих операций ассоциативность этой плинии теряется, так что контуры штриховок я меняю по старинке, pedit-ом.

#11 Ответ от kpblc 30 августа 2005г. 17:35:10

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> shishoq
Ну на этот предмет не тестировал. Но и у меня тоже ассоциативность рушится. Надо по новой штриховать. За компанию: если полилиния служила обрамлением wipeout, его понадобится перестраивать.

#12 Ответ от shishoq 30 августа 2005г. 17:41:27

Re: Как добавить вершину в полилинию нажатием одной кнопки?

а нельзя ли написать фичу на основе PEDIT ,чтобы не портила ассоциативность?

#13 Ответ от kpblc 30 августа 2005г. 17:47:12

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Немного подправленный мой код (автоматически после указания точки разрыва идет требование указать новое положение точки):

;|============================================================================= * Функция разрыва полилинии и одновременной передвижки новой вершины. * Полилиния не меняет следующих свойств: цвет, слой, тип. * Ограничения: * 1. Не производится отлов ошибок ввода (никто не запрещает работать с арками и * окружностями) * 2. Не производится отлов нажатия Esc - не выполняется восстановление * системных переменных. Обработчик ошибок писать просто некогда. * 3. Не производится проверка usc, в которой работает пользователь. * 4. Неправильное указание точки (не принадлежащей объекту) может свалить * функцию в ноль. * 5. Не отслеживается "заморозка" слоя. * 6. Не отслеживается вариант, когда указывается пересечение двух объектов - * в таком случае работа непредсказуема. * Функция тестировалась на ADT 2005, usc = world. * * Функцию желательно сохранить в файл kpblc-stretch-pline.lsp. Файл должен * быть сохранен в путях поддержки AutoCAD. * Возможный макрос для вызова: ^C^C(if (not "c:pline-str") (load "kpblc-stretch-pline.lsp"));c:pline-str; =============================================================================|; (defun kpblc-stretch-pline (/ break_point _osmode_ selset_oper) (setq _osmode_ (getvar "osmode")) ;_ end of setq (setvar "osmode" 512) (setq break_point (getpoint "\nУкажите новую вершину : ") selset_oper (ssget break_point) ) ;_ end of setq (command "_.break" selset_oper break_point break_point) (command "_.pedit" "_M" "_C" break_point break_point "" "_join" 0 "") (command "_.stretch" "_C" break_point break_point "" break_point) ;;(command (list break_point) pause) ;|(while (/= (getvar "cmdactive") 0) (command pause) ) ;_ end of while |; (setvar "osmode" _osmode_)|; (princ) ) ;_ end of defun (defun c:pline-str() (kpblc-stretch-pline) ) ;_ end of defun ;;; Конец файла kpblc-stretch-pline.lsp

> shishoq : у меня не получилось. Может, у Олега (jr) выйдет?

#14 Ответ от kpblc 30 августа 2005г. 17:49:19

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Тьфу ты, там в коде надо снести закомментрованные строки (command (list. )) и (while. );_end of while.
Хотя с другой стороны они не мешают.

#15 Ответ от kpblc 30 августа 2005г. 17:52:36

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Так, все. 2 предыдущих поста можно сносить. Здес окончательный вариант:

;|=================================================================== * Функция разрыва полилинии и одновременной передвижки новой вершины. * Полилиния не меняет следующих свойств: цвет, слой, тип. * Ограничения: * 1. Не производится отлов ошибок ввода (никто не запрещает работать с арками и * окружностями) * 2. Не производится отлов нажатия Esc - не выполняется восстановление * системных переменных. Обработчик ошибок писать просто некогда. * 3. Не производится проверка usc, в которой работает пользователь. * 4. Неправильное указание точки (не принадлежащей объекту) может свалить * функцию в ноль. * 5. Не отслеживается "заморозка" слоя. * 6. Не отслеживается вариант, когда указывается пересечение двух объектов - * в таком случае работа непредсказуема. * Функция тестировалась на ADT 2005, usc = world. * * Функцию желательно сохранить в файл kpblc-stretch-pline.lsp. Файл должен * быть сохранен в путях поддержки AutoCAD. * Возможный макрос для вызова: ^C^C(if (not "c:pline-str") (load "kpblc-stretch-pline.lsp"));c:pline-str; ===================================================================|; (defun kpblc-stretch-pline (/ break_point _osmode_ selset_oper) (setq _osmode_ (getvar "osmode")) ;_ end of setq (setvar "osmode" 512) (setq break_point (getpoint "\nУкажите новую вершину : ") selset_oper (ssget break_point) ) ;_ end of setq (command "_.break" selset_oper break_point break_point) (command "_.pedit" "_M" "_C" break_point break_point "" "_join" 0 "") (command "_.stretch" "_C" break_point break_point "" break_point) (setvar "osmode" _osmode_) (princ) ) ;_ end of defun (defun c:pline-str() (kpblc-stretch-pline) )

Вроде сейчас все нормально.

#16 Ответ от Владимир Громов 30 августа 2005г. 20:57:43

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> kpblc
Вроде все нормально, только если в ответ на запрос:

Вторая точка перемещения или :

нажать правую кнопку мыши, то получается какая-то ерунда, IMHO.

#17 Ответ от kpblc 31 августа 2005г. 08:34:06

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> Владимир Громов
Я тоже на это внимание обратил, но как побороть, даже не представляю. Что самое интересное, если дать просто _.stretch (с ком.строки), то все работает предсказуемо.
С другой стороны, а смысл сделать просто дополнительную вершину полилинии? Ее же, по условиям > Azor (2005-08-30 09:46:09), надо сразу двигать (имхо). Можно, конечно, сделать дополнительный запрос на «двигать вершину или плюнуть?» перед _.stretch, но лишние телодвижения. Если надо, сделать не проблема — только сообщите 😉

#18 Ответ от Azor 2 сентября 2005г. 03:05:25

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Всем спасибо, благодарствую 🙂

#19 Ответ от Azor 2 сентября 2005г. 05:38:59

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> kpblc
весьма полезная программка, и именно со стретчем. не нарадуюсь 🙂

> Олег(jr.)
когда втыкаю одну вершину — все ок, а при попытке поставить вторую — получается абракадабра.

#20 Ответ от Владимир Громов 8 сентября 2005г. 09:26:33

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> kpblc
Товарищ kpblc. А что, если ты эту программу отправишь в раздел «Готовые программы»? Мне нравится, несмотря на бяку с нажатием правой кнопки мыши, моим коллегам-архитекторам тоже придется по душе. Им часто приходится менять планировку помещений, а площадь они определяют по моей программе (площадь замкнутого контура). Частенько приходится контур рисовать заново, потому что надо добавить углы помещения, а, следовательно, и вершины в контуре.

#21 Ответ от kpblc 8 сентября 2005г. 09:40:09

Re: Как добавить вершину в полилинию нажатием одной кнопки?

imho перед «готовностью программы» надо дополнительно, во-первых, сделать вариант на правую кнопку мыши (см. > kpblc (2005-08-31 08:34:06)), провести проверку на досрочный выход, обработку ошибок, провести обработку нештатной ситуации — попытка обработки отрезка, 3д-полилинии, окружности эллипса, полилинии в блоке / xref-e — тут же до дури всего можно придумать. Сейчас просто времени, к сожалению, нет — может, к вечеру поближе что-то и получится.
По поводу площади: можно сюда же засунуть дополнительно проверку на замкнутость полученной полилинии (dxf = 70), преобразовать ее в vlax-object и оттуда вытащить площадь, запросить точку вставки (кстати, тоже надо проверять ввод) и на этой точке сделать либо текст через entmake, либо вставить блок с текстовым атрибутом. Т.е. варианты есть — их только прорабатывать надо.

#22 Ответ от Владимир Громов 8 сентября 2005г. 10:03:36

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> kpblc
Ну, я вижу, ты точно хочешь придерживаться буквы закона: «Готовая программа» — значит готовая программа. Может, все-таки, с мнимальными доработками, а? И не сей секунд, конечно. Ведь хорошая программа, даже в таком виде. Потом, позже, программу можно усовершенствовать. А то эта тема (ведь чисто Лисп’овская) находится в таком разделе, который пополняется со страшнлй силой, и скоро она ушла бы уже во вторую сотню, если бы я ее не поднял.

#23 Ответ от kpblc 8 сентября 2005г. 10:52:07

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Ок, тогда надо определить объем этих минимальных доработок. Чего там сделать-то надобно?
Мои предложения:
1. дополнительные вершины можно вставлять либо для lwpolyline, либо для отрезков (кстати, вопрос — был отрезок, стал полилинией, обратно в отрезки делать или нет? Или запрос?) — для остального (circle, ellipse, spline, 3d-polyline, block, xref. ) вываливается (alert).
2. Досрочный выход не обрабатывается.
3. Площадь не выводится — тут помимо замкнутости надо еще дополнительно по идее обрабатывать варианты совпадения начальной и конечной вершин, а также вариант с самопересечением — _boundary лично мне что-то не очень — если lwpolyline нормальная, то команда создает дубль объекта, который для качественной функции надо сносить — лишние телодвижения.
4. Правая кнопка — что с ней делать? Т.е. для варианта отмены _.stretch чего творим?

#24 Ответ от Владимир Громов 8 сентября 2005г. 11:27:39

Re: Как добавить вершину в полилинию нажатием одной кнопки?

> kpblc
Я пока и сам не знаю. Знаю только, что я ее и в таком виде буду использовать. Не хотелось мне, чтобы тема утонула. Я бы ограничился просто таким названием: «Добавление вершины в полилинию» без площадей, отрезков и т.п. Эта программа может работать сама по себе, а на ее основе можно потом что-то дальше развивать. Универсальность мне не всегда нравится, начальная идея может раствориться в самой универсальности, IMHO.

#25 Ответ от kpblc 8 сентября 2005г. 12:35:30

Re: Как добавить вершину в полилинию нажатием одной кнопки?

Ну ладно. В общем, тут несколько моментов сделано:

;|============================================================================= * Функция разрыва полилинии и одновременной передвижки новой вершины. * Полилиния не меняет следующих свойств: цвет, слой, тип. * Ограничения: * 1. Не производится отлов ошибок ввода (никто не запрещает работать с арками и * окружностями) * 2. Не производится отлов нажатия Esc - не выполняется восстановление * системных переменных. Обработчик ошибок писать просто некогда. * 3. Не производится проверка usc, в которой работает пользователь. * 4. Неправильное указание точки (не принадлежащей объекту) может свалить * функцию в ноль. * 5. Не отслеживается "заморозка" слоя. * 6. Не отслеживается вариант, когда указывается пересечение двух объектов - * в таком случае работа непредсказуема. * Функция тестировалась на ADT 2005, usc = world. * * Функцию желательно сохранить в файл kpblc-stretch-pline.lsp. Файл должен * быть сохранен в путях поддержки AutoCAD. * Возможный макрос для вызова: ^C^C(if (not "c:pline-str") (load "kpblc-stretch-pline.lsp"));c:pline-str; =============================================================================|; (defun kpblc-stretch-pline (/ break_point _osmode_ selset_oper break_ent break_ent_type) ;; Определения локальных функций ;; Собственно разрыв и дополнительный одновременный _.stretch. ;; Параметры: ;; ent_pline - ссылка на разрываемый объект, аналог (entsel) ;; ent_type - тип объекта: nil -> lwpolyline; t -> line ;; объект обратно в LINE не разбивается (defun _kpblc-break-pline (ent-pline ent-type break-point) (command "_.break" ent_pline break-point break-point) (command "_.pedit" "_M" "_C" break-point break-point "") ;; Здесь определяем по ent_type - чего делать дальше (if ent-type (command "_yes") ) ;_ end of if (command "_join" 0 "") ;; вот этот кусок у меня что-то не получился по-человечески. ;; по идее тут надо делать попытку на получение точки, но у меня не вышло. ;; в результате надо два раза кликать мышой для задания второго положения ;; новой вершины. (if (vl-catch-all-error-p (command "_.stretch" "_C" break-point break-point "" break-point pause)) (command "_.stretch" "_C" break-point break-point "" break-point break-point) (command "_.stretch" "_C" break-point break-point "" break-point pause) ) ;| В принципе, его можно закомментировать, оставив только строку (command "_.stretch" "_C" break-point break-point "" break-point pause) - тогда получим старое поведение функции. |; ) ;_ end of defun ;; Конец определения локальных функций (vl-load-com) (if (not *kpblc-activedoc*) (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) ) (vla-endundomark *kpblc-activedoc*) (vla-startundomark *kpblc-activedoc*) (setq _osmode_ (getvar "osmode") ) ;_ end of setq (setvar "osmode" 512) (setq break_point (getpoint "\nУкажите точку разрыва : ") selset_oper (ssget break_point) ) ;_ end of setq ;; Теперь проверка на вшивость - в смысле, на правильность выбора ;; Вынесено специально в отдельный setq, а также введена дополнительная ;; локальная переменная определения типа разрываемого объекта (setq break_ent (ssname selset_oper 0) break_ent_type (cdr (assoc 0 (entget break_ent))) ) ;_ end of setq (cond ((= break_ent_type "LWPOLYLINE") (progn (_kpblc-break-pline break_ent nil break_point) ) ;_ end of progn ) ((= break_ent_type "LINE") (_kpblc-break-pline break_ent t break_point) ) (t (alert "Добавить вершину к выбранному примитиву невозможно!")) ) ;_ end of cond (setvar "osmode" _osmode_) (vla-endundomark *kpblc-activedoc*) (princ) ) ;_ end of defun (defun c:pline-str () (kpblc-stretch-pline) ) ;_ end of defun ;;; Конец файла kpblc-stretch-pline.lsp

Обратите внимание, что сейчас если не указывать вторую точку новой вершины, то все нормально. А вот если указывать, то надо два раза щелкать мышой. Сделал на всякий случай и так, как получилось. Если у кого-то выйдет лучше, будет совсем замечательно.

Сообщения с 1 по 25 из 86

Тему читают: 1 гость

Страницы 1 2 3 4 Далее

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Форумы CADUser → Программирование → LISP → Как добавить вершину в полилинию нажатием одной кнопки?

Форум работает на PunBB , при поддержке Informer Technologies, Inc

Как добавить вершину в полилинию в автокаде

Работа с полилиниями

В данном разделе меню находятся модули для различных манипуляций с полилиниями.

Под реверсированием понимается изменение порядка вершин полилинии на обратный. Это может быть применено для «переворачивания» линейных условных знаков (полилиний):

Модуль сделан для старых версий AutoCAD и ZWCAD. В новых версиях этих САПР данную операцию можно осуществить штатными средствами.

Позволяет добавлять к полилиниям вершины. В начале работы модуль просит выбрать одну или несколько полилиний, далее просит указать одну или несколько точек. Если в начале выбрано несколько полилиний, вершина добавляется к ближайшей полилинии из ранее выбранных.(Модуль сделан для старых версий AutoCAD и ZWCAD. В новых версиях этих САПР данную операцию можно осуществить штатными средствами.)

Удаляет вершины у полилиний. В начале работы модуль просит выбрать одну или несколько полилиний, далее просит указать одну или несколько точек. Удаляется ближайшая вершина ближайшей полилинии из ранее выбранных.(Модуль сделан для старых версий AutoCAD и ZWCAD. В новых версиях этих САПР данную операцию можно осуществить штатными средствами.)

Данный модуль удаляет у полилиний продублированные вершины, т.е. две и более последовательно идущие вершины, координаты которых совпадают по координатам с указанным допуском.(Модуль сделан для старых версий AutoCAD и ZWCAD. В новых версиях этих САПР данную операцию можно осуществить штатными средствами.)

Данный модуль сделан для пользователей ZWCAD и старых версий AutoCAD, в которых отсутствуют удобные инструменты для преобразования сегмента полилинии в дугу.

Данный модуль сделан для пользователей ZWCAD и старых версий AutoCAD, в которых отсутствуют удобные инструменты для преобразования дугового сегмента полилинии в прямую. Алгоритм работы модуля аналогичен вышеописанному, см. изображения выше.

Данный модуль экспортирует в CSV файл координаты вершин выбранной полилинии.

Данный модуль экспортирует в CSV файл координаты вершин НЕСКОЛЬКИХ выбранных полилиний:

В сочетании с модулем Построить несколько полилиний из CSV-файла данный модуль может быть использован для пересчета координат в сторонних программах.

Признаком окончания одной полилинии и начала следующей является пустая строка в CSV файле(пустые ячейки в Excel).

Данный модуль строит полилинию по координатам из CSV файла. Формат CSV файла: 2 столбца, координата X и координата Y, разделитель точка-запятой. Построение вершин идет в том порядке, в котором идут их координаты в CSV файле. Полилиния строится на текущем слое, текущим цветом и текущим типом линии.

Данный модуль строит полилинии по координатам из CSV файла:

В сочетании с модулем Экспорт координат вершин нескольких полилиний в CSV-файл данный модуль может быть использован для пересчета координат в сторонних программах.

Признаком окончания одной полилинии и началом следующей является пустая строка в CSV файле(пустые ячейки в Excel).

Данный модуль позволяет повернуть текст в соответствии с направлением полилинии в точке, являющейся ближайшей к тексту. Выбор текста происходит рамкой с экрана.
Пример. До обработки:

После обработки:

Черная полилиния — та, по которой выравнивался текст. Пунктирной линией (показана для наглядности) показан допуск, в примере равный 100. В качестве начала полилинии была указана точка рядом с левым концом полилинии. Если бы была указана точка рядом с правым концом полилинии, данный пример выглядел бы так:

Данный модуль позволяет повернуть блоки в соответствии с направлением полилинии в точке, являющейся ближайшей к блоку. Выбор блоков осуществляется по образцу, а именно программа просит указать Пользователя блок-образец и в обработку попадают блоки с таким же именем что и образец и лежащие на том же слое.
Пример. До обработки:

После обработки:

Черная полилиния — та, по которой выравнивались блоки. Пунктирной линией (показана для наглядности) показан допуск, в примере равный 100. В качестве начала полилинии была указана точка рядом с левым концом полилинии.

Позволяет повернуть блоки по полилиниям. В отличие от вышеописанного модуля позволят выбрать сразу несколько полилиний. Поворот каждого блока будет производиться по той полилинии, которая ближе к нему.

В связи с тем что модуль не запрашивает у пользователя направление начала для каждой полилинии, артибуты некоторых блоков могут оказаться плохочитаемыми на чертеже. Поправить такую ситуацию поможет модуль Повернуть атрибуты в соответствии с правилами чтения чертежа.

Модуль поворачивает текстовые объекты внутри выбранных полилиний по наиболее вытянутой стороне. Текст снаружи полилиний игнорируется.

Примечание. Угол текста расчитывается от оси X против часовой стрелки в мировой системе координат.

Данный модуль позволяет выбрать аналогичные указанному образцу объекты, находящиеся рядом с полилинией в пределах указанного допуска.

На примере выше показано, что в результате работы модуля были выбраны блоки, находящиеся рядом с полилинией в пределах допуска, равном в данном примере 100 (пунктирная линия, показанная для наглядности).

Данный модуль позволяет выделить объекты, выбранные по образцу, лежащие частично или полностью внутри указанной полилинии. Программа спрашивает способ выбора: многоугольник — быдут выбраны объекты, лежащие полностью внутри выбранной полилинии, или секущий многоугольник — будут выбраны объекты, лежащие частично внути полилинии. Выбранная полилиния не должна иметь повторяющихся по координатам вершин и не должна пересекать сама себя.
Внимание! Самопересечение полилинии Программой не отслеживается.
Пример:

Модуль позволяет выделить аналогичные объекты, находящиеся снаружи указанной полилинии:

Данный модуль позволяет перенести объекты, выбранные по образцу на указанную полилинию в соответствии с кратчайшим расстоянием до нее и указанной зоной захвата (пунктирная линия, показанная для наглядности).
Пример. До обработки:

После обработки:

Модуль позволяет ‘взорвать'(расчленить) полилинии и линии с заданным сложным типом линии таким образом, что описанные в типе линии тексты и шейпы окажутся извлеченными:

Примечание к примеру. Полинии до обработки и объекты, полученные в результате работы модуля показаны выделенными намеренно.

Этот модуль будет полезен при экспорте DWG-файла в другие программы, которые не поддерживают сложные типы линий.

Важное замечание. В случае если модуль не сможет получить доступ к файлу SHX, на шейпах которого сформирован тип линии, шейпы извлечены не будут.

Позволяет заменить типы линий у объектов чертежа на основе CSV-файла в виде двух столбцов. 1-й столбец — заменяемый тип линии, 2-й столбец — тип линии, на который нужно заменить. Тип линии, указанный во 2-м столбце должен обязательно присутствовать в чертеже. По окончании работы выводится подробная информация о выполненных заменах.

Позволяет назначить тип линии объектам чертежа (только линии, полилинии, 3д-полилинии) в зависимости от слоя. Зависимость типа лини от слоя описывается в CSV файле, который пользователь составляет самостоятельно и указывает в данном модуле. Первой колонкой в CSV-файле должны перечисляться имена слоев, во втором — назначаемые типы линий. Разделитель данных — точка-запятой.

Важное замечание! Все типы линий, указанные в CSV-файле, должны присутствовать в чертеже. Если какой-либо тип линии не найден в чертеже, в текстовом окне автокада выводится соответствующее сообщение об ошибке.

Содержимое CSV файла:

Результат работы программы:

Пояснение к примеру. Полилинии в левой части изображения находятся на слоях(сверху вниз): 0, слой_1, слой_2, слой_3, слой_4, слой_5. Верхняя полилиния не подверглась изменению, т.к. слой с именем ‘0’ не описывается в исходном CSV-файле. Остальные типы линий подверглись изменению, им был назначен тип линии в соответствии с CSV-файлом.

Позволяет нанести на полилинии (а так же над полилинией или под полилинией) текст с указанным шагом и указанного размера.

Если способ вставки текста указан на полилинии, то к тексту применяется скрытие заднего фона.

Позволяет нанести на середины сегменты выбранных полилиний заданный текст заданного размера.

Модуль позволяет объединить несколько рядом расположенных полилиний(и/или линий) в одну полилинию.

Модуль написан для пользователей ранних версий AutoCAD и ZWCAD, в которых не было средства объединения полилиний с допуском.

Если у Вас современная САПР платформа, рекомендуется пользоваться штатными средствами(т.к. этот модуль не отличается высоким быстродействием): Команда _PEDIT — ‘Несколько’ — выбрать полилинии — ‘Добавить’ — укажите значение допуска — нажмите ENTER.

Модуль позволяет удалить лишние вершины у полилиний по одному из двух условий(см.описание ниже), упростив их таким образом и снизив объем DWG файла. В отличие от стандартной команды _OVERKILL этот модуль предлагает более аккуратные способы удаления лишних вершин.

По окончании работы программа выводит краткую информацию о удаленных вершинах и о разнице в длине (Программа не пытается подогнать длину отредактированной полилинии к длине исходной):

Пояснение параметра Угол. Если задать угол равным 5 градусов, вершина, отмеченная красной стрелкой на примере ниже, будет удалена:

Пояснение параметра Длина перпендикуляра. Если задать этот параметр равным 0.1, вершина, отмеченная красной стрелкой на примере ниже, будет удалена:

Так же в модуле присутствует параметр Не упрощать, если новый сегмент больше. . Если при удалении вершины новый сегмент полилинии получается больше заданного значения, то такая вершина не удаляется, даже если соблюдаются заданные условия.

Модуль ‘округляет’ площадь полилинии посредством перемещения указанной вершины до такого положения, при котором площадь полилинии становится равной требуемой величине. Округление производится по правилу ‘1.4 → 1, 1.5 → 2’.

Модуль позволяет построить 3D полилинию по объектам(блоки, точки, шейпы, окружности или тексты), находящимися в указанном допуске от заданной полилинии. Z исходных объектов наследуется.

Модуль позволяет подрезать полилинии внутри контуров(других полилиний). Подрезаемые полилинии и полилинии-контура должны находиться на разных слоях. Модуль может быть применен для подрезки горизонталей.

Модуль позволяет корректно замкнуть полилинии, т.е. выставить свойство ‘Замкнуто’, даже в том случае, когда первая и последняя вершина не совпадают по координатам, а находятся на некотором удалении друг от друга. Величина допуска задается пользователем.

Модуль позволяет выделить с экрана полилинии с двумя вершинами. Может быть применен при выделении штрихов откосов.

Модуль позволяет построить усредненную полилинию по двум выбранным:

Примечание. Дуговые сегменты наследуются только по первой полилинии.

Модуль позволяет найти точки пересечения полилиний. Может быть полезен для контроля корректности построения горизонталей(полилинии).

Модуль позволяет найти точки пересечения сплайнов. Может быть полезен для контроля корректности построения горизонталей(сплайны).

Как добавить вершину в полилинию в автокаде

1

Основное окно представляет собой список плагинов. Каждый элемент в списке отображает иконку плагина, имя плагина (можно использовать для вызова и командной строки), краткое и полное описание и виды полилиний с которыми работает плагин (3D-полилиния, 2D-полилиния или LW-полилиния)

Добавить панель в ленту — добавление/удаление панели Полилинии на вкладке ModPlus в ленте AutoCAD.

Цвет вспомогательной геометрии: — указание цвета вспомогательной геометрии, используемой некоторыми из плагинов при динамической работе (например, для плагина Динамическое добавление вершины). При нажатии на цветной прямоугольник откроется стандартное диалоговое окно выбора цвета AutoCAD

mpPl-3Dto2D — Преобразовать 3D полилинию в LW

Создание копий выбранных 3D-полилиний в виде LW-полилиний (2D) с переносом в уровень 0.0

Выберите 3D-полилинии:
Выбор одной или нескольких 3D-полилиний для создания 2D-копий. Выбранные полилинии будут удалены

mpPl-VxMatchRemove — Удаление совпадающих вершин полилинии

Удаление соседних вершин выбранных полилиний, которые имеют одинаковые координаты

Выберите полилинии:
Выбор одной или нескольких полилиний. Плагин работает со всеми видами полилиний (3D, 2D, LW)

mpPl-VxCollin — Удаление вершин, лежащих на одной прямой

Удаление соседних вершин выбранных полилиний, которые лежат на одной прямой. Имеется возможность задать допуск на отклонение от прямой или угловой допуск

Выберите полилинии или: [ДОПуски]:
Выбор одной или нескольких полилиний. Плагин работает со всеми видами полилиний (3D, 2D, LW)

2

В данном окне Вы можете указать допуск на максимальное отклонение от прямой и угловой допуск. По умолчанию значения 0.0. Плагин работает с проверкой на оба условия (т.е. если хотя бы одно условие подходит, то вершина будет удалена)

mpPl-ObjectToVx — Расположение объекта в вершинах полилинии

Расположение выбранного объекта в вершинах полилинии. Имеется возможность поворота объекта по сегменту полилинии. Блоки могут быть расположены как по геометрическому центру, так и по точке вставки

Выберите полилинию:
Выбор одной полилиний. Плагин работает с простой («легкой») полилинией (LW)

Выберите объект для расположения:
Выбор любого одного объекта чертежа

Далее появляется окно настройки работы плагина:

3

Исключить крайние точки — исключение первой и последней вершины полилинии

Копировать блоки — вариант привязки блоков к вершинам полилинии: по геометрическому центру или по точке вставке

Поворачивать — вариант поворота объекта в вершине полилинии

mpPl-Arc2Line — Замена дугового сегмента линейным

Замена указанного дугового сегмента полилинии линейным (замена дуги на отрезок). Плагин работает с простыми («легкими») полилиниями (LW)

Выберите дуговой сегмент полилинии:
Выбор сегмента полилинии, являющегося дугой

Плагин работает циклически, до прерывания пользователем. При наведении курсора на дуговой сегмент полилинии строится вспомогательная геометрия предпросмотра результата

mpPl-Line2Arc — Замена линейного сегмента дуговым

Замена указанного линейного (или дугового) сегмента полилинии дуговым (замена отрезка на дугу). Имеется возможность строить дугу по касательной или точке на дуге. Плагин работает с простыми («легкими») полилиниями (LW)

Выберите сегмент полилинии:
Выбор сегмента полилинии как линейного, так и дугового

mpPl-AddVertex — Динамическое добавление вершины

Динамическое добавление вершины к указанной полилинии. Плагин работает только с LW-полилиниями

Выберите полилинию:
Выбор полилинии для которой требуется добавить вершину(ны)

Укажите точку (удерж.Ctrl — сместиться на вершину вперед):
Указание точки в пространстве. В данную точку будет добавлена новая вершина

mpPl-Rect3Pt — Отрисовка прямоугольника по трем точкам

Отрисовка прямоугольника по трем точкам

Укажите первую точку:
Указание первой точки прямоугольника

Укажите вторую точку:
Указание второй точки прямоугольника

Укажите третью точку:
Указание третьей точки прямоугольника

mpPl-NoArc — Удаление из полилинии дуговых сегментов

Удаление из полилинии дуговых сегментов путем замены их линейными сегментами. Имеется несколько вариантов работы плагина: количество сегментов, длина сегмента, высота сегмента (отклонение хорды), длина хорды

4

Вариант работы — Выбор варианта работы. При этом в правой части будет меняться картинка-подсказка, а в нижней части пояснения к картинке

Удалять выбранные полилинии — Удалении полилинии-исходника. При работе плагина создается новая полилиния

Мин. обрабатываемый радиус дуги — Задание минимального радиуса дуги, который будет обрабатываться плагином

Принять — Переход к выбору полилинии:

Выберите полилинии:
Выбор одной или нескольких полилиний в которых требуется удалить дуговые сегменты

Отмена — Отмена работы плагина

mpPl-MiddleLine — Построение средней линии

Построение средней линии (в виде полилинии) между двумя указанными кривыми (отрезками, полилиниями или сплайнами)

Выберите первый опорный элемент (отрезок, полилиния или сплайн):
Выбор первого опорного элемента

Выберите второго опорный элемент (отрезок, полилиния или сплайн):
Выбор второго опорного элемента

Количество опорных точек :
Указание количества опорных точек. Чем больше количество, тем точнее средняя линия. Возможные значения от 2 до 1000 точек

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *