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

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

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

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

Всем привет!
В свободное время делаю для себя небольшую 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, HATCH
  • некоторые потуги автоматизации слаботочных разделов проекта
Cтраничка программы на SourceForge
Cтраничка программы на GitHub
Cтраничка программы на Ohloh

Программа пишется на паскале, компилируется в Lazarus/FPC. Исходный код открыт и лежит в SVN репозитории Git репозитории
Текущую сборку программы можно взять тут, но лучше тут (более менее свежие сборки для Windows_x86 и для Linux_x86_64, другие - стареханькие). Для работы требуется аппаратная поддержка OpenGL на целевом компе
Также программу можно собрать самомтоятельно, для этого понадобятся:
  • релизный Lazarus версии не менее 2.0.10 на базе FPC версии не менее 3.2

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

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

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


Последний раз редактировалось zamtmn, 09.09.2022 в 20:53.
Просмотров: 209341
 
Непрочитано 17.06.2016, 02:26
#141
Marsikus

software quality engineer
 
Регистрация: 19.09.2009
Харьков, Украина
Сообщений: 451


Ну, отчасти и в этом. SVN я в работе не застал, так что Git стал привычней, к тому же современные проекты в большинстве своем в git и лежат на GitHub, и я каждый день с такими проектами работаю. Год назад в качестве увлечения тестировал LibreCAD, на GitHub и баги репортить удобно.
__________________
energokot.blogspot.com
Marsikus вне форума  
 
Автор темы   Непрочитано 17.06.2016, 11:10
#142
zamtmn

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


Для пользователя разница не велика - вбивать git pull или svn up, а если юзать какойнибудь гуй - то ее вообще нет. ЕМНИП у LibreCAD багтрекер какраз на соусфорже лежит.
По мне git маленько для инопланетян, svn проще и привычней))
zamtmn вне форума  
 
Непрочитано 17.06.2016, 13:33
#143
Marsikus

software quality engineer
 
Регистрация: 19.09.2009
Харьков, Украина
Сообщений: 451


Либрекад давненько на гитхабе обосновались: https://github.com/LibreCAD/LibreCAD
А то что гит может сношать мозг - это да, привыкать к нему приходится долго и тяжко.
__________________
energokot.blogspot.com
Marsikus вне форума  
 
Автор темы   Непрочитано 18.06.2016, 15:46
#144
zamtmn

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


Вобщем сделал преобразование веса в пиксели по рабочекрестьянски)) получилось не похоже на автокад. но тоже неплохо))
Миниатюры
Нажмите на изображение для увеличения
Название: lw.gif
Просмотров: 124
Размер:	286.5 Кб
ID:	172281  

Последний раз редактировалось zamtmn, 18.06.2016 в 15:54.
zamtmn вне форума  
 
Непрочитано 18.06.2016, 17:32
#145
АлексЮстасу

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
с переменным успехом ковыряюсь.
Базовые вещи всяко приходится "копировать" - нужна совместимость. А дальше - зависит от фантазии))
Выглядит очень даже
Есть ли в Вашем CAD аналог XRecord, расширенных данных?

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

Как у Вас сделаны 3D полилинии? По-моему, удачно сделано в MicroStation - в нем есть один универсальный примитив, полилинии (linestring), которые являются двумерными или трехмерными в зависимости от значений Z вершин. При этом их полилинии отображают типы линий, в отличие от автокадовских. Может быть вообще не нужен и примитив "отрезок" - это же тоже частный случай полилиний?
Кстати, в MicroStation гораздо лучше чем в Автокаде сделаны стили линий - без непреодолимых штрихов в началах-концах, с отражением форм в оч. коротких линиях, с возможностью привязки форм к вершинам.
Еще в MicroStation быстрее чертить из-за того, что вызванные команды активны до вызова другой команды. Т.е. не нужно все время вызывать команду, если, допустим, нужно начертить много линий или вставить подряд много блоков. Эта поддержано окошками каждой из команд с их параметрами, появляющимися при вызове команд.
И пример совместимости же - MicroStation работает с dwg, как с родным, имея свой устойчивый и удачный формат dgn. Т.е. пользователи MicroStation просто открывают (или даже в нем создают!) dwg, и прямо в нем работают.
Еще - MicroStation гораздо лучше работает с большими объемами данных.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 18.06.2016, 19:29
#146
zamtmn

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


>>Есть ли в Вашем CAD аналог XRecord, расширенных данных?
Да есть. к любому примитиву можно привязать любые типизированные данные. Эти данные будут сохраняться в dxf вместе с примитивом, отображаться\редактироваться в инспекторе объектов.

