XRay3D / GERBER_X3

Program for preparing G-code for milling of printed circuit boards on CNC. You can use it as a converter to a PDF file.
198 stars 50 forks source link

Немного переводов и мелких правок #91

Closed GeorgKZ closed 1 year ago

GeorgKZ commented 1 year ago

Это для ветки dev_clipper_2 недельной давности. Убирал предупреждения при сборке, некоторые предупреждения при работе, доделывал русификацию. Собирал под Qt-6.4.2 под Линукс.

Ещё в принципе есть наработки статической сборки под Ликус и Windows, но для Qt с 6й версии.

Патч положил тут: https://drive.google.com/file/d/1XCASbYDJGWnU7nu364RmKggseki_C2Wx/view?usp=sharing

XRay3D commented 1 year ago

К сожалению не всё применилось((

GGEASY.patch:6956: trailing whitespace.
  const int scale_error_i       = 2; // non-fatal
GGEASY.patch:6957: trailing whitespace.
  const int non_pair_error_i    = 4; // non-fatal
GGEASY.patch:7335: trailing whitespace.
  inline Path<T1> ScalePath(const Path<T2>& path,
GGEASY.patch:7351: trailing whitespace.
      [scale_x, scale_y](const auto& pt)
GGEASY.patch:7355: trailing whitespace.
      [scale_x, scale_y](const auto& pt)
error: patch failed: GERBER_X3/CMakeLists.txt:10
error: GERBER_X3/CMakeLists.txt: patch does not apply
error: patch failed: GERBER_X3/plugins/file/file_plugins_en.ts:1
error: GERBER_X3/plugins/file/file_plugins_en.ts: patch does not apply
error: patch failed: GERBER_X3/plugins/file/file_plugins_ru.ts:19
error: GERBER_X3/plugins/file/file_plugins_ru.ts: patch does not apply
error: patch failed: GERBER_X3/plugins/file/gerber/file_gerber_en.ts:1
error: GERBER_X3/plugins/file/gerber/file_gerber_en.ts: patch does not apply
error: patch failed: GERBER_X3/plugins/file/gerber/file_gerber_ru.ts:170
error: GERBER_X3/plugins/file/gerber/file_gerber_ru.ts: patch does not apply
error: patch failed: GERBER_X3/plugins/gcode/gc_file.cpp:439
error: GERBER_X3/plugins/gcode/gc_file.cpp: patch does not apply
error: patch failed: GERBER_X3/plugins/gcode/gcode_en.ts:1
error: GERBER_X3/plugins/gcode/gcode_en.ts: patch does not apply
error: patch failed: GERBER_X3/plugins/gcode/gcode_ru.ts:27
error: GERBER_X3/plugins/gcode/gcode_ru.ts: patch does not apply
error: patch failed: GERBER_X3/plugins/gcode/pocketoffset/pocketoffset_form.cpp:26
error: GERBER_X3/plugins/gcode/pocketoffset/pocketoffset_form.cpp: patch does not apply
error: GERBER_X3/plugins/gcode/profile/prof_file.cpp: No such file or directory
error: patch failed: GERBER_X3/plugins/gcode/thermal/thermal_form.h:77
error: GERBER_X3/plugins/gcode/thermal/thermal_form.h: patch does not apply
error: patch failed: GERBER_X3/plugins/gcode/voroni/voronoi_boost.cpp:18
error: GERBER_X3/plugins/gcode/voroni/voronoi_boost.cpp: patch does not apply
error: GERBER_X3/plugins/gcode/voroni/voronoi_file.cpp: No such file or directory
error: patch failed: GERBER_X3/plugins/shape/CMakeLists.txt:56
error: GERBER_X3/plugins/shape/CMakeLists.txt: patch does not apply

Пулреквестом лучше было бы. Придётся ручками и глазами добивать.

GeorgKZ commented 1 year ago

Я извиняюсь, поторопился с выкладиванием. Вот тут архив: https://drive.google.com/file/d/1XjHG_CIRC9Hl6Hk7TygCrw8mUmjbHwDp/view?usp=sharing почистил, разобрал и подписал что для чего нужно. Для справки вот https://drive.google.com/file/d/1OCGojDlqDImpaBTNL6Pmd_dKEAXLpjJZ/view?usp=sharing вариант с применёнными патчами, чтобы было понятно, какие файлы обработаны. Исходный архив, к которому были применены патчи: https://drive.google.com/file/d/1OCysd5PdZ1tZ9mZcKzWLzUuUePFHemsU/view?usp=sharing

GeorgKZ commented 1 year ago

Собирал под Линукс примерно так (в /usr/local/Qt-6.4.2-shared/ был собран Qt):

ulimit -n 2048

CMAKE_PREFIX_PATH="/usr/local/Qt-6.4.2-shared/lib/cmake" PATH="/usr/local/Qt-6.4.2-shared/bin:$PATH" BUILDDIR="../GGEASY-build-6.4.02-shared-deb" SRCDIR="../GGEASY"

Конфигурация

cmake -G Ninja "-DCMAKE_EXE_LINKER_FLAGS=-pthread" -DCMAKE_BUILD_TYPE=Debug -S ${SRCDIR} -B ${BUILDDIR}

Сборка

cmake --build ${BUILDDIR} --target update_translations --target all --parallel > build_6.4.02_shared_deb_log.txt

Добавление переводов Qt

cp -fs /usr/local/Qt-6.4.2-shared/translations/qtbase_ru.qm ../GGEASY/bin/Qt6.4_gnu_d_x64/translations/ cp -fs /usr/local/Qt-6.4.2-shared/translations/qtbase_en.qm ../GGEASY/bin/Qt6.4_gnu_d_x64/translations/

XRay3D commented 1 year ago

Почему через гитхаб не захотели мне изменения залить? Гляну. Чищу код пока, многое не нравится. Ну и как по вашему мой кодинг?))

GeorgKZ commented 1 year ago

Я пока с гитхабом как-то не общался, только начал пробовать.

Если по моим предложениям будут вопросы - пишите, постараюсь подробно ответить.

Кодинг нормальный, только непривычно много новшеств C++. Я пока только 11-е нововведения смотрю, а уже 20й вовсю используется. А ведь только недавно Фортран на перфокартах был...

И по личному мнению, неплохо было бы доксигенности добавить - ну это в основном для облегчения другим разбираться, что есть что. Для примера комментирования вывалил исходники неспешно ваяемой программки (https://github.com/GeorgKZ/stl2step) - вот типа такого, со ссылками на ISO 06983-1-2009 и т.п.

GeorgKZ commented 1 year ago

Обнаружил у себя ошибку: в файле voronoi_boost.cpp по хорошему надо было так: ` #if defined(_MSC_VER)

pragma warning(push)

    #pragma warning(disable : 5055)
#elif defined(__GNUC__) && (__GNUC__ >= 7)
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wpragmas"
    #pragma GCC diagnostic ignored "-Wdeprecated-enum-float-conversion"
#endif /* _MSC_VER, __GNUC__ */

#include "voronoi_visual_utils.h"
#include <boost/polygon/polygon.hpp>
#include <boost/polygon/voronoi.hpp>

#if defined(_MSC_VER)
    #pragma warning(pop)
#elif defined(__GNUC__) && (__GNUC__ >= 7)
    #pragma GCC diagnostic pop
#endif /* _MSC_VER, __GNUC__ */

` а то в том варианте при сборке MS VCPP этот блок пропускался, выходила ошибка сборки.

И ещё про сборку для Windows. Вот в этом фрагменте CMakeLists.txt для исполняемого файла: set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER xr.ggeasy.com MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} MACOSX_BUNDLE TRUE WIN32_EXECUTABLE TRUE ) Если закомментировать или убрать WIN32_EXECUTABLE TRUE (то есть в опциях линкера заменить /subsystem:windows на /subsystem:console), то восстанавливается вывод в консоль - все предупреждения, qDebug и т.д. Возможно, стоит ввести отдельный флаг сборки (для переключения этого параметра) для удобства отладки. Ну или отметить комментарием такую возможность. На линукс-сборку это не влияет - там вывод в консоль идёт в любом случае.

