САПР на Lazarus

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

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

Re: САПР на Lazarus

Сообщение Cheb » 19.10.2017 19:23:36

zub, кончай уже его кормить.

Предлагаю свой вариант:
1. Базовый класс делать со счётчиком ссылок, как TInterfacedObject
2. У объекта есть флаг "я труп".
3. При удалении из структуры, не вызывать деструктор, а ставить флаги "я изменился" и "я труп" и присваивать nil
4. Каждый вторичный содержатель (вьюпорт, дерево и т.п.) при каждом тыке к объекту проверяет: это труп? Тогда вместо запланированной операции с ним (сообщение, отрисовка) удалить его из себя. Таким образом, экземпляр класса реально удалится когда все вьюпорты и прочие проснутся и обнаружат, что он труп.
5. Каждый отрисовщик пробегает по флагам "я изменился" входящих в него объектов при клике мышью или лениво, скажем, 10 раз в секунду.

З.Ы. Все эти паттерны, MVC - они для работы командой. Одиночке они только добавляют два кило ненужного оверхеда.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: САПР на Lazarus

Сообщение olegy123 » 19.10.2017 20:47:02

zub писал(а):а шо, если в системе нет OpenGL то и не выбрить ничего?

Ну не перебирать же в оффлане все примитивы.

Добавлено спустя 18 минут 16 секунд:
ElectroGuard писал(а):Надо понимать простую вещь. Что MVC - далеко не панацея от всех бед.

Серьезная и большая система как правило сводится к этому. - к разделению труда.
Есть нод, он обладает некими данными, неким личным поведением, все остальное - может взять из API(его не так много).
В целом система получается не сильно громоздкой.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 19.10.2017 22:17:40

Cheb
Спасибо, подумаю. но пока склоняюсь к хранению в объекте ссылок на всех "представителей" и при вызове например doYouChanged у объекта, заодно вызывать и doYouChanged у всех пердставителей.

olegy123
>>Ну не перебирать же в оффлане все примитивы.
Типа с glSelect их ненадо перебирать)) Выбор примитивов делаю математически
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 01:42:36

С glSelect - что вижу то сохраняю.. оно "аппаратное" и тратится на перебор вхождений не надо. Тем более результат можно упаковать так что в одном ID будет отражено все.

Недавно заново переписал проекта с нуля - уменьшил еще на 10% размер кода. Общие функции перевел в статичные. Сделал ядро Core в котором определил базовые вещи. Все остальные вынес за ядро.
Не стал делать подсчет ссылок - уверовал в то что оно "для ленивых", не умеющих точно знать где и как нужно уничтожать объект. И оно вредно при многопоточности. Требуется дополнительно вводить ароматность и синхронизацию, что в разы усложняет работу.
По поводу ссылок - а зачем они нужны? Их роль в чем? В том что другому объекту вызвать когда нибудь калбак doYouChanged? Вводить подобие QT слоты?
Можно ли решить иными способами?
Конечно:
1)
глобализировать doYouChanged, а объекту хранить указатели на "подписантов"..
Объект вызывает статичную doYouChanged, и там Assigned всех подписантов.. Оно стабильно работает даже в многозадачном режиме.
2)
сделать систему сообщений. Объект посылает сообщения - кто "подписан" узнает об этом и делает нужные операции. Именно так делают многопоточные системы - у них сильно развита система сообщений.


Добавлено спустя 8 минут 1 секунду:
Cheb писал(а):3. При удалении из структуры, не вызывать деструктор, а ставить флаги "я изменился" и "я труп" и присваивать nil.
..
5. Каждый отрисовщик пробегает по флагам "я изменился" входящих в него объектов при клике мышью или лениво, скажем, 10 раз в секунду.

Это уже какая то виртуальная машина со сборкой мусора получается.. Вот до чего доводят "ленивые" ссылки.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 20.10.2017 01:58:43

>>оно "аппаратное" и тратится на перебор вхождений не надо
оно не аппаратное
оно депрекатед емнип
тратится надо, т.к. ты настраиваешь соответственно матрицы и отрисовываешь кадр

тут нечего обсуждать - математически выбирать универсальней, надежней, независимей....