>>Как у Вас сделаны 3D полилинии?
Я хоть с MicroStation не сталкивался, но видимо похоже на нее. Тип линий на 3Д полилинию применяется и отображается (возможно потом уберу) на ней.
Насколько я понимаю в автокаде у 3Д полилинии не отображается тип линий потому что у этого примитива нет нормали - что логично.
В зкаде сейчас есть отрезки, 2Д и 3Д поли - всё чуток недоделаное: у отрезков нет нормали, у всех поли нет сглаживаний, у 2д нет дуговых сегментов... список недоделок можно продолжать безконечно))

>>Еще в MicroStation быстрее чертить из-за того, что вызванные команды активны до вызова другой команды
Это не фундаментальное различие. команду можно написать чтоб она работала "зациклено" или только 1 раз. Тут больше дело в немодальном окне параметров команды. Я для параметров команды использую инспектор объектов - имхо очень удобно. Пользователей это почемуто нервирует))


>>Но принципы работы и пр. могут же быть совсем другими - без копирования пороков. В т.ч. и связанных с форматом данных.
Я вот не представляю как микростейшен сохранит в DWG свою 3Д полилинию с формами в узлах - она не отобразится в автокаде. Или отобразится, но превратится в какието другие примитивы
zamtmn вне форума  
 
Непрочитано 18.06.2016, 21:41
#147
АлексЮстасу

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
к любому примитиву можно привязать любые типизированные данные. Эти данные будут сохраняться в dxf вместе с примитивом, отображаться\редактироваться в инспекторе объектов.
О!
Но идея "Вариант подхода к построению CAD или модернизации CAD" Вас, похоже, не вдохновила?
Цитата:
Сообщение от zamtmn Посмотреть сообщение
у этого примитива нет нормали
Это что за зверь? По-моему, неотображение типов линий у 3D полилиний - явная автокадовская слабость. Мнение, как пользователя...
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Это не фундаментальное различие. команду можно написать чтоб она работала "зациклено" или только 1 раз.
Фундаментальное для пользователей. По-моему, действие чаще нужно повторять несколько раз, и с зацикленностью быстрее, меньше кликов. А, главное, нет недостатков - сейчас в Автокаде, если действие нужно произвести один раз, все равно нужен клик на другую команду.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Я вот не представляю как микростейшен сохранит в DWG свою 3Д полилинию с формами в узлах - она не отобразится в автокаде. Или отобразится, но превратится в какието другие примитивы
Ну, да, естественно. Может вообще утратить тип линий. ...По каким-то причинам лучше работать в Автокаде, а по каким-то - в MicroStation.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 18.06.2016, 23:13
#148
zamtmn

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


>>Но идея "Вариант подхода к построению CAD или модернизации CAD" Вас, похоже, не вдохновила?
Если я правильно понял, то идея не нова. Я далек от ГИС поэтому мое ИМХО:
1 - Есть примитивы, у этих примитивов есть свойства. Разделять реализацию этих свойств не надо - какая разницы координата это или какойнибудь GUID спрятаный внутри xdata
2 - Также ненадо разделять привычную отрисовку чертежа в области отображения\редактирования и получение табличного\древовидного представления чертежа.
Т.е. что процесс черчения, что процесс табличной обработки чертежа это по сути одно и тоже - "чуток" разное представление одних и техже данных. Эти способы должны друг друга дополнять - мне лень крутить огромный чертеж и искать на нем шкаф ШУ1, я включаю табличное\древовидное представление - фильтрую по свойствам... сортирую по свойствам... и вот он искомый шкаф)) Подобный "навигатор" (или "менеджер" хз как лучше назвать) для зкада в планах (надеюсь не несбыточных ) на реализацию.

>>Это что за зверь? По-моему, неотображение типов линий у 3D полилиний - явная автокадовская слабость. Мнение, как пользователя...
Направление вдоль которого работает THICKNESS и перпендикулярно которому отображается тип линии. Нет направления - нет возможности отрисовать тип
zamtmn вне форума  
 
Непрочитано 19.06.2016, 00:27
#149
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
у отрезков нет нормали
Есть: http://adn-cis.org/forum/index.php?t...20610#msg20610
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 19.06.2016, 00:39
#150
zamtmn

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


было:
Цитата:
В зкаде сейчас есть отрезки, 2Д и 3Д поли - всё чуток недоделаное: у отрезков нет нормали
то что в автокаде она есть я в курсе.
zamtmn вне форума  
 
