Skip to content

Commit

Permalink
[TD]Support Landmark Dim in Section and Detail
Browse files Browse the repository at this point in the history
  • Loading branch information
WandererFan committed Feb 25, 2020
1 parent 96e8f75 commit 0825e5e
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 18 deletions.
7 changes: 7 additions & 0 deletions src/Mod/TechDraw/App/DrawViewDetail.cpp
Expand Up @@ -226,6 +226,7 @@ App::DocumentObjectExecReturn *DrawViewDetail::execute(void)
}

detailExec(shape, dvp, dvs);
addShapes2d();

//second pass if required
if (ScaleType.isValue("Automatic")) {
Expand Down Expand Up @@ -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
Expand All @@ -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);
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -395,6 +399,9 @@ void DrawViewDetail::detailExec(TopoDS_Shape shape,
addCosmeticVertexesToGeom();
addCosmeticEdgesToGeom();
addCenterLinesToGeom();

addReferencesToGeom(); //what if landmarks are outside detail area??

}

double DrawViewDetail::getFudgeRadius()
Expand Down
1 change: 0 additions & 1 deletion src/Mod/TechDraw/App/DrawViewDimension.h
Expand Up @@ -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;

Expand Down
13 changes: 9 additions & 4 deletions src/Mod/TechDraw/App/DrawViewPart.cpp
Expand Up @@ -171,6 +171,7 @@ DrawViewPart::DrawViewPart(void) :

DrawViewPart::~DrawViewPart()
{
removeAllReferencesFromGeom();
delete geometryObject;
}

Expand Down Expand Up @@ -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<TechDraw::Vertex *> gVerts = getVertexGeometry();
gVerts.insert(gVerts.end(), m_referenceVerts.begin(), m_referenceVerts.end());
getGeometryObject()->setVertexGeometry(gVerts);
Expand All @@ -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();
Expand All @@ -1114,6 +1118,7 @@ void DrawViewPart::removeReferenceVertex(std::string tag)

void DrawViewPart::removeAllReferencesFromGeom()
{
// Base::Console().Message("DVP::removeAllReferencesFromGeom()\n");
std::vector<TechDraw::Vertex *> gVerts = getVertexGeometry();
std::vector<TechDraw::Vertex *> newVerts;
for (auto& gv: gVerts) {
Expand All @@ -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();
}
Expand Down
4 changes: 4 additions & 0 deletions src/Mod/TechDraw/App/DrawViewSection.cpp
Expand Up @@ -320,6 +320,7 @@ App::DocumentObjectExecReturn *DrawViewSection::execute(void)
}

sectionExec(baseShape);
addShapes2d();

//second pass if required
if (ScaleType.isValue("Automatic")) {
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -493,6 +495,8 @@ void DrawViewSection::sectionExec(TopoDS_Shape baseShape)
addCosmeticVertexesToGeom();
addCosmeticEdgesToGeom();
addCenterLinesToGeom();

addReferencesToGeom();
}

gp_Pln DrawViewSection::getSectionPlane() const
Expand Down
34 changes: 23 additions & 11 deletions src/Mod/TechDraw/App/LandmarkDimension.cpp
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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<std::string> tags = ReferenceTags.getValues();
for (auto& t: tags) {
dvp->removeReferenceVertex(t);
}

std::vector<DocumentObject*> features = References3D.getValues();
std::vector<Base::Vector3d> points;
std::vector<std::string> 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???
Expand Down
2 changes: 1 addition & 1 deletion src/Mod/TechDraw/App/LandmarkDimension.h
Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion src/Mod/TechDraw/Gui/CommandCreateDims.cpp
Expand Up @@ -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;
Expand Down

0 comments on commit 0825e5e

Please sign in to comment.