Skip to content

Commit

Permalink
[TD]expose dimension arrow position to Python
Browse files Browse the repository at this point in the history
  • Loading branch information
WandererFan committed Mar 2, 2020
1 parent 24f10a3 commit e0eda0d
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 1 deletion.
15 changes: 14 additions & 1 deletion src/Mod/TechDraw/App/DrawViewDimension.cpp
Expand Up @@ -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());
Expand Down
4 changes: 4 additions & 0 deletions src/Mod/TechDraw/App/DrawViewDimension.h
Expand Up @@ -153,6 +153,9 @@ class TechDrawExport DrawViewDimension : public TechDraw::DrawView

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;
Expand All @@ -174,6 +177,7 @@ class TechDrawExport DrawViewDimension : public TechDraw::DrawView
pointPair closestPoints(TopoDS_Shape s1,
TopoDS_Shape s2) const;
pointPair m_linearPoints;
pointPair m_arrowPositions;

private:
static const char* TypeEnums[];
Expand Down
5 changes: 5 additions & 0 deletions src/Mod/TechDraw/App/DrawViewDimensionPy.xml
Expand Up @@ -33,6 +33,11 @@
<UserDocu>getAnglePoints() - returns list of points for angle Dimension</UserDocu>
</Documentation>
</Methode>
<Methode Name="getArrowPositions">
<Documentation>
<UserDocu>getArrowPositions() - returns list of locations or Dimension Arrowheads. Locations are in unscaled coordinates of parent View </UserDocu>
</Documentation>
</Methode>
<CustomAttributes />
</PythonExport>
</GenerateModel>
10 changes: 10 additions & 0 deletions src/Mod/TechDraw/App/DrawViewDimensionPyImp.cpp
Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions src/Mod/TechDraw/Gui/QGIViewDimension.cpp
Expand Up @@ -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];

Expand All @@ -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<TechDraw::DrawViewDimension*>(getViewObject()) );
if( dim == nullptr )
return;

dim->saveArrowPositions(positions);
}

void QGIViewDimension::drawSingleLine(QPainterPath &painterPath, const Base::Vector2d &lineOrigin, double lineAngle,
double startPosition, double endPosition) const
{
Expand Down
2 changes: 2 additions & 0 deletions src/Mod/TechDraw/Gui/QGIViewDimension.h
Expand Up @@ -260,6 +260,8 @@ public Q_SLOTS:
//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)
Expand Down

0 comments on commit e0eda0d

Please sign in to comment.