From 0825e5ece467a3950cc94d845d053803f6dce1a3 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Mon, 24 Feb 2020 20:12:23 -0500 Subject: [PATCH] [TD]Support Landmark Dim in Section and Detail --- src/Mod/TechDraw/App/DrawViewDetail.cpp | 7 +++++ src/Mod/TechDraw/App/DrawViewDimension.h | 1 - src/Mod/TechDraw/App/DrawViewPart.cpp | 13 ++++++--- src/Mod/TechDraw/App/DrawViewSection.cpp | 4 +++ src/Mod/TechDraw/App/LandmarkDimension.cpp | 34 +++++++++++++++------- src/Mod/TechDraw/App/LandmarkDimension.h | 2 +- src/Mod/TechDraw/Gui/CommandCreateDims.cpp | 2 +- 7 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewDetail.cpp b/src/Mod/TechDraw/App/DrawViewDetail.cpp index 45032d4410ba..10951d896a5b 100644 --- a/src/Mod/TechDraw/App/DrawViewDetail.cpp +++ b/src/Mod/TechDraw/App/DrawViewDetail.cpp @@ -226,6 +226,7 @@ App::DocumentObjectExecReturn *DrawViewDetail::execute(void) } detailExec(shape, dvp, dvs); + addShapes2d(); //second pass if required if (ScaleType.isValue("Automatic")) { @@ -260,6 +261,7 @@ void DrawViewDetail::detailExec(TopoDS_Shape shape, gp_Pnt gpCenter = TechDraw::findCentroid(copyShape, dirDetail); Base::Vector3d shapeCenter = Base::Vector3d(gpCenter.X(),gpCenter.Y(),gpCenter.Z()); + m_saveCentroid = shapeCenter; //centroid of original shape if (dvs != nullptr) { //section cutShape should already be on origin @@ -270,6 +272,7 @@ void DrawViewDetail::detailExec(TopoDS_Shape shape, shapeCenter = Base::Vector3d(0.0, 0.0, 0.0); + gp_Ax2 viewAxis; viewAxis = dvp->getProjectionCS(shapeCenter); @@ -350,6 +353,7 @@ void DrawViewDetail::detailExec(TopoDS_Shape shape, Base::Vector3d centroid(inputCenter.X(), inputCenter.Y(), inputCenter.Z()); + m_saveCentroid += centroid; //center of massaged shape Base::Vector3d stdOrg(0.0,0.0,0.0); gp_Ax2 viewAxis = dvp->getProjectionCS(stdOrg); //sb same CS as base view. @@ -395,6 +399,9 @@ void DrawViewDetail::detailExec(TopoDS_Shape shape, addCosmeticVertexesToGeom(); addCosmeticEdgesToGeom(); addCenterLinesToGeom(); + + addReferencesToGeom(); //what if landmarks are outside detail area?? + } double DrawViewDetail::getFudgeRadius() diff --git a/src/Mod/TechDraw/App/DrawViewDimension.h b/src/Mod/TechDraw/App/DrawViewDimension.h index 0c09b1cab952..7916d62daaad 100644 --- a/src/Mod/TechDraw/App/DrawViewDimension.h +++ b/src/Mod/TechDraw/App/DrawViewDimension.h @@ -150,7 +150,6 @@ class TechDrawExport DrawViewDimension : public TechDraw::DrawView arcPoints getArcPoints(void) {return m_arcPoints; } anglePoints getAnglePoints(void) {return m_anglePoints; } bool leaderIntersectsArc(Base::Vector3d s, Base::Vector3d pointOnCircle); -/* bool references(std::string geomName) const;*/ bool isMultiValueSchema(void) const; diff --git a/src/Mod/TechDraw/App/DrawViewPart.cpp b/src/Mod/TechDraw/App/DrawViewPart.cpp index a10bc8321879..8bf2b1f38e13 100644 --- a/src/Mod/TechDraw/App/DrawViewPart.cpp +++ b/src/Mod/TechDraw/App/DrawViewPart.cpp @@ -171,6 +171,7 @@ DrawViewPart::DrawViewPart(void) : DrawViewPart::~DrawViewPart() { + removeAllReferencesFromGeom(); delete geometryObject; } @@ -1079,7 +1080,7 @@ void DrawViewPart::updateReferenceVert(std::string tag, Base::Vector3d loc2d) void DrawViewPart::addReferencesToGeom(void) { -// Base::Console().Message("DVP::addReferences()\n"); +// Base::Console().Message("DVP::addReferencesToGeom() - %s\n", getNameInDocument()); std::vector gVerts = getVertexGeometry(); gVerts.insert(gVerts.end(), m_referenceVerts.begin(), m_referenceVerts.end()); getGeometryObject()->setVertexGeometry(gVerts); @@ -1089,9 +1090,12 @@ void DrawViewPart::addReferencesToGeom(void) //ex. LandmarkDimension as a reference std::string DrawViewPart::addReferenceVertex(Base::Vector3d v) { -// Base::Console().Message("DVP::addReferenceVertex(%s)\n", DrawUtil::formatVector(v).c_str()); +// Base::Console().Message("DVP::addReferenceVertex(%s) - %s\n", +// DrawUtil::formatVector(v).c_str(), getNameInDocument()); std::string refTag; - Base::Vector3d scaledV = v * getScale(); +// Base::Vector3d scaledV = v * getScale(); +// TechDraw::Vertex* ref = new TechDraw::Vertex(scaledV); + Base::Vector3d scaledV = v; TechDraw::Vertex* ref = new TechDraw::Vertex(scaledV); ref->reference = true; refTag = ref->getTagAsString(); @@ -1114,6 +1118,7 @@ void DrawViewPart::removeReferenceVertex(std::string tag) void DrawViewPart::removeAllReferencesFromGeom() { +// Base::Console().Message("DVP::removeAllReferencesFromGeom()\n"); std::vector gVerts = getVertexGeometry(); std::vector newVerts; for (auto& gv: gVerts) { @@ -1126,7 +1131,7 @@ void DrawViewPart::removeAllReferencesFromGeom() void DrawViewPart::resetReferenceVerts() { -// Base::Console().Message("DVP::resetReferenceVerts()\n"); +// Base::Console().Message("DVP::resetReferenceVerts() %s\n", getNameInDocument()); removeAllReferencesFromGeom(); addReferencesToGeom(); } diff --git a/src/Mod/TechDraw/App/DrawViewSection.cpp b/src/Mod/TechDraw/App/DrawViewSection.cpp index 0e88be3dbccf..d179f5361402 100644 --- a/src/Mod/TechDraw/App/DrawViewSection.cpp +++ b/src/Mod/TechDraw/App/DrawViewSection.cpp @@ -320,6 +320,7 @@ App::DocumentObjectExecReturn *DrawViewSection::execute(void) } sectionExec(baseShape); + addShapes2d(); //second pass if required if (ScaleType.isValue("Automatic")) { @@ -399,6 +400,7 @@ void DrawViewSection::sectionExec(TopoDS_Shape baseShape) centeredShape = TechDraw::moveShape(rawShape, sectionOrigin * -1.0); m_cutShape = centeredShape; + m_saveCentroid = sectionOrigin; TopoDS_Shape scaledShape = TechDraw::scaleShape(centeredShape, getScale()); @@ -493,6 +495,8 @@ void DrawViewSection::sectionExec(TopoDS_Shape baseShape) addCosmeticVertexesToGeom(); addCosmeticEdgesToGeom(); addCenterLinesToGeom(); + + addReferencesToGeom(); } gp_Pln DrawViewSection::getSectionPlane() const diff --git a/src/Mod/TechDraw/App/LandmarkDimension.cpp b/src/Mod/TechDraw/App/LandmarkDimension.cpp index d140ffb03499..9e41bd9673f6 100644 --- a/src/Mod/TechDraw/App/LandmarkDimension.cpp +++ b/src/Mod/TechDraw/App/LandmarkDimension.cpp @@ -140,16 +140,19 @@ App::DocumentObjectExecReturn *LandmarkDimension::execute(void) Base::Vector3d loc3d = ShapeExtractor::getLocation3dFromFeat(f); Base::Vector3d loc2d = projectPoint(loc3d, dvp) * dvp->getScale(); points.push_back(loc2d); - dvp->updateReferenceVert(reprs.at(index), loc2d); + dvp->updateReferenceVert(reprs.at(index), loc2d); //sb by tag index++; } } m_linearPoints.first = points.front(); m_linearPoints.second = points.back(); + + //m_anglePoints.first = App::DocumentObjectExecReturn* dvdResult = DrawViewDimension::execute(); - dvp->resetReferenceVerts(); +// dvp->resetReferenceVerts(); + dvp->addReferencesToGeom(); dvp->requestPaint(); return dvdResult; } @@ -232,18 +235,27 @@ DrawViewPart* LandmarkDimension::getViewPart() const return result; } -//clean up at deletion time -void LandmarkDimension::unsetupObject() +void LandmarkDimension::onDocumentRestored() { -// Base::Console().Message("LD::unsetupObject()\n"); DrawViewPart* dvp = getViewPart(); - if (dvp != nullptr) { - std::vector tags = ReferenceTags.getValues(); - for (auto& t: tags) { - dvp->removeReferenceVertex(t); - } + + std::vector features = References3D.getValues(); + std::vector points; + std::vector tags; + //add verts to dvp & vert tags to RD + for (auto& f: features) { + Base::Vector3d loc3d = ShapeExtractor::getLocation3dFromFeat(f); + Base::Vector3d loc2d = projectPoint(loc3d, dvp) * dvp->getScale(); + points.push_back(loc2d); + std::string tag = dvp->addReferenceVertex(loc2d); + tags.push_back(tag); } - DrawViewDimension::unsetupObject(); + ReferenceTags.setValues(tags); + + m_linearPoints.first = points.front(); + m_linearPoints.second = points.back(); + + DrawViewDimension::onDocumentRestored(); } //??? why does getPyObject work sometimes and no others??? diff --git a/src/Mod/TechDraw/App/LandmarkDimension.h b/src/Mod/TechDraw/App/LandmarkDimension.h index 3fe3c5b19ad9..cb8bfe90db31 100644 --- a/src/Mod/TechDraw/App/LandmarkDimension.h +++ b/src/Mod/TechDraw/App/LandmarkDimension.h @@ -67,7 +67,7 @@ class TechDrawExport LandmarkDimension : public TechDraw::DrawViewDimension protected: virtual void onChanged(const App::Property* prop) override; - virtual void unsetupObject() override; + virtual void onDocumentRestored() override; Base::Vector3d projectPoint(const Base::Vector3d& pt, DrawViewPart* dvp) const; diff --git a/src/Mod/TechDraw/Gui/CommandCreateDims.cpp b/src/Mod/TechDraw/Gui/CommandCreateDims.cpp index 50f5d50be71f..ac1d461e5a70 100644 --- a/src/Mod/TechDraw/Gui/CommandCreateDims.cpp +++ b/src/Mod/TechDraw/Gui/CommandCreateDims.cpp @@ -1350,7 +1350,7 @@ CmdTechDrawLandmarkDimension::CmdTechDrawLandmarkDimension() { sAppModule = "TechDraw"; sGroup = QT_TR_NOOP("TechDraw"); - sMenuText = QT_TR_NOOP("Insert Landmark Dimension"); + sMenuText = QT_TR_NOOP("Insert Landmark Dimension - EXPERIMENTAL"); sToolTipText = sMenuText; sWhatsThis = "TechDraw_LandmarkDimension"; sStatusTip = sToolTipText;