САПР на Lazarus

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: САПР на Lazarus

Сообщение olegy123 » 11.11.2016 12:29:48

zub вау, zcad твое детище? Респект и уважуха.

Тут думал где бы взять идеи и желательно с исходниками для различных рисовалок. Увидел zcad, хорошо рисует. Но еще не смотрел код и не разбирался с ним.
Работал в разных компаний в которых есть необходимость в расчетах конструкций, сам хотел написать свой кад, но кроме как рисований разных примитивов дело не пошло. Очень велика там потребность в аналогах avtocad, компасах.. в рисовании схем, чертежей, подсчетов/подборов материалов. Нарисовал провод, кликнул - выпала форма выбора марки. Для продажников важна уже стоимость. А так как нормального инструмента нет, а в других программ высок уровень вхождения и по стоимости дороги - они справляются экселом/аксесом. Вот приходилось мне в эти таблицы смотреть, править.

Самому скоро понадобится графический редактор с элементами cad.
olegy123
постоялец
 
Сообщения: 353
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 11.11.2016 13:23:05

olegy123
Спасибо.
>>Но еще не смотрел код и не разбирался с ним.
Если будешь разбираться - свисти, без помощи наврятли получится
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 11.11.2016 15:26:42

Запустил.
Что за скрипт дижок используется?
Как я понял - все на скриптах. Даже оболочка.. при запуске попросил pas файлы..
Базовый объект GDBaseObject?
Есть ли группировки? Редактор блоков не оно?

Добавлено спустя 3 минуты 14 секунд:
Точек нет?
Точка -> Точки -> Линии -> Полигоны?

Добавлено спустя 19 минут 22 секунды:
Сложно разобратся.. Я так думаю правильнее:
1)Математика:(матрицы,базовый функционал(нахождения точки,пересечения линии, внутри многоугольника, принадлежность к линии, плоскости.. и т.п.)
2) объектная модель (Базовая часть(матрица: перемещения, увеличения..),-> Точки, Линии, полигоны..
3)Система:(Opengl/DX/GUI/..)
4) объектная модель с учетом граф.системы (glBegin(GL_POINT)..)
..
Скриптовая модель.

Добавлено спустя 5 минут 54 секунды:
Код: Выделить всё
линия1 = СоздатьЛинию(0,0,100,100);
линия1.Перенести(100,50);
линия1.РазвернутьXYZ(0,0,90);
..
x=линия1.Позиция.X;
Если x>100 Тогда
  линия1.Позиция.X=x-100;
...

вот скрипт моей мечты..
olegy123
постоялец
 
Сообщения: 353
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 11.11.2016 18:54:22

Что за скрипт дижок используется?

Скриптов как таковых нет. Есть некоторый самописный зачаток скриптового движка. на данный момент он позволяет только описать типы данных и присвоить им начальные значения. Используется восновном для инспектора объектов.
ак я понял - все на скриптах. Даже оболочка.. при запуске попросил pas файлы..

Нет, не всё. Но при запуске много что парсится, это да
Базовый объект GDBaseObject?

Да. Изначально за основу всего был взят object, не class.
Но дело идет к тому что рано или поздно dxf примитивы сильно упростятся (будут обязаны предоставлять всего несколько методов в отличии от сейчас) и из чертежа уйдут все древовидные структуры. Все "сложности" спрячутся в движек и будут работать на уровне геометрических и графических примитивов. Тогда dxf примитьивы можно будет легко переобуть в классы. Очень медленно но идет))
Есть ли группировки? Редактор блоков не оно

Групп как в автокаде нет. блоки есть. Но группы и блоки это разные сущности в автокаде.
Точек нет?

Точка есть, нет команды для рисования точек, если точка будет прочитана из dxf файла - она поддерживается
Бобавить команду рисующую точку - проще пареной репы)) аналгичная рисующая линию выглядит примерно так:
http://svn.shamangrad.net/zcad/trunk/ca ... xample.pas
функция команды - строка 563, регистрация команды в интерфейсе - строка 893

Сложно разобратся.. Я так думаю правильнее:
1)Математика:(матрицы,базовый функционал(нахождения точки,пересечения линии, внутри многоугольника, принадлежность к линии, плоскости.. и т.п.)

Юнит геометрических функций используемых зкадом - http://svn.shamangrad.net/zcad/trunk/ca ... ometry.pas
Названия неочень, но ничего сложного
2) объектная модель (Базовая часть(матрица: перемещения, увеличения..),-> Точки, Линии, полигоны..

dxf примитивы http://svn.shamangrad.net/zcad/trunk/ca ... /entities/ - верхний уровень
примитивы графической системы http://svn.shamangrad.net/zcad/trunk/ca ... ngine/zgl/ - нижний уровень, представление dxf примитива для графической системы - то что рисуется на экране
геометрические примитивы - http://svn.shamangrad.net/zcad/trunk/ca ... e/geomlib/
геометрических еще нет, они в планах и на них должны переехать все операции типа поиска пересечений, хиттеста, привязок и т.п.
преобразование примитива - вызов его метода TransformBy с матрицей преобразования
3)Система:(Opengl/DX/GUI/..)

http://svn.shamangrad.net/zcad/trunk/ca ... l/drawers/
Opengl/GDI/Canvas
DX мне интересен небыл, но если есть нужда и желание...
То никто не мешает написать всего 2 модуля аналогичные таковым для OpenGL
http://svn.shamangrad.net/zcad/trunk/ca ... werogl.pas - "рисователь"
http://svn.shamangrad.net/zcad/trunk/ca ... reaogl.pas - область отображения
4) объектная модель с учетом граф.системы (glBegin(GL_POINT)..)

насколько я понял имеется ввиду вотэто http://svn.shamangrad.net/zcad/trunk/ca ... stract.pas
и его наследники для Opengl/GDI/Canvas
Скриптовая модель.

Скриптов пока нет, но модель похожа на правду
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение zub » 20.11.2016 03:33:45

Добавил в лог параметр "имя модуля". Сообщениям "модулей" можно разрешать (поумолчанию запрещено) попадать в лог.
Выглядит так:
Код: Выделить всё
//в юните где подключен uzclog
var
ModuleIndex:TLogModuleDeskIndex
...
ModuleIndex:=programlog.registermodule('ИмяМодуля');//по ModuleIndex происходит идентификация разных "модулей"
programlog.LogOutFormatStr('хитрый шаблон',[куча,параметров],lp_OldPos,LM_Trace,ModuleIndex);//появится в логе только если 'ИмяМодуля' разрешен в параметрах вызова
programlog.LogOutFormatStr('хитрый шаблон',[куча,параметров],lp_OldPos,LM_Trace);//запись в лог постаринке, без имени модуля (насамом деле под именем 'DEFAULT', ModuleIndex=0)
//в юните где не подключен uzclog, через lazlogger
DebugLn('{T}[ИмяМодуля]хитрый шаблон',[куча,параметров]);//появится в логе только если 'ИмяМодуля' разрешен в параметрах вызова
DebugLn('{T}хитрый шаблон',[куча,параметров]);//запись в лог постаринке

При запуске программы регистрируется модуль 'DEFAULT', ему разрешено попадать в лог. Все сообщения имя модуля которых не указано пишутся под этим именем. Если в сообщении указано имя модуля, то при первом появлении этого имени оно регистрируется и ему запрещено попадать в лог. Разрешить некоторым модулям попадать в лог можно параметром командной строки LEM_ИМЯМОДУЛЯ. Например запустив zcad.exe lem_objectinspector сообщения от инспектора объектов будут попадать в лог.
Пока сделал только сам механизм разделения сообщений, сами сообщения еще не разделял и они пока пишутся "по старинке". Хотелось бы услышать критику

ЗЫ. Имя "модуля" в логе никак не связано с фактическим именем юнита, это просто текстовая метка на основании которой принимается решение пропускать строку в лог или нет, этот костылик дополняет предидущий колстыль viewtopic.php?f=10&t=5917&start=225#p90831 с "глубиной" лога, позволяя в рантайме полностью настраивать глубину и объем лога
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Mikhail » 20.11.2016 10:59:45

