diff --git a/src/Mod/TechDraw/App/DrawViewDimension.cpp b/src/Mod/TechDraw/App/DrawViewDimension.cpp
index 52e9c71dd0..9d7f70f566 100644
--- a/src/Mod/TechDraw/App/DrawViewDimension.cpp
+++ b/src/Mod/TechDraw/App/DrawViewDimension.cpp
@@ -1093,7 +1093,20 @@ bool DrawViewDimension::leaderIntersectsArc(Base::Vector3d s, Base::Vector3d poi
return result;
}
-//are there non-blank references?
+void DrawViewDimension::saveArrowPositions(const Base::Vector2d positions[])
+{
+ double scale = getViewPart()->getScale();
+ m_arrowPositions.first = Base::Vector3d(positions[0].x, positions[0].y, 0.0) / scale;
+ m_arrowPositions.second = Base::Vector3d(positions[1].x, positions[1].y, 0.0) / scale;
+}
+
+//return position within parent view of dimension arrow heads/dimline endpoints
+//note positions are in apparent coord (inverted y).
+pointPair DrawViewDimension::getArrowPositions(void)
+{
+ return m_arrowPositions;
+}
+
bool DrawViewDimension::has2DReferences(void) const
{
// Base::Console().Message("DVD::has2DReferences() - %s\n",getNameInDocument());
diff --git a/src/Mod/TechDraw/App/DrawViewDimension.h b/src/Mod/TechDraw/App/DrawViewDimension.h
index 7916d62daa..0d83efe5ed 100644
--- a/src/Mod/TechDraw/App/DrawViewDimension.h
+++ b/src/Mod/TechDraw/App/DrawViewDimension.h
@@ -153,6 +153,9 @@ public:
bool isMultiValueSchema(void) const;
+ pointPair getArrowPositions(void);
+ void saveArrowPositions(const Base::Vector2d positions[]);
+
protected:
virtual void onChanged(const App::Property* prop) override;
virtual void onDocumentRestored() override;
@@ -174,6 +177,7 @@ protected:
pointPair closestPoints(TopoDS_Shape s1,
TopoDS_Shape s2) const;
pointPair m_linearPoints;
+ pointPair m_arrowPositions;
private:
static const char* TypeEnums[];
diff --git a/src/Mod/TechDraw/App/DrawViewDimensionPy.xml b/src/Mod/TechDraw/App/DrawViewDimensionPy.xml
index 48dfad36b0..b82104f00b 100644
--- a/src/Mod/TechDraw/App/DrawViewDimensionPy.xml
+++ b/src/Mod/TechDraw/App/DrawViewDimensionPy.xml
@@ -33,6 +33,11 @@
getAnglePoints() - returns list of points for angle Dimension
+
+
+ getArrowPositions() - returns list of locations or Dimension Arrowheads. Locations are in unscaled coordinates of parent View
+
+
diff --git a/src/Mod/TechDraw/App/DrawViewDimensionPyImp.cpp b/src/Mod/TechDraw/App/DrawViewDimensionPyImp.cpp
index f78ab170b1..7be2b7b2dd 100644
--- a/src/Mod/TechDraw/App/DrawViewDimensionPyImp.cpp
+++ b/src/Mod/TechDraw/App/DrawViewDimensionPyImp.cpp
@@ -99,6 +99,16 @@ PyObject* DrawViewDimensionPy::getAnglePoints(PyObject* args)
return ret;
}
+PyObject* DrawViewDimensionPy::getArrowPositions(PyObject* args)
+{
+ (void) args;
+ DrawViewDimension* dvd = getDrawViewDimensionPtr();
+ pointPair pts = dvd->getArrowPositions();
+ PyObject* ret = PyList_New(0);
+ PyList_Append(ret,new Base::VectorPy(new Base::Vector3d(pts.first)));
+ PyList_Append(ret,new Base::VectorPy(new Base::Vector3d(pts.second)));
+ return ret;
+}
PyObject *DrawViewDimensionPy::getCustomAttributes(const char* /*attr*/) const
{
return 0;
diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp
index 1c5c1a6db4..e7578df7cc 100644
--- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp
+++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp
@@ -1176,6 +1176,8 @@ void QGIViewDimension::drawArrows(int count, const Base::Vector2d positions[], d
const int arrowCount = 2;
QGIArrow *arrows[arrowCount] = { aHead1, aHead2 };
+ arrowPositionsToFeature(positions);
+
for (int i = 0; i < arrowCount; ++i) {
QGIArrow *arrow = arrows[i];
@@ -1198,6 +1200,15 @@ void QGIViewDimension::drawArrows(int count, const Base::Vector2d positions[], d
}
}
+void QGIViewDimension::arrowPositionsToFeature(const Base::Vector2d positions[]) const
+{
+ auto dim( dynamic_cast(getViewObject()) );
+ if( dim == nullptr )
+ return;
+
+ dim->saveArrowPositions(positions);
+}
+
void QGIViewDimension::drawSingleLine(QPainterPath &painterPath, const Base::Vector2d &lineOrigin, double lineAngle,
double startPosition, double endPosition) const
{
diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.h b/src/Mod/TechDraw/Gui/QGIViewDimension.h
index 86df34cc60..934f6d62ed 100644
--- a/src/Mod/TechDraw/Gui/QGIViewDimension.h
+++ b/src/Mod/TechDraw/Gui/QGIViewDimension.h
@@ -260,6 +260,8 @@ protected:
//QGICMark* centerMark
double m_lineWidth;
+ void arrowPositionsToFeature(const Base::Vector2d positions[]) const;
+
private:
static inline Base::Vector2d fromQtApp(const Base::Vector3d &v) { return Base::Vector2d(v.x, -v.y); }
static inline Base::BoundBox2d fromQtGui(const QRectF &r)