Векторный графический редактор

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

Warfalomay
новенький
Сообщения: 12
Зарегистрирован: 17.11.2023 22:11:36

Векторный графический редактор

Сообщение Warfalomay »

Доброго времени суток!
От нечего делать сделал простенький 2D векторный редактор для построения несложных эскизов. Ну, не совсем сделал, до готового еще очень далеко, скажем так, заготовка.
Может кому пригодится в виде геометрических алгоритмов и общего принципа работы.
Правда, работает только под Windows (из-за функций WinAPI), если нужно под Linux, то требуется небольшая доработка.
https://disk.yandex.ru/d/G0LrntB5U2lK1w
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Интересно "буду посмотреть"... :idea:
Аватара пользователя
Alexander
энтузиаст
Сообщения: 864
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Запустил под WINE. Фигуры рисует хорошо. Ну да: сделать для Линукса и добавить побольше привычных для таких программ инструментов (выделение, перемещение сделать проще что ли и прочее).
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Третьим будешь))
Я так понял блоков и dxf нет
Warfalomay
новенький
Сообщения: 12
Зарегистрирован: 17.11.2023 22:11:36

Сообщение Warfalomay »

Sharfik
Блоки есть, но недоработанные. Начал делать, но забил, т.к. сама логика программы немного ущербная : все графические объекты - просто запись в массиве определенного типа. Блоки - это тоже массив с номерами объектов. При удалении граф.объекта, напр. линии, весь массив линий сдвигается вверх, вся нумерация в блоках ломается.
Позже понял, что все объекты нужно было делать отдельными классами (вернее экземплярами классов). Без массивов. Обращаться через FindComponent. Тогда можно было бы и блоки. Но переделывать уже лениво.
А за DXF: вот наткнулся на тему: https://www.cyberforum.ru/lazarus/thread1626208.html
В принципе все просто, тем более, что автор уже все разобрал и описал. Думаю добавить к своему редактору.

Добавлено спустя 6 минут 48 секунд:
SharfikAlexander
Это не самые большие проблемы в этой программе :)
При рисовании регулярно образуются объекты с дробными координатами. В программе же они все округляются до целых. Соответственно, потом точки, которые округлились в разные стороны будут не совпадать. Можно увидеть, сделав картинку с окружностями, пересечениями, привязкой концов линий к пересечениям, а потом сделать из меню Файл скрипт для Автокада. В Автокаде будет видно, что точки немного не совпадают.
Опять же - "генетические уродства" данной программы. Все координаты надо было хранить в дробном виде, в формулах считать также. Округлять только для вывода на экран.

Добавлено спустя 6 минут 43 секунды:
Alexander
Вот немного подправил, теперь, по идее, можно без Wine откопилировать под Linux. Заодно поубрал немного мусора и лишних действий из кода.
https://disk.yandex.ru/d/5zvLfsBqnOE9ig
Аватара пользователя
Alexander
энтузиаст
Сообщения: 864
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

> по идее, можно без Wine откопилировать под Linux

Код: Выделить всё

drawing_unit.pas(6,6) Error: Невозможно найти Windows, используемый в Drawing_unit в инспекторе проекта.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Warfalomay
>>В принципе все просто, тем более, что
оптимистично))
Warfalomay
новенький
Сообщения: 12
Зарегистрирован: 17.11.2023 22:11:36

Сообщение Warfalomay »

Alexander
Пардон, Linux не пользуюсь, проверить было не на чем. Вот теперь должно быть нормально:
https://disk.yandex.ru/d/ml7zgVgO9ULCAg

Добавлено спустя 3 минуты 35 секунд:
zub
А что сложного, если есть описание формата?
У меня в программе есть экспорт в скрипт, который читается Автокадом (ну, вернее Nanocad, но разницы, наверное, нет), по такому же принципу и в DXF можно экспортировать.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

очень много нюансов

Добавлено спустя 13 минут 52 секунды:
ну и описание собственно хоть и с виду внушает, но ориентировано на чтение - для записи в актуальные информации мало
Аватара пользователя
Alexander
энтузиаст
Сообщения: 864
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

> Вот теперь должно быть нормально

my_modify.pas(30,71) Error: Невозможно найти MyFunc, используемый в my_modify.
Warfalomay
новенький
Сообщения: 12
Зарегистрирован: 17.11.2023 22:11:36

Сообщение Warfalomay »

Alexander
Все, сдаюсь :cry:
Нифига не понятно, этот модуль есть в папке lib проекта, почему он не цепляется...

Добавлено спустя 1 минуту 56 секунд:
zub
Возможно и мало, я еще не пробовал. Вроде информацию о всех нужных типах примитивов понятно как в DXF записать, пока, наверное, этого достаточно.

Добавлено спустя 5 минут 24 секунды:
Alexander
Можно докинуть файл в папку с проектом
https://disk.yandex.ru/d/L6bOKtbo8nkwFg,
хотя в виде откомпилированного модуля он и так есть в наличии.
Надеюсь,теперь заработает :(
veb86
новенький
Сообщения: 66
Зарегистрирован: 16.03.2016 11:58:35

Сообщение veb86 »

Возможно и мало, я еще не пробовал. Вроде информацию о всех нужных типах примитивов понятно как в DXF записать, пока, наверное, этого достаточно.
zub написал вот это с нуля https://github.com/zamtmn/zcad
Warfalomay
новенький
Сообщения: 12
Зарегистрирован: 17.11.2023 22:11:36

Сообщение Warfalomay »

veb86
И что?
Аватара пользователя
Alexander
энтузиаст
Сообщения: 864
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Да, теперь запустился, спасибо !

Изображение
veb86
новенький
Сообщения: 66
Зарегистрирован: 16.03.2016 11:58:35

Сообщение veb86 »

Warfalomay писал(а):veb86
И что?
Не хотел обидеть. Я просто хотел сказать, что zcad достиг уже много, если закрыть глаза на некоторые недоделки, то я думаю он может заменить платный CAD.
Но даже с учетом этого, полноценной поддержки всех примитивов нет (DXF). Есть куча странных поведенческих свойств примитивов, да и самих примитивов огромное множество. Открыть огромный чертеж без предварительной подготовки реально, но будут проблемы. Например МТекст который в себе несет такое {\fArial Narrow|b0|i0|c0|p34;H\fArial|b0|i0|c204|p34;\LE\Q5;\W1.5;\T0.9;\lLLO} WORLD (HELLO WORLD).
Я бы предложил сделать круче, организовать поддержку https://github.com/LibreDWG/libredwg. Адаптировать данную библиотеку под fpc было бы круто. Ну и помогло бы развитию zcad и самой libredwg :D :D :D
Ответить