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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите взаимосвязь программы и чертежа

Подскажите взаимосвязь программы и чертежа

Ответ
Поиск в этой теме
Непрочитано 03.05.2014, 12:19 #1
Подскажите взаимосвязь программы и чертежа
Castorsky
 
Регистрация: 30.04.2014
Сообщений: 3

Значит задача у меня состоит в следующем:
программа которая автоматизирует процесс проектирования, а именно:
1 Автоматически связывает розетки с центральным шкафом по заданным системам кабелепровода
2 Соединяет каждую розетку своим типом провода
3 Создает для каждого типы провода, шкафов, розеток и закладных свой слой
4 Выбирает наиболее оптимальный маршрут
5 Автоматически номерует розетки по порядку
6 При внесении изменений перенумеровывает весь проект заново
7 Автоматически считает количество розеток по каждым типам отдельно
8 Позволяет автоматически считать длины кабелей разных типов
==>
В области программирования у меня вопросов вроде нет. По крайней мере фундаментальных. А что касается "программирования на чертеже", то тут не совсем все ясно.
Итак, возьмем п.4 "Выбирает наиболее оптимальный маршрут", для того чтобы выбрать оптимальный маршрут наиболее универсальным алгоритмом как известно является алгоритм поиска кратчайшего пути на графе, разработанный Дейкстрой. Для расчета нам нужен сам граф, в виде сети кабелей с узловыми точками на чертеже. По какому критерию программа идентифицировать эти самые узловые точки? Какими свойствами должны обладать эти объекты, чтобы программа точно их распознала?
Далее п.3 "Создает для каждого типы провода, шкафов, розеток и закладных свой слой". Ок, создали мы слой, а дальше что? дальше нужно автоматически кинуть кабель до ближайшей подходящей узловой точки, тут мы снова упираемся в предыдущий вопрос. Как ее найти и идентифицировать. Кроме того, есть и побочный вопрос: как сделать так, чтобы прокладка пошла именно по "стене", а не по "улице или комнате", т.е. как отличить то пространство, по которому кабель может прокладываться, от такого где это нельзя делать?
п. 5-7 подразумевают наличие базы данных в каком-либо виде. Какие возможности для этого нам предоставляет Visual Lisp?
==>
Чтобы было понятно, прикрепил чертеж, касательно которого ведется речь.

Вложения
Тип файла: rar 00018МО.rar (6.49 Мб, 43 просмотров)

Просмотров: 4710
 
Непрочитано 03.05.2014, 15:05
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Castorsky Посмотреть сообщение
По какому критерию программа идентифицировать эти самые узловые точки? Какими свойствами должны обладать эти объекты, чтобы программа точно их распознала?
На Ваш выбор, обычно реализуют либо блоками, либо через расширенные данные.
Цитата:
Сообщение от Castorsky Посмотреть сообщение
Кроме того, есть и побочный вопрос: как сделать так, чтобы прокладка пошла именно по "стене", а не по "улице или комнате", т.е. как отличить то пространство, по которому кабель может прокладываться, от такого где это нельзя делать?
Ну я бы это побочным вопросом не называл - естественно программа не знает где стена, где комната, а где улица - как это организовать зависит от исходных данных и Вашей "продвинутости" в области даже не столько разработки алгоритмов, сколько умению выражению задачи на языке математики.
Цитата:
Сообщение от Castorsky Посмотреть сообщение
подразумевают наличие базы данных в каком-либо виде. Какие возможности для этого нам предоставляет Visual Lisp?
Т.к. доступен COM, то в этой области проблем нет - практически любая СУБД поддерживает ADO.
Цитата:
Сообщение от Castorsky Посмотреть сообщение
В области программирования у меня вопросов вроде нет. По крайней мере фундаментальных.
А Все вышеперечисленное это что?? Умению вызывать API от умения программировать так же далеко как и умения нажимать на клавиши на пианино до игры на нем (причем паралельное умение играть на барабане Вам конечно поможет, но не настолько чтоб сразу называться пианистом).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 03.05.2014, 20:25
#3
Castorsky


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


Спасибо за ответ. Однако все очень туманно. Проведу аналогию для более точного понимания постановки вопроса. Например, я пишу программу, которая читает файл и обрабатывает полученные данные каким-либо абстрактным образом. Для построения обработки этих данных мне надо знать формат данных, т.е. такие вещи как BIT_ORDER, BYTE_ORDER (оно же эндианство), и уже получив эти данные я начинаю манипулировать полученными байтами тем или иным образом используя ветвление или таблицы вызовов. Таким образом для обработки данных мне нужно знать формат этих данных и тогда я точно задам необходимый набор инструкций. В данном же случае я не понимаю с каким форматом данных имею дело.
==>
Цитата:
Сообщение от Дима_ Посмотреть сообщение
На Ваш выбор, обычно реализуют либо блоками, либо через расширенные данные
Вот на примере чертежа Вы можете пояснить каким образом я могу программно идентифицировать проектируемый слаботочный стояк?
==>
Цитата:
Сообщение от Дима_ Посмотреть сообщение
Ну я бы это побочным вопросом не называл - естественно программа не знает где стена, где комната, а где улица - как это организовать зависит от исходных данных и Вашей "продвинутости" в области даже не столько разработки алгоритмов, сколько умению выражению задачи на языке математики.
Ну опять же. Например, прокладывая путь опираясь только на Декартову ск из точки A в точку B программа не может распознать препятствий (непроходимых участков) для прокладки кабеля. На примере чертежа можете показать как можно идентифицировать возможные и невозможные участки?
==>
Цитата:
Сообщение от Дима_ Посмотреть сообщение
А Все вышеперечисленное это что?? Умению вызывать API от умения программировать так же далеко как и умения нажимать на клавиши на пианино до игры на нем (причем паралельное умение играть на барабане Вам конечно поможет, но не настолько чтоб сразу называться пианистом).
Оставим иронию. Эта область для меня нова и я пытаюсь понять фундаментальные вещи. Я не собираюсь тешить свое или чье-то чсв и ввязываться в неприличный спор.
Castorsky вне форума  
 
Непрочитано 03.05.2014, 21:59
1 | #4
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


Цитата:
Сообщение от Castorsky Посмотреть сообщение
Ну опять же. Например, прокладывая путь опираясь только на Декартову ск из точки A в точку B программа не может распознать препятствий (непроходимых участков) для прокладки кабеля. На примере чертежа можете показать как можно идентифицировать возможные и невозможные участки?
в этом наверняка и вся затыка. и задача отнюдь не из простых, т.к. каждый использует свои слои и примитивы. если научиться распознавать чертеж программно, то из 2д можно построить 3д, практически автоматически сделать чертежи не только слаботочки, но и другие вода, кондиционеры и т.д..

Цитата:
Сообщение от Castorsky Посмотреть сообщение
Проведу аналогию для более точного понимания постановки вопроса. Например, я пишу программу, которая читает файл и обрабатывает полученные данные каким-либо абстрактным образом. Для построения обработки этих данных мне надо знать формат данных, т.е. такие вещи как BIT_ORDER, BYTE_ORDER (оно же эндианство), и уже получив эти данные я начинаю манипулировать полученными байтами тем или иным образом используя ветвление или таблицы вызовов. Таким образом для обработки данных мне нужно знать формат этих данных и тогда я точно задам необходимый набор инструкций. В данном же случае я не понимаю с каким форматом данных имею дело.
тут, я так думаю, не байты, а линии, окружности, короче все то из чего состоит чертеж, как эти линии (примитивы) взаимодействуют между собой (пересекаются, образуя стены комнат, объединяются в блоки или какие то объекты.) для примера как определить на чертеже, программно каким слоем начерчены стены, как указывается разрез и как найти его (программно) в пространстве модели, наконец самое, на первый взгляд простое, как определить отметку пола (она может быть обозначена блоком, причем имя блока надо определить тоже, или просто текстом, текст может быть разным с разными символами ну и так до бесконечности.
данный вопрос интересен, но сложен. я время от времени возвращаюсь к этому воросу, но к сожалению, результаты весьма скромны.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 03.05.2014, 22:09
#5
Кулик Алексей aka kpblc
Moderator

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


Почему-то мне кажется, что вопрос лежит в плоскости MEP / Electrical.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.05.2014, 22:45
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Castorsky Посмотреть сообщение
Для построения обработки этих данных мне надо знать формат данных...
Вот на примере чертежа Вы можете пояснить каким образом я могу программно идентифицировать проектируемый слаботочный стояк?
Вы по моему сами себе отвечаете - если формат есть - то распознать можно, если там "мешанина" - то с этим будут больше проблемы (обычно используются "полуавтоматические" методы с привлечением юзера). Как отметить выделенные данные - я уже описал.
По второй части вопроса - все то-же самое.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.05.2014, 11:53
1 | #7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Castorsky Посмотреть сообщение
Спасибо за ответ. Однако все очень туманно. Проведу аналогию для более точного понимания постановки вопроса. Например, я пишу программу, которая читает файл и обрабатывает полученные данные каким-либо абстрактным образом. Для построения обработки этих данных мне надо знать формат данных, т.е. такие вещи как BIT_ORDER, BYTE_ORDER (оно же эндианство), и уже получив эти данные я начинаю манипулировать полученными байтами тем или иным образом используя ветвление или таблицы вызовов. Таким образом для обработки данных мне нужно знать формат этих данных и тогда я точно задам необходимый набор инструкций. В данном же случае я не понимаю с каким форматом данных имею дело.
Формат DWG - закрытый формат. Его редактирование возможно только в помощью API какой-нибудь CAD программы, поддерживающей этот формат. В принципе, возможно прочитать самостоятельно производный от DWG формат - DXF, но это непросто. На форуме есть темы об этом, поищите, почитайте, подумайте надо оно вам или нет.

Цитата:
Сообщение от Castorsky Посмотреть сообщение
Вот на примере чертежа Вы можете пояснить каким образом я могу программно идентифицировать проектируемый слаботочный стояк?
Чтобы на чертеже что-то идентифицировать, нужно:
Вариант1: В процессе работы программы все данные запрашивать у пользователя и сохранять их только на время работы программы. Например: "Укажите точки установки розеток", "Укажите линии стен", "Укажите проектируемый слаботочный стояк" и т.п.
Вариант2: Создавать объекты с заранее заданными уникальными идентификаторами. В порядке возрастания сложности: 1) свойство объекта (слой, цвет, тип линии), 2) расширенные данные объекта, 3) собственные custom-объекты (ObjectARX). Ну или еще какие-то экзотические способы, например - вести какую-то отдельную базу данных объектов чертежа во внешнем по отношению к чертежу файле с привязкой к хендлу (Handle) объекта чертежа. По подпункту 3) - возможно, что велосипед уже изобретен в продуктах, указанных Алексеем в сообщении #5.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 05.05.2014, 16:53
1 | #8
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Рядышком есть родственная тема: План кабельных сетей - алгоритм автоматизации построения и программирование?
Можно постучаться к автору, вопросы позадавать.
__________________
Алексей
bargool вне форума  
 
Автор темы   Непрочитано 09.05.2014, 03:47
#9
Castorsky


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Формат DWG - закрытый формат. Его редактирование возможно только в помощью API какой-нибудь CAD программы, поддерживающей этот формат.
Ну это как бы на поверхности. Автодэск, адоб, майкрософт, эппл и иже с ними открытостью не болеют, ну или частично. Нет необходимости хакать структуру. Она потому и закрытая что меняется от версии к версии, но надо отдать должное программистам -- обратную совместимость обеспечили на должном уровне (это я про автодэск). Любопытно Ваше замечание "с помощью API какой-нибудь CAD программы" (я позволил себе исправить очепятку). По сути -- эту "CAD программу" кто-то же написал, ага. Reference содержит лишь малую часть битовых масок, и даже более -- ssget не возвращает hiden маски, кому-то будут интересны и те возможности, которые документацией опущены.
==>
Цитата:
Сообщение от Do$ Посмотреть сообщение
Чтобы на чертеже что-то идентифицировать, нужно
Я пошел по второму пути. В этой связи теперь возникли вопросы и в области программирования. У нас есть entmake и ssadd. Взаимосвязаны ли они? Если не использовать ssadd, то ssget вернет потом объект, созданный entmake? Ибо как я понял, entmake наносит объект на рисунок, а ssadd его "регистрирует" в базе данных рисунка. Говоря проще -- маскИрует.
==>
Далее. Мне нужно вставлять и удалять объекты типа polyline (замкнутый), а именно равнобедренный triangle константной площади и ориентацией top, down, left, right. Я полистал reference, говноучебники всякие, но нашел скудный кусочек описания entmake, который и описанием назвать-то можно только с натяжкой. Вот, например, надо вставить треугольник,
Код:
[Выделить все]
 (entmake (list (cons 0 "LWPOLYLINE") (list 10 x1 y1) (list 10 x2 y2) (list 10 x3 y3)))
Которая из трех координат будет началом, а которая -- концом? Какими кодами задаются цвет, тип, вес, замыкание (про замыкание я где-то видел, но не могу вспомнить) линий примитивов?
==>
Кроме того, есть еще вопрос. Я сдвинул на чертеже центр пересечения осей координат. Раньше мои объекты находились, в отрицательность плоскости, а теперь в положительной, но! программа также как и раньше возвращает отрицательные координаты, хотя новые объекты в своих свойствах характеризуются уже положительными координатами.
Castorsky вне форума  
 
