Векторный графический редактор
Модератор: Модераторы
-
Warfalomay
- новенький
- Сообщения: 12
- Зарегистрирован: 17.11.2023 22:11:36
Векторный графический редактор
Доброго времени суток!
От нечего делать сделал простенький 2D векторный редактор для построения несложных эскизов. Ну, не совсем сделал, до готового еще очень далеко, скажем так, заготовка.
Может кому пригодится в виде геометрических алгоритмов и общего принципа работы.
Правда, работает только под Windows (из-за функций WinAPI), если нужно под Linux, то требуется небольшая доработка.
https://disk.yandex.ru/d/G0LrntB5U2lK1w
От нечего делать сделал простенький 2D векторный редактор для построения несложных эскизов. Ну, не совсем сделал, до готового еще очень далеко, скажем так, заготовка.
Может кому пригодится в виде геометрических алгоритмов и общего принципа работы.
Правда, работает только под Windows (из-за функций WinAPI), если нужно под Linux, то требуется небольшая доработка.
https://disk.yandex.ru/d/G0LrntB5U2lK1w
Интересно "буду посмотреть"... 
Третьим будешь))
Я так понял блоков и dxf нет
Я так понял блоков и dxf нет
-
Warfalomay
- новенький
- Сообщения: 12
- Зарегистрирован: 17.11.2023 22:11:36
Sharfik
Блоки есть, но недоработанные. Начал делать, но забил, т.к. сама логика программы немного ущербная : все графические объекты - просто запись в массиве определенного типа. Блоки - это тоже массив с номерами объектов. При удалении граф.объекта, напр. линии, весь массив линий сдвигается вверх, вся нумерация в блоках ломается.
Позже понял, что все объекты нужно было делать отдельными классами (вернее экземплярами классов). Без массивов. Обращаться через FindComponent. Тогда можно было бы и блоки. Но переделывать уже лениво.
А за DXF: вот наткнулся на тему: https://www.cyberforum.ru/lazarus/thread1626208.html
В принципе все просто, тем более, что автор уже все разобрал и описал. Думаю добавить к своему редактору.
Добавлено спустя 6 минут 48 секунд:
SharfikAlexander
Это не самые большие проблемы в этой программе
При рисовании регулярно образуются объекты с дробными координатами. В программе же они все округляются до целых. Соответственно, потом точки, которые округлились в разные стороны будут не совпадать. Можно увидеть, сделав картинку с окружностями, пересечениями, привязкой концов линий к пересечениям, а потом сделать из меню Файл скрипт для Автокада. В Автокаде будет видно, что точки немного не совпадают.
Опять же - "генетические уродства" данной программы. Все координаты надо было хранить в дробном виде, в формулах считать также. Округлять только для вывода на экран.
Добавлено спустя 6 минут 43 секунды:
Alexander
Вот немного подправил, теперь, по идее, можно без Wine откопилировать под Linux. Заодно поубрал немного мусора и лишних действий из кода.
https://disk.yandex.ru/d/5zvLfsBqnOE9ig
Блоки есть, но недоработанные. Начал делать, но забил, т.к. сама логика программы немного ущербная : все графические объекты - просто запись в массиве определенного типа. Блоки - это тоже массив с номерами объектов. При удалении граф.объекта, напр. линии, весь массив линий сдвигается вверх, вся нумерация в блоках ломается.
Позже понял, что все объекты нужно было делать отдельными классами (вернее экземплярами классов). Без массивов. Обращаться через 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
- Откуда: оттуда
- Контактная информация:
> по идее, можно без Wine откопилировать под Linux
Код: Выделить всё
drawing_unit.pas(6,6) Error: Невозможно найти Windows, используемый в Drawing_unit в инспекторе проекта.Warfalomay
>>В принципе все просто, тем более, что
оптимистично))
>>В принципе все просто, тем более, что
оптимистично))
-
Warfalomay
- новенький
- Сообщения: 12
- Зарегистрирован: 17.11.2023 22:11:36
Alexander
Пардон, Linux не пользуюсь, проверить было не на чем. Вот теперь должно быть нормально:
https://disk.yandex.ru/d/ml7zgVgO9ULCAg
Добавлено спустя 3 минуты 35 секунд:
zub
А что сложного, если есть описание формата?
У меня в программе есть экспорт в скрипт, который читается Автокадом (ну, вернее Nanocad, но разницы, наверное, нет), по такому же принципу и в DXF можно экспортировать.
Пардон, Linux не пользуюсь, проверить было не на чем. Вот теперь должно быть нормально:
https://disk.yandex.ru/d/ml7zgVgO9ULCAg
Добавлено спустя 3 минуты 35 секунд:
zub
А что сложного, если есть описание формата?
У меня в программе есть экспорт в скрипт, который читается Автокадом (ну, вернее Nanocad, но разницы, наверное, нет), по такому же принципу и в DXF можно экспортировать.
очень много нюансов
Добавлено спустя 13 минут 52 секунды:
ну и описание собственно хоть и с виду внушает, но ориентировано на чтение - для записи в актуальные информации мало
Добавлено спустя 13 минут 52 секунды:
ну и описание собственно хоть и с виду внушает, но ориентировано на чтение - для записи в актуальные информации мало
-
Warfalomay
- новенький
- Сообщения: 12
- Зарегистрирован: 17.11.2023 22:11:36
Alexander
Все, сдаюсь
Нифига не понятно, этот модуль есть в папке lib проекта, почему он не цепляется...
Добавлено спустя 1 минуту 56 секунд:
zub
Возможно и мало, я еще не пробовал. Вроде информацию о всех нужных типах примитивов понятно как в DXF записать, пока, наверное, этого достаточно.
Добавлено спустя 5 минут 24 секунды:
Alexander
Можно докинуть файл в папку с проектом
https://disk.yandex.ru/d/L6bOKtbo8nkwFg,
хотя в виде откомпилированного модуля он и так есть в наличии.
Надеюсь,теперь заработает
Все, сдаюсь
Нифига не понятно, этот модуль есть в папке lib проекта, почему он не цепляется...
Добавлено спустя 1 минуту 56 секунд:
zub
Возможно и мало, я еще не пробовал. Вроде информацию о всех нужных типах примитивов понятно как в DXF записать, пока, наверное, этого достаточно.
Добавлено спустя 5 минут 24 секунды:
Alexander
Можно докинуть файл в папку с проектом
https://disk.yandex.ru/d/L6bOKtbo8nkwFg,
хотя в виде откомпилированного модуля он и так есть в наличии.
Надеюсь,теперь заработает
zub написал вот это с нуля https://github.com/zamtmn/zcadВозможно и мало, я еще не пробовал. Вроде информацию о всех нужных типах примитивов понятно как в DXF записать, пока, наверное, этого достаточно.
-
Warfalomay
- новенький
- Сообщения: 12
- Зарегистрирован: 17.11.2023 22:11:36
veb86
И что?
И что?
Не хотел обидеть. Я просто хотел сказать, что zcad достиг уже много, если закрыть глаза на некоторые недоделки, то я думаю он может заменить платный CAD.Warfalomay писал(а):veb86
И что?
Но даже с учетом этого, полноценной поддержки всех примитивов нет (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

