|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как получить точки пересечения двух полилиний?
Начинающий проектировщик
Санкт-Петербург
Регистрация: 07.02.2008
Сообщений: 443
|
||
Просмотров: 13183
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
Юта, я проверял на полилиниях, гарантированно пересекающихся. Работало. Короче, образец в студию.
Victor, а такие "хотелки" уже, как говорится, "за отдельную плату"
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.07.2009
Сообщений: 14
|
В файле по точкам, имеющим разную высоту (имитирующим съемку рельефа) построены типа триангуляционные линии (желтым цветом).
Надо проставить точки на пересечениях этих линий и одной из линий белого цвета, по моему выбору. Причем эти точки должны иметь координату Z такую же, как на линиях "triangulate" в местах пересечения. Victor, у блондинок не фейсы, а формы. Это раз. Во-вторых, интерполировать не надо, уже есть программка, спасибо гуру от автокада. И в-третьих, а что, "жаба давит" поделиться кодом, если просят? (прошу принять эти претензии с улыбкой. Типа я совсем не обиделась). Последний раз редактировалось Юта, 15.07.2009 в 10:34. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
Код проверяет истинное, а не "кажущееся" пересечение. У тебя в файле полилинии лежат на разных уровнях - вот и все. При таких условиях надо предварительно "плющить" чертеж (кстати, для какой системы координат?), вычислять точки пересечений, потом вычислять ближайшую проекцию этой точки на нужную (кстати, как ее определить?) полилинию/кривую и добавлять в результат. Долго, муторно, и без гарантий корректности работы. Подобное я как-то делал на cadtutor.net, но искать и модифицировать сейчас нет возможности.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
Прааально. В режиме "кажущегося пересечения".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
То Юта, что-бы сделать то что Вы хотите, надо - написать процедуру нахождения кажущегося пересечения двух линий (аналог inters), но с учетом вектора просмотра, ну или хотя-бы по вектору '(0 0 1) - то есть ограничиться просмотром сверху в мировой системе координат - что вобщем не сложно. После нахождения этой точки ее еще надо спроецировать на линию, пот тем-же вектором просмотра - что тоже в общем не сложно в случае с просмотром сверху '(0 0 1) и плоским рассположением координат линии (z pt1 = z pt2), но с произвольным углом как просмотра, так и линии в пространстве "процедурка" в принципе не очень большая - но на все проверки день убить надо, а так как еще ясно, что после этого еще что-то понадобиться - возиться с этим просто лень. Хотели-же в паралельном посте изучать лисп - вот отличный пример, заодно и пространственное мышление оживите, ну а если, что конкретное не получаеться, либо не понятно как делать - то сюда - подскажем.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
Вам понадобяться (как минимум) разобраться с dxf кодами полилиний и 3d face и понять принцип работы (inters...) и (trans...), да и вобще что такое единичный вектор направления.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Начинающий проектировщик Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
![]() |
Алексей, Дмитрий Спасибо за коды. Дмитрий не получилось воспользоваться кодом. Что я неправильно делаю?
Код:
Последний раз редактировалось Mozgunov, 15.07.2009 в 22:19. |
|||
![]() |
|
||||
Mozgunov,
Код:
Здесь найдешь очень много полезных функций. В том числе и Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 15.07.2009 в 22:32. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
Mozgunov, а запрашиваемые объекты точно пересекаются?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Начинающий проектировщик Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
![]() |
Да. Точно пересекаются.
_______________________ Дима_ Выдаёт (<Имя объекта: 7efab390> <Имя объекта: 7efab410>), но ошибки нет уже. Листинг команд: Код:
Последний раз редактировалось Mozgunov, 15.07.2009 в 23:20. |
|||
![]() |
|
||||
Начинающий проектировщик Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
![]() |
Выполняется функция но ничего не возвращает. Перезапустил autocad попробовал снова. Вот что получилось:
Код:
![]() Цитата:
|
|||
![]() |
|
||||
Начинающий проектировщик Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
![]() |
Проблема в том что я не умею пользоваться функциями
![]() Если вызывать функцию (intersect obj1 obj2) то возвращается три списка (точки пересечения полилиний) Я делал так: Код:
|
|||
![]() |
|
||||
удалено
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,843
|
(intersect) возращает nil если объекты не пересекаються, (что возращает команда (setq rez (Intersect obj1 obj2)), то и лежит в rez. Проверить можно, например (list rez).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Начинающий проектировщик Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
![]() |
Дима_, Всё работает прекрасно!!! Я проверел вызывав функцию через командную строку () . Я про то, что в том виде в котором я записал скрипт последний результат вычисления это не присваивание переменной rez списка, а что-то другое, вообщем мне ещё разбираться и разбираться, даже с вашей вункцией.... А так всё работает! Большое спасибо за грамотный и своевременный ответ!
|
|||
![]() |
|
||||
А если не двух полилиний, а множества полилиний, у которых нужно найти точки пересечения?
В идеале получить либо множество примитивов-точек в точках пересечений, либо вставить блоки в них. Список координат этих точек тоже неплохо. Offtop: Мне мерещится, что нечто подобное я на форуме уже видел, но найти пока не получается. |
||||
![]() |
|
||||
АлексЮстасу, Уточни задачу. Есть набор, состоящий из полилиний. Нужно найти точки пересечения полилиний каждой с каждой? И просто вывести список всех возможных точек? Если несколько полилиний пересекаются в одной точке, то в результирующем списке точка пересечения должна присутствовать только один раз или нет?
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 17.06.2013 в 01:09. |
||||
![]() |
|
||||
Цитата:
|
||||
![]() |
|
||||
3 команды: POLYBLOCK и POLYPOINT и POLYPOINTVX . Об описании блока и режиме отображения точек нужно позаботиться заранее и самостоятельно
Использовал ф-цию all-pt из поста выше. Она рекурсивная. Надеюсь, количество обрабатываемых полилиний будет в разумных для нее (рекурсии) пределах Отличие POLYPOINT от POLYPOINTVX. POLYPOINT - ставит точки во всех пересечениях полилиний POLYPOINTVX - не ставит точки в точках общих вершин выбранных полилиний (см. пост #40) Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 31.08.2023 в 18:17. |
||||
![]() |
|
||||
Цитата:
Цитата:
Пардон за невежество, это лисп? И как указать, что именно этот блок (если их в файле несколько описано разных)? Сейчас POLYBLOCK отвечает: Цитата:
![]() Последний раз редактировалось АлексЮстасу, 17.06.2013 в 02:12. |
||||
![]() |
|
||||
АлексЮстасу,
Добавил в #37 указание в начало кода.
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Инвентаризация з/у Регистрация: 30.03.2006
Брянск
Сообщений: 20
|
|
|||
![]() |
|
||||
Инвентаризация з/у Регистрация: 30.03.2006
Брянск
Сообщений: 20
|
Цитата:
Протестил POLYPOINTVX, работает только если выбранных линий две, если больше, то работает с 3-й и остальными линиями как POLYPOINT, в желтом круге не должно быть точки: |
|||
![]() |
|
||||
Да, удаляются точки общие для всех выбранных полилиний. Пока не могу придумать алгоритм для для общих точек 2х и более полилиний
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Тела пересекаются, как нарисовать контур пересечения | BM60 | AutoCAD | 12 | 08.09.2008 11:09 |
координаты вершин выбранной полилинии на VB? как получить | ssv22 | Программирование | 5 | 17.07.2008 00:01 |
как получить путь к сетевому текстовому файлу | Victorovich | Программирование | 3 | 30.06.2008 15:47 |
Объединение двух 3D полилиний | Рyslan | AutoCAD | 12 | 22.05.2008 13:14 |