1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
3 // File: SketchPlugin_IntersectionPoint.cpp
4 // Created: 07 May 2014
5 // Author: Artem ZHIDKOV
7 #include "SketchPlugin_IntersectionPoint.h"
9 #include <ModelAPI_AttributeSelection.h>
11 #include <GeomAPI_Edge.h>
12 #include <GeomAPI_Lin.h>
13 #include <GeomDataAPI_Point2D.h>
15 SketchPlugin_IntersectionPoint::SketchPlugin_IntersectionPoint()
16 : SketchPlugin_Point()
20 void SketchPlugin_IntersectionPoint::initDerivedClassAttributes()
22 data()->addAttribute(EXTERNAL_LINE_ID(), ModelAPI_AttributeSelection::typeId());
24 SketchPlugin_Point::initDerivedClassAttributes();
27 void SketchPlugin_IntersectionPoint::execute()
29 SketchPlugin_Sketch* aSketch = sketch();
32 SketchPlugin_Point::execute();
34 // set this feature as external
35 data()->selection(EXTERNAL_ID())->setValue(lastResult(), lastResult()->shape());
39 void SketchPlugin_IntersectionPoint::move(double theDeltaX, double theDeltaY)
43 void SketchPlugin_IntersectionPoint::attributeChanged(const std::string& theID)
45 if (theID == EXTERNAL_LINE_ID()) {
46 // compute intersection between line and sketch plane
51 void SketchPlugin_IntersectionPoint::computePoint()
53 AttributeSelectionPtr aLineAttr =
54 std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(attribute(EXTERNAL_LINE_ID()));
56 std::shared_ptr<GeomAPI_Edge> anEdge;
57 if(aLineAttr && aLineAttr->value() && aLineAttr->value()->isEdge()) {
58 anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->value()));
59 } else if(aLineAttr->context() && aLineAttr->context()->shape() && aLineAttr->context()->shape()->isEdge()) {
60 anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->context()->shape()));
65 std::shared_ptr<GeomAPI_Lin> aLine = anEdge->line();
66 std::shared_ptr<GeomAPI_Pln> aSketchPlane = sketch()->plane();
68 std::shared_ptr<GeomAPI_Pnt> anIntersection = aSketchPlane->intersect(aLine);
72 std::shared_ptr<GeomDataAPI_Point2D> aCoordAttr =
73 std::dynamic_pointer_cast<GeomDataAPI_Point2D>(attribute(COORD_ID()));
74 aCoordAttr->setValue(sketch()->to2D(anIntersection));