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

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

LISP. Как найти точку пересечения полилинии и сплайна или другой полилинии?

Ответ
Поиск в этой теме
Непрочитано 07.09.2011, 08:03 #1
LISP. Как найти точку пересечения полилинии и сплайна или другой полилинии?
LastGraff
 
Томск
Регистрация: 13.07.2011
Сообщений: 81

В продолжение этой темы. Как найти точку пересечения полилинии и сплайна или другой полилинии, или узнать, что такого пересечения нет? Можно ли это сделать с большим количеством сплайнов не используя полный перебор?
Заранее благодарен
Просмотров: 6885
 
Непрочитано 07.09.2011, 08:23
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Не раз поднимался вопрос. Поищи по форуму по "vla-intersectwith".
Do$ вне форума  
 
Непрочитано 07.09.2011, 09:42
#3
VVA

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


VxGetInters - Returns all intersection points between two objects
пересечение сплайна с прямыми
Как получить точки пересечения двух полилиний?
http://forum.dwg.ru/showthread.php?t=38580
Цитата:
Можно ли это сделать с большим количеством сплайнов не используя полный перебор?
Нет
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.09.2011, 11:32
#4
Елпанов Евгений

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


Цитата:
Сообщение от LastGraff Посмотреть сообщение
Можно ли это сделать с большим количеством сплайнов не используя полный перебор?
Если под полным перебором подразумевается проверка пересечения, то действительно нельзя, как и сказал Владимир!
Но достаточно добавить простейшую программу, реализующую быстрый алгоритм проверки возможных пересечений.
Например, проверка пересечения габаритных контейнеров или проверка совпадающих точек. Алгоритм необходимо выбирать изучая типичные чертежи. Такие простые проверки, позволят увеличить скорость на порядки.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 07.09.2011, 12:32
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Я здесь кому-то писал программку для проверки наложений объектов (топологий). Если делать каждый к каждому - может получиться архи долго - я брал габаритный контейнер, делал ssget по его границам (все что пересекает и внутри него) - таким образом существенно уменьшая выборку.
p.s. кстати вот она.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 07.09.2011 в 12:37.
Дима_ вне форума  
 
Непрочитано 07.09.2011, 12:39
#6
Елпанов Евгений

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


ssget, тоже очень долго! в разы быстрее, сравнивать X Y как цифры
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 07.09.2011, 13:00
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


То Евгений - Offtop: не спора ради, а для истинны - Вы уверенны (проверяли?). Просто мне кажеться что getboundingbox - на самом деле не вычисляется каждый раз при вызове, а однократно при создании/изменении (ну а самое правильное - отложенным вычислением) - по крайней мере я б сделал именно так. К чему я это - я практически уверен что ssget проверяя ключи в первую очередь проверяет именно через getboundingbox. А т.к. в лиспе мы будем создавать список координат и прогонять каждый примитив через него - (а списки НИКАК не индексируются - только car и cdr), то я вполне допускаю что скомпилированная ssget в данном конкретном случае обгонит autolisp - т.к. сам по себе лисп достаточно медленный. Будет врямя я это проверю - но если Вы проверяли (или есть желание проверить) - отпишитесь пожалуйста.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 07.09.2011, 14:09
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
К чему я это - я практически уверен что ssget проверяя ключи в первую очередь проверяет именно через getboundingbox.
В каком из вариантов? (ssget "_X" ...) и (ssget "_C" ...) работают совершенно по-разному, причем вторая точно не использует getboundingbox - она работает с "виртуальным экраном", на который уже "проецированы" примитивы.

Цитата:
Сообщение от Дима_ Посмотреть сообщение
Просто мне кажеться что getboundingbox - на самом деле не вычисляется каждый раз при вызове, а однократно при создании/изменении
Очень сильно сомневаюсь.
Александр Ривилис вне форума  
 
Непрочитано 07.09.2011, 14:35
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Сообщение от Дима_
Просто мне кажеться что getboundingbox - на самом деле не вычисляется каждый раз при вызове, а однократно при создании/изменении
Очень сильно сомневаюсь.
Здесь на форуме кто-то выкладывал "битый" файл у которого не возращалось vla-get-area у некоторых примитивов (по моему у штриховок) - в остальном они были весьма рабочие, проблема решилась небольшим "дерганием" габаритов туда-обратно - то есть как минимум свойство площади вычисляеться при создании\редактировании, причем (я тогда специально проверял) если скопировать "нетронутые" примитивы - они тоже были "битыми" - то есть скорее всего метод (а мы с Вами знаем, что все свойства это по сути методы) get_Area() "запускает" отложенное вычисление (однократно) - что по сути правильно (с точки зрения производительности как минимум) - по этой аналогии лично я бы написал и getboundingbox т.к. подозреваю, что он самой системой нередко используется так сказать для служебных целей. Хотя, если быть до конца честным, то я никак не понимаю какого черта getboundingbox реализовали не простым возратом значений pt1 pt2 а через ж...у - то есть установкой переменных переданных по ссылке (но подозреваю, что объективная причина тому все-же есть) - по этому и не могу быть уверенным на все 100%.
p.s. Вот та штриховка http://forum.dwg.ru/showpost.php?p=781485&postcount=3
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 07.09.2011, 16:58
#10
Елпанов Евгений

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


да, я проверял различные варианты - ssget в любых проявлениях очень тормозит программу. Особенно, если используется рамка выбора.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 07.09.2011, 17:07
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ок. Вам верю на слово.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 09.09.2011, 13:23
#12
LastGraff


 
Регистрация: 13.07.2011
Томск
Сообщений: 81


Всем большое спасибо, может кто еще подскажет как вместо сплайна использовать его проекцию на XOY? при учете, что сплайн на заблокированном слое? Пытался искать пересечение с плоскостью, сделанной из первой полилинии - автокад выдал, что данная операция в процессе разработки...
Задача сформировалась из поиска пересечения плоскости и сплайнов, со сплайнами, у которых высота фиксированная вопросов не возникает, а вот с теми, у которых все точки на разных высотах выдается отсутствие пересечений, что логично. просто для проверки я исходную линию поднимаю на нужную высоту... Вот думаю найти пересечение с проекцией и из полученной точки построить вертикаль, и по ее пересечению со сплайном найти искомую точку. (хотя это и велосипед, но иного выхода пока не вижу), проблема еще и в том, чтобы не перемещать исходные сплайны или вернуть их потом на место...

Последний раз редактировалось LastGraff, 09.09.2011 в 14:35.
LastGraff вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как найти точку пересечения полилинии и сплайна или другой полилинии?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Разорвать объекты в точках пересечения. BreakObjects. VVA Готовые программы 110 25.02.2022 07:33
lisp: Длина по полилинии до точки vosh LISP 19 15.07.2013 15:10