Непрочитано 19.06.2016, 00:45
#151
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


zamtmn
Прошу прощения. Я не понял, что речь шла не об AutoCAD.
Александр Ривилис вне форума  
 
Непрочитано 19.06.2016, 11:32
#152
DanielDem


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


Здравствуйте!
Скажите а не планируете переходить на платформу NET?

Сам сделал небольшую программу для ПОДД на WPF и теперь тоже расширяю под CAD
DanielDem вне форума  
 
Непрочитано 19.06.2016, 12:34
#153
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 210


Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>Еще в MicroStation быстрее чертить из-за того, что вызванные команды активны до вызова другой команды
Это не фундаментальное различие. команду можно написать чтоб она работала "зациклено" или только 1 раз. Тут больше дело в немодальном окне параметров команды. Я для параметров команды использую инспектор объектов - имхо очень удобно. Пользователей это почемуто нервирует))
Свойства в инспеторе очень даже удобно менять, как то все в одном месте. Первое время как то не привычно, потом все как по рельсам, удобно! Тем более есть возможность добавить что то свое, если есть желание и знания, открытый исходный код это круто.


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Еще - MicroStation гораздо лучше работает с большими объемами данных.
Я пробовал работать около 1 млн. примитивов (точно не помню) на ZCADе полет отличный. Машинка пентиум 4, оперативки 1-2гига. Думаю Автокады после 2008, даже не установятся на такую)))
veb86 на форуме  
 
Непрочитано 19.06.2016, 19:12
#154
АлексЮстасу

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Если я правильно понял, то идея не нова. Я далек от ГИС поэтому мое ИМХО:
...
"ГИС работают на компьютерах, мы ГИС не занимаемся, следовательно компьютеры нам не годятся".
Я тоже ГИС не занимаюсь, но какая разница, откуда идеи, если они проверенные и продуктивны для любого черчения?

Я не программист. Т.е. оч. смутно и неверно представляю, что, чем, как программно реализуется. Я только пользователь и технолог.
Как пользователь и технолог я уверен, что из меню объектов чертить легче, быстрее и качественнее.
И как пользователь и технолог вижу большие возможности расширенных данных - с их помощью можно превратить графические элементы в "объекты", а чертеж в "информационную модель". Под "объектами" я понимаю графические элементы с присоединенными к ним расширенными данными, состоящими из полей для нужных характеристик и идентификатора типа объектов.
Т.е., допустим, не просто блок с названием "ШУ1", а этот блок с полем данных названия типа объекта "шкаф ШУ1" и с полями для его характеристик. Не просто полилиния какого-то цвета и веса в слое "Трубы", но с присоединенными данными названия типа объекта "труба d100", материала, толщины стенок, назначения, производителя и т.п.

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

Вот, например, возможности, которые дает описание "объектов" (я изложил в блоге в "OD/DB...", но там, похоже, слишком много букв...):
Миниатюры
Нажмите на изображение для увеличения
Название: Возможности_описания_стандарта_3.png
Просмотров: 70
Размер:	68.5 Кб
ID:	172295  
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 19.06.2016, 20:03
#155
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 210


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Т.е., допустим, не просто блок с названием "ШУ1", а этот блок с полем данных названия типа объекта "шкаф ШУ1" и с полями для его характеристик. Не просто полилиния какого-то цвета и веса в слое "Трубы", но с присоединенными данными названия типа объекта "труба d100", материала, толщины стенок, назначения, производителя и т.п.
Если я Вас правильно понял, это все возможно сделать, даже как бы это уже есть, но только применительно к кабелям, тип кабеля, его сечение, потом этим кабелем чертишь как обычной полилинией. Так же расставил пожарные извещатели, выбрал их тип "ИП ....", потом растравляешь их уже этим типом, если надо быстро изменить тип, то групповое выделение и меняешь. Все это программа обрабатывает ни как тупо блок с каким то именем, а больше как индивидуальный примитив (извещатель дымовой, извещатель тепловой). из всего этого можно получить спецификацию, одним нажатием кнопки.
Все это можно попробовать рассчитывать и заставить программу скажем самой получать сечение проводов исходя из нагрузки и автомата защиты, да и автомат защиты она сама подобрать может надо только прогать...

Последний раз редактировалось veb86, 19.06.2016 в 23:17.
veb86 на форуме  
 
Непрочитано 19.06.2016, 20:20
#156
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,537


Цитата:
Сообщение от DanielDem Посмотреть сообщение
Скажите а не планируете переходить на платформу NET?
зкад написан на freepascal, который не поддерживает .NET, к тому же зкад написан как кроссплатформенное приложение, так что нет.
gomer вне форума  
 