zub, а как реализуешь "резиновые линии"? Xor-ишь?
Mikhail
постоялец
 
Сообщения: 466
Зарегистрирован: 24.10.2013 16:06:47

Re: САПР на Lazarus

Сообщение zub » 20.11.2016 14:47:06

>>Xor-ишь?
Нет. перерисовываю
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Mikhail » 20.11.2016 15:16:16

zub писал(а):>>Xor-ишь?
Нет. перерисовываю

Все? Или текущее окно просмотра кешируешь в битмап?
Mikhail
постоялец
 
Сообщения: 466
Зарегистрирован: 24.10.2013 16:06:47

Re: САПР на Lazarus

Сообщение zub » 20.11.2016 15:19:27

Нашел цитату с другого топика:
В зкаде я использую самописный контрол, который имеет 2 режима рисования: 1-полная перерисовка и запоминание картинки в внеэкранный буфер, 2 восстановление картинки на экране из внеэкранного буфера. Причем восстанавливается только область требующая восстановления.
режим 2 работает примерно так: восстанавливается область испорченая в прошлом кадре, поверх изображения рисуется курсор (не использую системный курсор), "подсвечивается" рамкой примитив находящийся под курсором, рисуется копия редактируемого в данный момент примитива (если он есть), испорченая область запоминается для восстановления в следующем кадре

т.е. дорисовываю то что меняется динамически на "восстановленное" изображение
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Mikhail » 20.11.2016 15:32:07

zub писал(а):Нашел цитату с другого топика:
В зкаде я использую самописный контрол, который имеет 2 режима рисования: 1-полная перерисовка и запоминание картинки в внеэкранный буфер, 2 восстановление картинки на экране из внеэкранного буфера. Причем восстанавливается только область требующая восстановления.
режим 2 работает примерно так: восстанавливается область испорченая в прошлом кадре, поверх изображения рисуется курсор (не использую системный курсор), "подсвечивается" рамкой примитив находящийся под курсором, рисуется копия редактируемого в данный момент примитива (если он есть), испорченая область запоминается для восстановления в следующем кадре

т.е. дорисовываю то что меняется динамически на "восстановленное" изображение

А если нужно поменять порядок (глубину) примитивов обновляется соответствующая часть вне экранного буфера?
Mikhail
постоялец
 
Сообщения: 466
Зарегистрирован: 24.10.2013 16:06:47

Re: САПР на Lazarus

Сообщение zub » 20.11.2016 15:35:22

Тогда полная перерисовка и запоминание нового состояния
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Mikhail » 20.11.2016 15:37:22

zub писал(а):Тогда полная перерисовка и запоминание нового состояния

Спасибо за ответы. :) Еще один вопрос, в какой структуре хранишь примитивы.
Mikhail
постоялец
 
Сообщения: 466
Зарегистрирован: 24.10.2013 16:06:47

Re: САПР на Lazarus

Сообщение zub » 20.11.2016 15:42:09

DXF - массив укзвтелей на примитивы-object`ы завернутый в бинарное дерево.
Графические - куча разных обжектов в едином куске динамической памяти, но не проверял насколько это оправдано. Сюда вдальнейшем тоже планируется дерево
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Mikhail » 20.11.2016 15:52:18

zub писал(а):DXF - массив укзвтелей на примитивы-object`ы завернутый в бинарное дерево.
Графические - куча разных обжектов в едином куске динамической памяти, но не проверял насколько это оправдано. Сюда вдальнейшем тоже планируется дерево

Гм, а как устроено бинарное дерево для 2D графики?
Mikhail
постоялец
 
Сообщения: 466
Зарегистрирован: 24.10.2013 16:06:47

Re: САПР на Lazarus

Сообщение zub » 20.11.2016 16:00:03

У меня 3Д, 2д пока в разработке. но разница для дерева не принципиальная.
В 3Д - деление паралепипеда плоскостью, в 2Д - деление прямоугольника прямой.
Пытаюсь родить генерик для пространственного дерева. для 2д-3д случаев. Получается некрасиво, но вроде работает
zub
долгожитель
 
Сообщения: 2024
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru