САПР на Lazarus

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

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

Re: САПР на Lazarus

Сообщение Лекс Айрин » 20.10.2017 18:51:01

olegy123 писал(а):Т.е. Blender,3D Studio Max не могут рисовать?


Ну... вообще, они НЕ рисуют -- они чертят... точнее, лепят. Рисует потом уже специальный модуль визуализации. Думаю, тут САПР и 3Д редакторы очень похожи.
Кстати, как-то решил я поиграться в блендером... комп у меня правда, старый, но и картинка была простенькой... и комп просто сложился, пока обсчитывал ее... потом отошел и даже получалось двигать.... обычный кубик и 1 или 2 источника света.

olegy123 писал(а):Мне показывали чертежи которые рисовали вообще в паинтбраше.


Я вообще, видел как чертежи рисовали на кульмане... это самый-самый олдскульный аппаратный САПР... и неплохо получалось. Да и сам я иногда рисую чертеж то в пеинте (обычном), то линейкой и карандашом на бумаге...

olegy123 писал(а):CAD не делает обсчетов? Все делает.


Вообще, изначально openGL/ DirectX это всего лишь вьюверы. Перегон информации туда-сюда по AGP/PCI-E дело не быстрое, поэтому его стараются делать как можно реже... собственно, в играх проще -- загрузил всю сцену и гуляй рванина. Хотя все равно приходится периодически подтягивать данные, так как вся может тупо не поместиться.
В САПР же... Ладно, если ты удаляешь одно ребро... а если смахнешь в Вечность тысяч 20?
Да и потом, все равно, даже если будешь делать чисто в видюхе, то все равно придется решить вопрос синхронизации данных....

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

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

Re: САПР на Lazarus

Сообщение zub » 20.10.2017 19:01:29

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

Завязываем флейм.

По делу:
Похоже на баг в лазаре: есть диалог выбора принтера, есть диалог настройки бумаги.
Если в настройке бумаги жамкнуть книжная\альбомная - фактических изменений ориентации при печати не происходит (хоть настройка и отображается везде в соответствии с выбором)
Если в жамкнуть книжная\альбомная в настройке принтера - всё работает как и задумано.
Если кому не лень проверте это поведение у себя с помощью \lazarus\components\printers\samples\dialogs\ - проблема замечена под виндой
Вложения
far.gif
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 20.10.2017 19:11:37

Лекс Айрин писал(а):
olegy123 писал(а):Т.е. Blender,3D Studio Max не могут рисовать?


Ну... вообще, они НЕ рисуют -- они чертят... точнее, лепят. Рисует потом уже специальный модуль визуализации. Думаю, тут САПР и 3Д редакторы очень похожи.
Все они - векторные редакторы.
Забыл добавить Inkscape, Corel.. 2D.

Лекс Айрин писал(а):
olegy123 писал(а):CAD не делает обсчетов? Все делает.


Вообще, изначально openGL/ DirectX это всего лишь вьюверы. Перегон информации туда-сюда по AGP/PCI-E дело не быстрое, поэтому его стараются делать как можно реже... собственно, в играх проще -- загрузил всю сцену и гуляй рванина. Хотя все равно приходится периодически подтягивать данные, так как вся может тупо не поместиться.
PCIe3.0 16x = до 16 ГБ/с дает..
В этом году пообещали PCIe 4.0 в котором уволили скорость. в 2019 PCIe 5.0 выйдет.
Рисовать черточки - хватит.

Лекс Айрин писал(а):В САПР же... Ладно, если ты удаляешь одно ребро... а если смахнешь в Вечность тысяч 20?
Да и потом, все равно, даже если будешь делать чисто в видюхе, то все равно придется решить вопрос синхронизации данных....
это вопрос в писанины программы. Хорошим тоном её будет - выделить и меня спросить, а нужно это делать..

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

Добавлено спустя 5 минут 9 секунд:
zub писал(а):>>Но это можно учитывать - отображать в масштабе.
Это довольно сложно учесть. В игровых движках оптимизируются не только код самого движка, но и исходные данные. Универсальный редактор должен быть рассчитан на любые входные данные. на приложенном скриншоте огл отрисовка сильно удаленной от начала координат геометрии методом "в лоб", без "ухищрений"
Почему сложно?
На дисплее же не измеряете в сантиметрах.. Хватает же пикселей. И конвертация спокойно проходит.
Вообще у верстальщиков - это целая наука.