XRay3D commented 1 year ago

По статической сборке вы имели в виду Qt`овские библиотеки?

GeorgKZ commented 1 year ago

Не только. Я имел в виду статическую сборку Вашей программы - для этого необходимо конечно использовать статически собранный вариант Qt, а в Вашей программе все плюгины и все библиотеки Qt будут интегрированы в единый исполняемый файл. Правда, "универсальный" (то есть, если собирать динамически с динамическим Qt, то получится как раньше, а если статически со статически собранным Qt - то единым исполняемым файлом) вариант, насколько я понял, получится только с Qt с 6й версии - с использованием для плюгинов вместо add_library(rectangle SHARED rectangle.json shrectangle.cpp shrectangle.h ) конструкции qt_add_plugin(rectangle CLASS_NAME PluginRect) target_sources(rectangle PRIVATE rectangle.json shrectangle.cpp shrectangle.h ) где PluginRect - это бывший class Plugin, и в основной программе для подключения плюгинов прямое обращение к объектам вместо файлов: `#else // STATIC_LINK QObject* objects[] = { new Gerber::PluginGerber(), new Dxf::PluginDxf(), new Excellon::PluginExcellon(), new Hpgl::PluginHpgl(), new Shapes::PluginCircle(), new Shapes::PluginArc(), new Shapes::PluginRect(), new Shapes::PluginText(), new Shapes::PluginPoly(), nullptr};

    for (auto s = &objects[0]; *s != nullptr; ++ s) {

        QObject* pobj = *s;
        if (auto file = qobject_cast<FilePluginInterface*>(pobj); pobj && file) {
            App::filePlugins().emplace(file->type(), PIF { file, pobj });
            continue;
        }
        if (auto shape = qobject_cast<ShapePluginInterface*>(pobj); pobj && shape) {
            App::shapePlugins().emplace(shape->type(), PIS { shape, pobj });
            continue;
        }
    }

endif

`

XRay3D commented 1 year ago

Когда нибудь)) когда АПИ устаканится, я на оборот монолит распилил что бы в будущем добавлять функциональности проще было. Сейчас репу чешу в сторону https://gitlab.com/inkscape/lib2geom Но её что то собрать не очень выходит.