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

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

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

Ответ
Поиск в этой теме
Непрочитано 14.09.2006, 13:30 4 |
Новые команды для работы с полилинией
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
Просмотров: 15347
Размер:	30.3 Кб
ID:	21079  


Последний раз редактировалось VVA, 08.09.2023 в 13:25. Причина: ссылка на иконки для темной темы
Просмотров: 367959
 
Непрочитано 17.11.2013, 21:18
#421
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
maratovich, Проверить пока не могу, а из редактора блока команда не запускается?
В том и задача - не открывая блок.
Динамический блок, одна полилиния, 3 вершины, надо добавить 4-ю без редактора блока.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 18.11.2013, 07:30
#422
wepp

Инжиниринг
 
Регистрация: 16.09.2011
Тюмень
Сообщений: 224


maratovich, а контекстное редактирование блока тоже не работает?
P.S. Новые версии Автокада с нуля дружат с этой командой.
wepp вне форума  
 
Непрочитано 06.06.2014, 11:42
#423
progettista


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


Перестала работать команда "Добавить вершину в полилинию", пишет в командной строке -

Command: PL-VxAdd

Укажите точку разрыва [отмени U/выход X] <выход> :
Укажите новую точку <прежняя>: ; error: Exception occurred: 0xC0000005 (Access
Violation)
; warning: unwind skipped on unknown exception

еще изменяет перекрестие курсора

AutoCAD 2008, Windows 7 x64
Миниатюры
Нажмите на изображение для увеличения
Название: pltools.png
Просмотров: 82
Размер:	134.9 Кб
ID:	129922  
progettista вне форума  
 
Автор темы   Непрочитано 06.06.2014, 14:14
#424
VVA

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


progettista, Файл приложи с полилинией на которой не работает.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.06.2014, 15:31
#425
progettista


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


вот файл.

При закрытие AutoCAD еще выходит вот такое окно
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 100
Размер:	25.8 Кб
ID:	129947  
Вложения
Тип файла: dwg
DWG 2007
12345.dwg (51.8 Кб, 3859 просмотров)

Последний раз редактировалось progettista, 06.06.2014 в 15:36.
progettista вне форума  
 
Автор темы   Непрочитано 17.06.2014, 17:13
2 | #426
VVA

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


>ALL Выяснилась следующая картина. По роковой случайности в архиве оказалась одна из первых версий pltools с множеством багов. В свое время мы с KAI (царство ему небесное) основательно ее оттестировали. Я обновил архив по ссылке в #1. Правда пока что там висит картинка "Позиция недоступна". Думаю что это связано с предварительной модерацией. В download давненько ничего не заливал.
Новые команды
Цитата:
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
Вершина в файл из #425 добавляется (тестировал на Acad 2009 x64, Windows 7 x64)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.06.2014 в 09:32. Причина: орфография
VVA вне форума  
 
Непрочитано 18.06.2014, 18:51
#427
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


VVA, бегло протестировал новинки, обнаружил, что в команде PL-P90 не восстанавливается полярное отслеживание. В догонку предложение: может, адаптировать эту команду под любой угол? По умолчанию 90, но с возможностью настройки.
И еще неясно, что значит в команде PL-CW реверс по часовой стрелке? Если полилиния не замкнута, результаты мне непонятны.

----- добавлено через ~3 ч. -----
Еще небольшая ошибка в команде PL-CW:
Команда: PL-CW
<Режим ПО ЧАСОВОЙ стрелке> Выберите полилиниинайдено: 3
Обработано 3 полилиний. Из них:
2 против часовой (реверсировано)
1 по часовой

