[TD]Support Landmark Dim in Section and Detail

This commit is contained in:
wandererfan
2020-02-24 20:12:23 -05:00
committed by WandererFan
parent cb2a3d529c
commit d1d7098ad6
7 changed files with 45 additions and 18 deletions

View File

@@ -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()

View File

@@ -150,7 +150,6 @@ public:
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;

View File

@@ -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<TechDraw::Vertex *> 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<TechDraw::Vertex *> gVerts = getVertexGeometry();
std::vector<TechDraw::Vertex *> 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();
}

View File

@@ -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

View File

@@ -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<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???

View File

@@ -67,7 +67,7 @@ public:
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;

View File

@@ -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;