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

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

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

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

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

надо найти все блоки у которых точка вставки блока находится на участке п.3
Просмотров: 20900
 
Непрочитано 05.08.2015, 21:05
#41
Сергей812


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


Offtop: Пускай попробуют люди, понабивают шишек, приобретут какой то опыт. Сейчас это стало модный тренд - автоматизация, в нее ринулись кому не лень. Кто-то из опытных людей, давно занимающийся всеми эти вопросами, дал достаточно точное определение всем этим системам автоматизации - что это лишь рычаг. В сильной фирме с налаженными процессами автоматизация даст положительный эффект, в слабых фирмах с никчемным менеджментом - раскачает "лодку" так, что она может начать зачерпывать воду и будет еще хуже.
Сергей812 вне форума  
 
Непрочитано 06.08.2015, 05:24
#42
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Offtop: Прошу прощения за отсталый ответ
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
В NetApi/Arx есть JIG классы - выноску можно сформировать и ставить на место визуально сразу. Не знаю, как в лиспе с этим дела обстоят.
Если я правильно понял о чем речь, то в лиспе я в свое время (лет 5 назад), начав программно создавать выноски, воевал с тем, чтобы созданная мультивыноска (строки и точка стрелки задавались программно) адекватно отображалась при запросе точки вставки полки. Визуализировалась, иначе говоря. При стандартном подходе он выдавал мне только резиновую нить, и я решил формировать блок, состоящий из текста в том же шрифте, чтобы видеть размеры самой выноски, и вставлял этот блок визуализируя его под курсором, резиновую нить при этом воспроизвести так и не удалось. Хотел даже как-нибудь программно "схватиться" за ручку только что отрисованной мультивыноски. Оно и понятно было сразу, что тут получится только через отрисовку временных примитивов (grvecs) по координатам из взорванных до линий текстов. На такое я не пошел, и оставил без резиновой нити. Привыкли, конечно, однако ее часто не хватает на загруженных чертежах. Это одна из немногих (кажется, трех) задач, которую не удалось решить на лиспе (без костылей и шаманских танцев, с ними думаю, можно) в моей хоть и не слишком долгой практике.
Цитата:
Сообщение от tujn08 Посмотреть сообщение
Примерно так планирую, только выноски автоматически расставлять. Плюс еще схемы внешних проводок(расключение) и все остальное автоматически отрисовывать
Сколько ни пытался, не смог придумать алгоритм, по которому можно заставить машину автоматически расставлять выноски так, как мне надо. Предпочитаю полку ставить самостоятельно. Интересно было бы посмотреть на видео, как это будет...
skkkk вне форума  
 
Автор темы   Непрочитано 06.08.2015, 06:09
#43
tujn08


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
расставлять выноски так, как мне надо
Уточню, что выноска будет блок, а не типовая выноска как возможно Вы поняли.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 07:13
#44
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


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

Последний раз редактировалось skkkk, 06.08.2015 в 07:20.
skkkk вне форума  
 
Автор темы   Непрочитано 06.08.2015, 07:29
#45
tujn08


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
если выноска будет всегда одного размера и стоять должна по определенным правилам, например, справа сверху от стрелки, то ничего сложного тут нет.
Примерно так и будет. Взять габарит чертежа (прямоугольник или квадрат) - расставлять выноски за пределами этого габарита на определенно отступе (вспомним конструкторские чертежи). Ширина выносок статичная, а высота динамическая (от количества маркировок). У меня есть список линий (причем координаты на линиях) между блоками/приборами/зданиями - на эти линии и расставлять выноски. Маркировка формируется из названия блока (у нас) или можно правила придумать
Наложение на чертеж уже избежали получается. Пересечение линий выносок и в какую сторону выноску выкинуть- проверка координат относительно центра габарита (с возможным учетом заполненности каждой из 4х сторон) и только.

Учитывая вышеизложенное мной (т.е. информация выноски будет на пустом месте стоять). Для себя я понимаю ("самых пустых") , Надо с учетом масштаба запрограммировать правило: между приборами выноска обязательна- она стоит по середине участка или со смещением если есть повороты трассы (в зависимости от длины участка их дублировать несколько раз). Сложность не в алгоритме, а в его программировании на мой взгляд.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 09:33
#46
zamtmn

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


ИМХО. Автоматическая расстановка выносок неоправдает себя. Правильно это можно сделать только на самых простых чертежах, если чертеж насыщеный - забудь про "автоматику", ручками и вперед, благо размещать выноски если их содержимое считаетсяф автоматом можно и в полуобморочном состоянии)) Ставку нужно делать на редактируемость выноски и на повторное использование уже расставленых выносок после редактирования чертежа. Т.е. программа должна позволять не только быстро изготовить новый чертежик, но и внести изменения в старый.

Еще на правах рекламы)) :

Было 4 кабеля W1..W4, к ним добавилось еще 4 - G1..G4. Всё пересчиталось и обновилось
zamtmn вне форума  
 
Непрочитано 06.08.2015, 09:57
#47
Сергей812


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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Примерно так и будет. Взять габарит чертежа (прямоугольник или квадрат) - расставлять выноски за пределами этого габарита на определенно отступе (вспомним конструкторские чертежи). Ширина выносок статичная, а высота динамическая (от количества маркировок). У меня есть список линий (причем координаты на линиях) между блоками/приборами/зданиями - на эти линии и расставлять выноски. Маркировка формируется из названия блока (у нас) или можно правила придумать
Наложение на чертеж уже избежали получается. Пересечение линий выносок и в какую сторону выноску выкинуть- проверка координат относительно центра габарита (с возможным учетом заполненности каждой из 4х сторон) и только.

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Если я правильно понял о чем речь, то в лиспе я в свое время (лет 5 назад), начав программно создавать выноски, воевал с тем, чтобы созданная мультивыноска (строки и точка стрелки задавались программно) адекватно отображалась при запросе точки вставки полки. Визуализировалась, иначе говоря. При стандартном подходе он выдавал мне только резиновую нить, и я решил формировать блок, состоящий из текста в том же шрифте, чтобы видеть размеры самой выноски, и вставлял этот блок визуализируя его под курсором, резиновую нить при этом воспроизвести так и не удалось. Хотел даже как-нибудь программно "схватиться" за ручку только что отрисованной мультивыноски. Оно и понятно было сразу, что тут получится только через отрисовку временных примитивов (grvecs) по координатам из взорванных до линий текстов. На такое я не пошел, и оставил без резиновой нити. Привыкли, конечно, однако ее часто не хватает на загруженных чертежах. Это одна из немногих (кажется, трех) задач, которую не удалось решить на лиспе (без костылей и шаманских танцев, с ними думаю, можно) в моей хоть и не слишком долгой практике.
ну по сути JIG класс - это временная графика + методы отслеживания действий пользователя, инкапсулированное в одном несложном классе - производном от общего класса JIG. Т.е. в саму БД чертежа объект из JIG заноситься один раз, после всех необходимых манипуляций с ним со стороны пользователя.
Сергей812 вне форума  
 
Автор темы   Непрочитано 06.08.2015, 10:13
#48
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Было 4 кабеля W1..W4, к ним добавилось еще 4 - G1..G4. Всё пересчиталось и обновилось
У меня речь о почти полной автоматизации т.е. у меня не только выноски (назову это "попутным продуктом"). Основной - кабельный журнал, спецификация и схемы.
Да будет классно, если поменяв выноску поменяется все и везде - до этого еще пилить и пилить.
У меня в первую очередь идет оформление всех планов (хоть и вразрез всех правил проектирования), а потом обработкой программой. Нужно что-то изменить- меняй план и вновь отработка программы.Простой вариант -это все удалить программно и заново нарисовать (т.к. приборов может стать больше и листы надо сдвигать и менять размеры). Ну или вставить рядом для сравнения и сохранения релиза(версий) чертежа.
Про изменение отображение выносок думал и еще подумаю, что смогу сделать - сделаю. Двигать так и так можно вручную будет.
Информацию для размышления кидаете- не спорю. В нашем случае протыкивать все блоки у нас не вариант (в случае видеонаблюдения с 200 камерами и несколькими кабелями под каждую, где не парная прокладка).
У каждого свои задачи и условия.

Вот уже сделал: см. вложения
Помогло vlax-curve-getClosestPointTo и пару условий.
Спасибо всем за поддержку и советы!!!
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 33
Размер:	40.7 Кб
ID:	154511  Нажмите на изображение для увеличения
Название: Безымянный2.png
Просмотров: 22
Размер:	33.1 Кб
ID:	154512  
tujn08 вне форума  
 
Непрочитано 06.08.2015, 10:23
#49
Сергей812


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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
В нашем случае протыкивать все блоки у нас не вариант (в случае видеонаблюдения с 200 камерами и несколькими кабелями под каждую, где не парная прокладка).
при грамотной реализации "протыкивания" эти 200 камер прощелкаете за несколько минут)

----- добавлено через ~2 мин. -----
но вместо этого вы потратите кучу времени на автоматическую расстановку выносок)
Сергей812 вне форума  
 
Автор темы   Непрочитано 06.08.2015, 10:29
#50
tujn08


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
прощелкаете за несколько минут)
у меня вся информация в блоках храниться - меняем там инфо и прощелкивать не надо. Ну если брать внезапное смещение номеров камер + изменение кабеля + добавление камер и других приборов.
У меня программа на коленке написана - доработать до красоты и удобства потом можно. Щас большие объемы появились + старые замечания - вручную куда дольше чем написать программу и спать дома, а не на работе.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 10:47
#51
Сергей812


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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
у меня вся информация в блоках храниться - меняем там инфо и прощелкивать не надо. Ну если брать внезапное смещение номеров камер + изменение кабеля + добавление камер и других приборов.
Ну в первых вариантах программы было так же, в гиперссылках к блокам и полилиниям. Уже больше сотни проектов народ на ней сделал в офисе, и даже с "протыкиванием" получается быстрее, чем врукопашную. Но сейчас, смотря на все это дело через пару лет - понимаю, что нужно было разносить, как советовали умные люди: в блоках и полилиниях лишь идентификаторы, во внешней БД - вся информация, при необходимости доработаются алгоритмы обработки информации в самой программе, не влезая в чертежи.

Цитата:
Сообщение от tujn08 Посмотреть сообщение
У меня программа на коленке написана - доработать до красоты и удобства потом можно
не будет ни времени, ни желания - 100%. Какое "ядро"/принцип работы заложите сейчас в программу - так она и будет дальше жить, обрастая вспомогательным функционалом и костылями. Такие вещи надо продумывать на начальном этапе.
Сергей812 вне форума  
 
Непрочитано 06.08.2015, 11:07
#52
zamtmn

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


>>В нашем случае протыкивать все блоки у нас не вариант (в случае видеонаблюдения с 200 камерами и несколькими кабелями под каждую, где не парная прокладка).
"Автоматическая" расстановка выносок - абсолютно не проблема - у меня не реализована за ненадобностью. после любой "автоматической" расстоновки всеравно потребуется ручное редактирование, т.к. выноска налезет на какиенибудь другие примитивы и потребуется вмешательство - красиво делать cpu научить трудно, с этим пока только голова справится.

>> Нужно что-то изменить- меняй план и вновь отработка программы.Простой вариант -это все удалить программно и заново нарисовать
Плавали знаем... такой вариант прокатит если результат работы программы уходит кудато отдельно - незнаю, таблицы какиенибудь или другие чертежи. Если программа дорабатывает исходный чертеж, рано или поздно встает выбор - поправить быстренько "наколенке" без автоматики или сделать по уму и снова заново всё это подвигать-подгонять. Как правило будет выбран первый вариант))

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

>>У меня речь о почти полной автоматизации
А я толкаю речь про то что автоматизация это хорошо, но она должна быть "прозрачной" и внесение крошечных изменений не должно приравниваться к переделке всего заново


Научите как тут можно автоматом расставить выноски - буду рад
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 37
Размер:	72.5 Кб
ID:	154530  

Последний раз редактировалось zamtmn, 06.08.2015 в 11:17.
zamtmn вне форума  
 
Автор темы   Непрочитано 06.08.2015, 12:09
#53
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Научите как тут можно автоматом расставить выноски - буду рад
Эту задачу тоже планирую захватить )))
Пока на ум приходит- в отдельном слое отрисовывать прямоугольником все помещения (если план "левый"). Как ни крути должна быть экспликация помещений с цифрами- проставить цифры (или уже иметь цифры от "строителей") и прямоугольники можно автоматом отрисовывать. Если план по уму нарисован (не картинка)- все проще становиться. По нормативам расставлять приборы в помещениях(можно сделать на выбор)- опять же получиться, что автоматом. По правилам последовательности приборов- связи между блоками можно "автоматом" получить. Дальше уже на выбор- или позволить программе автоматически стенку по которой трассу прокладывать, или рисовать/выбирать самим.
В тему скажу: камеры на плане расставлять буду почти автоматически - достаточно обозначить периметр + внутрении трассы. Заранее конечно стоит выбрать тип камер(там прописаны возможные кабеля), а от типа кабеля и камер расстояние между ними известно. Угол обзора камер тоже выбрать автоматически.
Просто ради спортивного интереса:
Как учитываешь высоты приборов и трассы? на плане их не видно


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
в блоках и полилиниях лишь идентификаторы, во внешней БД - вся информация,
так изначально и запланировал, НО в связи с необходимостью иметь какую ни какую автоматизацию сейчас - делаю без БД. У нас БД представляет табличную информацию обследования- из нее все, что можно, будет взято )). Останется расставлять блоки с выбором нужной "строки" из БД.

