|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Autolisp. Поиск пересечения точки с 3дполилинией
Регистрация: 01.07.2010
Сообщений: 521
|
||
Просмотров: 3820
|
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Zaghim, вместо строки
(ssget "_F" (list bp1 (polar bp1 ug dpoi))) напиши так (ssget "_F" (list bp1 (polar bp1 ug dpoi)) (list (cons -4 "<OR") (cons -4 "<AND") (cons 0 "POLYLINE") (cons 70 8) (cons -4 "AND>") (cons -4 "<AND") (cons 0 "LWPOLYLINE") (cons -4 ">") (cons 38 0) (cons -4 "AND>") (cons -4 "OR>")))
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Zaghim, а что возвращает
(setq ss (ssget "_F" (list bp1 (polar bp1 ug dpoi)) (list (cons -4 "<OR") (cons -4 "<AND") (cons 0 "POLYLINE") (cons 70 8) (cons -4 "AND>") (cons -4 "<AND") (cons 0 "LWPOLYLINE") (cons -4 ">") (cons 38 0) (cons -4 "AND>") (cons -4 "OR>")))) (ssnamex ss) видимо (ssget...) возвращает пустой набор, значит нет ни одного примитива удовлетоворяющего фильтру записанному в ssget. Нужно разбираться: (list (cons -4 "<OR") - начало логического или (cons -4 "<AND") - начало логического и (cons 0 "POLYLINE") - выбрать примитивы типа "POLYLINE" (cons 70 8) - тип "POLYLINE" 3d полилиния (cons -4 "AND>") - конец логического и (cons -4 "<AND") - начало логического и (cons 0 "LWPOLYLINE") - выбрать примитивы типа "LWPOLYLINE" (cons -4 ">") (cons 38 0) - выбрать LWPOLYLINE у которго уровень больше 0 (нуля) (cons -4 "AND>") - конец логического и (cons -4 "OR>") - конец логического или )
__________________
cadtools Последний раз редактировалось TararykovDG, 17.11.2010 в 13:21. |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Я немного не в том месте запустил прогу и она ничего не находила. Сейчас запустил между линий с высотой и в одном месте воткнул текст, так вот пересечения находились все, но в том месте, где текст явно не правильно...
Щас попытаюсь еще раз, может не так поняли меня. В общем при первоначальном варианте если внутри двух линий с высотой был текст, она выберет текст, а нужно что бы она мимо текста пролетела и воткнулась в линию с высотой. Т.е. обратясь к этому куску кода 1 раз она должна выбрать тока линии с высотами и пропустить все остальное, еще проще получить координату пересечения только моего отрезка с объектом имеющим высоту. Последний раз редактировалось Zaghim, 17.11.2010 в 13:35. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
В общем-то я так и понял и именно из этих соображений и давал ответ. Так вот, строка кода (ssget "_F" (list bp1 (polar bp1 ug dpoi))) (подсказанная Вам Disney в другой теме) как Вы и сказали формирует набор из всех примитивов чертежа, пересекаемых линией задаваемой точками bp1 и (polar bp1 ug dpoi). Теперь сюда мы добавили фильтр (list (cons -4 "<OR") (cons -4 "<AND") (cons 0 "POLYLINE") (cons 70 8) (cons -4 "AND>") (cons -4 "<AND") (cons 0 "LWPOLYLINE") (cons -4 ">") (cons 38 0) (cons -4 "AND>") (cons -4 "OR>")) и получили строку (ssget "_F" (list bp1 (polar bp1 ug dpoi)) (list (cons -4 "<OR") (cons -4 "<AND") (cons 0 "POLYLINE") (cons 70 8) (cons -4 "AND>") (cons -4 "<AND") (cons 0 "LWPOLYLINE") (cons -4 ">") (cons 38 0) (cons -4 "AND>") (cons -4 "OR>"))). Т. е. формируем набор из всех примитивов чертежа, пересекаемых линией задаваемой точками bp1 и (polar bp1 ug dpoi) и удовлетворяющих фильтру, а именно наш примитив должен быть либо 3d полилинией, либо обычной ("LWPOLYLINE") полилинией лежащей на не нулевом уровне. Таким образом все остальные примитивы (даже пересекаемые заданной линией) не должны попасть в формируемый набор.
Zaghim, выложи файл чертежа, точки bp1 и (polar bp1 ug dpoi) зарисуй красными окружностями
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Воткнул в код простановку точки, что бы можно было увидеть с чем она пересеклась...вроде текст пропускает...хм хм хм... значит косяк мой при обработке или еще где...буду разбираться. СПАСИБО!!!
Сейчас натыкал кучу текста между линий и прога начала косячить...ничего не понимаю((( Хрень получается...выкладываю 2 картинки. На первой я откладываю линию, иду по ней с шагом 1 и в каждой точке нахожу пересечения с высотными линиями и смотрю их высоту... потом эту высоту строю в виде графика в 2д виде...смотрите что получается если текст стоит...если его нет идет прямая а тут постоянные обрывы(((( Последний раз редактировалось Zaghim, 17.11.2010 в 15:21. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Удачи! Да, вот еще я написал так (cons -4 ">") (cons 38 0) - это значит выбрать только те объекты уровень, которых больше нуля, а надо наверное все которые не равны нулю, тогда замени на это (cons -4 "<>") (cons 38 0)
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Только в этом случае или вообще везде? Можно полный код, потому что как раз в этом и проблема.
В общем дело не в этом))) Такая же фигня рисуется как на картинке выше...блин((( Поправка... если это будет такая же лвполилиния или 3дполилиния с 0 высотой или просто линия, она ее пропускает!!!!!!!! А вот с текстом какой-то косяк((((((( Последний раз редактировалось Zaghim, 17.11.2010 в 15:52. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Да выложи dwg файл или что, там секретные материалы?
__________________
cadtools |
|||
![]() |
|
||||
Zaghim, так тебе что нужно, найти одну ближайшую? или сразу все с не лежащими в нуле полилиниями, а по ним профиль построить?
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Завтра вышлю чертеж. Мне нужно найти самую первую лв или 3д полилинию, пропуская весь хлам (текст, обычные линии и тд) и получить координату пересечения...по этой координате я выбираю эту линию и получаю ее свойства, а именно высоту. Ну а дальше да, строю профиль. В общем у меня щас все работает, но пришел чертеж, где в слое с высотными линиями так же находится всякий хлам...выбирать и морозить его можно, но считаю это неэффективным.
Профан, ну неправильно выразился... Последний раз редактировалось Zaghim, 17.11.2010 в 20:35. |
|||
![]() |
|
||||
Ладна... зайдём с другой стороны, какие конкретно данные тебе нужны для построения профиля?
Их можно сразу извлечь(вычеслить) ещё при нахождении ближайшей(или сразу всех пересекаемых полилиний не в 0), а не потом повторно выбирая полилинию в ранее найденной точки.
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 01.07.2010
Сообщений: 521
|
Я делаю так
Код:
Соответственно точки mp1a mp1b - это небольшие отступы в стороны от точки пересечения с высотной линией, что бы выбрать потом эту же линию... гимморно делаю, знаю...просто на более продвинутый код мозгов не хватает, приходится извращаться... Последний раз редактировалось Zaghim, 18.11.2010 в 09:27. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,425
|
Почему-то начинаю подозревать, что код из http://www.cadtutor.net/forum/showth...ll=1#post56521 поможет.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Стыдно инженеру не знать англицкий.
Почитай ту тему на русском с первой страницы, правда там не совсем корректный перевод, но всё же лучше чем никак. Ну и пока Алексей спит, выложу его код, тебе же явно не терпится ![]()
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Координаты точки пересечения сплайна и прямой | 4_maxim_4 | Программирование | 1 | 22.09.2010 06:27 |
Поиск нормативного документа, указывающего угол пересечения автомобильной дороги и водопропускной трубы | *AllA* | Поиск литературы, чертежей, моделей и прочих материалов | 65 | 28.06.2010 13:46 |
Точки пересечения примитивов | Ева | Программирование | 3 | 11.03.2009 17:12 |
Нахождение точки пересечения на 3D сети | Electa | AutoCAD | 15 | 16.12.2008 18:36 |
Координаты точки пересечения line и pline (LISP) | paradoxvaha | LISP | 3 | 10.07.2007 13:04 |