Просто я про то что зачем крутить педали велосипеда? когда "под капотом ждут тысяча лошадок" => FPGA.

Добавлено спустя 7 минут 23 секунды:
Все сводится к MVC:
Где есть "модель" (данные об изделии.. он же "чертеж").
Есть "отображение" - (OpenGL/DirectX/Canvas..).
И есть "управление" - функционал работы с данными.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 20.10.2017 19:50:15

>>Почему сложно?
Если ты считаешь что несложно - велком комитить в зкад.
У меня это было решено пока я использовал double для вывода - в одном чертеже можно было без проблем наблюдать геометрию размером в несколько сотен единиц и в окресности 0,0,0 и на удалении порядка 10e10 от начала координат. С переходом на single артефакты похожие на картинку чуть выше вернулись
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 22.10.2017 08:40:22

Ну тогда всю арифметику стоит свести либо в double или даже в extended.
Обрезать точность только на этапе рисования.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 22.10.2017 12:50:25

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

Основную погрешность вносит не только нехватка разрядности исходных данных, а сам процесс их обработки - при удалении от начала координат в матрицах модели\проекции присутствуют одновременно и очень маленькие и гиганские цифры, результат операций над ними даже в double несет заметную погрешность. Приходится "хитрить" например вычитать из всего что отрисовывается некую конcтанту.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 22.10.2017 16:55:58

Хитрить не надо.
Вся арифметика и данные сводится к большим цифрам(если нужно большие цифры считать).
а визуализация сводит большие цифры в double(некоторая аппаратура уже используют) либо в single, либо даже в integer (canvas).
[Данные (Extended)] x [Визуальная позиция и масштаб (Extended)] ==> [отсечение (Extended)=>(Single) ] ==> [окно выхода (Single)]

https://ru.wikipedia.org/wiki/%D0%9E%D1 ... 0%B8%D0%B5
http://algolist.manual.ru/graphics/clip_seg.php
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 22.10.2017 17:07:05

>>Хитрить не надо.
ну попробуй нехитря нарисовать отрезок (10e10,10e10)-(10e10+10,10e10+10) настроив матрицы так чтоб он занимал полэкрана. opengl`ем
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 22.10.2017 17:08:23

zub писал(а):а сам процесс их обработки - при удалении от начала координат в матрицах моделипроекции присутствуют одновременно и очень маленькие и гиганские цифры, результат операций над ними даже в double несет заметную погрешность

Это нормально, без дискретизация
https://ru.wikipedia.org/wiki/%D0%94%D0 ... 0%B8%D1%8F
мы бы видео не смотрели и музыку не слушали.

вообще можно вывести и в 128х128 пикселей.

Добавлено спустя 16 минут 42 секунды:
Можно даже не отсекать. тем самым не перерабатывать все данные.
А просто отбрасывать
т.е.
value_single:=ifthen(value_extended<1.5х10Е-45,0,ifthen(value_extended>3.4х10Е38,3.4х10Е38,value_extended));

координаты для экарна 1.5х10Е-45/3.4х10Е38 - недостижимые.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 22.10.2017 17:42:05

>>без дискретизация
это не дискретизация а нехватка динамического диапазона.

вот старая версия, вывод еще организован через double.
https://imgur.com/a/8bZHl
когда галка стоит - рисуется "влоб", без галки с хитростями. удаление от 0 порядка 10e10, размер примитивов порялка 100000 едениц. при таком соотношении искажения выглядят весело)) Если размеры примитивов уменьшить до например 100 а удаление не менять - без "хитростей" ниче уже не отрисуется, тупо всё сложится в линию, с хитростями всё будет ок.

>>Можно даже...
Хоре теоретизировать
>>ну попробуй нехитря нарисовать отрезок (10e10,10e10)-(10e10+10,10e10+10) настроив матрицы так чтоб он занимал полэкрана. opengl`ем
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 22.10.2017 17:42:51

zub писал(а):ну попробуй нехитря нарисовать отрезок (10e10,10e10)-(10e10+10,10e10+10) настроив матрицы так чтоб он занимал полэкрана. opengl`ем
А что сложного?
Projection * View * Model
Добовляем View_Scale
где View_Scale = 10e10-10

Projection * View * (View_Scale *Model)

и все будет норм..

Добавлено спустя 1 минуту 10 секунд:
Правда (View_Scale *Model) нужно свести в Single
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 22.10.2017 17:45:23

>>Добовляем View_Scale
Вот, уже пошли хитрости)). добавляем еще утрезок, теперь их два
(10e10,10e10)-(10e10+10,10e10+10) и (0,0)-(10,10)
и мы масштабируем и гоняем камеру туда-сюда рассматривая то один то другой...
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 22.10.2017 17:47:08

Сейчас тестил:

Код: Выделить всё
var
  xe1,xe2:Extended;
  xs1,xs2:Single;
begin
  //1.9х10Е-4951..1.1х10Е4932
  xe1:=1.9e-4951;
  xe2:=1.1e4932;
  xs1:=xe1;
  xs2:=xe2;

на выходе получил
xs1=0
xs2=+Inf


Добавлено спустя 6 минут 13 секунд:
zub писал(а):Вот, уже пошли хитрости)).

Какие хитрости мы масштабируем модель..
Кнопка масштаб есть? Или оно не предусмотрено?

zub писал(а): добавляем еще утрезок, теперь их два
(10e10,10e10)-(10e10+10,10e10+10) и (0,0)-(10,10)
и мы масштабируем и гоняем камеру туда-сюда рассматривая то один то другой...

И что? GLsingle = [1.5х10Е-45..3.4х10Е38] >> на порядок больше [(10e10+10,10e10+10)]
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 22.10.2017 18:14:45

>>Какие хитрости мы масштабируем модель..
>>И что?
очевидно что этот масштаб у тебя будет разный для разных отрезков. не? это попрежнему не хитрости?

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

Re: САПР на Lazarus

Сообщение olegy123 » 22.10.2017 18:21:18

А вспомнил в чем там проблема .. разрядность..
потеря последних цифр..
10e10=9.999999795E10

http://www.delphibasics.ru/Single.php
Код: Выделить всё
Пример кода : Показ точности и вместимости Single значений
var
  account1, account2, account3, account4 : Single;
begin
  account1 := 0.1234567890123456789;   // 20 десятичных мест
  account2 := 1.18E-38;                // Самое маленькое значение экспоненты
  account3 := 3.4E38;                  // Самое большое значение экспоненты
  account4 := 3.49E38;                 // Будет обработан как бесконечность

  ShowMessage('Account1 = '+FloatToStr(account1));
  ShowMessage('Account2 = '+FloatToStr(account2));
  ShowMessage('Account3 = '+FloatToStr(account3));
  ShowMessage('Account4 = '+FloatToStr(account4));
end;
Account1 = 0.123456791043282
Account2 = 1.17999994577463E-38
Account3 = 3.39999995214436E38
Account4 = INF


http://www.delphibasics.ru/Extended.php
Код: Выделить всё
Пример кода : Показ точности и вместимости Extended значений
var
  account1, account2, account3, account4 : Extended;
begin
  account1 := 0.1234567890123456789;   // 20 десятичных мест
  account2 := 3.37E-4932;              // Самое низкое значение экспоненты
  account3 := 1.18E4932;               // Самое высокое значение экспоненты
  account4 := 1.19E4932;               // Обрабатывается как бесконечность

  ShowMessage('Account1 = '+FloatToStrF(account1, ffGeneral, 22, 20));
  ShowMessage('Account2 = '+FloatToStr(account2));
  ShowMessage('Account3 = '+FloatToStr(account3));
  ShowMessage('Account4 = '+FloatToStr(account4));
end;

Account1 = 0.123456789012345679
Account2 = 3.37E-4932
Account3 = 1.18E4932
Account4 = INF


Добавлено спустя 2 минуты 49 секунд:
Если хочешь использовать больше 6 цифр после запятой .. нужно переходить на тип Extended.
Там до 17цифр.
- все правильно.

Добавлено спустя 9 минут 3 секунды:
есть еще
https://en.wikipedia.org/wiki/Quadruple ... int_format
34 цифры..
и
https://en.wikipedia.org/wiki/Octuple-p ... int_format
71 цифра..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Пред.След.

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

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

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

Рейтинг@Mail.ru