----- добавлено через -----
В общем "наполеоновские планы" у меня.
tujn08 вне форума  
 
Автор темы   Непрочитано 06.08.2015, 12:18
#54
tujn08


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


Вот еще тест провел. Вроде все работает как мне надо. Буду испытывать на "реальном проекте"
Надо еще вычет второго катета сделать и прибавить высоту приборов.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 37
Размер:	35.3 Кб
ID:	154540  
tujn08 вне форума  
 
Непрочитано 06.08.2015, 12:38
#55
zamtmn

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


>>Как учитываешь высоты приборов и трассы? на плане их не видно
Несколько вариантов
1 - трехмерная трасса и расстановка приборов на соответствующих высотах
2 - для 2Д есть возможность подкючить в трассу "муляжное" устройство "стояка" которое добавит для всех кабелей проходящих через него необходимую длину. Также для каждого устройства можно задать значение которое оно добавит к длине всех подключеных кабелей (по идее фича задумывалась как запас кабеля на разделку при подключении, но можно использовать и как этуляцию разности высот)
3 - тоже для 2Д. в случае если кабель начинается на одном плане, заканчивается на другом - к его длине автоматом добавляется разница высотных отметок "стояков" или "разрывов" (специальные блоки "заканчивающие" кабель на одном плане и "начинающие" на другом). сама высотная отметка стояков и разрывов задается им в их свойствах
zamtmn вне форума  
 
Автор темы   Непрочитано 06.08.2015, 12:44
#56
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Несколько вариантов
Я к тому, что ты их учитываешь все же, но на плане не показываешь?
Замечания не присылали по этому поводу?
Я работаю с 2Д и в каждый прибор вписываю высоты (они могут быть разные). Программе не важно на какой высоте на самом деле трасса же- ее принимаю за 0.000

----- добавлено через ~11 мин. -----

В выносках мы прописываем на какой высоте прибор или трасса.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 18:07
#57
zamtmn

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


>>Я к тому, что ты их учитываешь все же, но на плане не показываешь?
Случаи бывают разные

>>Замечания не присылали по этому поводу?
Думаешь эти +-метры когото кроме тебя интересуют?))

Вообще имхо лисп для таких задач не особо подходит - блоки+полилинии для устройств и трасс не сильно годятся, лучше отдельные примитивы. Также надо много всякой информации хранить в примитивах - на ум сразу лезет xdata - придется делать средства для массовой обработки этих xdata. и желательно не запросами в комстроке, а с удобным гуем
zamtmn вне форума  
 
Непрочитано 06.08.2015, 18:30
#58
kp+

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Думаешь эти +-метры когото кроме тебя интересуют?))
Когда подрядчику недоплачивают или у него недостает времени, он отключает голову и начинает придираться к каждой запятой в проекте.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Также надо много всякой информации хранить в примитивах - на ум сразу лезет xdata - придется делать средства для массовой обработки этих xdata. и желательно не запросами в комстроке, а с удобным гуем
В Acad Electrical другой вариант - почти вся необходимая инфа хранится в атрибутах блоков, и в каждом блоке их ...ва куча. Большинство скрыты.
Зато можно редактировать станд. средствами
kp+ вне форума  
 
Непрочитано 06.08.2015, 18:42
#59
Сергей812


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Когда подрядчику недоплачивают или у него недостает времени, он отключает голову и начинает придираться к каждой запятой в проекте.
А если объект с госфинансированием - то и со счетной палатой можно познакомиться, если запасы дикие на кабели заложены для отбивки монтажа)
Сергей812 вне форума  
 
Непрочитано 06.08.2015, 19:48
#60
zamtmn

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


kp+
>>и начинает придираться к каждой запятой в проекте.
Согласен, придраться можно хоть к чему.
По атрибутам - наиболее удобный вариант, хотя минусов тоже хватает. но это только для блоков,

Сергей812
Видимо я считаю хорошо, неразу проблем не имел))
zamtmn вне форума  
Ответ
Вернуться   Форум 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