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

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

Новые команды для работы с полилинией

Ответ
Поиск в этой теме
Непрочитано 14.09.2006, 13:30 4 | #1
Новые команды для работы с полилинией
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,990

Данный набор программ является коллективным продуктом участников форумов autocad.ru и dwg.ru с моими доработками.
Захотелось собрать все программы для работы с полилиниями воедино и оформить как полагается.

=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
PL-JOIN -Объединение выбранных полилиний
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-JOIN3D -Объединение 3D полилиний
PL-L2A -Замена линейного сегмента в полилинии дуговым сегментом.
PL-A2L -Замена дугового сегмента в полилинии линейным сегментом.
PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество
сегментов или через указанное расстояние
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество
сегментов или через указанное расстояние
PL-VxAdd -Добавляет новую вершину к полилинии
ENTREVS -Реверс объекта
ENTREV -Реверс объектов (множественный выбор)
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
PL-VxDel -Удаление выбранной вершины
pl-VxOpt -Удаление совпадающих вершин из полилинии
PL-NoArc -Аппроксимация дуговых сегментов полилинии
PL-Clone -Построение полилинии путем копирования ее сегментов
PL-VxMove -Перемещение вершин полилинии
PL-Vx1 -Изменение начала полилинии
ConvTo2d -Преобразование линейных объектов в 2D полилинии
ConvTo3d -Преобразование линейных объектов в 3D полилинии
MPL -Построение средней линии Более продвинутая версия Rollin_Ball.lsp Find MidBoundary between two polylines.
R3P -Прямоугольгик по 3-м точкам
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Реверс дуговых сегментов полилинии из #79
На дуговых сегментах полилинии тип линий может быть "вверх тормашками", причем реверс не помогает. Этот артефакт можно побороть, если в полилинии включить "генерацию типа линий".

Панели, лисп и инструкции здесь http://dwg.ru/dnl/607
Иконки для темной темы здесь
Обсуждаем, критикуем, предлагаем

Миниатюры
Нажмите на изображение для увеличения
Название: plrevers.jpg
Просмотров: 15299
Размер:	30.3 Кб
ID:	21079  


Последний раз редактировалось VVA, 08.09.2023 в 13:25. Причина: ссылка на иконки для темной темы
Просмотров: 367725
 
Непрочитано 14.09.2006, 13:42
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Щас посмотрим.
Profan вне форума  
 
Непрочитано 14.09.2006, 14:13
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Маленькое уточнение.
Можно было бы написать в благодарностях
Владимир Громов aka Profan.
Profan вне форума  
 
Автор темы   Непрочитано 14.09.2006, 14:22
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Не знал, исправлю.
VVA вне форума  
 
Непрочитано 14.09.2006, 14:53
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Замечания к программам (командам).

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

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

"Аппроксимация дуговых сегментов линейными".
В русской версии не работает контекстное меню.
Profan вне форума  
 
Непрочитано 14.09.2006, 14:59
#6
Кулик Алексей aka kpblc
Moderator

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


Дорабатывал, но не добил. Stretch все равно слетает черт-те куда. Там на оригинальном адресе, по-моему, Евгений Елпанов показывал обработку. Его вариант, насколько мне помнится, работал более устойчиво.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.09.2006, 16:22
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
"Добавить новую вершину в полилинию."
Не обрабатывается нажатие правой кнопки мыши
"Аппроксимация дуговых сегментов линейными".
В русской версии не работает контекстное меню.
Исправлено грузить с VVA №1

Цитата:
"Удалить вершину полилинии".
Результат может оказаться непредсказуемым
По моему очевидно. Если до удаляемой вершины был дуговой сегмент, а после удаляемой линейный, то новый сохранит кривизну и наоборот.
Другое дело, что тот кто удаляет вершину должен отдавать себе отчет как направлена полилиния. Но как помочь ему в этом [sm2100] >kpblc В результате плотного общения с Лентяем, доработавшего код Евгения Елпанова, удалось добиться главного: избавиться от _break (полилинии не теряют ассоциативность). В этой версии вершины добавляются без _strech (там основная сложность была в пересчете bulge), что на мой взгляд более корректно.

Последний раз редактировалось VVA, 19.09.2015 в 20:42.
VVA вне форума  
 
Непрочитано 18.09.2006, 16:20
#8
Юрий Water Jet

Гидрорезка
 
Регистрация: 18.09.2006
г Владимир
Сообщений: 2


"Аппроксимация дуговых сегментов линейными".

Как сделать следующее:
Есть полилиния состоящая из нескольких прямых и дуг с разными радиусами до 500 мм и более 500 мм.
Надо аппроксимировать дуги с радиусом более 500 мм с отклонением 0.1 мм.
__________________
Гидро абразивная резка waterjet 4000 Атм
Юрий Water Jet вне форума  
 
Автор темы   Непрочитано 18.09.2006, 16:37
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Я бы сделал так:
1. _break в точке ->Выделить дуговые сегменты с радиусом более 500 мм в отдельные полилинии (вариант: скопировать полилинию и обрезать)
2. Аппроксимировать их с отклонением 0.1 (имеется ввиду предельное отклонение хорды, т.е. высота стрелки дуги)
3. PL-JOIN собрать все обратно в полилинию
4. При необходимости ENTREVS задать нужный порядок обхода
VVA вне форума  
 
Непрочитано 18.09.2006, 18:01
#10
Юрий Water Jet

Гидрорезка
 
