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

Вернуться   Форум 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.
Просмотров: 208296
 
Автор темы   Непрочитано 23.07.2018, 14:47
#281
zamtmn

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


Еще "фича" - выбор за пределами экрана. при нажатии ctrl рамка выбора не подрезается по экрану, без нажатия - как в автокаде - подрезается.
https://imgur.com/a/2HNgurZ
Программа записи видео не показывает надпись "ctrl" во время движения мышки, только в момент нажатия кнопок. Когда диагональный крест рамки полностью на экране - контрол не нажат, когда вылазит за пределы нажат
zamtmn вне форума  
 
Непрочитано 25.07.2018, 10:29
| 1 #282
Marsikus

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


Автодеск эту фичу только в 2018 версии Автокада родить изволил. Так что скоро Автокад перегонишь
__________________
energokot.blogspot.com
Marsikus вне форума  
 
Автор темы   Непрочитано 25.07.2018, 11:47
#283
zamtmn

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


Marsikus
скорей бы уже))


К новому году будет стабильный релиз Lazarus 1.8 и с этого момента я постараюсь поддерживать совместимость с официальными релизами Lazarus\fpc. Почему то их транковые версии вызывают непреодалимые проблемы у потенциальных пользователей\разработчиков\простоинтересующихся.

Сам по этому случаю тоже постараюсь родить 1.0 (без фантастических планов, по текущему состоянию) Поэтому приглашаю всех интересующихся на https://github.com/zamtmn/zcad/issues - баги, необходимые фичи
zamtmn вне форума  
 
Непрочитано 25.07.2018, 12:08
#284
Marsikus

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


А какая платформа у тебя в приоритете по количеству пользователей: винь или линь?
__________________
energokot.blogspot.com
Marsikus вне форума  
 
Автор темы   Непрочитано 25.07.2018, 12:11
#285
zamtmn

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


конечно винь. в линуксе только я и 1.5 интересующихся))
zamtmn вне форума  
 
Автор темы   Непрочитано 03.09.2018, 22:43
#286
zamtmn

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


Небольшой релиз.
Добавил команду stretch. Думал придется для нее копаться в движке... нет, получилось сделать снаружи, скрестив секрамку и редактирование примитивов за грипсы.
Изменил систему присвоения версий. Как ее принято организовывать используя гит? в свн все просто - ревизия это по сути и есть номер версии. В гите вижу только в уме инкрементировать циферки и вписывать их в тэги. Неудобно.
zamtmn вне форума  
 
Непрочитано 04.09.2018, 00:02
#287
Marsikus

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


Так ведь коммит не обязательно подразумевает новую версию. Такая логика у гита.
__________________
energokot.blogspot.com
Marsikus вне форума  
 
Автор темы   Непрочитано 04.09.2018, 07:32
#288
zamtmn

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


Конечно не каждый комит релиз, но каждый релиз это какойто комит, и например имея
Цитата:
zcad_v0.9_svn2510.7z
zcad_v0.9_svn314.7z
ясно что версия 2510 гораздо новее.
В свн каждый комит имеет номер, и он инкрементируется каждый раз при комите.
zamtmn вне форума  
 
Автор темы   Непрочитано 20.09.2018, 23:14
#289
zamtmn

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


Багофиксы 0.9.8.3
Подумываю ввести блоки форматов, для авьозаполнения ведомости чертежей и пакетной печати. Нужен механизм похожий на видимость в автокадовских динблоках чтоб было удобно эти блоки форматов переключать.
Динблоки мне не реализовать, буду придумать чтото похожее с обычными блоками
zamtmn вне форума  
 
Непрочитано 20.09.2018, 23:41
#290
Сергей812


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Нужен механизм похожий на видимость в автокадовских динблоках чтоб было удобно эти блоки форматов переключать.
если программно - то что мешает перевставлять обычные блоки форматок с переносом информации?
Сергей812 вне форума  
 
Автор темы   Непрочитано 20.09.2018, 23:51
#291
zamtmn

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


Програмно. ничто не мешает.

Получится отдельная команда с файлом конфигом - что на что можно менять, какие параметры сохранять, а какие обновлять.
Проблема в том чтобы встроить это незаметно в интерфейс
zamtmn вне форума  
 
Непрочитано 21.09.2018, 00:01
#292
Сергей812


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Проблема в том чтобы встроить это незаметно в интерфейс
в каком плане незаметно? Заполняется автоматически без участия пользователя?
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.09.2018, 00:08
#293
zamtmn

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


Заполнение какраз давно работает - через инспектор в "переменные" блока.
незаметно - например как в динблоках добавлять грипс с комбобоксом по нажатию - такого механизма в зкаде нет и реализовать проблемно((
zamtmn вне форума  
 
Непрочитано 21.09.2018, 00:25
#294
Сергей812


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


а через контекстное меню - если выделен блок или блоки форматов, то появляются еще пункты?
Сергей812 вне форума  
 
Непрочитано 21.09.2018, 06:09
#295
gumel


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


Цитата:
Сообщение от Marsikus Посмотреть сообщение
Автодеск эту фичу только в 2018 версии Автокада родить изволил. Так что скоро Автокад перегонишь
zamtmn, я знаю как обогнать Автодеск

Речь про блоки. Я бы расширил функционал объектных привязок и блоков. Например для блоков сделал бы возможность отключения (добавив к блокам некоторое свойство со значением true/false) стандартных привязок (mid, end и т.п.) И (!) сделал бы некоторые специальные точки внутри блока за которые можно было привязываться. Стало бы намного удобней, поскольку блок это уже отдельная единица чертежа, и зачастую (да почти всегда) большинство привязок для каждого примитива внутри блока попросту не нужны!
gumel вне форума  
 
Непрочитано 21.09.2018, 08:37
#296
ShaggyDoc

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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Програмно. ничто не мешает.

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

У меня она вообще была сделана в виде Мастера. Надо ведь заполнить много данных:
Выбор размера формата
Выбор вида основной надписи
Заполнение граф, причем так, чтобы тексты могли повторяться для объекта и проектной организации
Возможное использование логотипа
и всё прочее.

После диалога рамки форматки можно нарисовать, а основную надпись вставить в виде обычного блока с атрибутами. Косметическую правку можно будет делать обычным способом.

В таком случае можно еще и пакетную переработку основных надписей сделать - бывает, что в последний момент надо изменить название стройки в сотнях "штампов".
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 21.09.2018, 08:44
#297
zamtmn

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


gumel
У меня пробегали похожие мысли:
1 - доп свойство для всех примитивов "участие_в_привязке"=(да,нет,как_у_владельца), но оно общее на все привязки, а не на каждый тип
2 - специальные блоки (например просто точки) которые будучи добавлены в другой блок добавляют ему доп точки привязки. названия их наяинаются например на OSPOINT_*
3 - рисующая команда отключает обычные привязки и включает (2). Напимер комнда рисующая кабели включит привязки OSPOINT_CABLE_* и сюда попадут блоки с названиями OSPOINT_CABLE_CONNECTOR, OSPOINT_CABLE_TERMINAL и т.п.

1 легко залезет в расширеные данные примитивов, а 2 и 3 уже DXF совместимо
zamtmn вне форума  
 
Непрочитано 21.09.2018, 09:00
#298
gumel


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


В принципе да, можно наверное и для всех примитивов сделать подобную фитчу.

Но для блоков это архиважно. Например имеем такой блок:



Ну ясно же, что объектная привязка нужна тут далеко не во всех точках ))
gumel вне форума  
 
Автор темы   Непрочитано 21.09.2018, 09:07
#299
zamtmn

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


ShaggyDoc
Я планирую общий механизм для разных применений - менять блоки форматов, менять УГО извещателей, светильников и т.п.
Блок выделен, название блока и список альтернатив фигурируют в конфиге команды, определения блоков альтернатив присутствуют в чертеже или базе программы... Предлагаем замену, а что там: УГО или форматка - пользователю виднее.

Индивидуальное заполнение "граф" уже решено, пакетное заполнение-изменение тоже, даже несколькими способами.
Да наверно для штампа имеет смысл отдельный диалог - графы длинные, их много - все в инспекторе будет неудобно. Но это уже сахарок))

----- добавлено через ~8 мин. -----
gumel
В принципе реализация не сложна. в дополнение к существующим настройкам привязки добавить текстовое поле с названиями блоков создающих доп точки привязок...
Но такой механизм будет требовать поддержки от базы определений блоков и от команд рисования примитивов

Последний раз редактировалось zamtmn, 21.09.2018 в 09:17.
zamtmn вне форума  
 
Непрочитано 21.09.2018, 14:32
#300
veb86

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


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

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

Наличие механизма программного добавления, удаления, изменения грипсов, повысит удобство работы с программой, главное что бы был полный функционал взаимодействия с ними. И я считаю что в целом существующие грипсы (точки захвата на концах линии и в середине) и добавляемые грипсы ничем не должны отличатся, только формой (форму стрелочки, поворота), и кодом исполнения внутри грипса, Еще очень крутая фишка говорят сделана в автокаде, когда правой кнопкой проходишь по узловым грипсам и можно выполнить групповой удлинение, ну и тд. у нас в брикскаде этого нет об этому могут рассказать пользователи автокада
veb86 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание CAD программы с нуля

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

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