| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
03.08.2015, 16:07 | #1 | |
Поиск блоков пересекающих полилинию
Регистрация: 26.12.2013
Сообщений: 284
|
||
Просмотров: 20935
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Ну и в чем собственно вопрос? Получить точку вставки дин.блока, найти ближайшую к нему на полилинии, сверить расстояние с 0 (возможно, с некоторой точностью).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992
|
Опять шлейф с пожарными датчиками?
----- добавлено через ~2 мин. ----- http://forum.dwg.ru/showthread.php?t=82243 |
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Цитата:
Вспомним задачу про короткий "путь между станциями метро", где станции это блоки, "метро"(если так можно выразиться- рельсы) - это полилинии. Функцию по нахождению пути по максимально трем полилиниям написал. Одна полилиния может пересекать несколько блоков (переход высоты с отметки на отметку- например арка через догору). Нужно найти только те блоки которые попадают в определенный отрезок (в большинстве случаев это не вершины линии). Почти - кабельный журнал под несколько разделов сразу см.выше ответ. ----- добавлено через 45 сек. ----- Блоки с переходом высоты тут не размещал еще |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
tujn08, ну йопырысыты! Ты просил алгоритм (поскольку ни кода не предоставил с указанием места "на котором споткнулся", ни языка не обозначил) - я тебе его дал. Этого что, мало?
----- добавлено через 53 сек. ----- Вспоминать не собираюсь. У тебя была поставлена конкретная задача: Остальное - лишнее.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Не понял предложение. Что лишнее?
Цитата:
2) блок должен находиться между двумя точками (найденными заранее), но при этом быть на линии (п.1)- как это реализовать? PS блок могут пересекать сразу несколько линий (на "перекрестке"). Не суть Влияет- просто для информации ----- добавлено через ~13 мин. ----- Щас припоминаю, что есть функция поиска к ближайшей точке (вершине), но надо будет создавать дополнительные вершины на линии- так? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,850
|
Поехали с самого начала... На каком языке пишешь? Под AutoCAD или клон-кад?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
Цитата:
запомнить как есть, обрезать полилинии в этих точках, на полученной полилинии найти блоки, вернуть все как было... |
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Добрался до работы - из файл думаю будет понятно.
log- промежуточная информация для понимания и отладки cable_magazine - длина между блоков. На пути от блока до блока могут быть другие блоки, от которых и надо получить дополнительное расстояние. Просто уравнение прямой не подойдет т.к. трасса может быть проложена "змейкой". |
|||
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
|
Цитата:
Точка вставки блока есть, координаты точек, между которыми искать, есть. Какие, (простите) нахрен, несколько линий? Какие перепады высоты? Ощущение, что изобретается велосипед, но при этом разговор идет о влиянии массонов на устойчивость Эйфелевой башни. |
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Вот точки 1 и 2. надо найти блоки между ними на линии.
Я пояснял всю ситуацию до этого. ----- добавлено через ~36 мин. ----- Натолкнуло на мысль: Если расстояние от Конца линии до Первой точки меньше чем расстояние от конца до проверяемой точки И Если расстояние от Начала линии до Ввторой точки меньше чем расстояние от конца до проверяемой точки То проверяемая точка лежит между Первой и Второй точками. Предварительно проверить какая точка из двух лежит ближе к началу линии. ----- добавлено через 32 сек. ----- всем спасибо! Последний раз редактировалось tujn08, 04.08.2015 в 08:23. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Ну я вообще бы искал пересечение полилинии с блоком.. потому что промахнулся пользователь, плюхнул блок рядом с полилинией. Визуально для него блок на полилинии, а реально алгоритм на определении нахождения точки вставки блока на сегменте полилинии будет этот блок пропускать.. или наоборот - при большой дельте захватывать и соседние блоки. А пересечение - в инете примеров более чем. А уж когда нашел полилинию - найти, к каким ближайшим смежным двум ее вершинам ближе всего вставка блока - задача тривиальная. Если это вообще нужно.
|
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Я тоже хотел найти точки пересечения блока с линией, но выдаются минимум 3 точки- включая атрибутов которых не видно + габариты блока. Тот же блок может пересекать и другую линии. Это не то,что нужно.
Вот я искал точку вставки блока с концом линии с точностью - вполне гуд. А щас начал ломать голову как найти на участке это пересечение ))). ----- добавлено через ~5 мин. ----- к примеру: (79.7366 217.659 -1.0e-008 134.718 217.659 -1.0e-008 134.718 217.659 1.0e-008 79.7366 217.659 1.0e-008) не вижу нужной: (104.84 217.65 0.0) |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Цитата:
----- добавлено через ~7 мин. ----- p.s. Давно отказался от попыток сделать полностью автоматическую систему - так как овчина не стоит выделки, имхо. |
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Это и делаю ))
1) стандартизация 2) автматизация 3) увеличение качества и объемов. Цитата:
Надо проверить принадлежит ли точка этой линии - дальше по алгоритму как писал выше. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Пробуйте. Вы сейчас по сути пытаетесь теоретически предугадать все возможные "шишки" и "подводные камни", на которых спотыкались целые команды разработчиков вертикальных решений/программ для автоматизации проектирования) только опытным путем на реальных задачах выясняются все плюсы и минусы.
|
|||
|
||||
Регистрация: 26.12.2013
Сообщений: 284
|
Значит сделаю просто:
1) проверка на пересечение блокИ-линия 2) проверю все точки пересекающих блоков на нахождение их между нужными точками Условия: 1) точка вставки должна быть почти на линии ( используем радиус от концов участка, погрешность уже становиться большой, если точка не по центру участка линии). Попасть в центр нужного участка - маленькая вероятность, что радует. 2) блок не должен пересекать другие линии - уже проблемотично т.к. габариты блока довольно большие. (делить блок на два разных блока?! - не серьезно...) Мда... надо подумать еще варианты |
|||
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
Цитата:
Код:
Последний раз редактировалось roaa, 04.08.2015 в 14:06. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Очистка рисунка от "пустых" блоков | Makswell | Готовые программы | 15 | 26.10.2022 15:24 |
AutoCAD 2012 Поиск по атрибутам блоков | yurka52rus | AutoCAD | 8 | 17.07.2020 12:09 |
Lisp. Поиск блоков в файлах и замена атрибутов | AlexKey | LISP | 3 | 12.09.2013 16:39 |