Пришла еще мысль: собрать мнения форумчан, какие бы еще инструменты они хотели бы иметь для работы с полилинией? Другими словами продолжить коллективное наполнение этого замечательного набора программ.
Что сразу приходит на ум из того, в чем когда-то возникала потребность у меня (и не только):
1. Сопряжение всех сегментов всех выбранных полилиний с указанным радиусом. Знаю, что это из штатных возможностей AutoCAD'a, но очень уж неудобно каждый раз вводить (да даже выбирать из динамического выпадающего списка) опции и выбирать всего одну полилинию. Нацарапал для себя под это дело весьма примитивный лиспик. Мне он очень много времени сэкономил.
Код:
[Выделить все]
 (defun C:EX-FILLET ( / radius ss i en)
	(setq i 0
		  radius (getdist  (strcat "\nРадиус сопряжения: <" (vl-princ-to-string (getvar "FILLETRAD")) ">"))
		  ss (ssget "_I" '((0 . "*POLYLINE")))
	)
	(if (null ss) (setq ss (ssget '((0 . "*POLYLINE")))))
	(if (null radius) (setq radius (getvar "FILLETRAD")))
	(setvar "FILLETRAD" radius)
	(repeat (sslength ss)
		(setq en (ssname ss i))
		(command "_.fillet" "_p" en)
		(setq i (1+ i))
	)
)

2. Сопряжение с указанным радиусом двух сегментов по указанию вершины. Есть тут кое-какие наработки, но код сильно сырой - есть некоторые проблемы с реализацией. Если возникнет потребность - допилю.
3. Несколько других вариантов сопряжения из темы LISP. Расширение возможностей команды FILLET (если уважаемый GRIFEL не будет против), в том числе сопряжение по указанию требуемой длины дуги из #6 в той теме (я не против).
4. Объединение выбранной полилинии (или отрезка) со всеми полилиниями (или отрезками), составляющими непрерывную цепочку (см. Chain Selection от Lee Mac. Знаю, что в общем случае в одной точке может оказаться более двух крайних вершин разных линий, и результат будет непредсказуемым, но в частном случае (думаю, трубопроводчики меня поймут) это очень удобно. Добавлено: уже есть, проглядел.
5. Построение перпендикуляра к полилинии из указанной на ней точки. Варианты решения предложены, например, здесь.
6............
Прошу форумчан высказаться по поводу полезности вышеописанных программ и потребности во внедрении их в PL-TOOLS, а также предложить к обсуждению свои идеи новых команд по работе с полилиниями.
В свою очередь я готов оказать посильную помощь.

Последний раз редактировалось skkkk, 28.01.2015 в 15:15.
skkkk вне форума  
 
Непрочитано 19.06.2014, 09:03
#428
Елена_врн

инженер
 
Регистрация: 30.07.2012
Воронеж
Сообщений: 14


Если кому надо, у меня есть функции определения длины полилинии м/у началом и выбранной точкой, м/у двумя точками, м/у перпендикуляром к полилинии, проведенным в некоторую точку, и началом полилинии, аналогично м/у перпендикуляром и другой точкой на полилинии. Правда они на vba
Елена_врн вне форума  
 
Непрочитано 19.06.2014, 09:08
#429
Кулик Алексей aka kpblc
Moderator

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


Елена_врн, если заняться несложным поиском, то аналогов на лиспе будет немеряно. Это если забыть про GeomProps от А.Ривилиса.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.06.2014, 11:04
#430
VVA

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


skkkk, Привет Сергей. Начнем по порядку:
- по поводу ошибок, описок - проверю

Цитата:
Сообщение от skkkk Посмотреть сообщение
В догонку предложение: может, адаптировать эту команду под любой угол? По умолчанию 90
Мне пока не понятен алгоритм. Команда PL-P90 - позволяет обводить полилинию с сегментами под углом 90 (читай - контуры зданий на планшетах), и автоматически достаивает замыкающий сегмент. Т.е чтобы обвести прямоугольник достаточно указать 3 вершины.
Цитата:
Сообщение от skkkk Посмотреть сообщение
собрать мнения форумчан, какие бы еще инструменты они хотели бы иметь для работы с полилинией?
В общем-то эта тема для этого и создана
Цитата:
Сообщение от skkkk Посмотреть сообщение
Сопряжение всех сегментов всех выбранных полилиний с указанным радиусом.
Спасибо за предложения - посмотрю твои варианты
Цитата:
Сообщение от skkkk Посмотреть сообщение
4. Объединение выбранной полилинии (или отрезка) со всеми полилиниями (или отрезками), составляющими непрерывную цепочку (см. Chain Selection от Lee Mac
Про Lee-Mac - посмотрю, может алгоритм лучше. Но в pltools давно уже есть
Цитата:
PL-CSE -Объединение 2d полилиний по примитиву
Еще хочу добавить, если у кого-то есть более красивые или информативные иконки, или кто-то интегрировал pltools в ленту -так же выкладывайте.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.06.2014, 19:50
#431
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Привет, Володь
Цитата:
Сообщение от VVA Посмотреть сообщение
Но в pltools давно уже есть
Слушай, прошу прощения - проглядел. Пользуюсь Pl-tools уже лет пять и не замечал как-то этой команды... каюсь.
Цитата:
Сообщение от VVA Посмотреть сообщение
Про Lee-Mac - посмотрю, может алгоритм лучше.
Вряд ли, думаю, не стоит. Работает чётко. Еще раз каюсь.
Цитата:
Сообщение от VVA Посмотреть сообщение
Цитата:
Сообщение от skkkk
...адаптировать эту команду под любой угол...
Мне пока не понятен алгоритм.
Этот вопрос, полагаю, можно снять с обсуждения, поскольку при отрисовке полилинии можно на запрос следующей точки вбить в комстроку "<30" и и следующий сегмент отрисуется под углом в 30 градусов. Забываю матчасть, старею.
Цитата:
Сообщение от VVA Посмотреть сообщение
В общем-то эта тема для этого и создана
Это-то понятно, просто пытаюсь оживить интерес.
Еще вспомнил об одном инструменте, который мне удобен - посегментное подобие. На нашем форуме в свое время не нашел, но нашел на англоязычном, например, здесь.

Код:
[Выделить все]
 ;; OFSEGS -Gilles Chanteau- 2008/03/26
 
;; Offsets the selected segments of lwpolyline
 
;; Joined segments are offseted in a single lwpolyline
 
;; Keeps arcs and widthes
 
;; Works whatever the current UCS and the pline OCS and elevation
 
(defun c:ofsegs (/ ofdist ent pline normal elevat params
 
points side closest par bulge p1
 
p2 arc_data
 
)
 
(vl-load-com)
 
(or *acdoc*
 
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 
)
 
(initget 6 "Through")
 
(if (setq
 
ofdist (getdist
 
(strcat "\nSpecify offset distance or [Through] <"
 
(if (< (getvar "OFFSETDIST") 0)
 
"Through"
 
(rtos (getvar "OFFSETDIST"))
 
)
 
">: "
 
)
 
)
 
)
 
(if (= ofdist "Through")
 
(setvar "OFFSETDIST" -1)
 
(setvar "OFFSETDIST" ofdist)
 
)
 
(setq ofdist (getvar "OFFSETDIST"))
 
)
 
(if (and (setq ent (entsel "\nSelect a segment to offset: "))
 
(setq pline (vlax-ename->vla-object (car ent)))
 
(= (vla-get-ObjectName pline) "AcDbPolyline")
 
(setq normal (vlax-get pline 'Normal))
 
(setq elevat (vla-get-Elevation pline))
 
)
 
(progn
 
(setq params (cons (fix (vlax-curve-getParamAtPoint
 
pline
 
(trans (osnap (cadr ent) "_nea") 1 0)
 
)
 
)
 
params
 
)
 
)
 
(HighlightSegment pline (car params))
 
(while
 
(setq ent (entsel "\nSelect next segment or <exit>: "))
 
(if (equal (vlax-ename->vla-object (car ent)) pline)
 
(progn
 
(setq par (fix (vlax-curve-getParamAtPoint
 
pline
 
(trans (osnap (cadr ent) "_nea") 1 0)
 
)
 
)
 
params (if (member par params)
 
(vl-remove par params)
 
(cons par params)
 
)
 
)
 
(redraw)
 
(foreach p params (HighlightSegment pline p))
 
)
 
)
 
)
 
(if (setq side (getpoint
 
(if (minusp (getvar "OFFSETDIST"))
 
"\nSpecify through point: "
 
"\nSpecify point on side to offset: "
 
)
 
)
 
)
 
(progn
 
(redraw)
 
(vla-StartUndoMark *acdoc*)
 
(setq side (ilp
 
(trans side 1 0)
 
((lambda (p)
 
(trans (list (car p) (cadr p) (1+ (caddr p))) 2 0)
 
)
 
(trans side 1 2)
 
)
 
(trans (list 0 0 elevat) normal 0)
 
normal
 
)
 
closest (vlax-curve-getClosestPointTo pline side T)
 
par (vlax-curve-getParamAtPoint pline closest)
 
)
 
(if (minusp (getvar "OFFSETDIST"))
 
(setq ofdist (distance side closest))
 
)
 
(cond
 
((equal closest (vlax-curve-getStartPoint pline) 1e-9)
 
(setq side (trans side 0 normal))
 
)
 
((equal closest (vlax-curve-getEndPoint pline) 1e-9)
 
(setq par (- par 1)
 
side (trans side 0 normal)
 
)
 
)
 
((= (fix par) par)
 
(setq side
 
(polar
 
(trans closest 0 normal)
 
((if
 
(clockwise-p
 
(trans
 
(vlax-curve-getPointAtParam pline (- par 0.1))
 
0
 
normal
 
)
 
(trans closest 0 normal)
 
(trans
 
(vlax-curve-getPointAtParam pline (+ par 0.1))
 
0
 
normal
 
)
 
)
 
+
 
-
 
)
 
(angle '(0 0 0)
 
(trans (vlax-curve-getFirstDeriv pline par)
 
0
 
normal
 
T
 
)
 
)
 
(/ pi 2)
 
)
 
ofdist
 
)
 
)
 
)
 
(T
 
(setq par (fix par)
 
side (trans side 0 normal)
 
)
 
)
 
)
 
(setq bulge (vla-getBulge pline (fix par))
 
p1 (trans (vlax-curve-getPointAtParam pline (fix par))
 
0
 
normal
 
)
 
p2 (trans (vlax-curve-getPointAtParam pline (1+ (fix par)))
 
0
 
normal
 
)
 
)
 
(if (zerop bulge)
 
(if (clockwise-p side p2 p1)
 
(setq ofdist (- ofdist))
 
)
 
(progn
 
(setq arc_data (PolyArc-data bulge p1 p2))
 
(if (minusp bulge)
 
(if (< (cadr arc_data)
 
(distance (car arc_data) side)
 
)
 
(setq ofdist (- ofdist))
 
)
 
(if (< (distance (car arc_data) side)
 
(cadr arc_data)
 
)
 
(setq ofdist (- ofdist))
 
)
 
)
 
)
 
)
 
(mapcar
 
(function
 
(lambda (p)
 
(vl-catch-all-apply 'vla-Offset (list p ofdist))
 
(vla-delete p)
 
)
 
)
 
(Copysegments pline params)
 
)
 
(vla-EndUndoMark *acdoc*)
 
)
 
)
 
)
 
(princ "\nUnvalid entity.")
 
)
 
(princ)
 
)
 
;; CopySegments
 
;; Duplicates polyline segments at the same location
 
;; Consecutive selected segments are joined
 
;;
 
;; Arguments
 
;; pline : the source polyline (vla-object)
 
;; params ; the index list of segment to be copied
 
;;
 
;; Return
 
;; the list of created polylines
 
(defun CopySegments (pline params / nor space tmp copy ret)
 
(vl-load-com)
 
(or *acdoc*
 
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 
)
 
(setq params (vl-sort params '<)
 
nor (vlax-get pline 'Normal)
 
space (vla-ObjectIDToObject *acdoc* (vla-get-OwnerID pline))
 
)
 
(while params
 
(setq tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
(if (and (zerop (car tmp))
 
(= (- (vlax-curve-getEndParam pline) 1) (last params))
 
(equal (vlax-curve-getStartPoint pline)
 
(vlax-curve-getEndPoint pline)
 
1e-9
 
)
 
)
 
(progn
 
(setq params (reverse params)
 
tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
(while (= (car params) (1- (car tmp)))
 
(setq tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
)
 
(setq tmp (reverse tmp)
 
params (reverse params)
 
)
 
)
 
)
 
(while (= (car params) (1+ (car tmp)))
 
(setq tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
)
 
(setq tmp (reverse (cons (1+ (car tmp)) tmp)))
 
(setq
 
pts
 
(vl-remove nil
 
(mapcar
 
(function
 
(lambda (pa / pt)
 
(if (setq pt (vlax-curve-getPointAtParam pline pa))
 
((lambda (p)
 
(list (car p) (cadr p))
 
)
 
(trans pt 0 nor)
 
)
 
)
 
)
 
)
 
tmp
 
)
 
)
 
)
 
(setq copy
 
(vlax-invoke
 
space
 
'addLightWeightPolyline
 
(apply 'append pts)
 
)
 
)
 
(foreach p (cdr (reverse tmp))
 
(vla-setBulge
 
copy
 
(vl-position p tmp)
 
(vla-getBulge pline p)
 
)
 
(vla-getWidth pline p 'swid 'ewid)
 
(vla-setWidth copy (vl-position p tmp) swid ewid)
 
)
 
(foreach prop '(Elevation Layer Linetype
 
LinetypeGeneration LinetypeScale
 
Lineweight Normal Thickness
 
TrueColor
 
)
 
(if (vlax-property-available-p pline prop)
 
(vlax-put copy prop (vlax-get pline prop))
 
)
 
)
 
(setq tmp nil
 
ret (cons copy ret)
 
)
 
)
 
)
 
;;======================================================;;
 
;; HighlightSegment
 
;; Highlight a polyline segment
 
;;
 
;; Arguments
 
;; pl : the polyline (vla-object)
 
;; par : the segment index
 
(defun HighlightSegment (pl par / p1 p2 n lst)
 
(and
 
(setq p1 (vlax-curve-getPointAtParam pl par))
 
(setq p1 (trans p1 0 1))
 
(setq p2 (vlax-curve-getPointAtParam pl (+ par 1)))
 
(setq p2 (trans p2 0 1))
 
(if (zerop (vla-getBulge pl par))
 
(grvecs (list -255 p1 p2))
 
(progn
 
(setq n 0)
 
(repeat 100
 
(setq lst (cons (trans (vlax-curve-getPointAtParam pl (+ n par)) 0 1)
 
lst
 
)
 
n (+ n 0.01)
 
)
 
)
 
(grvecs
 
(cons -255 (apply 'append (mapcar 'list lst (cdr lst))))
 
)
 
)
 
)
 
)
 
)
 
;;=====================================================;;
 
;;; Clockwise-p
 
;;; Returns T if p1 p2 and p3 are clockwise
 
(defun clockwise-p (p1 p2 p3)
 
(< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)
 
)
 
;;========================================================;;
 
;;; Polyarc-data
 
;;; Returns a list of the center, radius and angle of a 'polyarc'.
 
(defun polyarc-data (bu p1 p2 / ang rad cen area cg)
 
(setq ang (* 2 (atan bu))
 
rad (/ (distance p1 p2)
 
(* 2 (sin ang))
 
)
 
cen (polar p1
 
(+ (angle p1 p2) (- (/ pi 2) ang))
 
rad
 
)
 
)
 
(list cen (abs rad) ang)
 
)
 
;;====================================================;;
 
;;; VXV Returns the dot product of two vectors
 
(defun vxv (v1 v2)
 
(apply '+ (mapcar '* v1 v2))
 
)
 
;;===================================================;;
 
;;; ILP
 
;;; Returns the intersection point between a line (extended) and a plane
 
;;;
 
;;; Arguments
 
;;; p1 and p2 : two points defining the line
 
;;; org : a point on the plane
 
;;; nor : the plane normal
 
(defun ilp (p1 p2 org nor / scl)
 
(setq scl (/ (vxv nor (mapcar '- p1 org))
 
(vxv nor (mapcar '- p2 p1))
 
)
 
)
 
(mapcar (function (lambda (x1 x2) (+ (* scl (- x1 x2)) x1)))
 
p1
 
p2
 
)
 
)
skkkk вне форума  
 
Автор темы   Непрочитано 20.06.2014, 20:46
#432
VVA

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


Я в предыдущем посте забыл ответить
Цитата:
Сообщение от skkkk Посмотреть сообщение
И еще неясно, что значит в команде PL-CW реверс по часовой стрелке? Если полилиния не замкнута, результаты мне непонятны.
Изменяется направление обхода вершин. Команда "выросла" отсюда LISP, VBA. Изменение направления обхода точек в полилинии
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.07.2014, 14:15
#433
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Спасибо за полезный набор команд!

Один вопрос... Можно ли разбивать при помощи PLTools полилинию через заданное расстояние, при этом рассматривая всю полилинию без учета сегментов?
Объясню. Есть полилиния, и при выполнении команды PL-DIVAll разбиение выполняется посегментно.

В приложенном изображении привожу наглядно - при помощи MEASURE я расставил блоки - красные крестики по всей полилинии через 500мм, а PL-DIVAll через 500мм разбил посегментно - каждый, начиная с начала.
В итоге, понятное дело, точки не совпадают. Можно ли добиться совпадения?
Изображения
Тип файла: jpg pl.jpg (29.2 Кб, 347 просмотров)
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 16.07.2014, 19:52
#434
VVA

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


Нет такой команды нет. Как вариант - создаешь блок с одним вертикальным отрезком с точкой вставки посередине отрезка. Командой MEASURE расставляешь блоки, расчленяешь их, и командой PL-VFI вставляешь в пересечения вершины
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.07.2014, 20:13
#435
Linkor

что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119


Раз такой команды нет, выкладываю свою версию программы по вставке блоков на полилинии.выкладывалось на сайте залил, дабы не портить тему собственным творчеством http://zalil.su/426261

-vbarun d:/vba/DividePolyLine.dvb!GoDivide - строка вызова (путь соответственно свой укажите, куда файл сохраните), я кнопку делаю, и в строке для макроса эту строчку пишу
Писалось для акада 2009, если в более продвинутых версиях вылетает ошибка , сообщения типа не найдена библиотек, Тогда в редакторе VBA заходим в Tools - References и убираем голочки с библиотек MISSING

Замечания:
- масштаб схемы: если чертеж в миллиметрах и набирать схему надо типа 20*3000+50*4000, то в схеме указываем 20*3+50*4, в масштабе схемы пишем 1000. Значаение 0 ставить нельзя
- при двойно щелчке по полю имя блока, откроется список блоков чертежа
- галочка "отно-но линии" разворачивает блоки перпендикулярно касательной к полилинии в данной точке
- галочка "проекция Х" не работает для полилиний с дугами
- отступ от начала (не помню связан ли с масштабом схемы)


**
Linkor вне форума  
 
Непрочитано 17.07.2014, 11:18
#436
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от VVA Посмотреть сообщение
Нет такой команды нет. Как вариант - создаешь блок с одним вертикальным отрезком с точкой вставки посередине отрезка. Командой MEASURE расставляешь блоки, расчленяешь их, и командой PL-VFI вставляешь в пересечения вершины
Спасибо, я уже об этом думал, но команды PL-VFI в коде нет.

Цитата:
Сообщение от Linkor Посмотреть сообщение
Раз такой команды нет, выкладываю свою версию программы по вставке блоков на полилинии
Спасибо, однако у меня она слетает при выполнении и она достаточно громоздкая. Хотелось бы упростить ее максимально, дабы ограничиться введением одного-двух параметров и все. А тут все поля заполнить надо... И так каждый раз...
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 17.07.2014, 11:56
#437
VVA

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


Цитата:
Сообщение от Xara Посмотреть сообщение
Спасибо, я уже об этом думал, но команды PL-VFI в коде нет.
Скачай заново. У тебя какая редакция?
Цитата:
Сообщение от VVA Посмотреть сообщение
=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.07.2014, 12:53
#438
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от VVA Посмотреть сообщение
Скачай заново. У тебя какая редакция?
Скачал, каюсь, запускал старую редакцию.

Однако, прошу прощения за мое занудство, у меня не получается выполнить задуманное.

Код:
[Выделить все]
Command:  PL-VFI

Укажите допуск <0.001 >:
Укажите режущие кромки (POLYLINE LINE ARC CIRCLE)
Select objects: Specify opposite corner: 12 found, 12 total
*Выбраны секущие линии, тип - LINE, 12 штук*
Код:
[Выделить все]
Select objects:
Режим продолжения кромки [С продолжением/Без продолжения] <Без продолжения>:
Выберите полилинии для вставки вершин
Select objects: 1 found
*Выбрана полилиния, которую надо разбить*
Код:
[Выделить все]
Select objects:
 Добавлено 0 вершин в 1 полилиний
?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 17.07.2014, 14:09
#439
VVA

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


Чертеж приложи.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.07.2014, 14:18
#440
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от VVA Посмотреть сообщение
Чертеж приложи.
А чертеж-то причем?
Приложил.
Вложения
Тип файла: dwg
DWG 2010
Drawing.dwg (63.2 Кб, 3030 просмотров)
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

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

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