Регистрация: 18.09.2006
г Владимир
Сообщений: 2


Так и делаю, но это очень долго. Уходят часы и дни на обработку нескольких полилиний.
Хотелось бы автоматически.
Задать радиус дуги болше которого полилиния должна обрабатываться и отклонение.
__________________
Гидро абразивная резка waterjet 4000 Атм
Юрий Water Jet вне форума  
 
Автор темы   Непрочитано 18.09.2006, 19:37
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


>Юрий Water Jet Сделал, пробуй по ссылке с поста №1
VVA вне форума  
 
Непрочитано 19.09.2006, 08:20
#12
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


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

Код:
[Выделить все]
(defun c:lw-apr (/ A A1 E H I L LST P R)
  ;;  ElpanovEvgeniy, Russia, Moscow, 2006
  ;;  Example of creation of a polyline with the аррrоximаted arc segments
  ;; (c:lw-apr)
  (if (and (setq e (car (entsel)))
           (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
           (setq h (getdist "\nУкажите максимальную высоту аппроксимируемой дуги. "))
      ) ;_  and
    (progn
      (setq p   0
            lst (list (vlax-curve-getStartPoint e))
      ) ;_  setq
      (repeat (- (cdr (assoc 90 (entget e))) (abs (1- (cdr (assoc 70 (entget e))))))
        (if (setq r (vlax-curve-getSecondDeriv e p))
          (if (equal r '(0 0 0) 1e-8)
            (setq lst (cons (vlax-curve-getPointAtParam e p) lst)
                  p   (1+ p)
            ) ;_  setq
            (progn
              (setq r  (distance '(0 0) (vlax-curve-getFirstDeriv e p))
                    p  (1+ p)
                    i  (/ (- r h) r)
                    l  (* r (atan (sqrt (abs (- 1. (* i i)))) i) 2)
                    a1 (vlax-curve-getDistAtParam e p)
                    a  (vlax-curve-getDistAtParam e (1- p))
                    l  (/ (- a1 a) (1+ (fix (/ (- a1 a) l))))
              ) ;_  setq
              (while (and (< a a1) (not (equal a a1 1e-8)))
                (setq lst (cons (vlax-curve-getPointAtDist e a) lst)
                      a   (+ a l)
                ) ;_  setq
              ) ;_  while
            ) ;_  progn
          ) ;_  if
          (setq p (1+ p))
        ) ;_  if
      ) ;_  repeat
      (entmakex
        (append
          (list
            '(0 . "LWPOLYLINE")
            '(100 . "AcDbEntity")
            '(100 . "AcDbPolyline")
            (cons 90 (length lst))
            (assoc 70 (entget e))
          ) ;_  list
          (mapcar
            (function
              (lambda (x)
                (cons 10 x)
              ) ;_  lambda
            ) ;_  function
            lst
          ) ;_  mapcar
        ) ;_  append
      ) ;_  entmakex
    ) ;_  progn
  ) ;_  if
)
Елпанов Евгений вне форума  
 
Непрочитано 19.09.2006, 12:02
#13
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


посмотрел понравилось, но я думаю что стоит добавит еще 1 команду
или чуть-чуть изменить существующую-

PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество сегментов или через указанное расстояние


что бы можно было делить не только один сегмент но и всу полилинию вместе, с сохранением текущих вершин

А програмка супер

молодцы
ilka_t вне форума  
 
Автор темы   Непрочитано 20.09.2006, 19:22
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Добавлена новая команда
PL-DIVALL -Разбивает все сегменты полилинии на указанное количество сегментов или через указанное расстояние
VVA вне форума  
 
Непрочитано 21.09.2006, 09:38 Re: Новые команды для работы с полилинией
#15
Inner

Инженер-конструктор, магистр СПбГПУ.
 
Регистрация: 27.11.2005
Санкт-Петербург
Сообщений: 78
<phrase 1=


Цитата:
Сообщение от VVA

PL-JOIN -Объединение полилиний чохом
Мы на эту команду теперь дружно молимся двумя проектными отделами двух контор. Спасибо огромное. Высочайший респект.
__________________
Начинаю писать магистерскую диссертацию на тему нелинейных методов совместных расчетов оснований и фундаментов. Буду рад любой помощи со стороны профессионалов.
Inner вне форума  
 
Непрочитано 22.09.2006, 10:28
#16
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,985


Спасибо за замечательный набор программ!
Может быть уважаемым авторам не составит труда добавить программку, которая бы по одиночному клику на полилинии строила бы фаску и скругление смежных сегментов, ближайших к точке выбора.
Nike вне форума  
 
Непрочитано 22.09.2006, 10:37
#17
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Nike.
Аналогичная тема:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=29880Df
Profan вне форума  
 
Непрочитано 22.09.2006, 12:01
#18
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


А как сделать реверс дуговых сегментов?
Как ни крути тип линии в одну сторону направлен.
AutoCAD2007
[ATTACH]1158912159.gif[/ATTACH]
Krieger вне форума  
 
Непрочитано 22.09.2006, 12:03
#19
Кулик Алексей aka kpblc
Moderator

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


Это не сделать, наколько я помню, вообще никак. Только если изготовить новый тип линии и его назначать на полилинию
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.09.2006, 00:44
#20
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Спасибо огромное всем программистам за огромный труд!
2VVA
Цитата:
(полилинии не теряют ассоциативность)
Если вас не затруднит разъясните пожалуйста что здесь имелось ввиду?
Sleekka вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск