From 50f970efd778ee05daa74217d45ad34ad2d1d91c Mon Sep 17 00:00:00 2001 From: WandererFan Date: Thu, 23 May 2024 09:41:42 -0400 Subject: [PATCH] [TD]Cosmetic function overhaul (#14216) * [TD]Cosmetic geometry and tools update - all cosmetics to store geometry in same form - all cosmetics to survive scaling and rotation - extension functions to survive scaling and rotation * [TD]overhaul leader point storage and editing - add py routine makeLeader(points) * [TD]add leader conversion utility * [TD]Set Leader RotateWithView default to true * [TD]fix intersection vertex position * [TD]add CosmeticEdge::makeLineFromCanonicalPoints * [TD]fix 2 Extension tools - positioning in DrawCosmeticCircle - mishandling of points in execLineParallelPerpendicular * [TD]Remove duplicate constexpr * [TD]fix 2x Cosmetic arc tools * [TD]refactor LineFormat out of Cosmetic * [TD]move cosmetic appearance settings to LineFormat * [TD]remove 2 unused methods * [TD]apply format to blue line & circle tools * [TD]fix ballon arrowhead does not rotate with view * [TD]fix CosmeticCircle3Points * [TD]allow multiple cosmetic object deletions * [TD]fix extend/shorten centerline --- src/Mod/TechDraw/App/AppTechDraw.cpp | 2 + src/Mod/TechDraw/App/AppTechDrawPy.cpp | 41 +- src/Mod/TechDraw/App/CMakeLists.txt | 2 + src/Mod/TechDraw/App/CenterLine.cpp | 20 +- src/Mod/TechDraw/App/CenterLinePyImp.cpp | 16 +- src/Mod/TechDraw/App/Cosmetic.cpp | 190 ++++----- src/Mod/TechDraw/App/Cosmetic.h | 49 +-- src/Mod/TechDraw/App/CosmeticEdgePy.xml | 10 - src/Mod/TechDraw/App/CosmeticEdgePyImp.cpp | 112 ++--- src/Mod/TechDraw/App/CosmeticExtension.cpp | 42 +- src/Mod/TechDraw/App/CosmeticExtension.h | 4 +- src/Mod/TechDraw/App/CosmeticVertex.cpp | 33 +- src/Mod/TechDraw/App/CosmeticVertex.h | 15 +- src/Mod/TechDraw/App/DrawLeaderLine.cpp | 258 ++++++++++-- src/Mod/TechDraw/App/DrawLeaderLine.h | 21 +- src/Mod/TechDraw/App/DrawUtil.h | 2 + src/Mod/TechDraw/App/DrawViewPartPyImp.cpp | 67 +-- src/Mod/TechDraw/App/Geometry.cpp | 39 +- src/Mod/TechDraw/App/Geometry.h | 3 +- src/Mod/TechDraw/App/GeometryObject.cpp | 5 +- src/Mod/TechDraw/App/LineFormat.cpp | 117 ++++++ src/Mod/TechDraw/App/LineFormat.h | 96 +++++ src/Mod/TechDraw/App/LineGroup.h | 2 + .../TechDraw/ConversionUtilities/moveViews.py | 77 ++++ .../ConversionUtilities/updateLeaderLines.py | 45 ++ src/Mod/TechDraw/Gui/CommandAnnotate.cpp | 2 +- src/Mod/TechDraw/Gui/CommandExtensionDims.cpp | 49 ++- src/Mod/TechDraw/Gui/CommandExtensionPack.cpp | 383 ++++++++++-------- src/Mod/TechDraw/Gui/DrawGuiUtil.cpp | 43 ++ src/Mod/TechDraw/Gui/DrawGuiUtil.h | 4 + src/Mod/TechDraw/Gui/PathBuilder.cpp | 8 +- src/Mod/TechDraw/Gui/PreferencesGui.cpp | 8 + src/Mod/TechDraw/Gui/PreferencesGui.h | 3 + src/Mod/TechDraw/Gui/QGEPath.cpp | 69 ++-- src/Mod/TechDraw/Gui/QGEPath.h | 14 +- src/Mod/TechDraw/Gui/QGILeaderLine.cpp | 167 +++++--- src/Mod/TechDraw/Gui/QGILeaderLine.h | 6 +- src/Mod/TechDraw/Gui/QGIViewBalloon.cpp | 17 +- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 71 ++-- src/Mod/TechDraw/Gui/QGTracker.cpp | 4 +- src/Mod/TechDraw/Gui/TaskCenterLine.cpp | 24 +- src/Mod/TechDraw/Gui/TaskCosVertex.cpp | 23 +- src/Mod/TechDraw/Gui/TaskCosmeticCircle.cpp | 113 ++++-- src/Mod/TechDraw/Gui/TaskCosmeticCircle.h | 8 +- src/Mod/TechDraw/Gui/TaskCosmeticCircle.ui | 85 ++-- src/Mod/TechDraw/Gui/TaskCosmeticLine.cpp | 76 ++-- src/Mod/TechDraw/Gui/TaskCosmeticLine.ui | 40 +- src/Mod/TechDraw/Gui/TaskLeaderLine.cpp | 193 +++++---- src/Mod/TechDraw/Gui/TaskLeaderLine.h | 35 +- src/Mod/TechDraw/Gui/TaskLineDecor.cpp | 44 +- .../TechDraw/Gui/TaskSelectLineAttributes.cpp | 32 +- .../TechDraw/Gui/TaskSelectLineAttributes.h | 8 +- src/Mod/TechDraw/Gui/ViewProviderLeader.cpp | 25 +- src/Mod/TechDraw/Gui/ViewProviderLeader.h | 5 +- src/Mod/TechDraw/Gui/ViewProviderViewPart.cpp | 58 +-- src/Mod/TechDraw/Gui/ViewProviderViewPart.h | 3 - 56 files changed, 1812 insertions(+), 1076 deletions(-) create mode 100644 src/Mod/TechDraw/App/LineFormat.cpp create mode 100644 src/Mod/TechDraw/App/LineFormat.h create mode 100644 src/Mod/TechDraw/ConversionUtilities/moveViews.py create mode 100644 src/Mod/TechDraw/ConversionUtilities/updateLeaderLines.py diff --git a/src/Mod/TechDraw/App/AppTechDraw.cpp b/src/Mod/TechDraw/App/AppTechDraw.cpp index 0d1ec2284e..370211d953 100644 --- a/src/Mod/TechDraw/App/AppTechDraw.cpp +++ b/src/Mod/TechDraw/App/AppTechDraw.cpp @@ -149,5 +149,7 @@ PyMOD_INIT_FUNC(TechDraw) TechDraw::DrawWeldSymbolPython::init(); TechDraw::DrawBrokenViewPython::init(); + TechDraw::LineFormat::initCurrentLineFormat(); + PyMOD_Return(mod); } diff --git a/src/Mod/TechDraw/App/AppTechDrawPy.cpp b/src/Mod/TechDraw/App/AppTechDrawPy.cpp index 517761dfdc..4bb3fc7254 100644 --- a/src/Mod/TechDraw/App/AppTechDrawPy.cpp +++ b/src/Mod/TechDraw/App/AppTechDrawPy.cpp @@ -72,7 +72,7 @@ #include "ProjectionAlgos.h" #include "TechDrawExport.h" #include "CosmeticVertexPy.h" - +#include "DrawLeaderLinePy.h" namespace TechDraw { //module level static C++ functions go here @@ -191,6 +191,9 @@ public: add_varargs_method("makeCanonicalPoint", &Module::makeCanonicalPoint, "makeCanonicalPoint(DrawViewPart, Vector3d) - Returns the unscaled, unrotated version of the input point)" ); + add_varargs_method("makeLeader", &Module::makeLeader, + "makeLeader(parent - DrawViewPart, points - [Vector], startSymbol - int, endSymbol - int) - Creates a leader line attached to parent. Points are in page coordinates with (0, 0) at lowerleft.s" + ); initialize("This is a module for making drawings"); // register with Python } ~Module() override {} @@ -1286,6 +1289,42 @@ private: cPoint = CosmeticVertex::makeCanonicalPoint(dvp, cPoint, unscale); return Py::asObject(new Base::VectorPy(cPoint)); } + + Py::Object makeLeader(const Py::Tuple& args) + { + PyObject* pDvp(nullptr); + PyObject* pPointList(nullptr); + int iStartSymbol = 0; + int iEndSymbol = 0; + TechDraw::DrawViewPart* dvp = nullptr; + + if (!PyArg_ParseTuple(args.ptr(), "OO!|ii", &pDvp, &(PyList_Type), &pPointList, &iStartSymbol, &iEndSymbol)) { + throw Py::TypeError("expected (DrawViewPart, listofpoints, startsymbolindex, endsymbolindex"); + } + if (PyObject_TypeCheck(pDvp, &(TechDraw::DrawViewPartPy::Type))) { + App::DocumentObject* obj = static_cast(pDvp)->getDocumentObjectPtr(); + dvp = static_cast(obj); + } + + std::vector pointList; + try { + Py::Sequence list(pPointList); + for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { + if (PyObject_TypeCheck((*it).ptr(), &(Base::VectorPy::Type))) { + Base::Vector3d temp = static_cast((*it).ptr())->value(); + pointList.push_back(temp); + } + } + } + catch (Standard_Failure& e) { + throw Py::Exception(Part::PartExceptionOCCError, e.GetMessageString()); + } + auto newLeader = DrawLeaderLine::makeLeader(dvp, pointList, iStartSymbol, iEndSymbol); + + // return the new leader as DrawLeaderPy + return Py::asObject(new DrawLeaderLinePy(newLeader)); + } + }; PyObject* initModule() diff --git a/src/Mod/TechDraw/App/CMakeLists.txt b/src/Mod/TechDraw/App/CMakeLists.txt index 0f33bcb55d..d141eac135 100644 --- a/src/Mod/TechDraw/App/CMakeLists.txt +++ b/src/Mod/TechDraw/App/CMakeLists.txt @@ -174,6 +174,8 @@ SET(TechDraw_SRCS XMLQuery.h LineGenerator.cpp LineGenerator.h + LineFormat.cpp + LineFormat.h ) SET(Geometry_SRCS diff --git a/src/Mod/TechDraw/App/CenterLine.cpp b/src/Mod/TechDraw/App/CenterLine.cpp index 1f24e57d43..7c32a01389 100644 --- a/src/Mod/TechDraw/App/CenterLine.cpp +++ b/src/Mod/TechDraw/App/CenterLine.cpp @@ -885,10 +885,10 @@ void CenterLine::Save(Base::Writer &writer) const // style is deprecated in favour of line number, but we still save and restore it // to avoid problems with old documents. - writer.Stream() << writer.ind() << "