Непрочитано 09.05.2014, 12:13
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Castorsky Посмотреть сообщение
Ибо как я понял, entmake наносит объект на рисунок, а ssadd его "регистрирует" в базе данных рисунка.
Неправильно поняли.
Цитата:
Сообщение от Castorsky Посмотреть сообщение
Которая из трех координат будет началом, а которая -- концом? Какими кодами задаются цвет, тип, вес, замыкание (про замыкание я где-то видел, но не могу вспомнить) линий примитивов?
Для этого есть справочники, а не форумы - DXF reference.
Цитата:
Сообщение от Castorsky Посмотреть сообщение
Раньше мои объекты находились, в отрицательность плоскости, а теперь в положительной, но! программа также как и раньше возвращает отрицательные координаты
Googlи WCS и UCS.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 09.05.2014, 14:01
#11
Сергей812


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


Цитата:
1 Автоматически связывает розетки с центральным шкафом по заданным системам кабелепровода
Здравая мысль - прокладывать на чертеже общие допустимые трассы от центрального оборудования, чтобы потом довести от отдельного оборудования до такой трассы и выбрать из списка - к какому центр. оборудованию довести. Про автопрокладку забудьте - если архитекторы не в составе вашей фирмы - это вообще гиблое дело. Редко когда нарисовано все в своих слоях и т.д.

Цитата:
2 Соединяет каждую розетку своим типом провода
3 Создает для каждого типы провода, шкафов, розеток и закладных свой слой
Что пропишете в БД оборудования и кабелей-то и создаст. Или сделать палитры с настроенными блоками.

Цитата:
4 Выбирает наиболее оптимальный маршрут
Этак совсем проектировщиков разучите думать) Трудозатраты на реализацию вспомогательной автоматизации (рутинные операции) и на полную автоматизацию различаются в разы.

Цитата:
5 Автоматически номерует розетки по порядку
Получите список объектов по кабелю-полилинии и нумеруйте. Опять же не гонитесь за полной автоматизацией нумерации. "Большой кнопки" все равно не получите)

Цитата:
6 При внесении изменений перенумеровывает весь проект заново
Не всегда надо весь проект перенумеровать. Например, монтажники уже вышли на объект и протянули часть кабелей, промаркировали - и тут проектировщик небрежным движением руки переименовал все кабели в проекте)


Цитата:
7 Автоматически считает количество розеток по каждым типам отдельно
8 Позволяет автоматически считать длины кабелей разных типов
Лучше уделить больше внимания на интерфейс взаимодействия программы с пользователями и с Autocad/чертежами. Задачи подсчета оборудования и кабелей, когда они уже как то инициализированы - одна из самых простых задач из вышеперечисленных, имхо)

P.S. В свое время сделал программу - где нумерация оборудования происходит в одном диалоге с указанием типа оборудования.. поработал в ней (поскольку по роду основной деятельности - проектировщик).. понял - что интерфейс надо было делать абсолютно по другому.. лишних движения в два-три раза, чем нужно) Поэтому не рассчитывайте - что у вас будет с начала полностью работоспособная программа.. для начала реализуйте хотя бы базовый функционал.. и подумайте - стоит ли развивать программу дальше.. Или проще взять какое то вертикальное решение типа MEP, как уже ранее тут упоминалось.. и "подточить" его функционал до требуемого

Последний раз редактировалось Сергей812, 09.05.2014 в 17:23.
Сергей812 вне форума  
 
Непрочитано 10.05.2014, 03:26
#12
zamtmn

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


Перечисленные в первом посте пункты (кроме 3 - идентификация оборудования слоями - несеръезно) есть в http://forum.dwg.ru/showthread.php?t=8707&page=11
zamtmn вне форума  
 
Непрочитано 10.05.2014, 10:17
#13
Сергей812


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
кроме 3 - идентификация оборудования слоями - несеръезно
Почему несерьезно - для разбивки оборудования по различным разделам вполне подходит (когда делаются комплексные проекты для небольших объектов - в одном томе пожарка, охрана, мультирум, скс и т.д.). И потом для вывода в КЖ/спецификацию по разделам без лишних ухищрений обрабатывать нужные группы слоев.

P.S. Удивило - что в вашей ветке так мало активных участников, участвующих в тестировании программы.
Сергей812 вне форума  
 
Непрочитано 10.05.2014, 17:53
#14
zamtmn

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


Просто голом автокаде других способов нет - вот люди и выкручиваются
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите взаимосвязь программы и чертежа



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите чайнику удобные и недорогие программы Kuznkuz Прочее. Программное обеспечение 5 23.08.2010 11:05
Импорт из АutoCAD 3D в расчетные программы (Лира, Скад) Вовчанцый SCAD 4 07.12.2009 05:19
Автозагрузка приложения до загрузки чертежа Ax3 Программирование 14 15.02.2008 23:29
Подскажите какие программы выбрать... Дмитррр Прочее. Программное обеспечение 16 21.09.2007 01:00
Подскажите с оформлением чертежа Gesha AutoCAD 3 25.04.2006 12:46