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>
10 #include <ModelAPI_Session.h>
11 #include <ModelAPI_Validator.h>
13 #include <GeomAPI_Edge.h>
14 #include <GeomAPI_Lin.h>
15 #include <GeomDataAPI_Point2D.h>
17 SketchPlugin_IntersectionPoint::SketchPlugin_IntersectionPoint()
18 : SketchPlugin_Point()
22 void SketchPlugin_IntersectionPoint::initDerivedClassAttributes()
24 data()->addAttribute(EXTERNAL_LINE_ID(), ModelAPI_AttributeSelection::typeId());
26 SketchPlugin_Point::initDerivedClassAttributes();
29 void SketchPlugin_IntersectionPoint::execute()
31 SketchPlugin_Sketch* aSketch = sketch();
34 SketchPlugin_Point::execute();
36 // set this feature as external
37 data()->selection(EXTERNAL_ID())->setValue(lastResult(), lastResult()->shape());
41 void SketchPlugin_IntersectionPoint::move(double theDeltaX, double theDeltaY)
45 void SketchPlugin_IntersectionPoint::attributeChanged(const std::string& theID)
47 if (theID == EXTERNAL_LINE_ID()) {
48 // compute intersection between line and sketch plane
53 void SketchPlugin_IntersectionPoint::computePoint()
55 AttributeSelectionPtr aLineAttr =
56 std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(attribute(EXTERNAL_LINE_ID()));
58 std::shared_ptr<GeomAPI_Edge> anEdge;
59 if(aLineAttr && aLineAttr->value() && aLineAttr->value()->isEdge()) {
60 anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->value()));
61 } else if(aLineAttr->context() && aLineAttr->context()->shape() &&
62 aLineAttr->context()->shape()->isEdge()) {
63 anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->context()->shape()));
68 std::shared_ptr<GeomAPI_Lin> aLine = anEdge->line();
69 std::shared_ptr<GeomAPI_Pln> aSketchPlane = sketch()->plane();
71 std::shared_ptr<GeomAPI_Pnt> anIntersection = aSketchPlane->intersect(aLine);
75 std::shared_ptr<GeomDataAPI_Point2D> aCoordAttr =
76 std::dynamic_pointer_cast<GeomDataAPI_Point2D>(attribute(COORD_ID()));
77 aCoordAttr->setValue(sketch()->to2D(anIntersection));