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

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

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

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

Всем привет!
В свободное время делаю для себя небольшую 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 Кб, 557 просмотров)


Последний раз редактировалось zamtmn, 09.09.2022 в 20:53.
Просмотров: 208300
 
Непрочитано 29.08.2017, 03:42
#221
bigden


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


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
вот сейчас пытаюсь в с++ посчитать осадку свайного поля под 4-х секционным 18-этажным зданием на основе текстовых файлов SCAD'а
это сетка из скада или свою генерируете?
bigden вне форума  
 
Непрочитано 29.08.2017, 06:34
| 1 #222
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Может быть, плюнуть и переделать программу на что-то более масштабируемое и универсальное (типа ObjectArx на c++).
На мой взгляд, на авттокадах/нанокадах/брикскадах и т.д. ваша программа могла бы найти больше пользователей.
Много чего "может быть". Советовать можно что угодно, и советы могут быть справедливыми.

Но zamtmn делает программу для себя. По своей концепции. Именно "с нуля". Не взял какие-нибудь CAD-компоненты, которые есть для Delphi. Ради интереса и для "унутреннего употребления". При этом он уже приобрел бесценный опыт. И с другими делится. Да, что-то не получается, где-то не туда пошел, вернулся. Ничего страшного.

Конечно, этот проект никогда не будет коммерчески успешным, так он и не задумывался таким.

Удачи, zamtmn.
ShaggyDoc вне форума  
 
Непрочитано 29.08.2017, 07:53
#223
ProjectMaster


 
Регистрация: 21.08.2017
Сообщений: 1,064


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Для такой задачи формошлепство в делфи - идеальный случай. срр тут ненужное усложнение.
Но это имхо и офтоп
На самом деле - нет. Object Pascal не поддерживается напрямую производителями основных CAD. Большинство алгоритмов, которыми можно воспользоваться, написаны на c++. Некоторые функции можно просто скопировать и не переводить на Object Pascal.
C++ я выучил за месяц, читая книжку в автобусе по дороге на работу. Время, потраченное на изучение C++ с лихвой экономиться при разработке.
У c++ есть система шаблонов типа vector и система перегружаемых операторов для классов, которые в разы упрощают работу с кодом. Для c++ есть современные компиляторы, которые позволяют работать на 64-разрядной архитектуре, поэтому для больших задач скорость работы программы на с++ больше возможности увеличить.

P.s.
Я не сравниваю возможности Net и чистого c++, так как не специалист в Net. Возможно, Net предпочтительнее c++.

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от bigden Посмотреть сообщение
это сетка из скада или свою генерируете?
Сваи моделируются связями односторонней жесткости в SCAD. В Скаде создается группа из элементов односторонней жесткости с именем, соответствующей геологической колонки.
Выводится txt файл расчетной схемы и txt файл нагрузок на связи конечной жесткости.

Потом осадка каждой сваи считается методом послойного суммирования как для условного фундамента с учетом влияния соседних условных фундаментов. Нагрузка от грунта при выемке котлована не учитывается. Для каждой сваи-пружинки считается откорректированный коэффициент жесткости.

Программа формирует txt файл расчетной схемы с учетом откорректированных жесткостей свай,которые получены методом послойного суммирования.

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Удачи, zamtmn.
Присоединюсь.

Последний раз редактировалось ProjectMaster, 29.08.2017 в 08:28.
ProjectMaster вне форума  
 
Автор темы   Непрочитано 29.08.2017, 08:39
#224
zamtmn

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


Да у С комюнити больше, да это промстандарт... Но алгоритмы они одинаковые что на паскале, что на с
С++ непомерно сложнее и просто си и паскаля, толку от его выучивания за месяц нет никакого - нужна практика. Это что за алгоритмы на нем пишут))?

>>У c++ есть...
В современном паскале это тоже всё есть.
холивар с[++] vs pascal завязываем, или открываем другую тему. Тут мне гораздо интересней услышать претензии к новому интерфейсу

ShaggyDoc, ProjectMaster
Спасибо!
zamtmn вне форума  
 