Автор темы   Непрочитано 19.06.2016, 21:11
#157
zamtmn

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


DanielDem
Цитата:
Скажите а не планируете переходить на платформу NET?
Точно нет.

АлексЮстасу
В составе toolpac была ккомнда "рисовать по образцу". Она случайно не заменит описаное меню объектов?
Работает примерно так: тыкаешь в "целевой" примитив, следующими действиями команда рисует копию "целевого" примитива. Т.е. ткнул в полилинию - дальше рисуешь такуюже с такойже толщиной, слоем, типом ... (вот про расширеные данные непомню). Ткнул в вставку блока - дальше вставляешь такиеже вставки... Смысл вроде тотже, громоздкого меню нет))
zamtmn вне форума  
 
Непрочитано 19.06.2016, 21:28
#158
АлексЮстасу

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Смысл вроде тотже, громоздкого меню нет))
Разница примерно такая же, как между изображением купюр на экране и электронными деньгами.

Пришлите какой-нибудь чертеж, достаточно представительный набором отображаемых объектов. Я попробую продемонстрировать возможности OD/DB-подхода с помощью своего приложения-прототипа.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 19.06.2016, 22:14
#159
zamtmn

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


Ок. Выручает вас подобное меню и ускоряет. очень хорошо. Мне оно поможет наврятли((
Я сомневаюсь в возможности автоматически катологизировать "ВСЕ" и выдать "ВСЕ" пользователю в виде "меню" которым удобно пользоваться. ИМХО для подобного "меню" возможно только ручное\полуручное создание.

В зкаде есть чтото подобное, строится "автоматически" на основе файлов описаний изделий, определений блоков в базе УГО. привожу картинку.
На картинке меню бд зкада, выбран некий кабель у которого вариантов исполнений по сечению\жильности в районе сотни - это всё предлагаете тащить в "меню"? Я лучше застрелюсь чем подобным меню буду пользоваться))

Кроме того - начертить это всеголишь полдела. Надо потом еще отредактировать начерченое. Т.е. сегодня начертили "обезличеный" кабель. завтра уточнили мощьность и выбрали этому кабелю сечение\жильность.
Миниатюры
Нажмите на изображение для увеличения
Название: menu.png
Просмотров: 73
Размер:	140.6 Кб
ID:	172303  
zamtmn вне форума  
 
Непрочитано 20.06.2016, 04:25
#160
АлексЮстасу

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


Гм... Вы меня не раз и по-разному сейчас озадачили.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Выручает вас подобное меню и ускоряет. очень хорошо. Мне оно поможет наврятли((
Вот это меню, которое Вы приложили, Вас выручает, Вам помогает?
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Я сомневаюсь в возможности автоматически катологизировать "ВСЕ" и выдать "ВСЕ" пользователю в виде "меню" которым удобно пользоваться. ИМХО для подобного "меню" возможно только ручное\полуручное создание.
Вашим меню Вам удобно пользоваться? В нем каталогизировано "ВСЕ"?
И я же не писал, что автоматом можно создать полноценное меню. Наоборот, писал, что необходима возможность редактирования.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
В зкаде есть чтото подобное, строится "автоматически" на основе файлов описаний изделий, определений блоков в базе УГО. привожу картинку.
На картинке меню бд зкада, выбран некий кабель у которого вариантов исполнений по сечению\жильности в районе сотни - это всё предлагаете тащить в "меню"? Я лучше застрелюсь чем подобным меню буду пользоваться))
В этом меню "сотни вариантов" реализованы, втащены? Вы это меню используете? Не застрелимшись?
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Кроме того - начертить это всеголишь полдела. Надо потом еще отредактировать начерченое. Т.е. сегодня начертили "обезличеный" кабель. завтра уточнили мощьность и выбрали этому кабелю сечение\жильность.
Вы этими средствами редактируете, уточняете, выбираете?

Озадачивает главным образом то, что у Вас уже реализовано многое (может и вообще все, а, может, и больше), что я только предлагаю. Но что Вы объявляете ненужным.

Что с помощью этого меню бд можно делать?
Судя по картинке, выбрав в нем тип объекта, можно просматривать и присваивать значения свойств (у меня - "характеристик") объектов. Свойства==характеристики Вы реализовали средствами XData или XRecord? Или как-то иначе?

Из этого меню бд можно чертить, выбрав нужный тип объекта?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание CAD программы с нуля

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

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