[TD]Support Landmark Dim in Section and Detail
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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???
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user