Непрочитано 29.08.2017, 10:29
| 1 #225
veb86

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


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Прошу понять меня правильно. Эйнштейну приписывают слова (примерно), что талант заключается в умении приложить все усилия для достижения цели, а гений состоит в умении отказаться от этой цели (несмотря на все усилия) в пользу другой. Может быть, плюнуть и переделать программу на что-то более масштабируемое и универсальное (типа ObjectArx на c++).
На мой взгляд, на авттокадах/нанокадах/брикскадах и т.д. ваша программа могла бы найти больше пользователей.
ZCAD прекрасен тем что он открыт и бесплатен, конечно все что будет реализоваться, будет направлено в основном на развитие САПРа в целом и в сторону слаботочных сетей и силового электроснабжения. Я в проектирование уже пользуюсь zcad-ом, и уже ощутил ускорение проектирования, конечно полноценно оформить чертеж тяжело(изза нехватки некоторых команд и некоторых примитивов). Жаль что у меня пока мало времени на развитие zcad-а, думаешь все, что завтра сяду за кодинг и снова что то происходит, и опять все откладываешь. Когда в zcad-е появится централизация, станет совсем здорово. Очень много задумок, даже странно что другие инженерные коммуникации не занимаются развитием своих направлений в zcad-е
И самое главное что греет, это что ZCAD ты можешь использовать всюду, твои модули навсегда с тобой. И в конце концов на дворе 2к17, а у человечества нет полноценного опенсоурсного када!

zamtmn-у респект и уважуха!
veb86 вне форума  
 
Автор темы   Непрочитано 08.10.2017, 01:58
#226
zamtmn

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


Ну и раз пошла такая пьянка - еще "релизик"
Навигатор устройств научился обновляться вместе с изменениями на чертеже, но пока кнопку ручного обновления на всякий случай оставляю))
Миниатюры
Нажмите на изображение для увеличения
Название: Навигатор.png
Просмотров: 247
Размер:	158.0 Кб
ID:	194464  
zamtmn вне форума  
 
Автор темы   Непрочитано 21.12.2017, 20:12
#227
zamtmn

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


