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

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

Создание CAD программы с нуля

Ответ
Поиск в этой теме
Непрочитано 19.11.2013, 00:29 6 |
Создание CAD программы с нуля
zamtmn
 
КИПиА
 
Tyumen
Регистрация: 21.03.2005
Сообщений: 1,429

Всем привет!
В свободное время делаю для себя небольшую CAD программу - всегда было интересно как это работает внутри.
На данный момент есть следующие наработки:
  • Довольно быстрый OpenGL рендеринг чертежа
  • Кроссплатформенность (Windows/Linux, x86/x64, win/gtk/qt)
  • поддержка подмножества DXF версии 2000
  • поддержка SHX, TTF шрифтов
  • поддержка типов линий
  • поддержка примитивов POINT, LINE, CIRCLE, POLYLINE, LWPOLYLINE, ARC, ELLIPSE, INSERT, TEXT, MTEXT, 3DFACE, SOLID, SPLINE
  • некоторые потуги автоматизации слаботочных разделов проекта
Cтраничка программы на SourceForge
Cтраничка программы на GitHub
Cтраничка программы на Ohloh

Программа пишется на паскале, компилируется в Lazarus/FPC. Исходный код открыт и лежит в SVN репозитории Git репозитории
Текущую сборку программы можно взять тут (более менее свежие сборки для Windows_x86 и для Linux_x86_64, другие - стареханькие). Для работы требуется аппаратная поддержка OpenGL на целевом компе
Также программу можно собрать самомтоятельно, для этого понадобятся:
  • Lazarus версии не менее 1.6 на данный момент нужна последняя версия Lazarus из trunk, FPC версии не менее 3.0.4
  • SVN клиент чтоб скачать исходные коды (под Windows лучше всего подойдет TortoiseSVN, мануал)
Если Вы соберете zcad для Windows64 также понадобится 64 разрядная версия библиотеки GLU32.DLL (системная не подходит, т.к. старой версии) - прилагаю к этому посту, необходимо будет положить ее рядом с ексешником, заменив идущую в дистрибутиве zcad`а 32 разрядную версию GLU32.DLL

Программа не требует установки и не пишет\читает ничего в системные папки (за исключением TEMP) Под windows не допускаются кирилические (и другие) символы в пути к программе (в путях к dxf файлам допускаются), lunux версия такой болезнью не страдает.

Для запуска доступны следующие ключи командной строки:
  • NLL - отключение загрузки файла докинга окон, окна открываются непристыкованными, но докинг работает
  • SI - полное отключение докинга, зкад работает в однооконном режиме (очень недоделанном)
  • UPDATEPO - отключение закрузки локализации, будет запущена английская версия. Также в этом режиме доступна команда обновления файлов локализации
  • NOSPLASH - отключение показа окна загрузки
  • путь/к/файлу.dxf - открыть указанный файл

Любые замечания/предложения приветствуются!

Вложения
Тип файла: zip glu.zip (903.8 Кб, 352 просмотров)


Последний раз редактировалось zamtmn, 25.07.2018 в 11:55.
Просмотров: 97440
 
Непрочитано 15.09.2019, 22:00
#341
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,715


Цитата:
Сообщение от zamtmn Посмотреть сообщение
На чертеже вставлено несколько устройств. они между собой связаны
Чтобы сразу не закопаться, да и в принципе естественно, что лучше изначально разделить разное. Описания-определения объектов и связи между объектами. Первичное, по-моему, описания-определения. Т.к. связи бывают у чего-то определенного, и зависят от сущностей и свойств объектов. Т.е. сначала разобраться с описаниями-определениями. А потом с взаимосвязями.
С определениями-описаниями, например, такие вопросы:
- в целом способ хранения идентификаторов типов объектов и характеристик объектов. Как в расширенных данных или еще как-то.
- сразу встроить в графические элементы эти возможности или добавлять их по необходимости.
- хранить ли идентификаторы и характеристики одним способом или разными. Одним, допустим - в "таблицах", где одно поле отведено для идентификаторов типов объектов, а остальные для характеристик. Или разными, допустим, идентификатор - название таблицы, а их поля для характеристик.
- определять уже существующие неопределенные графические элементы.
- определять графические элементы на основе их графических свойств. Как у Вас в примерах: блок такой-то в таком слое и пр. - извещатель дымовой потолочный, а эдакий - двигатель.
- определять один графический элемент как несколько типов объектов.
- заменять объектные определения.
- удалять объектные определения из графических элементов.
Вопросов много.
И со "связями" тоже сейчас неопределенность. В одних случаях Вы имеете в виду видовую принадлежность - когда пишете про потребителей энергии и частный случай, двигатель, про "ветки дерева".
В других случаях пишете о связях конкретных объектов друг с другом, о "главных" и "представителях"...
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 16.09.2019, 09:41
#342
zamtmn

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


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

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

...

>>Вопросов много.
Да. А объяснятель из меня плохой. надо доводить до возможности показать концепт.


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

>>И со "связями" тоже сейчас неопределенность. В одних случаях Вы имеете в виду видовую принадлежность - когда пишете про потребителей энергии и частный случай, двигатель, про "ветки дерева".
Нужно все идентифицировать - как отдельную часть "размазанного" примитива, так и весь его в целом.
zamtmn вне форума  
 
Непрочитано 17.09.2019, 03:55
#343
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,715


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Можно встроить, но это неудобною приведет либо к появлению одного гиперпримитива с гигантским набором свойств, либо к 100500 одинаковым примитивам, отличающихся только набором дополнительных свойств
Я представлял себе это как одно обязательное поле - для идентификатора типа объекта плюс возможность определять любое нужное число свойств. Причем, обязательное поле изначально пустое, а при вставке из меню объектов с автоматической записью в него названия типа объекта. И при вставке обычной командой запись в него условного названия. Если блок, то название блока+слой+цвет. Или т.п.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
лавные и представители - это возможность движка работать с "размазаными" примитивами, состоящими из совершенно разных примитивов, но объедененные набором дополнительных данных. Будь это извещатель на плане и на схеме, колодец на плане и на профиле - неважно.
Гм... Может быть решить это через поле ID объектов - для всех объектов, отображающих один, относящихся к одному, давать одинаковое значение? Тогда при удалении-добавлении что "главных", что "представителей" ничего не нарушится.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 19.09.2019, 11:36
#344
zamtmn

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


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

>>Может быть решить это через поле ID объектов
Это можно решить разными способами, суть не в этом. Суть в том набор данных размазывается по чертежу.

>>Тогда при удалении-добавлении что "главных", что "представителей" ничего не нарушится.
Будут теже проблемы. например на чертеже есть "главный" и "представитель" мы копируем:
1 - оба примитива
2 - только главного
3 - представителя
я хочу чтобы в результате
1 - появился новый главный и новый представитель нового главного
2 - появился новый главный
3 - появился новый представитель старого главного
Решение влоб нового главного и нового прелставителя этого нового главного не даст. Нужно вмешательство в движек, в алгоритм копирования. Такое же вмешательство нужно в удаление и сохранение\загрузку
zamtmn вне форума  
 
Непрочитано 19.09.2019, 13:45
#345
bigden


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


zamtmn, а какую ИДЕ используете?
bigden вне форума  
 
Автор темы   Непрочитано 19.09.2019, 13:49
#346
zamtmn

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


IDE - Lazarus, компилятор - FPC
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание CAD программы с нуля

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск