САПР на Lazarus

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

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

Re: САПР на Lazarus

Сообщение zub » 22.03.2016 22:12:49

Чуток прибрался в исходниках - окончательно разделил векторный движек и зкад + удалил все зависимости внутри движка от функций зкада.
Заодно раскидал все юниты в папки по назначению и тотально всё переименовал: zcxxxxx.pas - файл зкада, zexxxxx.pas - файл движка. За время работы над зкадом несколько раз менял принципы именования юнитов - накопилась большая каша. Переименование пока не коснулось системы контейнеров, подумываю поменять этот велотрактор времен D6 на что нибудь на основе генериков

Попробовал PasDoc для генерации документации - очень годно получается... дело за малым - комментировать хотя бы основные моменты))

зы. Наконец то зкад компилится релизным лазарем 1.6+3.0
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение zub » 24.04.2016 20:26:53

Затеял переделку контейнеров с велосипеда на указателях на велосипед на генериках. "Стабильности" теперь долго невидать(( последняя более-менее рабочая ревизия - 1857
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Sharfik » 27.04.2016 02:04:49

zub, ты в bim идеологию вникал?
Я собственно к чему, acad манипулирует числами с большой точностью. Это его плюс и минус одновременно. Плюс в том что генпланисты могут планы с точными координатами выполнять, минус в том что для отдельного здания точность не нужна большая, а при большом объеме данных тормозит все. Для программ проектирования bim зданий, точность больше пары знаков после запятой не нужна. Может стоит в программе для координат использовать свой тип данных. Что то вида
Код: Выделить всё
zсnumber=extended;

чтобы потом можно было создавать отдельные сборки, которые будут быстрее работать за счет замены в одном месте строки с выше приведенной, на строку с меньшим возможным кол-вом знаков после запятой в типе данных. Насколько я понимаю, это должно ускорить проверку при больших объемах.
или бред?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: САПР на Lazarus

Сообщение zub » 27.04.2016 02:17:08

Свой тип есть почти на всё, в том числе и на оброботку координат, с стародавних времен зовется GDBDouble, но скоро и до него дойдут переименования))
На современных компах ускорения думаю небудет, да и памяти не так много сэкономится. А вот точность упадет в разы.
Я в свое время немало усилий положил для отображения геометрии сильно удаленной от начала координат без искажений. потом поменял разрядность того что рисуется (не того что в примитивах) с double на single и всё испортил - удаленная геометрия снова искажается.

Бим - смутно представляю что это такое
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение zub » 28.04.2016 14:10:43

Попробовал с GDBDouble=single
Есть некоторые прблемы:
Бакенд OpenGL реализован без перегрузки функций, поэтому ждет ^double а приходят ^single - нифига не рисуется
Какието проблемы в "скриптовом" "движке" - где то сидит захардкоденый double... приводит к краху зкада на старте

А вот simplecad (в нем нет скриптов и инспектора объектов) завелся и нормально отображает примитивы в окне с gui рендером
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Sharfik » 03.05.2016 00:33:03

А разница в скорости?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: САПР на Lazarus

Сообщение zub » 03.05.2016 18:10:18

Разницу в скорости на современных компах незаметно. Когдато давно была
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение Sharfik » 04.05.2016 00:27:12

zub писал(а):Разницу в скорости на современных компах незаметно. Когдато давно была

это с двумя линиями не заметно.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: САПР на Lazarus

Сообщение zub » 04.05.2016 01:19:49

Чуток объективных показателей - создание миллиона рандомных линий + пространственная "разбивка"
double
Add lines: 1.4201 second
Rebuild spatial tree: 1.1597 second

537564 KB отъеденой памяти диспетчере процессов

single
Add lines: 1.3750 second
Rebuild spatial tree: 0.9873 second

456912 KB
чуток быстрее, но не критично
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение zub » 28.08.2016 18:11:33

Последнее время преследовали проблемы с сборкой - при небольших изменениях в коде приходилось полностью пересобирать проект - перекомпиляция вываливалась с ошибкой. Как только начал юзать генерики - эта проблема попила кровушки((
И наконец после http://svn.freepascal.org/cgi-bin/viewv ... sion=34069 вылеты при компиляции вылечились!
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение zub » 06.09.2016 22:04:35

Попробовал запилить регистрацию типов данных на основе RTTI для несложных record`ов вдобавок к используемому сейчас парсенью pas файлов.
Чтоб например какойнить команде для показа своих опций в инспекторе ненадо было их прописывать в \rtl\system.pas (в виде описания соответствующего типа данных), а достаточно было выполнить процедуру наподобии
Код: Выделить всё
RegisterRTTIType(TypeInfo(TMyRecord));

и можно было показать var MyRecord:MyRecord в инспекторе.
В принципе ниче сложного, но оказалось RTTI не хранит информацию о типах "синонимах", например:
Код: Выделить всё
type
GDBAngleDouble=double;
TTestRec=record
      Angle:GDBAngleDouble;
end;

Раньше я мог привязать к типу GDBAngleDouble процедуру отображения в инспекторе в соответствии с настройками чертежа: Радианы\Градусы\МалолиЧтоЕще и оно бы работало для всех TTestRec где встречаются данные типа GDBAngleDouble.
РТТИ что такое GDBAngleDouble не знает и возвращает для Angle тип Double((
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение скалогрыз » 07.09.2016 07:08:46

zub писал(а):РТТИ что такое GDBAngleDouble не знает и возвращает для Angle тип Double((

тебе нужно так:
Код: Выделить всё
type
  GDBAngleDouble= type double; // объявление нового типа, вместо алиаса
  TTestRec=record
      Angle:GDBAngleDouble;
  end;

Подробно написано, как ни странно, в Type Aliases.
Если ты раньше TypeInfo не использовал, то всё должно работать как и прежде :) но если использовал, то тонкости описанны по ссылке.. и, судя по всему, это как раз те тонкости, которые ты хочешь использовать!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: САПР на Lazarus

Сообщение zub » 07.09.2016 12:12:39

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

Re: САПР на Lazarus

Сообщение Sharfik » 07.09.2016 19:17:26

скалогрыз писал(а):GDBAngleDouble= type double;

Зачем давать имя новому типу данных с дублированием старого?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: САПР на Lazarus

Сообщение Лекс Айрин » 07.09.2016 19:22:32

Sharfik, например, для контроля ошибок.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

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

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

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

Рейтинг@Mail.ru