>>По поводу ссылок - а зачем они нужны? Их роль в чем?
есть примитив, есть представитель этого примитива в какомто дереве. примитив удаляется. в дерево приходит информация (неважно как, сообщением или калбеком) что примитив удален.
Если мы не храним в примитиве информациию о том какая нода дерева "олицетворяет" данный примитив (и соответственно не посылаем ее дереву), то дереву придется производить поиск нужной ноды - это очень накладно.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 02:00:31

Самому нужно писать свой язык с VM или транслятор в Jit код. Созрел я до этого.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 20.10.2017 02:03:12

Эпохальный момент - напечатал чертеж из zcad`а. Не первый, раньше я уже печатал, но это была монструальная надстройка над opengl. а сечас порисовал CanvasDrawer`ом на TPrinter.canvas... красота!
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 02:05:35

zub писал(а):тратится надо, т.к. ты настраиваешь соответственно матрицы и отрисовываешь кадр

тут нечего обсуждать - математически выбирать универсальней, надежней, независимей....
Пересылка матрицы в OpenGL значительнее быстрее чем перебор 15К примитивов.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 20.10.2017 02:10:39

Сразу видно ты не в теме))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 10:52:51

VBO, Списки разве они медленнее?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение veb86 » 20.10.2017 11:11:01

zub писал(а):Эпохальный момент - напечатал чертеж из zcad`а. Не первый, раньше я уже печатал, но это была монструальная надстройка над opengl. а сечас порисовал CanvasDrawer`ом на TPrinter.canvas... красота!


Поздравляю, действительно большое дело! Как не крути, но печать чертежа из CADа необходима. ZCAD еще на шаг стал независимей от других CAD программ.
veb86
новенький
 
Сообщения: 62
Зарегистрирован: 16.03.2016 12:58:35

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 11:47:23

В канву 3D рисовать? Еще Raytracer прикрутите.
не проще битмап из OpenGL печатать?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение Лекс Айрин » 20.10.2017 12:14:11

olegy123, на самом деле, не проще. OpenGL/DirectX годятся для игр, но вся серьезная графика до сих пор обсчитывается. преимущественно процессором. Показать ее потом можно хоть графопостроителем, но как дополнительный модуль-визуализатор. И не стоит забывать, что в играх обсчет сделан заранее, поэтому можно достаточно легко двигать картинки относительно друг-друга, а в САПР пересчет может быть почти всего.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: САПР на Lazarus

Сообщение zub » 20.10.2017 14:35:46

>>не проще битмап из OpenGL печатать?
Печатать надо вектором!

>>VBO, Списки разве они медленнее?
20к примитивов. каждый состоит из десятка-другого других примитивов. даже на элементарном отрезке желательно знать не только факт попадания помышку, но и в какой точке он подмышку попал... VBO не медленней, оно совсем про другое
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 18:15:12

Лекс Айрин писал(а):olegy123, на самом деле, не проще. OpenGL/DirectX годятся для игр, но вся серьезная графика до сих пор обсчитывается. преимущественно процессором. Показать ее потом можно хоть графопостроителем, но как дополнительный модуль-визуализатор.

Т.е. Blender,3D Studio Max не могут рисовать? По моему даже очень могут и рисуют.
Мне показывали чертежи которые рисовали вообще в паинтбраше. AutoCAD сложный, а паинтбраш - бери и рисуй.

Лекс Айрин писал(а):И не стоит забывать, что в играх обсчет сделан заранее, поэтому можно достаточно легко двигать картинки относительно друг-друга, а в САПР пересчет может быть почти всего.
CAD не делает обсчетов? Все делает.
Та же Unity3d - чем не векторный редактор/CAD для виртуального мира.

Другое дело, что Blender нет привычного для инженерного дела функционала. Но допилить его вполне можно.

По поводу вопроса что OpenGL <> Canvas.. OpenGL - это визуализатор + callback функция( не одна) ===> ровно тоже самое вы сами делаете в Canvas.

Добавлено спустя 26 минут 36 секунд:
судя по статье:
https://habrahabr.ru/post/264243/
Там проблема есть в точности 1e-6.. Действительно не все ускорители могут работать с GLdouble числами, для них базовое GLsingle. Что в этом есть существенная потеря в точности.
Но это можно учитывать - отображать в масштабе.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Пред.След.

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

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

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

Рейтинг@Mail.ru