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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поиск блоков пересекающих полилинию

Поиск блоков пересекающих полилинию

Ответ
Поиск в этой теме
Непрочитано 03.08.2015, 16:07
Поиск блоков пересекающих полилинию
tujn08
 
Регистрация: 26.12.2013
Сообщений: 284

Привет!
Помогите найти/написать функцию:
1) есть полилинии
2) есть дин.блоки
3) есть 2Д точки: начало и конец на полилинии (между точками могут быть несколько вершин). Эти точки могу являться как началом и концом полилинии, так и просто точки на линии

надо найти все блоки у которых точка вставки блока находится на участке п.3
Просмотров: 20889
 
Автор темы   Непрочитано 04.08.2015, 15:23
#21
tujn08


 
Регистрация: 26.12.2013
Сообщений: 284


Код:
[Выделить все]
 (progn
(vl-load-com)
(setq obj1 (vlax-ename->vla-object (car (entsel "выбрать линию"))))
(setq a (cdr (assoc '10 (entget (car (entsel "выбрать блок"))))))
(setq a_1 (list (nth 0 a) (nth 1 a) (+ 10(nth 2 a)) ))
(vlax-curve-getClosestPointToProjection obj1 a a_1) ; пересечение в 3д
)
Как насчет этого - подозреваю, что радоваться преждевременно??? )))

----- добавлено через ~43 мин. -----
и проверка на:
Если расстояние от Конца линии до Первой точки меньше чем расстояние от конца до проверяемой точки
И
Если расстояние от Начала линии до Ввторой точки меньше чем расстояние от конца до проверяемой точки
То проверяемая точка лежит между Первой и Второй точками.

----- добавлено через ~44 мин. -----
задача в определении точки вставки блока на проверяемой линии. Блок может пересекать несколько линий, но точка будет только на одной (не считая перекрестков).

----- добавлено через ~45 мин. -----
Цитата:
Сообщение от roaa Посмотреть сообщение
Накидал на скорую руку.
почитаю завтра- времени не хватило разобраться.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 17:54
#22
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Я тоже хотел найти точки пересечения блока с линией, но выдаются минимум 3 точки- включая атрибутов которых не видно + габариты блока
Как вариант: в составе блока должна быть одна характерная полилиния на особом слое, например, внешняя рамка, пересечение с которой должно быть однозначно истолковано как то, что блок находится на полилинии, изображающей кабель.
Примерный алгоритм:
1) найти все блоки, которые могут пересекаться с полилинией, например с помощью BSELPOLY
2) для каждого блока уточнить пересечение с характерной рамкой:
- сделать копию блока (vla-copy);
- запомнить последний примитив чертежа (entlast);
- подорвать копию (vla-explode);
- среди полученных "обломков" выделить ту самую характерную рамку (перебор с помощью entnext от ранее запомненной метки последнего примитива до текущего entlast по условиям "полилиния" и "спецслой");
- проверить ее пересечения с "кабельной" полилинией - если есть, значит блок на кабеле, оставить в списке блоков по п.1, если нет - удалить из этого списка;
- убрать мусор (от ранее запомненной метки последнего примитива до текущего entlast)


Как-то так Предлагаемые в п. 2 действия вообще-то относятся к низкому штилю программирования, гуру наверняка могут предложить вариант прямого доступа к подпримитивам блока.

Последний раз редактировалось kp+, 04.08.2015 в 18:01.
kp+ вне форума  
 
Автор темы   Непрочитано 04.08.2015, 18:18
#23
tujn08


 
Регистрация: 26.12.2013
Сообщений: 284


Цитата:
Сообщение от kp+ Посмотреть сообщение
гуру наверняка могут предложить вариант прямого доступа к подпримитивам блока.
Взрывать блоки не вариант- так сказать БД чертежа (как я ее называю) "переполняется"(как я понимаю по нумерации примитивов), что приводит к ошибкам этого файла. Спасает только своевременное копирование нужного в новый созданный файл.
Если кто сталкивался буду рад вразумительным объяснениям ))
А про доступ в примитивам блока это надо глянуть функции Lee Mac
tujn08 вне форума  
 
Непрочитано 04.08.2015, 18:23
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


ну пока остановился на вложенном внутри основного блока УГО спец-блоке - маленьком квадрате без атрибутов с точкой вставки в центре. В блоке перебираю примитивы, нахожу вхождение этого блока, затем дело техники - найти ближайшие вершины полилинии, опустить перпендикуляр, найти точку на сегменте полилинии. Чистая геометрия - и пофиг на полилинии блок или рядом где то) Почему вложенный блок-квадрат - так как не всегда геометрический центр УГО совпадает с желаемым центром разбития полилинии, а этот вспомогательный блок где нужно ставишь.
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 18:34
#25
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


В качестве рекламы
zamtmn вне форума  
 
Непрочитано 04.08.2015, 18:35
#26
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Взрывать блоки не вариант- так сказать БД чертежа (как я ее называю) "переполняется"(как я понимаю по нумерации примитивов), что приводит к ошибкам этого файла. Спасает только своевременное копирование нужного в новый созданный файл.
Если кто сталкивался буду рад вразумительным объяснениям ))
Связка explodeallproxy, removeallproxy, очистка списка аннот. масштабов, Audit с исправлением ошибок дает хорошие результаты. Сотни раз обсуждалось. А чтобы вызвать "переполнение БД чертежа", если чертеж 2D - не представляю, что надо изобразить. Не иначе, как карту мира в масштабе 1:100 в одном файле.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
найти ближайшие вершины полилинии, опустить перпендикуляр, найти точку на сегменте полилинии. Чистая геометрия - и пофиг на полилинии блок или рядом где то)
Кажется, эта чистая геометрия в полном объеме реализована в грязной стандартной функции vlax-curve-getclosestpointto. Или о ней и идет речь?
kp+ вне форума  
 
Непрочитано 04.08.2015, 18:40
#27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


прикольно) Только лишняя операция - выравнивание выносок. В NetApi/Arx есть JIG классы - выноску можно сформировать и ставить на место визуально сразу. Не знаю, как в лиспе с этим дела обстоят.

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от kp+ Посмотреть сообщение
Кажется, эта чистая геометрия в полном объеме реализована в грязной стандартной функции vlax-curve-getclosestpointto. Или о ней и идет речь?
На NetApi пишу. Да и по промежуточным коэффициентам заодно определяется - находиться ли объект на полилинии, рядом с нею и на каком расстоянии, либо за пределами полилинии.

Цитата:
Сообщение от kp+ Посмотреть сообщение
А чтобы вызвать "переполнение БД чертежа", если чертеж 2D - не представляю, что надо изобразить. Не иначе, как карту мира в масштабе 1:100 в одном файле.
ну в 2012 хэндл был типа long - т.е. 2 миллиарда всего, если со знаком. Если постоянно убивать/создавать примитивы - то каждому новому из БД чертежа следующий свободный номер присваивается.
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 20:16
#28
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Действительно....пошло изобретение велосипеда...

Последний раз редактировалось roaa, 04.08.2015 в 20:27.
roaa вне форума  
 
Автор темы   Непрочитано 04.08.2015, 20:33
#29
tujn08


 
Регистрация: 26.12.2013
Сообщений: 284


Цитата:
Сообщение от zamtmn Посмотреть сообщение
В качестве рекламы
Примерно так планирую, только выноски автоматически расставлять. Плюс еще схемы внешних проводок(расключение) и все остальное автоматически отрисовывать.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 20:41
#30
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Зачем? на форуме есть несколько вариантов - гораздо полдезнее развивать уже существующее чем велосипедить
zamtmn вне форума  
 
Автор темы   Непрочитано 04.08.2015, 20:43
#31
tujn08


 
Регистрация: 26.12.2013
Сообщений: 284


Цитата:
Сообщение от kp+ Посмотреть сообщение
Не иначе, как карту мира в масштабе 1:100 в одном файле.
В моем опыте достаточно: прокси-графика, копирование ген.плана(порядка 5 раз), изменение генплана несколько раз, взрыв прокси без своевременной чистки.
Ооо... кстати щас такая проблема- может кто сталкивался:
файл порядка 25-30Мб в нем всего лишь один блок из-за которого все тормозит и он не удаляется- файл виснет.
Вроде предлагается пересохранить из 15 в 13 версию.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 20:45
#32
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


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

----- добавлено через ~2 мин. -----
13..16 акад-одна версия файла.. до этого была тройка 10..12
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 21:04
#33
tujn08


 
Регистрация: 26.12.2013
Сообщений: 284


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну человек хочет переплюнуть тот же электрикал - пускай пробует)
"плеваться" ни куда не хочу ). Назовем это переход с кульмана на САПР. Электрикал у нас никто не осилил разобраться и настроить под себя тем более. Еплан куда более подходит под наши задачи, но с англ. инструкцией сложно разобраться. Оказалось проще самим что-то этакое создать. В добавок лицензии приобретать не нужно.
Вот небольшая история: купили ModelStudio ЛЭП (ну и всю линейку вдобавок). Требуется всего-лишь провис проводов по профилю юзать. Как выяснилось- в есть ограничения поскольку программист не электрик и тонкостей не знает. Когда эти ограничения уберут? А так сами можем- разве нет. Чет я разгорячился ) ....

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
узкий круг задач, где реально сделать лучше именно под себя...
И тут в точку - все под себя. Ни одна САПР наши потребности не удовлетворяет: ни в экспликация, кабельном журнале, спецификации, схемах, БД оборудования производителей, документообороте и т.п..

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
13..16 акад-одна версия файла.. до этого была тройка 10..12
Сергей, вопрос.. возможно знаешь. Даунгрейд с 16 до 14 возможен при условии, что лицензия? (ModelStudio работает только на до 14версии включительно и тут с тех поддержкой возникают дилемы по этому поводу)
tujn08 вне форума  
 
Непрочитано 04.08.2015, 21:13
#34
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


вы мужественно боретесь с "проблемой" определения нахождения блока на полилинии второй день, и при этом замахиваетесь на автоматическую расстановку выносок, на прорисовку схемы соединений и т.д... либо у вас очень узкий сегмент рынка проектирования с большой типизацией.. либо слабо представляете себе реальный объем работ.. и что это понадобиться еще много-много раз дописывать/переписывать по реальные задачи.. а еще это все затевать на лиспе, насколько понимаю..

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от tujn08 Посмотреть сообщение
Сергей, вопрос.. возможно знаешь. Даунгрейд с 16 до 14 возможен при условии, что лицензия? (ModelStudio работает только на до 14версии включительно и тут с тех поддержкой возникают дилемы по этому поводу)
Насколько я слышал от нашего админа, что с 16 версии можно было до 13 даунгрейд сделать.. но это лучше уточнять у представителей аутодеска всетаки
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 21:16
#35
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Назовем это переход с кульмана на САПР.
С подходом Поиск блоков пересекающих полилинию это будет не сапр, даже не велосипед-кульман а самокат какойнить.

>>Ни одна САПР наши потребности не удовлетворяет: ни в экспликация, кабельном журнале, спецификации, схемах, БД оборудования производителей, документообороте и т.п..
Сомневаюсь. Скорее наоборот - лень разбираться, да еще и документация к ним какаято нетакая))
zamtmn вне форума  
 
Непрочитано 04.08.2015, 21:23
#36
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


кстати, тот же электрикал программируется аналогично голому автокаду, т.е. можете реализовать вывод информации в любом нужном виде, если не устраивают базовые возможности..
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 21:25
#37
tujn08


 
Регистрация: 26.12.2013
Сообщений: 284


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
узкий сегмент рынка проектирования с большой типизацией.
ага
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и при этом замахиваетесь на автоматическую расстановку выносок,
скажу больше - для сметчиков "Красную кнопку" тоже запланировал. И компоновщик документации для заказчика
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а еще это все затевать на лиспе, насколько понимаю..
как распинаю C# переключись на него. Пока есть вот это:Пакетная печать- опять же под наши требования. И я знаю, что есть 5(известных мне) похожих программ...

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от zamtmn Посмотреть сообщение
а самокат какойнить
tujn08 вне форума  
 
Непрочитано 04.08.2015, 21:35
#38
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


Цитата:
Сообщение от tujn08 Посмотреть сообщение
как распинаю C# переключись на него
Его не пинать надо, а изучать и писать на нем) Когда увидите, что многие задачи по обработки информации в С# решаются буквально в несколько строк.. ощутите прелесть того XML-комментирования своего кода.. не говори уже о возможностях построения диалогов.. лисп хорош для небольших задач, имхо.. да и раньше просто альтернативы для него не было..
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 22:13
#39
Кулик Алексей aka kpblc
Moderator

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


Offtop: Лисп хорош не только для небольших задач. Сделать на нем можно очень много - и при этом не зависеть от версии ACAD
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.08.2015, 20:38
#40
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Offtop: Походу, велосипед купили...
roaa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поиск блоков пересекающих полилинию

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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