Вышла новая версия Lazaarus 1.8 с FPC 3.0.4, но сборка ими zcad`а невозможна((, по прежнему только транк.
Я чуток опоздал с патчами для системы докинга и тулбаров в лазарус и они не попали в ветку 1.8. со следующей версии лазаря постараюсь держать совместимость с его стабильными релизами
zamtmn вне форума  
 
Непрочитано 03.02.2018, 00:25
#228
veb86

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


Всем привет!
Хочу представить новый модуль для zcad-а, другой подход к прокладке кабелей в zcadе. Пользуюсь данным модулем больше года для черчения слаботочных сетей. Пока еще сбоев не давал, тьфу тьфу тьфу. Работу модуля продемонстрировал в видео, записывал экран первый раз, что бы было понятнее писал с голосом. Увы, дешевенький микрофон записал кучу шумов, другого нет(((.

Increase Size Decrease Size Нажмите для просмотра
https://www.youtube.com/watch?v=jklTCAnjzdE
Далее читать лучше после просмотра.
Модуль не совершенен, как я сказал в видео, был задуман как эксперимент, но оказался очень даже жизнеспособным. Помогает легко ускорить работу при нумерации, подсчете длины, плюс наличие полуавтоматической расстановки датчиков и готовые под рукой УГО, значительно ускоряют черчение. Хотел прикрутить модуль для электрики, что бы он собирал электрические схемы, но увы некоторые моменты прибил гвоздями, поэтому буду переписывать часть кода. Следующие идеи, которые должны появиться после переписи кода:
- добавить еще пункт к суперлинии, который будет отвечать за тип прокладки в штробе, в ст.тр, в мет лотке и т.д. Естественно с автоматическим добавлением условного обозначения. Плюс сбор всех кабелей и расчет необходимого лотка. Постараюсь учесть и кабели, которые прокладываются по другим трассам. Этот пункт планируется отработать как следует.
- привязать этот модель к электрики. Как много данный модуль будет решать в электрике, пока не представляю. Нужно будет найти баланс гибкости.
Пока такие планы по развитию данного модуля.

Предложения, идеи, замечания пишите. Возможно кто то, поделится своим опытом по решению подобных задач, я буду только рад. Если что, к критике отношусь спокойно.
veb86 вне форума  
 
Автор темы   Непрочитано 05.02.2018, 00:17
#229
zamtmn

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


Несколько замечаний)):
-размеры можно не взрывать, но тогда придется после масштабирований настраивать размерные стили
-план необязательно масштабировать, просто дефолтные масштабы УГО и настройки кабелей сделаны под такой масштаб
-почему для уго устройств "суперлинии" подводятся к границе устройства, а для уго стояков подводятся к коннектору устройства?
-в конце отсутствует расстановка кабельных выносок, неясно как управлять именами генерируемых кабелей
zamtmn вне форума  
 
Непрочитано 05.02.2018, 09:50
#230
veb86

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


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

Цитата:
Сообщение от zamtmn Посмотреть сообщение
-план необязательно масштабировать, просто дефолтные масштабы УГО и настройки кабелей сделаны под такой масштаб
Масштабировать необязательно, у меня получалось перебить все масштабы и все прекрасно работало, но после повторного открытия программы все настройки начинаешь делать заново.

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

Цитата:
Сообщение от zamtmn Посмотреть сообщение
-в конце отсутствует расстановка кабельных выносок, неясно как управлять именами генерируемых кабелей
Про кабельные выноски забыл показать, но они рабочие. Именами генерируемых кабелей управлять нельзя, они складываются из имени устройства + шлейфа (ARK1.1, ЩР1.1, ВРУ1.1). Наверное имеет смысл сделать, но пока не знаю как это организовать по проще. Можно головному устройству добавить пункт который будет при генерации складывать не из имени устройства, а из этого пункта + шлейфа. Надо подумать.
veb86 вне форума  
 
Непрочитано 06.02.2018, 11:46
#231
veb86

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Несколько замечаний)):
-размеры можно не взрывать, но тогда придется после масштабирований настраивать размерные стили
Вчера подготавливал очередной план, размеры от масштабировались хорошо, но нужно править размерный стиль. При исправлении размерного стиля нашел баг не изменялась длина отступа текста от линии, уже внес исправления в код. Единственное не нашел как добавить ноликов к тексту, что бы 6000 было 6000, а не 60.
veb86 вне форума  
 
Автор темы   Непрочитано 07.02.2018, 20:12
#232
zamtmn

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


из uzestylesdim.pas, в чуток порезаном виде:
Код:
[Выделить все]
...
TGDBDimUnitsProp=packed record
                       DIMLFAC:GDBDouble;//Linear measurements scale factor//group144
                       DIMLUNIT:TDimUnit;//Sets units for all dimension types except Angular://group277
                       DIMDEC:GDBInteger;//Number of decimal places for the tolerance values of a primary units dimension//group271
                       DIMDSEP:TDimDSep;//Single-character decimal separator used when creating dimensions whose unit format is decimal//group278
                       DIMRND:GDBDouble;//Rounding value for dimension distances//group45
                       DIMPOST:GDBAnsiString; //Dimension prefix<>suffix //group3
                 end;
...
GDBDimStyle = {$IFNDEF DELPHI}packed{$ENDIF}object(GDBNamedObject)
                      ...
                      Units:TGDBDimUnitsProp;
                      ...
             end;
DIMLFAC - можно добавлять не только нолики))
zamtmn вне форума  
 
Непрочитано 10.02.2018, 13:57
#233
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 535


Уж простите, не прочитал всю ветку. Может и были такие вопросы-ответы...

Мне бы хотелось поинтересоваться немного. Всего пара вопросов:
- у автокада (да и любой другой САПР) в основе лежит математическое 3Д-ядро. У вас как? Мне почему-то кажется, что у вас сразу все "вшито" и работает как единое целое
- а как вы начинали проект? Точнее - с чего? Вот вы создали пустой проект и что было первым шагом?
- вы продумывали себе план работ? Что и за чем будете делать? Или все спонтанно и по желанию/нужде?

Спасибо
Modis вне форума  
 
Автор темы   Непрочитано 11.02.2018, 21:35
1 | #234
zamtmn

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


>>- у автокада (да и любой другой САПР) в основе лежит математическое 3Д-ядро. У вас как? Мне почему-то кажется, что у вас сразу все "вшито" и работает как единое целое
Что вы понимаете под "математическое 3Д-ядро"? такого у меня нет, есть "недовыделенное"-недоделаное графическое "ядро".
С вшитым я борюсь по мере сил - уменьшаю внутренние зависимости и стремлюсь к модульной структуре

>>- а как вы начинали проект? Точнее - с чего? Вот вы создали пустой проект и что было первым шагом?
Было несколько программ обрабатывающих dxf файлы, было желание разобраться как внутри устроены cad программы.
Первым шагом была попытка написать простейший векторный редактор, вторым было чтоб этот редактор более менее мог работать с большими чертежами, третьим - кроссплатформенность

>>вы продумывали себе план работ? Что и за чем будете делать? Или все спонтанно и по желанию/нужде?
Плана нет. Сейчас основной двигатель - нужда - чегото нет, а надо чтоб было
zamtmn вне форума  
 
Автор темы   Непрочитано 11.04.2018, 21:13
#235
zamtmn

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


rev2510 - релиз с новыми иконками
Миниатюры
Нажмите на изображение для увеличения
Название: 2510.PNG
Просмотров: 109
Размер:	120.7 Кб
ID:	201202  
zamtmn вне форума  
 
Непрочитано 12.04.2018, 12:11
#236
Andrey_nadym


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
rev2510 - релиз с новыми иконками
Скачал. Сижу тыкаю. А как же она автоматически нумерует то? Можно по порядку рассказать.
Датчики ОПС расставил, кабель нарисовал. нажимаю кнопку автоматической нумерации и ничего не нумеруется.
Andrey_nadym вне форума  
 
Автор темы   Непрочитано 12.04.2018, 12:31
1 | #237
zamtmn

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


Там есть 2 нумерации:
1 - кнопка [D++] простая нумерация устройств - грубо говоря саерху вниз, слева направо - настраивается в свойствах команды
2 - кнопка [++] нумерация подключеных к кабелям устройств

Вам нужен вариант 2. если извещатели зацеплены на кабель, они уже должны нумероваться. дополнительно в параметрах кабеля можно задать "короткое имя головного устройства" и "группа в головном устройстве" т.е. номер прибора и номер шлейфа.

Видимо либо кабель не попадает на коннекторы извещателей, либо пытаетесь использовать D++ вместо ++
zamtmn вне форума  
 
Непрочитано 12.04.2018, 12:39
#238
Andrey_nadym


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Там есть 2 нумерации:
1 - кнопка [D++] простая нумерация устройств - грубо говоря саерху вниз, слева направо - настраивается в свойствах команды
2 - кнопка [++] нумерация подключеных к кабелям устройств

Вам нужен вариант 2. если извещатели зацеплены на кабель, они уже должны нумероваться. дополнительно в параметрах кабеля можно задать "короткое имя головного устройства" и "группа в головном устройстве" т.е. номер прибора и номер шлейфа.

Видимо либо кабель не попадает на коннекторы извещателей, либо пытаетесь использовать D++ вместо ++
Кабелем соединил от первого до последнего датчика в линии. А нужно кабель к каждому извещателю к центру прикреплять. Потом нажимаю кнопку ++ он нумерует.
Спасибо! Дальше буду изучать.
Andrey_nadym вне форума  
 
Автор темы   Непрочитано 12.04.2018, 12:50
#239
zamtmn

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


>>А нужно кабель к каждому извещателю к центру прикреплять.
нужно заводить на коннектор. он необязательно в центре
zamtmn вне форума  
 
Непрочитано 12.04.2018, 16:22
#240
veb86

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


Цитата:
Сообщение от Andrey_nadym Посмотреть сообщение
Скачал. Сижу тыкаю. А как же она автоматически нумерует то? Можно по порядку рассказать.
Датчики ОПС расставил, кабель нарисовал. нажимаю кнопку автоматической нумерации и ничего не нумеруется.
zamtmn рассказывает про прокладку кабеля это позволяет жестко все прочертить. метод очень надежный, но мне показался долгим, я так не привык

Как вариант сделанный мной другой метод кабеле укладчик, работает в целом нормально, мне нравится, к нему надо привыкнуть. Я черчу им, проблем не наблюдаю, а если они есть то обычно сам сделал ляп, но не хитрыми методами можно поймать место аварии, и подправить.

Внизу видео посмотрите.
Предыдущая ссылка на видео почему то сломался, сделал две ссылки

https://www.youtube.com/watch?v=jklTCAnjzdE

Increase Size Decrease Size Нажмите для просмотра
https://www.youtube.com/watch?v=jklTCAnjzdE
veb86 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание CAD программы с нуля

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

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