1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: ConstructionPlugin_Axis.cpp
4 // Created: 12 Dec 2014
5 // Author: Vitaly Smetannikov
7 #include "ConstructionPlugin_Axis.h"
9 #include <Config_PropManager.h>
11 #include <ModelAPI_AttributeSelection.h>
12 #include <ModelAPI_ResultConstruction.h>
14 #include <GeomAPI_Edge.h>
15 #include <GeomAlgoAPI_EdgeBuilder.h>
16 #include <GeomAlgoAPI_PointBuilder.h>
20 static const double MINIMAL_LENGTH = 1.e-5;
22 ConstructionPlugin_Axis::ConstructionPlugin_Axis()
26 void ConstructionPlugin_Axis::initAttributes()
28 data()->addAttribute(POINT_ATTR_FIRST, ModelAPI_AttributeSelection::type());
29 data()->addAttribute(POINT_ATTR_SECOND, ModelAPI_AttributeSelection::type());
32 void ConstructionPlugin_Axis::execute()
34 AttributeSelectionPtr aRef1 = data()->selection(POINT_ATTR_FIRST);
35 AttributeSelectionPtr aRef2 = data()->selection(POINT_ATTR_SECOND);
36 if ((aRef1.get() != NULL) && (aRef2.get() != NULL)) {
37 GeomShapePtr aShape1 = aRef1->value();
38 GeomShapePtr aShape2 = aRef2->value();
39 if (aShape1->isVertex() && aShape2->isVertex() && (!aShape1->isEqual(aShape2))) {
40 std::shared_ptr<GeomAPI_Pnt> aStart = GeomAlgoAPI_PointBuilder::point(aShape1);
41 std::shared_ptr<GeomAPI_Pnt> anEnd = GeomAlgoAPI_PointBuilder::point(aShape2);
42 if (aStart->distance(anEnd) > MINIMAL_LENGTH) {
43 std::shared_ptr<GeomAPI_Edge> anEdge = GeomAlgoAPI_EdgeBuilder::line(aStart, anEnd);
45 ResultConstructionPtr aConstr = document()->createConstruction(data());
46 aConstr->setShape(anEdge);
53 void ConstructionPlugin_Axis::customisePresentation(AISObjectPtr thePrs)
55 std::vector<int> aRGB = Config_PropManager::color("Visualization", "construction_axis_color",
56 CONSTRUCTION_AXIS_COLOR);
57 thePrs->setColor(aRGB[0], aRGB[1], aRGB[2]);
58 thePrs->setLineStyle(3);