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

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

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

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

Всем привет!
В свободное время делаю для себя небольшую 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 версии не менее 2.0.10 на базе FPC версии не менее 3.2

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

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

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

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


Последний раз редактировалось zamtmn, 08.07.2020 в 00:19.
Просмотров: 122288
 
Непрочитано 11.01.2020, 08:55
#381
nickname2019


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


Цитата:
Сообщение от CalcProg Посмотреть сообщение
книга о том как написать лисп
Спасибо. Очень хорошая книга в плане структуры изложения материала. По аналогии можно описать любой язык. Я не знал, что ЛИСП настолько старый язык.
nickname2019 вне форума  
 
Непрочитано 11.01.2020, 18:06
#382
CalcProg


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


http://homelisp.ru/help/intro.html
HomeLisp - простой интерпретатор
стандартного Лиспа, сделанный по
лекалам, описанным в великолепной
книге С.C. Лаврова и Г.С. Силагадзе
CalcProg вне форума  
 
Автор темы   Непрочитано 16.03.2020, 02:01
#383
zamtmn

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


Тихо и незаметно у зкада потерялась совместимость с стабильными версиями Lazarus (на данный момент 2.0.6) и FPC (на данный момент 3.0.4), снова он собирается только в транковых версяих, о чем я внес исправления в нулевой пост.
Это печально(( т.к. и без того еще никому не удавалось собрать зкад без моей помощи))

Отчаиваться не стоит, я обещаю исправить ситуацию после выхода новой версии компилятора 3.2 (ждем как из печки пирога, но че-то тянут)
А пока для получения рабочего окружения можно воспользоваться чудесной утилитой https://github.com/newpascal/fpcupde...eleases/latest - там достаточно указать требуемые версии и папку куда их установить - вся черная работа будет выполнена автоматически - на выходе свеженькие лазарус и фпц, прям из багажника
zamtmn на форуме  
 
Автор темы   Непрочитано 08.07.2020, 00:30
#384
zamtmn

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


Lazarus 2.0.10 на базе FPC 3.2 появился на ftp разрабов, хотя анонса еще вроде не было.

Почистил настройки проекта, состав пакетов - наконец то все собирается и работает на релизе Lazarus

Для удобства разнес бинарники, теперь они лежат в разных папках (..\cad\bin\$(TargetCPU)-$(TargetOS)) для разных целей сборки
zamtmn на форуме  
 
Автор темы   Непрочитано 13.04.2021, 09:20
#385
zamtmn

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


Завершаю переделку "инспекторов" (контрол отображающий в древовидной структуре примитивы чертежа) сейчас в программе 3 инспектора: устройств, кабелей и стояков. Логика их работы захардкожена и настройка невозможна. Планирую сделать универсального легко настраиваемого пользователем под любые нужды инспектора.

На приложенной картинке что примерно из этого получается:
1)
кнопка редактирования "макроса" построения дерева. Там в данном случае такой текст -NMO_Prefix|+NMO_BaseName|+@@[NMO_Name]
| - разделитель
-/+ включена/выключена опция
т.е. в данном случае группировка дерева идет сначала по префиксу имени (отключено), потом по базовому имени и в дереве отображается имя устройства
2)
рантайм панель включения/выключения опций из 1, можно на лету управлять построением дерева
3)
Редактор "грубого" фильтра примитивов попадающих в инспектора. в данном случае там IncludeEntityName('Device') т.е. в инспектора попадают только устройства. доступны конструкции
IncludeEntityName
ExcludeEntityName
IncludeEntityMask
ExcludeEntityMask
Соответственно можно включить/исключить примитивы по имени и маске имени примитива
4)
Редактор "тонкого" фильтра примитивов, в данном случае там ничего нет. но например в инспекторе стояков тут IncludeIfMask(%%('Name'),'EL_CABLE_*') т.е. после выборки в (2) только устройств, остаются устройства с именем соответствующем маске EL_CABLE_*
тут синтаксис "макроса" еще не устаканился. планирую сделать фильтрацию по любым переменным и свойствам примитивов доступным в инспекторе, т.е. слои, имена, геометрия и т.п.
5)
Редактор настройки отображения дерева. в данном случае там
SetColumnsCount(2,0);
SetColumnParams(0,'Tree','@@[NMO_Name]','tmpGUIParamSave_NavDev_C0',1);
SetColumnParams(1,'Comment','Тут чтото тоже надо сделать','tmpGUIParamSave_NavDev_C1',1)

