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());
25 ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), AUXILIARY_ID());
27 SketchPlugin_Point::initDerivedClassAttributes();
30 void SketchPlugin_IntersectionPoint::execute()
32 SketchPlugin_Sketch* aSketch = sketch();
35 SketchPlugin_Point::execute();
37 // set this feature as external
38 data()->selection(EXTERNAL_ID())->setValue(lastResult(), lastResult()->shape());
42 void SketchPlugin_IntersectionPoint::move(double theDeltaX, double theDeltaY)
46 void SketchPlugin_IntersectionPoint::attributeChanged(const std::string& theID)
48 if (theID == EXTERNAL_LINE_ID()) {
49 // compute intersection between line and sketch plane
54 void SketchPlugin_IntersectionPoint::computePoint()
56 AttributeSelectionPtr aLineAttr =
57 std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(attribute(EXTERNAL_LINE_ID()));
59 std::shared_ptr<GeomAPI_Edge> anEdge;
60 if(aLineAttr && aLineAttr->value() && aLineAttr->value()->isEdge()) {
61 anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(aLineAttr->value()));
62 } else if(aLineAttr->context() && aLineAttr->context()->shape() && 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));