Контейнер визуальных объектов

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

Контейнер визуальных объектов

Сообщение Sharfik » 03.01.2014 16:08:18

В статье "Контейнер визуальных объектов" автор рассказывал как сделать свой редактор графики векторной. Ну или что то на подобие. До момента прочтения статьи, у меня в голове не вязались некоторые аспекты, как реализовать отрисовку и перемещение примитивов по плоскости, когда те уже нарисованы. Исходники статьи работают на Lazarus, с некоторыми доработками. Однако подход к формированию примитивов и способ создания новых мне немного не подходили, и пришлось сделать себе класс где все с нуля.
Развивать как редактор свой класс нет задачи, поэтому выкладываю основу его, кому данная тема интересна, то будет с чем покопаться. Не хочу чтобы у меня исходники пылью покрылись.

Яндекс.Диск:
https://yadi.sk/d/ZdRCdsgmdIbRoA
GitHub:
github.com тут первая реализация

Дополнено 06.2020:
Добавил пример экспорта в DXF (POINT, LINE, CIRCLE, POLYLINE, INSERT, TEXT). Самостоятельно DXF R12 и с подгрузкой шаблона версии выше.

Пример использования на скриншоте
Последний раз редактировалось Sharfik 03.07.2020 16:19:24, всего редактировалось 6 раз(а).
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

Сообщение zub » 02.03.2014 02:31:44

В выложенном проекте нехватает модуля u_geometry_functions (присутствует его PPU но нет исходника), если это так и задумано то обладатели компилятора версиё отличной от вашей ничего не посмотрят, ppu разных версий с компилятором не совместимы
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Контейнер визуальных объектов

Сообщение Sharfik » 02.03.2014 03:37:30

zub писал(а):В выложенном проекте нехватает модуля u_geometry_functions (присутствует его PPU но нет исходника), если это так и задумано то обладатели компилятора версиё отличной от вашей ничего не посмотрят, ppu разных версий с компилятором не совместимы

Наполеон тоже забыл, что в России может быть холодно :D Спасибо, исправил.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

Сообщение zub » 02.03.2014 10:12:56

Теперь вроде заработало. но как посмотреть чтото я не понял(( примитивы создаются гдето вне области просмотра и не редактируются?

Добавлено спустя 14 минут 27 секунд:
в составе zcad`а есть аналогичные примеры - simplecad и advcad
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Контейнер визуальных объектов

Сообщение Sharfik » 02.03.2014 16:49:29

zub писал(а):Теперь вроде заработало. но как посмотреть что то я не понял(( примитивы создаются где то вне области просмотра и не редактируются?

Нет, идея была как раз, чтобы все редактировалось. Мне, если закончу базу, нужен будет редактор, для создания модели связей электрощитов.
Есть БД объектов-список объектов, есть поле отображения, есть часть их связывающая. Каждому эл-ту объекта передается набор функций при помощи которых он рисует себя сам, на поле, путем преобразования безразмерных единиц в пиксели.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

Сообщение zub » 02.03.2014 17:31:48

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

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

Re: Контейнер визуальных объектов

Сообщение zub » 26.04.2016 04:40:35

С другого топика:
Sharfik писал(а):Для тебя думаю мало что интересного. Тебя управление смущало, что не так четко как в zcad работает. А мне главное от класса того нужно, чтобы геометрию основную показывала, функция блоков была и не сильно много зависимостей было. Фишки добавил(рамка режима редактора, затухающие сообщения), а остальное внутри менял под нужды плагинов. Чтобы связывать сторонние классы с графикой. Не больше.

Ничего меня не смущало, полилиния добавляется в фиксированые координаты - на сдвинутом экране не сразу догадаешся что происходит. Да с виду всё по старому, разве что "подсказки" бросаются в глаза.

Прошлый раз не обратил внимания, а может еще небыло - присутствует зачаток олешного биндинга к автокаду. Оно работоспособно в лазаре? у меня чтото ничего не вышло - валится при попытке доступа к AutoCAD.ActiveDocument.Blocks
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Контейнер визуальных объектов

Сообщение Sharfik » 27.04.2016 00:30:34

zub писал(а):Прошлый раз не обратил внимания, а может еще небыло - присутствует зачаток олешного биндинга к автокаду. Оно работоспособно в лазаре? у меня чтото ничего не вышло - валится при попытке доступа к AutoCAD.ActiveDocument.Blocks

Demo программы, это демо программы всегда что то только для демонстрации. Тут мой косяк, мало описания.
Laz+AutoCAD все работает, если использовать только типы OleVariant, WideString, Double.
Если надо могу скинуть как я это делал.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

Сообщение zub » 27.04.2016 01:30:50

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

Re: Контейнер визуальных объектов

Сообщение Sharfik » 27.04.2016 01:42:30

zub писал(а):хм. если скомпилить assi_graph в 3.0 - работает, в транке не работает - вылетает.

чего то не понял, где не работает
zub писал(а):>>Если надо могу скинуть как я это делал.
Я думал тебе предложить приделать такой функционал к зкаду))

а смысл его туда приделывать? zcad имеет идеальный формат обмена dxf.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

Сообщение zub » 27.04.2016 01:58:25

>>чего то не понял, где не работает
Связь лазаря с автокадом по оле. 3.0 связывается, транк валится

>>а смысл его туда приделывать? zcad имеет идеальный формат обмена dxf.
Меня пару раз просили о подобном. Но главное - свежий взгляд и критика
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Контейнер визуальных объектов

Сообщение Sharfik » 27.04.2016 02:51:29

zub писал(а):Меня пару раз просили о подобном.

Туда или оттуда?
Acad по Ole будет работать только с не LT версией, и только с последней открытой копией. Я не знаю как стучаться в разные экземпляры. Это минус большой.
Но, любой acad когда делает копирование каких то эл-тов чертежа создает в temp папке файл dwg. И в буфере обмена хранится ссылка в каком то формате. У меня была мысль, что можно формировать dxf файл и точно так же через буфер обмена подсовывать данные в acad в обход ole. Что быстрее кстати будет. Но не вникал, что за данные висят в буфере обмена, кроме пути.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

Сообщение zub » 27.04.2016 02:58:00

Вставка через клипбоард работает zcad->acad обратно нет, т.к. я не нашел пути заставить автокад использовать для этой операции dxf или хотя бы dwg2000 который более-менее реально распарсить. а вот dxf c путем к нему в клипбоарде автокад прекрасно читает, чем я и воспользовался
Импорт нужен из автокада в зкад
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Контейнер визуальных объектов

Сообщение Sharfik » 03.05.2016 00:23:19

Sharfik писал(а):Я думал тебе предложить приделать такой функционал к зкаду))

Если читается dxf, лучше просить пользователя сохранять в нем для переноса данных. По моему. Потому что у меня мозгов не хватит сделать чтобы переносилось все.
Штриховки, арки, сплайны.. не разбирался как они вообще работают. Блоки и простые элементы линий могу считать. Правда в конечном счете уткнусь в незнание твоей уже платформы) Нужно тогда делать промежуточный какой то массив с данными прочитанными.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер визуальных объектов

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

Потому что у меня мозгов не хватит сделать чтобы переносилось все.
Штриховки, арки, сплайны.. не разбирался как они вообще работают. Блоки и простые элементы линий могу считать

Импорт естественно только поддерживаемых примитивов. На сегодняшний день это POINT, LINE, CIRCLE, POLYLINE, LWPOLYLINE, ARC, ELLIPSE, INSERT, TEXT, MTEXT, 3DFACE, SOLID, SPLINE
По идее ничего сложного, создаешь примитив, настраиваешь свойства, добавляешь в чертеж
Я сейчас какраз выделяю некое API по взаимодействию с зкадом
https://svn.shamangrad.ru/zcad/trunk/ca ... cutils.pas
и с движком
https://svn.shamangrad.ru/zcad/trunk/ca ... eutils.pas

Правда в конечном счете уткнусь в незнание твоей уже платформы)

в общем сложного по идее ничего нет, например создание линии выглядит както так
Код: Выделить всё
function DrawLine_com(operands:TCommandOperands):TCommandResult;
var
    pline:PGDBObjLine;
    p1,p2:gdbvertex;
begin
    if commandmanager.get3dpoint('Specify first point:',p1) then                //просим у пользователя первую точку
    if commandmanager.get3dpoint('Specify first second:',p2) then               //просим у пользователя вторую точку
    begin
      pline := AllocEnt(GDBLineID);                                             //выделяем память
      pline^.init(nil,nil,0,p1,p2);                                             //инициализируем

      zcSetEntPropFromCurrentDrawingProp(pline);                                  //присваиваем текущие слой, вес и т.п
      zcAddEntToCurrentDrawingWithUndo(pline);                                    //добавляем в чертеж
    end;
    result:=cmd_ok;
end;
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Графика и мультимедиа

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

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

Рейтинг@Mail.ru