SetColumnsCount - задает общее колво столбцов в инспекторе, и указывает столбец ширина которого будет регулироваться автоматически при изменении размеров
SetColumnParams - настройка отображения столбца параметры:
номер столбца который настраиваеется
заголовок столбца
что отображается в данном столбце
имя "переменной" в котором будет храниться ширина столбца между сеансами
сумма битовых масок различных параметров, пока никак не используется

Весь синтаксис пока не окончательный, единственное что точно сохранится @@[ИМЯПЕРЕМЕННОЙ] - содержимое переменной привязанной к примитиву, %%('ИМЯСВОЙСТВА') свойство примитива слой, тип линии, координата вставки и т.п.

Идеи? Предложения?
Миниатюры
Нажмите на изображение для увеличения
Название: insp.png
Просмотров: 88
Размер:	37.8 Кб
ID:	236212  
zamtmn на форуме  
 
Непрочитано 13.04.2021, 11:18
#386
nickname2019


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Весь синтаксис пока не окончательный, единственное что точно сохранится @@[ИМЯПЕРЕМЕННОЙ] - содержимое переменной привязанной к примитиву, %%('ИМЯСВОЙСТВА') свойство примитива слой, тип линии, координата вставки и т.п.
Идеи? Предложения?
Интересно. А устройства не хранятся как блоки с атрибутами? Список переменных, привязанных к примитиву, юзер задает или жестко прописывается в коде примитива?
nickname2019 вне форума  
 
Автор темы   Непрочитано 13.04.2021, 14:31
#387
zamtmn

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


Устройства это блоки, с чуть чуть расширенным функционалом. Переменные можно сказать что атрибуты, но только с виду)) Переменными можно эмулировать атрибуты.
Набор переменных задается пользователем при черчении, без программирования. Набор свойств тоже не захардкожен, можно добавлять свои, но уже только с программированием.

В навигаторах можно отображать любые примитивы, не только устройства (блоки), но конечно задуманы они были под устройства с именами (переменная NMO_Name)
zamtmn на форуме  
 
Непрочитано 13.04.2021, 15:23
#388
nickname2019


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


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

В навигаторах можно отображать любые примитивы, не только устройства (блоки), но конечно задуманы они были под устройства с именами (переменная NMO_Name)
Вот один из прикольных вариантов задания примитивам имен, чтобы потом ими управлять
https://youtu.be/r8f0pDykba4
nickname2019 вне форума  
 
Автор темы   Непрочитано 13.04.2021, 16:32
#389
zamtmn

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


Если я правильно понял, это какойто чисто визуальный подход
zamtmn на форуме  
 
Непрочитано 13.04.2021, 22:20
#390
veb86

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Идеи? Предложения?
Было бы здорово, что бы во втором столбце устройства можно было понять, имеет устройство привязку к БД (спецификации) устройств, кабелей итд. Если имеет то ее короткое имя, если нет то знаки вопроса
veb86 вне форума  
 
Автор темы   Непрочитано 14.04.2021, 08:05
#391
zamtmn

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


да, будет возможность добавлять такую инфу в столбец, а ответвить ветку в дереве типа соедененные\несоединенные или с привязанным оборудованием или нет
zamtmn на форуме  
 
Непрочитано 14.04.2021, 09:45
#392
veb86

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
а ответвить ветку в дереве типа соедененные\несоединенные или с привязанным оборудованием или нет
Вот это было бы вообще здорово.
veb86 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание CAD программы с нуля

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

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