САПР на Lazarus

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

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

Re: САПР на Lazarus

Сообщение Лекс Айрин » 01.11.2017 12:45:21

olegy123 писал(а):Тогда текстовый редактор - это "блокнот". Но это не совсем так.


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

olegy123 писал(а): я разделаю - данные и средства управления. также и их отображения..


Здесь можно очень долго спорить. Новейшие практики программирования (субъект-ориентированное программирование, например. Да и само ООП в общем случае) это не рекомендуют. Но опять же... есть вариант как все исправить -- предложи. Я не могу предложить код и предпочитаю помалкивать, даже если идеи есть.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 13:00:07

Лекс Айрин писал(а):если есть сильные разногласия, то можно форкнуть проект.

Лекс Айрин, поэтому я не принимаю участия. Со своим уставом в чужой монастырь..
Но Zub столкнулся с проблемами которые не сложные. Но при его "функциональном подходе" - они уходят "по экспоненте" вверх от сложости.
Столкнулся с тем чем вы текстовые редакторы столкнулись - есть продукт, в нем есть хаос(энтропия) - растет продукт растет хаос(энтропия).Сам рост хаоса(энтропия) может опережать рост продукта.
Как с этим бороться?
Разделить на составляющие.

Добавлено спустя 14 минут 1 секунду:
структура3.png

Вот о чем я говорю.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение Лекс Айрин » 01.11.2017 13:24:10

olegy123 писал(а):Но Zub столкнулся с проблемами которые не сложные. Но при его "функциональном подходе" - они уходят "по экспоненте" вверх от сложости.


Со стороны все кажется несложным.

olegy123 писал(а):Как с этим бороться?
Разделить на составляющие.


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

На сколько я понимаю, у Zubа сейчас очень сложный момент структурирования кода. Так сказать, шаг назад. перед тем как идти вперед.

olegy123 писал(а):есть продукт, в нем есть хаос(энтропия) - растет продукт растет хаос(энтропия).Сам рост хаоса(энтропия) может опережать рост продукта.


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

Re: САПР на Lazarus

Сообщение zub » 01.11.2017 13:26:29

>>можно, только Zub готов пересмотреть проект?
В разумных пределах - конечно, все что улучшает zcad - буду рад.
И скорее всего речь пойдет не о пересмотре, а о расширении.

>>Я плохо понимаю с какими данными и в каком виде приходится работать. Как они упакованы, как классифицированы?
на уровне "cad"
это класс "чертеж" содержащий в себе dxf примитивы и их стили.
на данный момент - сапр примитивы в процессе трансформитрования - часть своих функций они должны спустить на уровень движка (например выделение мышкой)

на уровне "движек"
это некий класс содержащий в себе некие "элементарные" примитивы - они близки к тем что умеет система отображения, и являются представлением dxf примитивов

на уровне "графический редактор"
это набор процедур для создания и обработки примитивов с уровня "cad"

>>Разделить на составляющие.
Да все вобщемто разделено нормально. Большая проблема в том что за долгое время накопилось несколько способов реализации одного и тогоже, некоторые из них надо херить и чтото переписывать поновому - но в силу некоторых причин это не делается.

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

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 13:34:17

olegy123 писал(а):Я плохо понимаю с какими данными и в каком виде приходится работать. Как они упакованы, как классифицированы?


Смотрите:
Точка(x,y, z);Точка(x,y, z,1);
Вектор(x,y, z);Вектор(x,y, z,0);
Отрезок(x,y, z,[длина]);Отрезок(x,y, z,0,[длина]);Отрезок(Вектор(),[длина]);
Луч(x,y, z);Луч(x,y, z,0);Луч(Вектор());
Линия(x1,y1, z1, x2,y2, z2);Линия(x1,y1, z1,1, x2,y2, z2);Линия(x1,y1, z1, x2,y2, z2,1);Линия(x1,y1, z1,1, x2,y2, z2,1);
Линия(x1,y1, z1, Точка()); Линия(Точка(), x2,y2, z2); Линия(x1,y1, z1,1 , Точка()); Линия(Точка(), x2,y2, z2,1); Линия(Точка() , Точка()); Линия(x1,y1, z1, Вектор(),[длина]);Линия(x1,y1, z1,1, Вектор(),[длина]);Линия(Точка(), Вектор(),[длина]);
..
Текст([текст]);Текст([текст],x,y, z,1);Текст([текст],Точка());Текст([текст],Луч());..Текст([текст],Линия());Текст([текст],Линия(),[характеристики текста]);


чем больше знаний(данных) тем проще по жизни дальше будет.

Добавлено спустя 1 минуту 43 секунды:
данные вообще могут(желательно) представлены в таком формате
https://ru.wikipedia.org/wiki/GNU_Multi ... on_Library

Добавлено спустя 7 минут 29 секунд:
все свести к такому виду:
[данные] ==> (блок обработки) ==> [данные]
[данные] ==> (блок визуализации)
(блок управления ) ==> [данные]
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 01.11.2017 13:48:41

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

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 14:10:57

Типа как Lego.
[данные] ==> (блок обработки) ==> (блок обработки) ==> (блок обработки) ==>[данные]
- это уже конвейер. некоторые вещи можно распараллелить.

ага, значит базовый формат - dfx.

Теперь вопрос как внутри распределяются данные.. в каком виде они лежат в памяти программы..
Я про что:
если базовый формат планируется отличный от GLSingle(или GLDouble) то нужно данные буфиризировать. На каком уровне это будет происходить? На уровне объектов или на уровне всей схемы?

Добавлено спустя 2 минуты 52 секунды:
нужно буфиризировать - допустим для VBO.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 01.11.2017 14:22:54

>>ага, значит базовый формат - dfx.
)) dxf. но это формат хранения на диске, внутри программы все подругому. от dxf взят набор базовых примитивов и стилей.
ты волен создать свой примитив которого нет в dxf, работать с ним и сохранять чертеж в какойто свой формат.
возможность сохранения в dxf файл пока зашита в реализацию примитивов, но в планах ее сделать отдельно.

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

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

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 14:27:30

zub писал(а):)) dxf. но это формат хранения на диске, внутри программы все подругому.

Я понял, что не txt каждый фрейм парсишь. Вот это мне интересно как упакованы.
На сколько я понял тип Double. Все расчеты введутся в типе [Double], он для системы является базовым?
и как он уходит [gdi, opengl или на принтер] - неужели на gdi Double трункаешь? ведь gdi тип [Integer]

я спрашиваю, потому что хочу увидеть базовую схему. Зависимости.

Добавлено спустя 11 минут 45 секунд:
olegy123 писал(а):Теперь вопрос как внутри распределяются данные.. в каком виде они лежат в памяти программы..

Объект([Double,..Double]) или
Объект(Object(Object([Double,..Double])),...,Object([Double,..Double]))
или сплошной массив [[Double,..Double],[Double,..Double],[Double,..Double]]?..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 01.11.2017 14:51:31

на уровне dxf - базовый double
на уровне отображения - базовый single (и его нехватает, подумываю вернуть double)

и не только трункаю, а еще и трансформирую при надобности. можно сделать свои примитивы с Integer и проззрачно их использовать для gdi рисовальщика, но при этом каждый повторяемый блок (например глифы векторных шрифтов) нужно будет пересчитывать по актуальным координатам.

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

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 14:54:13

Код: Выделить всё
procedure GDBObjDevice.DrawGeometry;
..
  repeat
        v:=p^.getcenterpoint;
        dc.drawer.DrawLine3DInModelSpace(self.P_insert_in_WCS,v,dc.DrawingContext.matrixs);
       p:=VarObjArray.iterate(ir);
  until p=nil;..

все линиями красишь? Вся работа сводится только с GL_lines?
С текстурами не работаешь?

Добавлено спустя 1 минуту 3 секунды:
zub писал(а):Трунканье на производительности не сказывается, если ты думаешь что тут чтото можно выиграть

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

Re: САПР на Lazarus

Сообщение zub » 01.11.2017 15:02:11

>>или сплошной массив [[Double,..Double],[Double,..Double],[Double,..Double]]?..
на уровне элементарных примитивов есть массив синглов - это куча координат и массив примитивов которые содержат индексы в массив координат
т.е.
vertexdata[vertex2single(x1,y2),vertex2single(x2,y2),vertex2single(x3,y3),...]
singledata[single(r1),single(r2),...]
primitivedata[line(i_in_vertex_data_start,i_in_vertex_data_end),circle(i_in_vertex_data_insert,i_in_singl_data_R),...]

>>все линиями красишь?
на данный момент да, но никто не мешает сделать для гди свою окружность - чесно рисуемую. как это сделано с текстом. TTF текст в гээле рисуется треугольниками, в гди - системными функциями с системным алиасингом.

Добавлено спустя 2 минуты 4 секунды:
>>туркать можно во время рисования и вне его
нет от этого мотивирующего выиграша. быстрая графика достгается совсем другими методами
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 15:04:21

p:=VarObjArray.beginiterate(ir);
т.е. все сводится к рисованию примитива Array[GL_line];

Добавлено спустя 3 минуты 4 секунды:
И поиск клика идет софтово через этот Array[GL_line]?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: САПР на Lazarus

Сообщение zub » 01.11.2017 15:08:24

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

Re: САПР на Lazarus

Сообщение olegy123 » 01.11.2017 15:11:48

Кажется я понял этот "велик"
https://www.youtube.com/watch?v=pFBUh3hKKDg

Добавлено спустя 2 минуты 35 секунд:
Код: Выделить всё
procedure GDBObjDevice.EraseMi;
//var
//p:PGDBObjEntity;
begin
     if pobj^.bp.TreePos.Owner<>nil then
     begin
          PTEntTreeNode(pobj^.bp.TreePos.Owner)^.nul.DeleteElement(pobj^.bp.TreePos.SelfIndex);
     end;

     //pointer(p):= VarObjArray.getDataMutable(pobjinarray);
     VarObjArray.DeleteElement(pobjinarray);

     //p^.done;
     //memman.GDBFreeMem(GDBPointer(p))
     pobj^.done;
     uzbmemman.GDBFreeMem(GDBPointer(pobj));
end;

Афигет - это что такое? Редактор? Удаление? :shock:
VarObjArray.DeleteElement(pobjinarray);


т.е. VarObjArray - это сердцевина?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Пред.След.

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

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

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

Рейтинг@Mail.ru