ADD_SUBDIRECTORY (src/ConstructionPlugin)
ADD_SUBDIRECTORY (src/BuildPlugin)
ADD_SUBDIRECTORY (src/PrimitivesPlugin)
+ADD_SUBDIRECTORY (src/GDMLPlugin)
ADD_SUBDIRECTORY (src/FeaturesPlugin)
ADD_SUBDIRECTORY (src/CollectionPlugin)
ADD_SUBDIRECTORY (src/SamplePanelPlugin)
ADD_SUBDIRECTORY (src/PartSetAPI)
ADD_SUBDIRECTORY (src/PrimitivesAPI)
ADD_SUBDIRECTORY (src/SketchAPI)
+ADD_SUBDIRECTORY (src/GDMLAPI)
IF(${HAVE_SALOME})
ADD_SUBDIRECTORY (src/SHAPERGUI)
<plugin library="ConstructionPlugin" configuration="plugin-Construction.xml"/>
<plugin library="BuildPlugin" configuration="plugin-Build.xml"/>
<plugin library="PrimitivesPlugin" configuration="plugin-Primitives.xml"/>
+ <plugin library="GDMLPlugin" configuration="plugin-GDML.xml"/>
<plugin library="FeaturesPlugin" configuration="plugin-Features.xml"/>
<plugin library="CollectionPlugin" configuration="plugin-Collection.xml"/>
<plugin library="ExchangePlugin" configuration="plugin-Exchange.xml"/>
FeaturesAPI_Revolution.h
FeaturesAPI_RevolutionBoolean.h
FeaturesAPI_Rotation.h
+ FeaturesAPI_Symmetry.h
FeaturesAPI_Translation.h
FeaturesAPI_Union.h
)
FeaturesAPI_Revolution.cpp
FeaturesAPI_RevolutionBoolean.cpp
FeaturesAPI_Rotation.cpp
+ FeaturesAPI_Symmetry.cpp
FeaturesAPI_Translation.cpp
FeaturesAPI_Union.cpp
)
INSTALL(TARGETS FeaturesAPI DESTINATION ${SHAPER_INSTALL_BIN})
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/FeaturesAPI.py DESTINATION ${SHAPER_INSTALL_SWIG})
-ADD_UNIT_TESTS(APIParam_Translation.py)
\ No newline at end of file
+ADD_UNIT_TESTS(APIParam_Symmetry.py
+ APIParam_Translation.py)
\ No newline at end of file
%shared_ptr(FeaturesAPI_RevolutionCut)
%shared_ptr(FeaturesAPI_RevolutionFuse)
%shared_ptr(FeaturesAPI_Rotation)
+%shared_ptr(FeaturesAPI_Symmetry)
%shared_ptr(FeaturesAPI_Translation)
%shared_ptr(FeaturesAPI_Union)
%include "FeaturesAPI_Revolution.h"
%include "FeaturesAPI_RevolutionBoolean.h"
%include "FeaturesAPI_Rotation.h"
+%include "FeaturesAPI_Symmetry.h"
%include "FeaturesAPI_Translation.h"
%include "FeaturesAPI_Union.h"
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D -->
+
+// File: FeaturesAPI_Symmetry.cpp
+// Created: 07 Dec 2016
+// Author: Clarisse Genrault (CEA)
+
+#include "FeaturesAPI_Symmetry.h"
+
+#include <ModelHighAPI_Dumper.h>
+#include <ModelHighAPI_Tools.h>
+
+//==================================================================================================
+FeaturesAPI_Symmetry::FeaturesAPI_Symmetry(
+ const std::shared_ptr<ModelAPI_Feature>& theFeature)
+: ModelHighAPI_Interface(theFeature)
+{
+ initialize();
+}
+
+//==================================================================================================
+FeaturesAPI_Symmetry::FeaturesAPI_Symmetry(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+ const std::list<ModelHighAPI_Selection>& theMainObjects,
+ const ModelHighAPI_Selection& theObject)
+: ModelHighAPI_Interface(theFeature)
+{
+ if(initialize()) {
+ fillAttribute(theMainObjects, mymainObjects);
+ GeomAPI_Shape::ShapeType aType = getShapeType(theObject);
+ if(aType == GeomAPI_Shape::VERTEX) {
+ setPoint(theObject);
+ } else if(aType == GeomAPI_Shape::EDGE) {
+ setAxis(theObject);
+ } else if(aType == GeomAPI_Shape::FACE) {
+ setPlane(theObject);
+ }
+ }
+}
+
+//==================================================================================================
+FeaturesAPI_Symmetry::~FeaturesAPI_Symmetry()
+{
+
+}
+
+//==================================================================================================
+void FeaturesAPI_Symmetry::setMainObjects(
+ const std::list<ModelHighAPI_Selection>& theMainObjects)
+{
+ fillAttribute(theMainObjects, mainObjects());
+
+ execute();
+}
+
+//==================================================================================================
+void FeaturesAPI_Symmetry::setPoint(const ModelHighAPI_Selection& thePointObject)
+{
+ fillAttribute(FeaturesPlugin_Symmetry::CREATION_METHOD_BY_POINT(), creationMethod());
+ fillAttribute(thePointObject, pointObject());
+
+ execute();
+}
+
+//==================================================================================================
+void FeaturesAPI_Symmetry::setAxis(const ModelHighAPI_Selection& theAxisObject)
+{
+ fillAttribute(FeaturesPlugin_Symmetry::CREATION_METHOD_BY_AXIS(), creationMethod());
+ fillAttribute(theAxisObject, axisObject());
+
+ execute();
+}
+
+//==================================================================================================
+void FeaturesAPI_Symmetry::setPlane(const ModelHighAPI_Selection& thePlaneObject)
+{
+ fillAttribute(FeaturesPlugin_Symmetry::CREATION_METHOD_BY_PLANE(), creationMethod());
+ fillAttribute(thePlaneObject, planeObject());
+
+ execute();
+}
+
+//==================================================================================================
+void FeaturesAPI_Symmetry::dump(ModelHighAPI_Dumper& theDumper) const
+{
+ std::cout << "DUMP SYMMETRY" << std::endl;
+ FeaturePtr aBase = feature();
+ const std::string& aDocName = theDumper.name(aBase->document());
+
+ AttributeSelectionListPtr anAttrObjects =
+ aBase->selectionList(FeaturesPlugin_Symmetry::OBJECTS_LIST_ID());
+ theDumper << aBase << " = model.addSymmetry(" << aDocName << ", " << anAttrObjects;
+
+ std::string aCreationMethod =
+ aBase->string(FeaturesPlugin_Symmetry::CREATION_METHOD())->value();
+
+ if (aCreationMethod == FeaturesPlugin_Symmetry::CREATION_METHOD_BY_POINT()) {
+ AttributeSelectionPtr anAttrPoint =
+ aBase->selection(FeaturesPlugin_Symmetry::POINT_OBJECT_ID());
+ theDumper << ", " << anAttrPoint;
+ } else if (aCreationMethod == FeaturesPlugin_Symmetry::CREATION_METHOD_BY_AXIS()) {
+ AttributeSelectionPtr anAttrAxis =
+ aBase->selection(FeaturesPlugin_Symmetry::AXIS_OBJECT_ID());
+ theDumper << ", " << anAttrAxis;
+ } else if (aCreationMethod == FeaturesPlugin_Symmetry::CREATION_METHOD_BY_PLANE()) {
+ AttributeSelectionPtr anAttrPlane =
+ aBase->selection(FeaturesPlugin_Symmetry::PLANE_OBJECT_ID());
+ theDumper << ", " << anAttrPlane;
+ }
+
+ theDumper << ")" << std::endl;
+}
+
+//==================================================================================================
+SymmetryPtr addSymmetry(const std::shared_ptr<ModelAPI_Document>& thePart,
+ const std::list<ModelHighAPI_Selection>& theMainObjects,
+ const ModelHighAPI_Selection& theObject)
+{
+ std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(FeaturesAPI_Symmetry::ID());
+ return SymmetryPtr(new FeaturesAPI_Symmetry(aFeature, theMainObjects, theObject));
+}
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D -->
+
+// File: FeaturesAPI_Symmetry.h
+// Created: 07 Dec 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef FEATURESAPI_SYMMETRY_H_
+#define FEATURESAPI_SYMMETRY_H_
+
+#include "FeaturesAPI.h"
+
+#include <FeaturesPlugin_Symmetry.h>
+
+#include <ModelHighAPI_Interface.h>
+#include <ModelHighAPI_Macro.h>
+
+class ModelHighAPI_Double;
+class ModelHighAPI_Dumper;
+class ModelHighAPI_Selection;
+
+/// \class FeaturesAPI_Symmetry
+/// \ingroup CPPHighAPI
+/// \brief Interface for Symmetry feature.
+class FeaturesAPI_Symmetry: public ModelHighAPI_Interface
+{
+public:
+ /// Constructor without values.
+ FEATURESAPI_EXPORT
+ explicit FeaturesAPI_Symmetry(const std::shared_ptr<ModelAPI_Feature>& theFeature);
+
+ /// Constructor with values.
+ FEATURESAPI_EXPORT
+ explicit FeaturesAPI_Symmetry(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+ const std::list<ModelHighAPI_Selection>& theMainObjects,
+ const ModelHighAPI_Selection& theObject);
+
+ /// Destructor.
+ FEATURESAPI_EXPORT
+ virtual ~FeaturesAPI_Symmetry();
+
+ INTERFACE_5(FeaturesPlugin_Symmetry::ID(),
+ creationMethod, FeaturesPlugin_Symmetry::CREATION_METHOD(),
+ ModelAPI_AttributeString, /** Creation method */,
+ mainObjects, FeaturesPlugin_Symmetry::OBJECTS_LIST_ID(),
+ ModelAPI_AttributeSelectionList, /** Main objects */,
+ pointObject, FeaturesPlugin_Symmetry::POINT_OBJECT_ID(),
+ ModelAPI_AttributeSelection, /** Point object */,
+ axisObject, FeaturesPlugin_Symmetry::AXIS_OBJECT_ID(),
+ ModelAPI_AttributeSelection, /** Axis object */,
+ planeObject, FeaturesPlugin_Symmetry::PLANE_OBJECT_ID(),
+ ModelAPI_AttributeSelection, /** Plane object */)
+
+ /// Set main objects.
+ FEATURESAPI_EXPORT
+ void setMainObjects(const std::list<ModelHighAPI_Selection>& theMainObjects);
+
+ /// Modify CreationMethod, point_object attribute of the feature.
+ FEATURESAPI_EXPORT
+ void setPoint(const ModelHighAPI_Selection& thePointObject);
+
+ /// Modify CreationMethod, axis_object attribute of the feature.
+ FEATURESAPI_EXPORT
+ void setAxis(const ModelHighAPI_Selection& theAxisObject);
+
+ /// Modify CreationMethod, plane_object attribute of the feature.
+ FEATURESAPI_EXPORT
+ void setPlane(const ModelHighAPI_Selection& thePlaneObject);
+
+ /// Dump wrapped feature
+ FEATURESAPI_EXPORT
+ virtual void dump(ModelHighAPI_Dumper& theDumper) const;
+};
+
+/// Pointer on Symmetry object.
+typedef std::shared_ptr<FeaturesAPI_Symmetry> SymmetryPtr;
+
+/// \ingroup CPPHighAPI
+/// \brief Create Symmetry feature.
+FEATURESAPI_EXPORT
+SymmetryPtr addSymmetry(const std::shared_ptr<ModelAPI_Document>& thePart,
+ const std::list<ModelHighAPI_Selection>& theMainObjects,
+ const ModelHighAPI_Selection& theObject);
+
+#endif // FEATURESAPI_SYMMETRY_H_
std::string aCreationMethod =
aBase->string(FeaturesPlugin_Translation::CREATION_METHOD())->value();
- if(aCreationMethod == FeaturesPlugin_Translation::CREATION_METHOD_BY_DISTANCE()) {
+ if (aCreationMethod == FeaturesPlugin_Translation::CREATION_METHOD_BY_DISTANCE()) {
AttributeSelectionPtr anAttrAxis =
aBase->selection(FeaturesPlugin_Translation::AXIS_OBJECT_ID());
AttributeDoublePtr anAttrDistance =
#include "FeaturesAPI_Revolution.h"
#include "FeaturesAPI_RevolutionBoolean.h"
#include "FeaturesAPI_Rotation.h"
+ #include "FeaturesAPI_Symmetry.h"
#include "FeaturesAPI_Translation.h"
#include "FeaturesAPI_Union.h"
--- /dev/null
+"""
+Test case for Translation feature.
+Written on High API.
+"""
+from ModelAPI import *
+from GeomAPI import *
+
+import model
+
+# Get session
+aSession = ModelAPI_Session.get()
+
+# Create a part
+aDocument = aSession.activeDocument()
+aSession.startOperation()
+model.addPart(aDocument)
+aDocument = aSession.activeDocument()
+aSession.finishOperation()
+
+# Create a box
+
+aSession.startOperation()
+aBox1 = model.addBox(aDocument, 10, 10, 10)
+aBox2 = model.addBox(aDocument, 10, 10, 10)
+aBox3 = model.addBox(aDocument, 10, 10, 10)
+
+# Perform a symmetry by a point
+aSession.startOperation()
+aPoint = model.addPoint(aDocument, 0, 0, 0).result()
+aSymmetry1 = model.addSymmetry(aDocument, [model.selection("SOLID", "Box_1_1")], aPoint).result()
+aSession.finishOperation()
+assert (aSymmetry1 is not None)
+
+# Perform a symmetry by an axis
+aSession.startOperation()
+anAxis = model.addAxis(aDocument, 10, 0, 0).result()
+aSymmetry2 = model.addSymmetry(aDocument, [model.selection("SOLID", "Box_2_1")], anAxis).result()
+aSession.finishOperation()
+assert (aSymmetry2 is not None)
+
+# Perform a symmetry by a plane
+aSession.startOperation()
+aPoint1 = model.addPoint(aDocument, 0, 0, 0).result()
+aPoint2 = model.addPoint(aDocument, 10, 10, 0).result()
+aSymmetry3 = model.addSymmetry(aDocument, [model.selection("SOLID", "Box_3_1")], model.selection("FACE", "Box_3_1/Top")).result()
+aSession.finishOperation()
+assert (aSymmetry3 is not None)
\ No newline at end of file
aPoint2 = model.addPoint(aDocument, 10, 10, 0).result()
aTranslation3 = model.addTranslation(aDocument, [model.selection("SOLID", "Box_1_1")], aPoint1, aPoint2).result()
aSession.finishOperation()
-assert (aTranslation2 is not None)
\ No newline at end of file
+assert (aTranslation3 is not None)
FeaturesPlugin_Validators.h
FeaturesPlugin_RemoveSubShapes.h
FeaturesPlugin_Tools.h
+ FeaturesPlugin_Symmetry.h
)
SET(PROJECT_SOURCES
FeaturesPlugin_Validators.cpp
FeaturesPlugin_RemoveSubShapes.cpp
FeaturesPlugin_Tools.cpp
+ FeaturesPlugin_Symmetry.cpp
)
SET(XML_RESOURCES
pipe_widget.xml
remove_subshapes_widget.xml
union_widget.xml
+ symmetry_widget.xml
)
SET(TEXT_RESOURCES
#include <FeaturesPlugin_Union.h>
#include <FeaturesPlugin_ValidatorTransform.h>
#include <FeaturesPlugin_Validators.h>
+#include <FeaturesPlugin_Symmetry.h>
#include <ModelAPI_Session.h>
return FeaturePtr(new FeaturesPlugin_RemoveSubShapes);
} else if (theFeatureID == FeaturesPlugin_Union::ID()) {
return FeaturePtr(new FeaturesPlugin_Union);
+ } else if (theFeatureID == FeaturesPlugin_Symmetry::ID()) {
+ return FeaturePtr(new FeaturesPlugin_Symmetry);
}
// feature of such kind is not found
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: FeaturesPlugin_Symmetry.cpp
+// Created: 30 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#include <FeaturesPlugin_Symmetry.h>
+
+#include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_ResultBody.h>
+
+#include <GeomAPI_Edge.h>
+#include <GeomAPI_Face.h>
+#include <GeomAPI_Lin.h>
+#include <GeomAPI_Pln.h>
+
+#include <GeomAlgoAPI_PointBuilder.h>
+
+#include <ModelAPI_ResultPart.h>
+
+//=================================================================================================
+FeaturesPlugin_Symmetry::FeaturesPlugin_Symmetry()
+{
+}
+
+//=================================================================================================
+void FeaturesPlugin_Symmetry::initAttributes()
+{
+ data()->addAttribute(FeaturesPlugin_Symmetry::CREATION_METHOD(),
+ ModelAPI_AttributeString::typeId());
+
+ AttributeSelectionListPtr aSelection =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(data()->addAttribute(
+ FeaturesPlugin_Symmetry::OBJECTS_LIST_ID(), ModelAPI_AttributeSelectionList::typeId()));
+
+ data()->addAttribute(FeaturesPlugin_Symmetry::POINT_OBJECT_ID(),
+ ModelAPI_AttributeSelection::typeId());
+
+ data()->addAttribute(FeaturesPlugin_Symmetry::AXIS_OBJECT_ID(),
+ ModelAPI_AttributeSelection::typeId());
+
+ data()->addAttribute(FeaturesPlugin_Symmetry::PLANE_OBJECT_ID(),
+ ModelAPI_AttributeSelection::typeId());
+}
+
+//=================================================================================================
+void FeaturesPlugin_Symmetry::execute()
+{
+ AttributeStringPtr aMethodTypeAttr = string(FeaturesPlugin_Symmetry::CREATION_METHOD());
+ std::string aMethodType = aMethodTypeAttr->value();
+
+ if (aMethodType == CREATION_METHOD_BY_POINT()) {
+ performSymmetryByPoint();
+ }
+
+ if (aMethodType == CREATION_METHOD_BY_AXIS()) {
+ performSymmetryByAxis();
+ }
+
+ if (aMethodType == CREATION_METHOD_BY_PLANE()) {
+ performSymmetryByPlane();
+ }
+}
+
+//=================================================================================================
+void FeaturesPlugin_Symmetry::performSymmetryByPoint()
+{
+ // Getting objects.
+ ListOfShape anObjects;
+ std::list<ResultPtr> aContextes;
+ AttributeSelectionListPtr anObjectsSelList =
+ selectionList(FeaturesPlugin_Symmetry::OBJECTS_LIST_ID());
+ if (anObjectsSelList->size() == 0) {
+ return;
+ }
+ for(int anObjectsIndex = 0; anObjectsIndex < anObjectsSelList->size(); anObjectsIndex++) {
+ std::shared_ptr<ModelAPI_AttributeSelection> anObjectAttr =
+ anObjectsSelList->value(anObjectsIndex);
+ std::shared_ptr<GeomAPI_Shape> anObject = anObjectAttr->value();
+ if(!anObject.get()) { // may be for not-activated parts
+ eraseResults();
+ return;
+ }
+ anObjects.push_back(anObject);
+ aContextes.push_back(anObjectAttr->context());
+ }
+
+ //Getting point.
+ std::shared_ptr<GeomAPI_Pnt> aPoint;
+ std::shared_ptr<ModelAPI_AttributeSelection> anObjRef =
+ selection(FeaturesPlugin_Symmetry::POINT_OBJECT_ID());
+ if (anObjRef.get() != NULL) {
+ GeomShapePtr aShape1 = anObjRef->value();
+ if (!aShape1.get()) {
+ aShape1 = anObjRef->context()->shape();
+ }
+ if (aShape1) {
+ aPoint = GeomAlgoAPI_PointBuilder::point(aShape1);
+ }
+ }
+
+ // Moving each object.
+ int aResultIndex = 0;
+ std::list<ResultPtr>::iterator aContext = aContextes.begin();
+ for(ListOfShape::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end();
+ anObjectsIt++, aContext++) {
+ std::shared_ptr<GeomAPI_Shape> aBaseShape = *anObjectsIt;
+ bool isPart = (*aContext)->groupName() == ModelAPI_ResultPart::group();
+
+ // Setting result.
+ if (isPart) {
+ std::shared_ptr<GeomAPI_Trsf> aTrsf(new GeomAPI_Trsf());
+ aTrsf->setSymmetry(aPoint);
+ ResultPartPtr anOrigin = std::dynamic_pointer_cast<ModelAPI_ResultPart>(*aContext);
+ ResultPartPtr aResultPart = document()->copyPart(anOrigin, data(), aResultIndex);
+ aResultPart->setTrsf(*aContext, aTrsf);
+ setResult(aResultPart, aResultIndex);
+ } else {
+ GeomAlgoAPI_Symmetry aSymmetryAlgo(aBaseShape, aPoint);
+
+ if (!aSymmetryAlgo.check()) {
+ setError(aSymmetryAlgo.getError());
+ return;
+ }
+
+ aSymmetryAlgo.build();
+
+ // Checking that the algorithm worked properly.
+ if(!aSymmetryAlgo.isDone()) {
+ static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
+ setError(aFeatureError);
+ break;
+ }
+ if(aSymmetryAlgo.shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
+ setError(aShapeError);
+ break;
+ }
+ if(!aSymmetryAlgo.isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
+ setError(aFeatureError);
+ break;
+ }
+
+ ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aSymmetryAlgo, aResultBody, aBaseShape);
+ setResult(aResultBody, aResultIndex);
+ }
+ aResultIndex++;
+ }
+
+ // Remove the rest results if there were produced in the previous pass.
+ removeResults(aResultIndex);
+}
+
+//=================================================================================================
+void FeaturesPlugin_Symmetry::performSymmetryByAxis()
+{
+ // Getting objects.
+ ListOfShape anObjects;
+ std::list<ResultPtr> aContextes;
+ AttributeSelectionListPtr anObjectsSelList =
+ selectionList(FeaturesPlugin_Symmetry::OBJECTS_LIST_ID());
+ if (anObjectsSelList->size() == 0) {
+ return;
+ }
+ for(int anObjectsIndex = 0; anObjectsIndex < anObjectsSelList->size(); anObjectsIndex++) {
+ std::shared_ptr<ModelAPI_AttributeSelection> anObjectAttr =
+ anObjectsSelList->value(anObjectsIndex);
+ std::shared_ptr<GeomAPI_Shape> anObject = anObjectAttr->value();
+ if(!anObject.get()) { // may be for not-activated parts
+ eraseResults();
+ return;
+ }
+ anObjects.push_back(anObject);
+ aContextes.push_back(anObjectAttr->context());
+ }
+
+ //Getting axis.
+ std::shared_ptr<GeomAPI_Ax1> anAxis;
+ std::shared_ptr<GeomAPI_Edge> anEdge;
+ std::shared_ptr<ModelAPI_AttributeSelection> anObjRef =
+ selection(FeaturesPlugin_Symmetry::AXIS_OBJECT_ID());
+ if(anObjRef && anObjRef->value() && anObjRef->value()->isEdge()) {
+ anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(anObjRef->value()));
+ } else if (anObjRef && !anObjRef->value() && anObjRef->context() &&
+ anObjRef->context()->shape() && anObjRef->context()->shape()->isEdge()) {
+ anEdge = std::shared_ptr<GeomAPI_Edge>(new GeomAPI_Edge(anObjRef->context()->shape()));
+ }
+ if(anEdge) {
+ anAxis = std::shared_ptr<GeomAPI_Ax1>(new GeomAPI_Ax1(anEdge->line()->location(),
+ anEdge->line()->direction()));
+ }
+
+ // Moving each object.
+ int aResultIndex = 0;
+ std::list<ResultPtr>::iterator aContext = aContextes.begin();
+ for(ListOfShape::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end();
+ anObjectsIt++, aContext++) {
+ std::shared_ptr<GeomAPI_Shape> aBaseShape = *anObjectsIt;
+ bool isPart = (*aContext)->groupName() == ModelAPI_ResultPart::group();
+
+ // Setting result.
+ if (isPart) {
+ std::shared_ptr<GeomAPI_Trsf> aTrsf(new GeomAPI_Trsf());
+ aTrsf->setSymmetry(anAxis);
+ ResultPartPtr anOrigin = std::dynamic_pointer_cast<ModelAPI_ResultPart>(*aContext);
+ ResultPartPtr aResultPart = document()->copyPart(anOrigin, data(), aResultIndex);
+ aResultPart->setTrsf(*aContext, aTrsf);
+ setResult(aResultPart, aResultIndex);
+ } else {
+ GeomAlgoAPI_Symmetry aSymmetryAlgo(aBaseShape, anAxis);
+
+ if (!aSymmetryAlgo.check()) {
+ setError(aSymmetryAlgo.getError());
+ return;
+ }
+
+ aSymmetryAlgo.build();
+
+ // Checking that the algorithm worked properly.
+ if(!aSymmetryAlgo.isDone()) {
+ static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
+ setError(aFeatureError);
+ break;
+ }
+ if(aSymmetryAlgo.shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
+ setError(aShapeError);
+ break;
+ }
+ if(!aSymmetryAlgo.isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
+ setError(aFeatureError);
+ break;
+ }
+
+ ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aSymmetryAlgo, aResultBody, aBaseShape);
+ setResult(aResultBody, aResultIndex);
+ }
+ aResultIndex++;
+ }
+
+ // Remove the rest results if there were produced in the previous pass.
+ removeResults(aResultIndex);
+}
+
+//=================================================================================================
+void FeaturesPlugin_Symmetry::performSymmetryByPlane()
+{
+ // Getting objects.
+ ListOfShape anObjects;
+ std::list<ResultPtr> aContextes;
+ AttributeSelectionListPtr anObjectsSelList =
+ selectionList(FeaturesPlugin_Symmetry::OBJECTS_LIST_ID());
+ if (anObjectsSelList->size() == 0) {
+ return;
+ }
+ for(int anObjectsIndex = 0; anObjectsIndex < anObjectsSelList->size(); anObjectsIndex++) {
+ std::shared_ptr<ModelAPI_AttributeSelection> anObjectAttr =
+ anObjectsSelList->value(anObjectsIndex);
+ std::shared_ptr<GeomAPI_Shape> anObject = anObjectAttr->value();
+ if(!anObject.get()) { // may be for not-activated parts
+ eraseResults();
+ return;
+ }
+ anObjects.push_back(anObject);
+ aContextes.push_back(anObjectAttr->context());
+ }
+
+ //Getting axis.
+ std::shared_ptr<GeomAPI_Ax2> aPlane;
+ std::shared_ptr<GeomAPI_Pln> aPln;
+ std::shared_ptr<ModelAPI_AttributeSelection> anObjRef =
+ selection(FeaturesPlugin_Symmetry::PLANE_OBJECT_ID());
+ if(anObjRef && anObjRef->value() && anObjRef->value()->isFace()) {
+ aPln = std::shared_ptr<GeomAPI_Face>(new GeomAPI_Face(anObjRef->value()))->getPlane();
+ }
+ else if (anObjRef && !anObjRef->value() && anObjRef->context() &&
+ anObjRef->context()->shape() && anObjRef->context()->shape()->isEdge()) {
+ aPln =
+ std::shared_ptr<GeomAPI_Face>(new GeomAPI_Face(anObjRef->context()->shape()))->getPlane();
+ }
+ if(aPln) {
+ aPlane = std::shared_ptr<GeomAPI_Ax2>(new GeomAPI_Ax2(aPln->location(),
+ aPln->direction()));
+ }
+
+ // Moving each object.
+ int aResultIndex = 0;
+ std::list<ResultPtr>::iterator aContext = aContextes.begin();
+ for(ListOfShape::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end();
+ anObjectsIt++, aContext++) {
+ std::shared_ptr<GeomAPI_Shape> aBaseShape = *anObjectsIt;
+ bool isPart = (*aContext)->groupName() == ModelAPI_ResultPart::group();
+
+ // Setting result.
+ if (isPart) {
+ std::shared_ptr<GeomAPI_Trsf> aTrsf(new GeomAPI_Trsf());
+ aTrsf->setSymmetry(aPlane);
+ ResultPartPtr anOrigin = std::dynamic_pointer_cast<ModelAPI_ResultPart>(*aContext);
+ ResultPartPtr aResultPart = document()->copyPart(anOrigin, data(), aResultIndex);
+ aResultPart->setTrsf(*aContext, aTrsf);
+ setResult(aResultPart, aResultIndex);
+ } else {
+ GeomAlgoAPI_Symmetry aSymmetryAlgo(aBaseShape, aPlane);
+
+ if (!aSymmetryAlgo.check()) {
+ setError(aSymmetryAlgo.getError());
+ return;
+ }
+
+ aSymmetryAlgo.build();
+
+ // Checking that the algorithm worked properly.
+ if(!aSymmetryAlgo.isDone()) {
+ static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
+ setError(aFeatureError);
+ break;
+ }
+ if(aSymmetryAlgo.shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
+ setError(aShapeError);
+ break;
+ }
+ if(!aSymmetryAlgo.isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
+ setError(aFeatureError);
+ break;
+ }
+
+ ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aSymmetryAlgo, aResultBody, aBaseShape);
+ setResult(aResultBody, aResultIndex);
+ }
+ aResultIndex++;
+ }
+
+ // Remove the rest results if there were produced in the previous pass.
+ removeResults(aResultIndex);
+}
+
+//=================================================================================================
+void FeaturesPlugin_Symmetry::loadNamingDS(GeomAlgoAPI_Symmetry& theSymmetryAlgo,
+ std::shared_ptr<ModelAPI_ResultBody> theResultBody,
+ std::shared_ptr<GeomAPI_Shape> theBaseShape)
+{
+ // Store and name the result.
+ theResultBody->storeModified(theBaseShape, theSymmetryAlgo.shape());
+
+ // Name the faces
+ std::shared_ptr<GeomAPI_DataMapOfShapeShape> aSubShapes = theSymmetryAlgo.mapOfSubShapes();
+ int aReflectedTag = 1;
+ std::string aReflectedName = "Symmetried";
+ theResultBody->loadAndOrientModifiedShapes(&theSymmetryAlgo,
+ theBaseShape, GeomAPI_Shape::FACE,
+ aReflectedTag, aReflectedName, *aSubShapes.get());
+}
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: FeaturesPlugin_Symmetry.h
+// Created: 30 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef FEATURESPLUGIN_SYMMETRY_H_
+#define FEATURESPLUGIN_SYMMETRY_H_
+
+#include <FeaturesPlugin.h>
+
+#include <ModelAPI_Feature.h>
+
+#include <GeomAlgoAPI_Symmetry.h>
+
+/** \class FeaturesPlugin_Symmetry
+ * \ingroup Plugins
+ * \brief Feature that performs reflection with respect to a point, axis, or plane.
+ */
+class FeaturesPlugin_Symmetry : public ModelAPI_Feature
+{
+ public:
+ /// Symmetry kind.
+ inline static const std::string& ID()
+ {
+ static const std::string MY_SYMMETRY("Symmetry");
+ return MY_SYMMETRY;
+ }
+
+ /// Attribute name for creation method.
+ inline static const std::string& CREATION_METHOD()
+ {
+ static const std::string MY_CREATION_METHOD_ID("CreationMethod");
+ return MY_CREATION_METHOD_ID;
+ }
+
+ /// Attribute name for creation method "ByAxisAndDistance".
+ inline static const std::string& CREATION_METHOD_BY_POINT()
+ {
+ static const std::string MY_CREATION_METHOD_ID("ByPoint");
+ return MY_CREATION_METHOD_ID;
+ }
+
+ /// Attribute name for creation method "ByDimensions".
+ inline static const std::string& CREATION_METHOD_BY_AXIS()
+ {
+ static const std::string MY_CREATION_METHOD_ID("ByAxis");
+ return MY_CREATION_METHOD_ID;
+ }
+
+ /// Attribute name for creation method "ByTwoPoints".
+ inline static const std::string& CREATION_METHOD_BY_PLANE()
+ {
+ static const std::string MY_CREATION_METHOD_ID("ByPlane");
+ return MY_CREATION_METHOD_ID;
+ }
+
+ /// Attribute name of referenced objects.
+ inline static const std::string& OBJECTS_LIST_ID()
+ {
+ static const std::string MY_OBJECTS_LIST_ID("main_objects");
+ return MY_OBJECTS_LIST_ID;
+ }
+
+ /// Attribute name of a point.
+ inline static const std::string& POINT_OBJECT_ID()
+ {
+ static const std::string MY_POINT_OBJECT_ID("point_object");
+ return MY_POINT_OBJECT_ID;
+ }
+
+ /// Attribute name of an axis.
+ inline static const std::string& AXIS_OBJECT_ID()
+ {
+ static const std::string MY_AXIS_OBJECT_ID("axis_object");
+ return MY_AXIS_OBJECT_ID;
+ }
+
+ /// Attribute name of a plane.
+ inline static const std::string& PLANE_OBJECT_ID()
+ {
+ static const std::string MY_PLANE_OBJECT_ID("plane_object");
+ return MY_PLANE_OBJECT_ID;
+ }
+
+ /// \return the kind of a feature.
+ FEATURESPLUGIN_EXPORT virtual const std::string& getKind()
+ {
+ static std::string MY_KIND = FeaturesPlugin_Symmetry::ID();
+ return MY_KIND;
+ }
+
+ /// Creates a new part document if needed.
+ FEATURESPLUGIN_EXPORT virtual void execute();
+
+ /// Request for initialization of data model of the feature: adding all attributes.
+ FEATURESPLUGIN_EXPORT virtual void initAttributes();
+
+ /// Use plugin manager for features creation.
+ FeaturesPlugin_Symmetry();
+
+private:
+ ///Perform symmetry with respect to a point.
+ void performSymmetryByPoint();
+
+ ///Perform symmetry with respect to an axis.
+ void performSymmetryByAxis();
+
+ ///Perform symmetry with respect to a plane.
+ void performSymmetryByPlane();
+
+ void loadNamingDS(GeomAlgoAPI_Symmetry& theSymmetryAlgo,
+ std::shared_ptr<ModelAPI_ResultBody> theResultBody,
+ std::shared_ptr<GeomAPI_Shape> theBaseShape);
+};
+
+#endif // FEATURESPLUGIN_SYMMETRY_H_
//=================================================================================================
void FeaturesPlugin_Translation::initAttributes()
{
- data()->addAttribute(CREATION_METHOD(), ModelAPI_AttributeString::typeId());
+ data()->addAttribute(FeaturesPlugin_Translation::CREATION_METHOD(),
+ ModelAPI_AttributeString::typeId());
AttributeSelectionListPtr aSelection =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(data()->addAttribute(
<feature id="Rotation" title="Rotation" tooltip="Perform rotation of an objects around the axis to specified angle" icon="icons/Features/rotation.png">
<source path="rotation_widget.xml"/>
</feature>
+ <feature id="Symmetry" title="Symmetry" tooltip="Perform symmetry with respect to a point, an axis or a plane" icon="icons/Features/symmetry.png">
+ <source path="symmetry_widget.xml"/>
+ </feature>
</group>
</workbench>
</plugin>
--- /dev/null
+<!-- Copyright (C) 2014-2016 CEA/DEN, EDF R&D -->
+
+<source>
+ <toolbox id="CreationMethod">
+ <box id="ByPoint" title="Point reflection" icon="icons/Features/symmetry_point_32x32.png">
+ <multi_selector id="main_objects"
+ label="Main objects"
+ icon="icons/Features/cut_shape.png"
+ tooltip="Select solid objects"
+ type_choice="solid objects"
+ concealment="true">
+ <validator id="FeaturesPlugin_ValidatorTransform"/>
+ </multi_selector>
+ <shape_selector id="point_object"
+ icon="icons/Features/point.png"
+ label="Point"
+ tooltip="Select a point"
+ shape_types="vertex"
+ default="">
+ <validator id="GeomValidators_ShapeType" parameters="vertex"/>
+ </shape_selector>
+ </box>
+ <box id="ByAxis" title="Axis reflection" icon="icons/Features/symmetry_axis_32x32.png">
+ <multi_selector id="main_objects"
+ label="Main objects"
+ icon="icons/Features/cut_shape.png"
+ tooltip="Select solid objects"
+ type_choice="solid objects"
+ concealment="true">
+ <validator id="FeaturesPlugin_ValidatorTransform"/>
+ </multi_selector>
+ <shape_selector id="axis_object"
+ icon="icons/Features/axis.png"
+ label="Axis"
+ tooltip="Select an axis"
+ shape_types="edge"
+ default="">
+ <validator id="GeomValidators_ShapeType" parameters="line"/>
+ </shape_selector>
+ </box>
+ <box id="ByPlane" title="Plane reflection" icon="icons/Features/symmetry_plane_32x32.png">
+ <multi_selector id="main_objects"
+ label="Main objects"
+ icon="icons/Features/cut_shape.png"
+ tooltip="Select solid objects"
+ type_choice="solid objects"
+ concealment="true">
+ <validator id="FeaturesPlugin_ValidatorTransform"/>
+ </multi_selector>
+ <shape_selector id="plane_object"
+ label="Plane"
+ icon="icons/Features/plane.png"
+ tooltip="Select a plane"
+ shape_types="face"
+ default="">
+ <validator id="GeomValidators_Face" parameters="plane"/>
+ </shape_selector>
+ </box>
+ </toolbox>
+</source>
--- /dev/null
+## Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+INCLUDE(Common)
+INCLUDE(UnitTest)
+
+SET(PROJECT_HEADERS
+ GDMLAPI.h
+ GDMLAPI_ConeSegment.h
+)
+
+SET(PROJECT_SOURCES
+ GDMLAPI_ConeSegment.cpp
+)
+
+SET(PROJECT_LIBRARIES
+ ModelAPI
+ ModelHighAPI
+)
+
+INCLUDE_DIRECTORIES(
+ ${PROJECT_SOURCE_DIR}/src/Events
+ ${PROJECT_SOURCE_DIR}/src/ModelAPI
+ ${PROJECT_SOURCE_DIR}/src/ModelHighAPI
+)
+
+# Plugin headers dependency
+INCLUDE_DIRECTORIES(
+ ${PROJECT_SOURCE_DIR}/src/GeomAPI
+ ${PROJECT_SOURCE_DIR}/src/GeomAlgoAPI
+ ${PROJECT_SOURCE_DIR}/src/GeomDataAPI
+ ${PROJECT_SOURCE_DIR}/src/GDMLPlugin
+)
+
+ADD_DEFINITIONS(-DGDMLAPI_EXPORTS ${CAS_DEFINITIONS})
+ADD_LIBRARY(GDMLAPI SHARED ${PROJECT_SOURCES} ${PROJECT_HEADERS})
+TARGET_LINK_LIBRARIES(GDMLAPI ${PROJECT_LIBRARIES})
+
+# SWIG wrapper
+
+INCLUDE(PythonAPI)
+
+SET_SOURCE_FILES_PROPERTIES(GDMLAPI.i PROPERTIES CPLUSPLUS ON)
+SET_SOURCE_FILES_PROPERTIES(GDMLAPI.i PROPERTIES SWIG_DEFINITIONS "-shadow")
+
+SET(SWIG_LINK_LIBRARIES
+ GDMLAPI
+ ModelHighAPI
+ ModelAPI
+ ${PYTHON_LIBRARIES}
+)
+
+SET(SWIG_MODULE_GDMLAPI_EXTRA_DEPS ${SWIG_MODULE_GDMLAPI_EXTRA_DEPS}
+ ${PROJECT_SOURCE_DIR}/src/ModelHighAPI/ModelHighAPI.i
+ doxyhelp.i
+ ${PROJECT_HEADERS}
+)
+
+SWIG_ADD_MODULE(GDMLAPI python GDMLAPI.i ${PROJECT_HEADERS})
+SWIG_LINK_LIBRARIES(GDMLAPI ${SWIG_LINK_LIBRARIES})
+
+IF(WIN32)
+ SET_TARGET_PROPERTIES(_GDMLAPI PROPERTIES DEBUG_OUTPUT_NAME _GDMLAPI_d)
+ENDIF(WIN32)
+
+INSTALL(TARGETS _GDMLAPI DESTINATION ${SHAPER_INSTALL_SWIG})
+INSTALL(TARGETS GDMLAPI DESTINATION ${SHAPER_INSTALL_BIN})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/GDMLAPI.py DESTINATION ${SHAPER_INSTALL_SWIG})
+
+# Tests
+ADD_UNIT_TESTS(TestConeSegment.py)
\ No newline at end of file
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLAPI.h
+// Created: 29 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GDMLAPI_H
+#define GDMLAPI_H
+
+#if defined GDMLAPI_EXPORTS
+#if defined WIN32
+#define GDMLAPI_EXPORT __declspec( dllexport )
+#else
+#define GDMLAPI_EXPORT
+#endif
+#else
+#if defined WIN32
+#define GDMLAPI_EXPORT __declspec( dllimport )
+#else
+#define GDMLAPI_EXPORT
+#endif
+#endif
+
+#endif // GDMLAPI_H
--- /dev/null
+/* GDMLAPI.i */
+// File: GDMLAPI.i
+// Created: 29 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+%module GDMLAPI
+
+%{
+ #include "GDMLAPI_swig.h"
+%}
+
+%include "doxyhelp.i"
+
+// import other modules
+%import "ModelHighAPI.i"
+
+// to avoid error on this
+#define GDMLAPI_EXPORT
+
+// standard definitions
+%include "typemaps.i"
+%include "std_string.i"
+%include "std_shared_ptr.i"
+%include "std_list.i"
+
+// shared pointers
+%shared_ptr(GDMLAPI_ConeSegment)
+
+// all supported interfaces
+%include "GDMLAPI_ConeSegment.h"
+
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D -->
+
+// File: GDMLAPI_ConeSegment.cpp
+// Created: 29 Nov. 2016
+// Author: Clarisse Genrault
+
+#include "GDMLAPI_ConeSegment.h"
+
+#include <ModelHighAPI_Tools.h>
+
+//==================================================================================================
+GDMLAPI_ConeSegment::GDMLAPI_ConeSegment(const std::shared_ptr<ModelAPI_Feature>& theFeature)
+: ModelHighAPI_Interface(theFeature)
+{
+ initialize();
+}
+
+//==================================================================================================
+GDMLAPI_ConeSegment::GDMLAPI_ConeSegment(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+ const ModelHighAPI_Double& theRMin1,
+ const ModelHighAPI_Double& theRMax1,
+ const ModelHighAPI_Double& theRMin2,
+ const ModelHighAPI_Double& theRMax2,
+ const ModelHighAPI_Double& theZ,
+ const ModelHighAPI_Double& theStartPhi,
+ const ModelHighAPI_Double& theDeltaPhi)
+: ModelHighAPI_Interface(theFeature)
+{
+ if (initialize())
+ setAttributes(theRMin1, theRMax1, theRMin2, theRMax2, theZ, theStartPhi, theDeltaPhi);
+}
+
+//==================================================================================================
+GDMLAPI_ConeSegment::~GDMLAPI_ConeSegment()
+{
+
+}
+
+//==================================================================================================
+void GDMLAPI_ConeSegment::setAttributes(const ModelHighAPI_Double& theRMin1,
+ const ModelHighAPI_Double& theRMax1,
+ const ModelHighAPI_Double& theRMin2,
+ const ModelHighAPI_Double& theRMax2,
+ const ModelHighAPI_Double& theZ,
+ const ModelHighAPI_Double& theStartPhi,
+ const ModelHighAPI_Double& theDeltaPhi)
+{
+ fillAttribute(theRMin1, rmin1());
+ fillAttribute(theRMax1, rmax1());
+ fillAttribute(theRMin2, rmin2());
+ fillAttribute(theRMax2, rmax2());
+ fillAttribute(theZ, z());
+ fillAttribute(theStartPhi, startphi());
+ fillAttribute(theDeltaPhi, deltaphi());
+
+ execute();
+}
+
+//==================================================================================================
+ConeSegmentPtr addConeSegment(const std::shared_ptr<ModelAPI_Document>& thePart,
+ const ModelHighAPI_Double& theRMin1,
+ const ModelHighAPI_Double& theRMax1,
+ const ModelHighAPI_Double& theRMin2,
+ const ModelHighAPI_Double& theRMax2,
+ const ModelHighAPI_Double& theZ,
+ const ModelHighAPI_Double& theStartPhi,
+ const ModelHighAPI_Double& theDeltaPhi)
+{
+ std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(GDMLAPI_ConeSegment::ID());
+ return ConeSegmentPtr(new GDMLAPI_ConeSegment(aFeature, theRMin1, theRMax1, theRMin2, theRMax2,
+ theZ, theStartPhi, theDeltaPhi));
+}
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D -->
+
+// File: GDMLAPI_ConeSegment.h
+// Created: 29 Nov. 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GDMLAPI_ConeSegment_H_
+#define GDMLAPI_ConeSegment_H_
+
+#include "GDMLAPI.h"
+
+#include <GDMLPlugin_ConeSegment.h>
+
+#include <ModelHighAPI_Interface.h>
+#include <ModelHighAPI_Macro.h>
+
+class ModelHighAPI_Double;
+
+/// \class GDMLPlugin_ConeSegment
+/// \ingroup CPPHighAPI
+/// \brief Interface for primitive ConeSegment feature.
+class GDMLAPI_ConeSegment: public ModelHighAPI_Interface
+{
+public:
+ /// Constructor without values.
+ GDMLAPI_EXPORT
+ explicit GDMLAPI_ConeSegment(const std::shared_ptr<ModelAPI_Feature>& theFeature);
+
+ /// Constructor with values.
+ GDMLAPI_EXPORT
+ explicit GDMLAPI_ConeSegment(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+ const ModelHighAPI_Double& theRMin1,
+ const ModelHighAPI_Double& theRMax1,
+ const ModelHighAPI_Double& theRMin2,
+ const ModelHighAPI_Double& theRMax2,
+ const ModelHighAPI_Double& theZ,
+ const ModelHighAPI_Double& theStartPhi,
+ const ModelHighAPI_Double& theDeltaPhi);
+
+ /// Destructor.
+ GDMLAPI_EXPORT
+ virtual ~GDMLAPI_ConeSegment();
+
+ INTERFACE_7(GDMLPlugin_ConeSegment::ID(),
+ rmin1, GDMLPlugin_ConeSegment::RMIN1_ID(),
+ ModelAPI_AttributeDouble, /** Inner radius at base of cone */,
+ rmax1, GDMLPlugin_ConeSegment::RMAX1_ID(),
+ ModelAPI_AttributeDouble, /** Outer radius at base of cone */,
+ rmin2, GDMLPlugin_ConeSegment::RMIN2_ID(),
+ ModelAPI_AttributeDouble, /** Inner radius at top of cone */,
+ rmax2, GDMLPlugin_ConeSegment::RMAX2_ID(),
+ ModelAPI_AttributeDouble, /** Outer radius at top of cone */,
+ z, GDMLPlugin_ConeSegment::Z_ID(),
+ ModelAPI_AttributeDouble, /** Height of the cone segment */,
+ startphi, GDMLPlugin_ConeSegment::STARTPHI_ID(),
+ ModelAPI_AttributeDouble, /** Start angle of the segment */,
+ deltaphi, GDMLPlugin_ConeSegment::DELTAPHI_ID(),
+ ModelAPI_AttributeDouble, /** Angle of the segment */)
+
+ /// Set dimensions
+ GDMLAPI_EXPORT
+ void setAttributes(const ModelHighAPI_Double& theRMin1,
+ const ModelHighAPI_Double& theRMax1,
+ const ModelHighAPI_Double& theRMin2,
+ const ModelHighAPI_Double& theRMax2,
+ const ModelHighAPI_Double& theZ,
+ const ModelHighAPI_Double& theStartPhi,
+ const ModelHighAPI_Double& theDeltaPhi);
+};
+
+/// Pointer on primitive ConeSegment object
+typedef std::shared_ptr<GDMLAPI_ConeSegment> ConeSegmentPtr;
+
+/// \ingroup CPPHighAPI
+/// \brief Create GDML ConeSegment feature.
+GDMLAPI_EXPORT
+ConeSegmentPtr addConeSegment(const std::shared_ptr<ModelAPI_Document>& thePart,
+ const ModelHighAPI_Double& theRMin1,
+ const ModelHighAPI_Double& theRMax1,
+ const ModelHighAPI_Double& theRMin2,
+ const ModelHighAPI_Double& theRMax2,
+ const ModelHighAPI_Double& theZ,
+ const ModelHighAPI_Double& theStartPhi,
+ const ModelHighAPI_Double& theDeltaPhi);
+
+#endif // GDMLAPI_ConeSegment_H_
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLAPI_swig.h
+// Created: 29 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GDMLAPI_swig_H_
+#define GDMLAPI_swig_H_
+
+ #include <ModelHighAPI_swig.h>
+
+ #include "GDMLAPI.h"
+ #include "GDMLAPI_ConeSegment.h"
+
+#endif // GDMLAPI_swig_H_
+
--- /dev/null
+"""
+Test case for GDML Primitive Cone Segment feature.
+Written on High API.
+"""
+from ModelAPI import *
+from GeomAPI import *
+
+import model
+
+# Get session
+aSession = ModelAPI_Session.get()
+
+# Create a part
+aDocument = aSession.activeDocument()
+aSession.startOperation()
+model.addPart(aDocument)
+aDocument = aSession.activeDocument()
+aSession.finishOperation()
+
+# Create several "cone segment"
+aSession.startOperation()
+aCS1 = model.addConeSegment(aDocument,7.,11.,5.,8.,12.,0.,270.).result()
+aSession.finishOperation()
+assert (aCS1 is not None)
+
+aSession.startOperation()
+aCS2 = model.addConeSegment(aDocument,5.,10.,7.,15.,15.,45.,180.).result()
+aSession.finishOperation()
+assert (aCS2 is not None)
+
+aSession.startOperation()
+aCS3 = model.addConeSegment(aDocument,5.,10.,7.,15.,15.,-45.,180.).result()
+aSession.finishOperation()
+assert (aCS3 is not None)
+
+aSession.startOperation()
+aCS4 = model.addConeSegment(aDocument,0.,10.,2.,7.,3.,0.,270.).result()
+aSession.finishOperation()
+assert (aCS4 is not None)
+
+aSession.startOperation()
+aCS5 = model.addConeSegment(aDocument,5.,8.,0.,6.,10.,45.,270.).result()
+aSession.finishOperation()
+assert (aCS5 is not None)
+
+aSession.startOperation()
+aCS6 = model.addConeSegment(aDocument,0.,6.,0.,4.,17.,0.,270.).result()
+aSession.finishOperation()
+assert (aCS6 is not None)
+
+aSession.startOperation()
+aCS7 = model.addConeSegment(aDocument,7.,11.,5.,8.,12.,0.,360.).result()
+aSession.finishOperation()
+assert (aCS7 is not None)
+
+aSession.startOperation()
+aCS8 = model.addConeSegment(aDocument,-5.,11.,5.,8.,12.,0.,270.)
+aSession.finishOperation()
+assert (len(aCS8.results()) == 0)
+
+aSession.startOperation()
+aCS9 = model.addConeSegment(aDocument,11.,7.,5.,8.,12.,0.,270.)
+aSession.finishOperation()
+assert (len(aCS9.results()) == 0)
+
+aSession.startOperation()
+aCS10 = model.addConeSegment(aDocument,7.,11.,8.,5.,12.,0.,270.)
+aSession.finishOperation()
+assert (len(aCS10.results()) == 0)
+
+aSession.startOperation()
+aCS11 = model.addConeSegment(aDocument,7.,11.,-3.,5.,12.,0.,270.)
+aSession.finishOperation()
+assert (len(aCS11.results()) == 0)
+
+aSession.startOperation()
+aCS12 = model.addConeSegment(aDocument,7.,11.,5.,8.,0.,0.,270.)
+aSession.finishOperation()
+assert (len(aCS12.results()) == 0)
+
+aSession.startOperation()
+aCS13 = model.addConeSegment(aDocument,7.,11.,5.,8.,-10.,0.,270.)
+aSession.finishOperation()
+assert (len(aCS13.results()) == 0)
+
+aSession.startOperation()
+aCS14 = model.addConeSegment(aDocument,7.,11.,5.,8.,12.,-45.,-45.)
+aSession.finishOperation()
+assert (len(aCS14.results()) == 0)
+
+aSession.startOperation()
+aCS15 = model.addConeSegment(aDocument,7.,11.,5.,8.,12.,45.,450.)
+aSession.finishOperation()
+assert (len(aCS15.results()) == 0)
+
+aSession.startOperation()
+model.addParameter(aDocument,"rmin1","7.")
+model.addParameter(aDocument,"rmax1","11.")
+model.addParameter(aDocument,"rmin2","5.")
+model.addParameter(aDocument,"rmax2","8.")
+model.addParameter(aDocument,"z","12.")
+model.addParameter(aDocument,"startphi","0.")
+model.addParameter(aDocument,"deltaphi","270.")
+aCS16 = model.addConeSegment(aDocument,"rmin1","rmax1","rmin2","rmax2","z","startphi","deltaphi").result()
+aSession.finishOperation()
+assert (aCS16 is not None)
--- /dev/null
+# Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+# File: CMakeLists.txt
+# Created: 23 Nov 2016
+# Author: Clarisse Genrault (CEA)
+
+INCLUDE(Common)
+INCLUDE(UnitTest)
+
+SET(CMAKE_AUTOMOC ON)
+
+SET(PROJECT_HEADERS
+ GDMLPlugin.h
+ GDMLPlugin_Plugin.h
+ GDMLPlugin_ConeSegment.h
+)
+
+SET(PROJECT_SOURCES
+ GDMLPlugin_Plugin.cpp
+ GDMLPlugin_ConeSegment.cpp
+)
+
+SET(XML_RESOURCES
+ plugin-GDML.xml
+ conesegment_widget.xml
+)
+
+INCLUDE_DIRECTORIES(
+ ../ModelAPI
+ ../GeomAPI
+ ../GeomAlgoAPI
+ ../Events
+ ../Config
+ ../ModuleBase
+ ${CAS_INCLUDE_DIRS}
+)
+
+SET(PROJECT_LIBRARIES
+ Events
+ Config
+ ModelAPI
+ GeomAPI
+ GeomAlgoAPI
+ ModuleBase
+ ${QT_LIBRARIES}
+)
+
+ADD_DEFINITIONS(-DGDMLPLUGIN_EXPORTS)
+ADD_LIBRARY(GDMLPlugin MODULE ${PROJECT_SOURCES} ${PROJECT_HEADERS} ${XML_RESOURCES})
+TARGET_LINK_LIBRARIES(GDMLPlugin ${PROJECT_LIBRARIES})
+
+INSTALL(TARGETS GDMLPlugin DESTINATION ${SHAPER_INSTALL_PLUGIN_FILES})
+INSTALL(FILES ${XML_RESOURCES} DESTINATION ${SHAPER_INSTALL_XML_RESOURCES})
+INSTALL(DIRECTORY icons/ DESTINATION ${SHAPER_INSTALL_XML_RESOURCES}/icons/GDML)
+
+ADD_UNIT_TESTS()
+
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLPlugin.h
+// Created: 23 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GDMLPLUGIN_H
+#define GDMLPLUGIN_H
+
+#if defined GDMLPLUGIN_EXPORTS
+#if defined WIN32
+#define GDMLPLUGIN_EXPORT __declspec( dllexport )
+#else
+#define GDMLPLUGIN_EXPORT
+#endif
+#else
+#if defined WIN32
+#define GDMLPLUGIN_EXPORT __declspec( dllimport )
+#else
+#define GDMLPLUGIN_EXPORT
+#endif
+#endif
+
+#endif // GDMLPLUGIN_H
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLPlugin_ConeSegment.cpp
+// Created: 23 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#include <GDMLPlugin_ConeSegment.h>
+
+#include <ModelAPI_Data.h>
+#include <ModelAPI_ResultBody.h>
+#include <ModelAPI_AttributeDouble.h>
+#include <ModelAPI_AttributeString.h>
+
+//=================================================================================================
+GDMLPlugin_ConeSegment::GDMLPlugin_ConeSegment() // Nothing to do during instantiation
+{
+}
+
+//=================================================================================================
+void GDMLPlugin_ConeSegment::initAttributes()
+{
+ data()->addAttribute(GDMLPlugin_ConeSegment::RMIN1_ID(), ModelAPI_AttributeDouble::typeId());
+ data()->addAttribute(GDMLPlugin_ConeSegment::RMAX1_ID(), ModelAPI_AttributeDouble::typeId());
+ data()->addAttribute(GDMLPlugin_ConeSegment::RMIN2_ID(), ModelAPI_AttributeDouble::typeId());
+ data()->addAttribute(GDMLPlugin_ConeSegment::RMAX2_ID(), ModelAPI_AttributeDouble::typeId());
+ data()->addAttribute(GDMLPlugin_ConeSegment::Z_ID(), ModelAPI_AttributeDouble::typeId());
+ data()->addAttribute(GDMLPlugin_ConeSegment::STARTPHI_ID(), ModelAPI_AttributeDouble::typeId());
+ data()->addAttribute(GDMLPlugin_ConeSegment::DELTAPHI_ID(), ModelAPI_AttributeDouble::typeId());
+}
+
+//=================================================================================================
+void GDMLPlugin_ConeSegment::execute()
+{
+ double aRMin1 = real(GDMLPlugin_ConeSegment::RMIN1_ID())->value();
+ double aRMax1 = real(GDMLPlugin_ConeSegment::RMAX1_ID())->value();
+ double aRMin2 = real(GDMLPlugin_ConeSegment::RMIN2_ID())->value();
+ double aRMax2 = real(GDMLPlugin_ConeSegment::RMAX2_ID())->value();
+ double aZ = real(GDMLPlugin_ConeSegment::Z_ID())->value();
+ double aStartPhi = real(GDMLPlugin_ConeSegment::STARTPHI_ID())->value();
+ double aDeltaPhi = real(GDMLPlugin_ConeSegment::DELTAPHI_ID())->value();
+
+ std::shared_ptr<GeomAlgoAPI_ConeSegment> aConeSegmentAlgo =
+ std::shared_ptr<GeomAlgoAPI_ConeSegment>(new GeomAlgoAPI_ConeSegment(aRMin1, aRMax1,
+ aRMin2, aRMax2,
+ aZ,
+ aStartPhi, aDeltaPhi));
+
+ // Check with that the arguments for aConeSegmentAlgo are correct
+ if (!aConeSegmentAlgo->check()){
+ setError(aConeSegmentAlgo->getError());
+ return;
+ }
+
+ aConeSegmentAlgo->build();
+
+ // Check if the creation of the cone segment went well
+ if(!aConeSegmentAlgo->isDone()) {
+ setError(aConeSegmentAlgo->getError());
+ return;
+ }
+ if (!aConeSegmentAlgo->checkValid("Cone Segment builder")) {
+ setError(aConeSegmentAlgo->getError());
+ return;
+ }
+
+ int aResultIndex = 0;
+ ResultBodyPtr aResultConeSegment = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aConeSegmentAlgo, aResultConeSegment);
+ setResult(aResultConeSegment, aResultIndex);
+}
+
+//=================================================================================================
+void GDMLPlugin_ConeSegment::loadNamingDS(
+ std::shared_ptr<GeomAlgoAPI_ConeSegment> theConeSegmentAlgo,
+ std::shared_ptr<ModelAPI_ResultBody> theResultConeSegment)
+{
+ // Load the result
+ theResultConeSegment->store(theConeSegmentAlgo->shape());
+
+ // Prepare the naming
+ theConeSegmentAlgo->prepareNamingFaces();
+
+ // Insert to faces
+ int num = 1;
+ std::map< std::string, std::shared_ptr<GeomAPI_Shape> > listOfFaces =
+ theConeSegmentAlgo->getCreatedFaces();
+ for (std::map< std::string, std::shared_ptr<GeomAPI_Shape> >::iterator
+ it=listOfFaces.begin(); it!=listOfFaces.end(); ++it) {
+ std::shared_ptr<GeomAPI_Shape> aFace = (*it).second;
+ theResultConeSegment->generated(aFace, (*it).first, num++);
+ }
+}
+
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLPlugin_ConeSegment.h
+// Created: 23 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GDMLPLUGIN_CONESEGMENT_H_
+#define GDMLPLUGIN_CONESEGMENT_H_
+
+#include <GDMLPlugin.h>
+#include <ModelAPI_Feature.h>
+#include <GeomAlgoAPI_ConeSegment.h>
+
+class GeomAPI_Shape;
+class ModelAPI_ResultBody;
+
+/**\class GDMLPlugin_ConeSegment
+ * \ingroup Plugins
+ * \brief Feature for creation of a GDML ConeSegment solid.
+ */
+class GDMLPlugin_ConeSegment : public ModelAPI_Feature
+{
+ public:
+ /// Cone segment kind
+ inline static const std::string& ID()
+ {
+ static const std::string MY_CONESEGMENT_ID("ConeSegment");
+ return MY_CONESEGMENT_ID;
+ }
+ /// attribute name of the inner radius at base of cone
+ inline static const std::string& RMIN1_ID()
+ {
+ static const std::string MY_RMIN1_ID("rmin1");
+ return MY_RMIN1_ID;
+ }
+ /// attribute name of the outer radius at base of cone
+ inline static const std::string& RMAX1_ID()
+ {
+ static const std::string MY_RMAX1_ID("rmax1");
+ return MY_RMAX1_ID;
+ }
+ /// attribute name of the inner radius at top of cone
+ inline static const std::string& RMIN2_ID()
+ {
+ static const std::string MY_RMIN2_ID("rmin2");
+ return MY_RMIN2_ID;
+ }
+ /// attribute name of the outer radius at top of cone
+ inline static const std::string& RMAX2_ID()
+ {
+ static const std::string MY_RMAX2_ID("rmax2");
+ return MY_RMAX2_ID;
+ }
+ /// attribute name of the height of the cone segment
+ inline static const std::string& Z_ID()
+ {
+ static const std::string MY_Z_ID("z");
+ return MY_Z_ID;
+ }
+ /// attribute name of the start angle of the segment
+ inline static const std::string& STARTPHI_ID()
+ {
+ static const std::string MY_STARTPHI_ID("startphi");
+ return MY_STARTPHI_ID;
+ }
+ /// attribute name of the angle of the segment
+ inline static const std::string& DELTAPHI_ID()
+ {
+ static const std::string MY_DELTAPHI_ID("deltaphi");
+ return MY_DELTAPHI_ID;
+ }
+
+ /// Returns the kind of a feature
+ GDMLPLUGIN_EXPORT virtual const std::string& getKind()
+ {
+ static std::string MY_KIND = GDMLPlugin_ConeSegment::ID();
+ return MY_KIND;
+ }
+
+ /// Creates a new part document if needed
+ GDMLPLUGIN_EXPORT virtual void execute();
+
+ /// Request for initialization of data model of the feature: adding all attributes
+ GDMLPLUGIN_EXPORT virtual void initAttributes();
+
+ /// Use plugin manager for features creation
+ GDMLPlugin_ConeSegment();
+
+ private:
+ /// Load Naming data structure of the feature to the document
+ void loadNamingDS(std::shared_ptr<GeomAlgoAPI_ConeSegment> theConeSegmentAlgo,
+ std::shared_ptr<ModelAPI_ResultBody> theResultConeSegment);
+
+};
+
+#endif // GDMLPLUGIN_CONESEGMENT_H_
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLPlugin_Plugin.cpp
+// Created: 23 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#include <ModelAPI_Session.h>
+
+#include <GDMLPlugin_Plugin.h>
+
+#include <GDMLPlugin_ConeSegment.h>
+
+// the only created instance of this plugin
+static GDMLPlugin_Plugin* MY_GDML_INSTANCE = new GDMLPlugin_Plugin();
+
+GDMLPlugin_Plugin::GDMLPlugin_Plugin()
+{
+ // register this plugin
+ ModelAPI_Session::get()->registerPlugin(this);
+}
+
+FeaturePtr GDMLPlugin_Plugin::createFeature(std::string theFeatureID)
+{
+ if (theFeatureID == GDMLPlugin_ConeSegment::ID()) {
+ return FeaturePtr(new GDMLPlugin_ConeSegment);
+ }
+ // feature of such kind is not found
+ return FeaturePtr();
+}
+
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GDMLPlugin_Plugin.h
+// Created: 23 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GDMLPLUGIN_PLUGIN_H_
+#define GDMLPLUGIN_PLUGIN_H_
+
+#include "GDMLPlugin.h"
+#include <ModelAPI_Plugin.h>
+#include <ModelAPI_Feature.h>
+
+/**\class GDMLPlugin_Plugin
+ * \ingroup Plugins
+ * \brief The main class managing GDML Features as plugins.
+ */
+class GDMLPLUGIN_EXPORT GDMLPlugin_Plugin : public ModelAPI_Plugin
+{
+ public:
+ /// Creates the feature object of this plugin by the feature string ID
+ virtual FeaturePtr createFeature(std::string theFeatureID);
+
+ public:
+ /// Default constructor
+ GDMLPlugin_Plugin();
+};
+
+#endif // GDMLPLUGIN_PLUGIN_H_
--- /dev/null
+<!-- Copyright (C) 2015-2016 CEA/DEN, EDF R&D -->
+
+<!-- File: conesegment_widget.xml -->
+<!-- Created: 07 Apr 2016 -->
+<!-- Author: CEA (delegation to Alyotech) -->
+
+<source>
+ <groupbox title="Base face">
+ <doublevalue
+ id="rmin1"
+ label="rmin1"
+ step="1.0"
+ default="7.0"
+ tooltip="Enter the lower face inner radius">
+ </doublevalue>
+ <doublevalue
+ id="rmax1"
+ label="rmax1"
+ step="1.0"
+ default="11.0"
+ tooltip="Enter the lower face outer radius">
+ </doublevalue>
+ </groupbox>
+ <groupbox title="Top face">
+ <doublevalue
+ id="rmin2"
+ label="rmin2"
+ step="1.0"
+ default="5.0"
+ tooltip="Enter the higher face inner radius">
+ </doublevalue>
+ <doublevalue
+ id="rmax2"
+ label="rmax2"
+ step="1.0"
+ default="8.0"
+ tooltip="Enter the higher face outer radius">
+ </doublevalue>
+ </groupbox>
+ <groupbox title="Crop">
+ <doublevalue
+ id="z"
+ label="z"
+ step="1.0"
+ default="12.0"
+ tooltip="Enter the height">
+ <validator id="GeomValidators_Positive"/>
+ </doublevalue>
+ <doublevalue
+ id="startphi"
+ label="startphi"
+ step="15.0"
+ default="0."
+ tooltip="Enter the starting angle">
+ </doublevalue>
+ <doublevalue
+ id="deltaphi"
+ label="deltaphi"
+ step="15.0"
+ default="270."
+ tooltip="Enter the revolution angle">
+ <validator id="GeomValidators_Positive"/>
+ </doublevalue>
+ </groupbox>
+ <label title="" icon="icons/GDML/gui_cone_segment.png"/>
+</source>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg2985"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="dessin.svg">
+ <defs
+ id="defs2987" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.197802"
+ inkscape:cx="2.0873764"
+ inkscape:cy="7.5275175"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showborder="true"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="1033"
+ inkscape:window-height="818"
+ inkscape:window-x="442"
+ inkscape:window-y="72"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2993"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2990">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="fill:#b7d9ea;fill-opacity:0;stroke:#1b4955;stroke-width:0.72416042999999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:3.29999999999999982"
+ id="path2999"
+ sodipodi:cx="10"
+ sodipodi:cy="4"
+ sodipodi:rx="2.5771508"
+ sodipodi:ry="1"
+ d="M 12.526438,3.8025952 A 2.5771508,1 0 1 1 7.4861101,3.779793"
+ sodipodi:start="6.0844754"
+ sodipodi:end="9.6468046"
+ transform="matrix(1.1825725,0,0,-1.032007,-3.8265977,7.8174475)"
+ sodipodi:open="true" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#b7d9ea;fill-opacity:0;stroke:#1b4955;stroke-width:0.26987207000000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:3.29999999999999982"
+ id="path2999-5"
+ sodipodi:cx="10"
+ sodipodi:cy="4"
+ sodipodi:rx="2"
+ sodipodi:ry="1"
+ d="M 11.716367,3.4866567 A 2,1 0 1 1 8.4680645,3.357121"
+ sodipodi:start="5.7441093"
+ sodipodi:end="10.123029"
+ transform="matrix(3.1993882,0,0,-2.7466112,-23.901843,14.300651)"
+ sodipodi:open="true" />
+ <path
+ style="fill:#b7d9ea;stroke:#1b4955;stroke-width:0.85904389999999986;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+ d="M 1.681441,3.2120623 0.46004907,13.723473"
+ id="path3918"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:1.10663950000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 14.495349,3.3590323 15.003806,14.003806"
+ id="path3938"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 11.991921,5.6392928 0.398414,6.9125432"
+ id="path3940"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.96687031000000001px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.301983,12.983435 2.714582,1.03313"
+ id="path3942"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 11,4 1,2"
+ id="path3944"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;stroke:#1b4955;stroke-width:0.80000000000000004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+ d="M 5.0481804,3.7716216 3.2336797,4.9605892"
+ id="path3946"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 10,4 1,9"
+ id="path3948"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;stroke:#1b4955;stroke-width:0.84762846999999986;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+ d="M 4.8713879,4.0154481 4.1286121,14.641002"
+ id="path3950"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;stroke:#1b4955;stroke-width:0.87382132000000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+ d="M 3.4090568,5.0787586 2.482878,15.384055"
+ id="path3952"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;stroke:#1b4955;stroke-width:0.75108206000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+ d="M 2.4200757,15.65383 4.1082613,14.799173"
+ id="path3954"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#1b4955;stroke-width:0.99581575000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:3.29999999999999982"
+ id="path3956"
+ sodipodi:cx="-1.5"
+ sodipodi:cy="16.5"
+ sodipodi:rx="2.5"
+ sodipodi:ry="1.5"
+ d="M -0.72754819,17.926602 A 2.5,1.5 0 0 1 -3.7857499,15.892443"
+ sodipodi:start="1.2566752"
+ sodipodi:end="3.5586128"
+ transform="matrix(0.64289672,0,0,1.0038776,2.9560751,-2.3816378)"
+ sodipodi:open="true" />
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg3906"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ width="16"
+ height="16"
+ sodipodi:docname="cone_segment.png">
+ <metadata
+ id="metadata3912">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs3910" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="640"
+ inkscape:window-height="480"
+ id="namedview3908"
+ showgrid="false"
+ inkscape:zoom="14.75"
+ inkscape:cx="8"
+ inkscape:cy="8"
+ inkscape:window-x="158"
+ inkscape:window-y="246"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg3906" />
+ <image
+ width="16"
+ height="16"
+ xlink:href="file:///export/home/cgenraul/SHAPER-CEA-FD20_64/SOURCES/SHAPER/src/GDMLPlugin/icons/cone_segment.png"
+ id="image3914"
+ x="0"
+ y="0" />
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg4157"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ viewBox="0 0 16 16"
+ sodipodi:docname="cone_segment_20161130_bis.svg"
+ inkscape:export-filename="/export/home/cgenraul/SHAPER-CEA-FD20_64/SOURCES/SHAPER/src/GDMLPlugin/icons/cone_segment.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4159" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="36.390891"
+ inkscape:cx="20.659746"
+ inkscape:cy="7.9830251"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:snap-others="false"
+ inkscape:snap-nodes="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:snap-text-baseline="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-page="false"
+ inkscape:snap-grids="false"
+ inkscape:object-paths="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1110"
+ inkscape:window-x="-2"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-midpoints="false"
+ inkscape:showpageshadow="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4705"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4162">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-16)">
+ <path
+ style="fill:#b7d9ea;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+ d="m 3.0007101,2.1560876 c 0.025661,-0.029382 0.047601,-0.1138065 0.076983,-0.088146 0.029382,0.025661 -0.1118748,0.1055913 -0.076983,0.088146 0.052305,-0.026152 0.084603,-0.081291 0.131942,-0.1156249 0.00741,-0.00538 0.019287,0.0041 0.027479,0 0.023173,-0.011586 0.033402,-0.040588 0.054959,-0.054959 0.017042,-0.011361 0.037917,-0.016118 0.054959,-0.027479 0.021557,-0.014371 0.031786,-0.043373 0.054959,-0.054959 0.00819,-0.0041 0.01832,0 0.027479,0 0.01832,-0.00916 0.037917,-0.016118 0.054959,-0.027479 0.021557,-0.014371 0.036639,-0.036639 0.054959,-0.054959 0.036639,-0.036639 0.073278,-0.073278 0.1099176,-0.1099176 0.00916,-0.00916 0.01832,-0.01832 0.027479,-0.027479 0.00916,-0.00916 0.015893,-0.021686 0.027479,-0.027479 0.016386,-0.00819 0.038573,0.00819 0.054959,0 0.027041,-0.01352 0.082877,-0.096397 0.1099176,-0.1099177 0.080867,-0.040433 -0.036179,0.063658 0.054959,-0.027479 0.033956,-0.033956 0.014525,-0.027479 0.054959,-0.027479 0.00916,0 0.036639,0 0.027479,0 -0.1053368,0 -0.050294,0.00819 0.054959,-0.054959 0.011108,-0.00666 0.015893,-0.021686 0.027479,-0.027479 0.016386,-0.00819 0.038573,0.00819 0.054959,0 0.011586,-0.00579 0.015893,-0.021686 0.027479,-0.027479 0.00819,-0.0041 0.01832,0 0.027479,0 0.01832,0 0.037579,0.00579 0.054959,0 0.012289,-0.0041 0.015893,-0.021686 0.027479,-0.027479 0.00819,-0.0041 0.01832,0 0.027479,0 0.01832,-0.00916 0.037917,-0.016118 0.054959,-0.027479 0.078633,-0.052422 -0.042088,-0.00515 0.082438,-0.054959 0.014301,-0.064265 0.077767,-0.016763 0.1099176,-0.027479 0.019431,-0.00648 0.035088,-0.022512 0.054959,-0.027479 0.017773,-0.00444 0.038573,0.00819 0.054959,0 0.023173,-0.011586 0.034232,-0.039414 0.054959,-0.054959 0.067696,-0.050772 0.078808,-0.011925 0.1099176,-0.027479 0.011586,-0.00579 0.015893,-0.021686 0.027479,-0.027479 0.00819,-0.0041 0.01832,0 0.027479,0 0.022464,0 0.1784284,0.00464 0.1923558,0 0.1018691,-0.033956 -0.033496,-0.027479 0.054959,-0.027479 0.017716,0 0.1040133,0.00394 0.1099176,0 0.021557,-0.014371 0.031786,-0.043373 0.054959,-0.054959 0.016386,-0.00819 0.037579,0.00579 0.054959,0 0.012289,-0.0041 0.015893,-0.021686 0.027479,-0.0274795 0.00819,-0.004096 0.019287,0.004096 0.027479,0 0.011586,-0.005793 0.01519,-0.023383 0.027479,-0.0274794 0.017379,-0.005793 0.036639,0 0.054959,0 0.00916,0 0.019287,0.004096 0.027479,0 0.011586,-0.005793 0.015893,-0.0216862 0.027479,-0.0274794 0.00819,-0.004096 0.01832,0 0.027479,0 0.027479,0 0.055492,0.005389 0.082438,0 0.1105805,-0.0221161 0.012626,-0.0200525 0.082438,-0.0549588 0.00817,-0.004087 0.1533169,0 0.1648765,0 0.1190774,0 0.2381548,0 0.3572322,0 0.1099176,0 0.2198353,0 0.3297529,0 0.025881,0 0.121765,0.005211 0.137397,0 0.012289,-0.004096 0.015893,-0.0216862 0.027479,-0.0274794 0.00819,-0.004096 0.01832,0 0.027479,0 0.00916,0 0.01832,0 0.027479,0 0.036639,0 0.073278,0 0.1099176,0 0.1282372,0 0.2564745,0 0.3847117,0 0.1007578,0 0.2015156,0 0.3022734,0 0.018975,0 0.1015629,0.004177 0.1099176,0 0.011586,-0.005793 0.015893,-0.0216862 0.027479,-0.0274794 0.018211,-0.009106 0.086887,0.007677 0.1099177,0 0.019431,-0.006477 0.035088,-0.0225118 0.054959,-0.0274794 0.026659,-0.006665 0.054959,0 0.082438,0 0.054959,0 0.1099176,0 0.1648764,0 0.00568,0 0.1622332,0.001762 0.1648764,0 0.021557,-0.0143711 0.033402,-0.0405877 0.054959,-0.0549588 0.00762,-0.005081 0.01832,0 0.027479,0 0.00916,0 0.01832,0 0.02748,0 0.036639,0 0.073278,0 0.1099176,0 0.01832,0 0.037579,0.005793 0.054959,0 0.019431,-0.006477 0.035528,-0.0210024 0.054959,-0.0274794 0.015504,-0.005168 0.064381,0 0.082438,0 0.045799,0 0.091598,0 0.137397,0 0.00653,0 0.1037587,-0.003079 0.1099176,0 0.011586,0.005793 0.01519,0.023383 0.027479,0.0274794 0.017379,0.005793 0.036639,0 0.054959,0 0.00916,0 0.019287,-0.004096 0.02748,0 0.011586,0.005793 0.015893,0.0216862 0.027479,0.0274794 0.00819,0.004096 0.01832,0 0.027479,0 0.01832,0 0.037579,-0.005793 0.054959,0 0.012289,0.004096 0.015893,0.0216862 0.027479,0.0274794 0.016386,0.008193 0.037186,-0.004443 0.054959,0 0.028101,0.007025 0.054337,0.0204542 0.082438,0.0274794 0.017773,0.004443 0.038573,-0.008193 0.054959,0 0.02954,0.0147697 0.052899,0.0401891 0.082438,0.0549588 0.016386,0.008193 0.037186,-0.004443 0.054959,0 0.028101,0.007025 0.054337,0.0204541 0.082438,0.0274794 0.017773,0.004443 0.036639,0 0.054959,0 0.027479,0 0.054959,0 0.082438,0 0.01832,0 0.037579,-0.005793 0.054959,0 0.012289,0.004096 0.01519,0.023383 0.027479,0.0274794 0.0292,0.009733 0.080718,-0.009733 0.1099176,0 0.019431,0.006477 0.035528,0.0210025 0.054959,0.0274794 0.015504,0.005168 0.064382,0 0.082439,0 0.0068,0 0.107657,-0.001507 0.109917,0 0.02156,0.0143711 0.0334,0.0405877 0.05496,0.0549589 0.0095,0.00635 0.146414,-0.00615 0.164876,0 0.01229,0.0041 0.01589,0.021686 0.02748,0.027479 0.01639,0.00819 0.03758,-0.00579 0.05496,0 0.01943,0.00648 0.03553,0.021002 0.05496,0.027479 0.01738,0.00579 0.03857,-0.00819 0.05496,0 0.01159,0.00579 0.01519,0.023383 0.02748,0.027479 0.01738,0.00579 0.03857,-0.00819 0.05496,0 0.02317,0.011586 0.03664,0.036639 0.05496,0.054959 0.0092,0.00916 0.01491,0.024338 0.02748,0.027479 0.02666,0.00666 0.05496,0 0.08244,0 0.0092,0 0.01929,-0.0041 0.02748,0 0.01159,0.00579 0.01589,0.021686 0.02748,0.027479 0.01638,0.00819 0.03857,-0.00819 0.05496,0 0.01159,0.00579 0.01589,0.021686 0.02748,0.027479 0.01743,0.00872 0.119546,-0.00893 0.137397,0 0.02317,0.011586 0.03038,0.046766 0.05496,0.054959 0.01477,0.00492 0.08665,0 0.109917,0 0.0916,0 0.183196,0 0.274794,0 0.02748,0 0.05637,-0.00869 0.08244,0 0.01229,0.0041 0.01589,0.021686 0.02748,0.027479 0.01621,0.00811 0.06354,-0.0063 0.08244,0 0.01943,0.00648 0.03553,0.021002 0.05496,0.027479 0.0087,0.0029 0.01929,-0.0041 0.02748,0 0.01159,0.00579 0.01519,0.023383 0.02748,0.027479 0.01738,0.00579 0.03664,0 0.05496,0 0.0092,0 0.01986,-0.00508 0.02748,0 0.02156,0.014371 0.0309,0.045337 0.05496,0.054959 0.02551,0.010206 0.05578,-0.00666 0.08244,0 0.01257,0.00314 0.01589,0.021686 0.02748,0.027479 0.0082,0.0041 0.01832,0 0.02748,0 0.01832,0 0.03758,-0.00579 0.05496,0 0.01229,0.0041 0.01589,0.021686 0.02748,0.027479 0.0082,0.0041 0.01929,-0.0041 0.02748,0 0.01159,0.00579 0.01519,0.023383 0.02748,0.027479 0.01738,0.00579 0.03857,-0.00819 0.05496,0 0.178937,0.089469 -0.05478,0.02754 0.109917,0.082438 0.0292,0.00973 0.08072,-0.00973 0.109918,0 0.199045,0.066348 -0.04332,-0.00792 0.08244,0.054959 0.0082,0.0041 0.01929,-0.0041 0.02748,0 0.04377,0.021884 0.01119,0.033074 0.05496,0.054959 0.0082,0.0041 0.01929,-0.0041 0.02748,0 0.01159,0.00579 0.01589,0.021686 0.02748,0.027479 0.0082,0.0041 0.01929,-0.0041 0.02748,0 0.05889,0.029448 -0.0039,0.025511 0.05496,0.054959 0.0082,0.0041 0.01986,-0.00508 0.02748,0 0.03233,0.021557 0.05496,0.054959 0.08244,0.082438 0.0458,0.045799 0.0916,0.091598 0.137397,0.137397 0.01832,0.01832 0.0334,0.040588 0.05496,0.054959 0.01704,0.011361 0.04048,0.012997 0.05496,0.027479 0.0065,0.00648 -0.0041,0.019287 0,0.027479 0.01159,0.023173 0.04677,0.030381 0.05496,0.054959 0.0058,0.01738 -0.0058,0.037579 0,0.054959 0.0041,0.012289 0.01832,0.01832 0.02748,0.027479 0.01616,0.016162 0.103555,0.097193 0.109917,0.1099177 0.0082,0.016386 -0.0082,0.038573 0,0.054959 0.01159,0.023173 0.04059,0.033402 0.05496,0.054959 0.09962,0.1992416 -0.02897,-0.043449 0.05496,0.082438 0.0675,0.0098 0.01141,0.058337 0.02748,0.082438 0.01437,0.021557 0.03664,0.036639 0.05496,0.054959 0.0092,0.00916 0.02338,0.01519 0.02748,0.027479 0.0058,0.017379 -0.0044,0.037186 0,0.054959 -0.01656,0.049736 0.04452,0.051107 0.05496,0.082438 0.0058,0.017379 -0.0044,0.037186 0,0.054959 -0.01656,0.049736 0.04451,0.051107 0.05496,0.082438 0.0042,0.012569 -0.0061,0.09769 0,0.1099176 0.0058,0.011586 0.02338,0.01519 0.02748,0.027479 0.01229,0.03686 -0.0098,0.098252 0,0.137397 0.007,0.028101 0.02045,0.054337 0.02748,0.082438 0.0054,0.021651 0,0.091992 0,0.1099176 0,0.00916 0,0.01832 0,0.027479 0,0.00916 0.0041,0.019287 0,0.027479 -0.02328,0.046559 -0.09811,0.056248 -0.137397,0.082438 -0.02156,0.014371 -0.03179,0.043372 -0.05496,0.054959 -0.0082,0.0041 -0.01929,-0.0041 -0.02748,0 -0.01159,0.00579 -0.0167,0.020294 -0.02748,0.027479 -0.01704,0.011361 -0.03792,0.016118 -0.05496,0.027479 -0.02371,0.015808 -0.06097,0.060974 -0.08244,0.082438 -0.0092,0.00916 -0.02338,0.01519 -0.02748,0.027479 -0.0058,0.01738 0,0.036639 0,0.054959 0,0.00916 0.0041,0.019287 0,0.027479 -0.0058,0.011586 -0.01832,0.01832 -0.02748,0.027479 -0.0092,0.00916 -0.01832,0.01832 -0.02748,0.027479 -0.01447,0.014467 -0.06776,0.0751 -0.08244,0.082438 -0.0082,0.0041 -0.01929,-0.0041 -0.02748,0 -0.02317,0.011586 -0.03179,0.043373 -0.05496,0.054959 -0.0082,0.0041 -0.01929,-0.0041 -0.02748,0 -0.01159,0.00579 -0.01589,0.021686 -0.02748,0.027479 -0.0082,0.0041 -0.01929,-0.0041 -0.02748,0 -0.02099,0.010496 -0.06383,0.076236 -0.08244,0.082438 -0.01738,0.00579 -0.03758,-0.00579 -0.05496,0 -0.02458,0.00819 -0.03179,0.043373 -0.05496,0.054959 -0.0082,0.0041 -0.01929,-0.0041 -0.02748,0 -0.03298,0.016488 -0.04946,0.065951 -0.08244,0.082438 -0.0082,0.0041 -0.01929,-0.0041 -0.02748,0 -0.02317,0.011586 -0.03423,0.039414 -0.05496,0.054959 -0.02642,0.019816 -0.05602,0.035143 -0.08244,0.054959 -0.01036,0.00777 -0.0167,0.020294 -0.02748,0.027479 -0.01384,0.060542 -0.05653,0.014525 -0.08244,0.027479 -0.01159,0.00579 -0.01589,0.021686 -0.02748,0.027479 -0.01727,0.00864 -0.09265,-0.00864 -0.109918,0 -0.02317,0.011586 -0.03179,0.043373 -0.05496,0.054959 -0.01945,0.083786 -0.07614,0.01059 -0.109917,0.027479 -0.01159,0.00579 -0.01519,0.023383 -0.02748,0.027479 -0.01257,0.00419 -0.09769,-0.00611 -0.109917,0 -0.01159,0.00579 -0.01519,0.023383 -0.02748,0.027479 -0.02473,0.00824 -0.05771,-0.00824 -0.08244,0 -0.04974,-0.016563 -0.05111,0.044515 -0.08244,0.054959 -0.02063,0.00688 -0.147649,-0.00345 -0.164877,0 -0.02008,0.00402 -0.03553,0.021002 -0.05496,0.027479 -0.0087,0.0029 -0.01832,0 -0.02748,0 -0.01832,0 -0.03664,0 -0.05496,0 -0.06412,0 -0.128237,0 -0.192356,0 -0.02193,0 -0.12091,0.0055 -0.137397,0 -0.170567,-0.056856 0.09133,0.00222 -0.137397,-0.054959 -0.05496,-0.01374 0,0.027479 -0.08244,0 -0.01229,-0.0041 -0.01589,-0.021686 -0.02748,-0.027479 -0.0082,-0.0041 -0.01929,0.0041 -0.02748,0 -0.01159,-0.00579 -0.01519,-0.023383 -0.02748,-0.027479 -0.01738,-0.00579 -0.03664,0 -0.05496,0 -0.0092,0 -0.01986,0.00508 -0.02748,0 -0.02156,-0.014371 -0.03423,-0.039414 -0.05496,-0.054959 0.0031,-0.052058 -0.06412,-0.01832 -0.08244,-0.027479 -0.01159,-0.00579 -0.01589,-0.021686 -0.02748,-0.027479 -0.0082,-0.0041 -0.01929,0.0041 -0.02748,0 -0.01159,-0.00579 -0.01589,-0.021686 -0.02748,-0.027479 -0.0082,-0.0041 -0.01929,0.0041 -0.02748,0 -0.02099,-0.010496 -0.06383,-0.076236 -0.08244,-0.082438 -0.01738,-0.00579 -0.03758,0.00579 -0.05496,0 -0.01229,-0.0041 -0.0167,-0.020294 -0.02748,-0.027479 -0.01704,-0.011361 -0.03792,-0.016118 -0.05496,-0.027479 -0.02371,-0.015808 -0.06097,-0.060975 -0.08244,-0.082438 -0.0092,-0.00916 -0.01589,-0.021686 -0.02748,-0.027479 -0.0082,-0.0041 -0.01929,0.0041 -0.02748,0 -0.01159,-0.00579 -0.02169,-0.015893 -0.02748,-0.027479 -0.0041,-0.00819 0,-0.01832 0,-0.027479 0,-0.00916 0,-0.01832 0,-0.027479 0,-0.00916 -0.0092,-0.027479 0,-0.027479 0.0092,0 0,0.036639 0,0.027479 0,-0.01832 0,-0.036639 0,-0.054959 0,-0.01832 0.0082,-0.038573 0,-0.054959 -0.0083,-0.016653 -0.07374,-0.044884 -0.05496,-0.082438 0.0058,-0.011586 0.02169,-0.015893 0.02748,-0.027479 0.0082,-0.016386 -0.0082,-0.038573 0,-0.054959 0.0058,-0.011586 0.02434,-0.014912 0.02748,-0.027479 0.0089,-0.035545 0,-0.073278 0,-0.1099176 0,-0.064119 0,-0.1282373 0,-0.1923559 0,-0.028431 0.0052,-0.1714161 0,-0.1923558 -0.01109,-0.044363 -0.02703,-0.054505 -0.05496,-0.082438 -0.0092,-0.00916 -0.02169,-0.015893 -0.02748,-0.027479 -0.0041,-0.00819 0.0041,-0.019287 0,-0.027479 -0.01159,-0.023173 -0.04059,-0.033402 -0.05496,-0.054959 -0.01136,-0.017042 -0.013,-0.040476 -0.02748,-0.054959 -0.00648,-0.00648 -0.019858,0.00508 -0.027479,0 -0.021557,-0.014371 -0.036639,-0.036639 -0.054959,-0.054959 -0.00916,-0.00916 -0.01519,-0.023383 -0.027479,-0.027479 -0.017379,-0.00579 -0.037579,0.00579 -0.054959,0 C 9.8253261,3.053099 9.8209141,3.036905 9.8101361,3.02972 9.7930941,3.018359 9.7746081,3.008718 9.7551771,3.002241 c -0.017379,-0.00579 -0.039716,0.010162 -0.054959,0 -0.021557,-0.014371 -0.031786,-0.043372 -0.054959,-0.054959 -0.016386,-0.00819 -0.037579,0.00579 -0.054959,0 -0.012289,-0.0041 -0.015893,-0.021686 -0.027479,-0.027479 -0.01453,-0.00727 -0.09653,0.00335 -0.1099176,0 -0.01987,-0.00497 -0.035528,-0.021002 -0.054959,-0.027479 -0.00869,-0.0029 -0.01832,0 -0.027479,0 -0.01832,0 -0.036639,0 -0.054959,0 -0.073278,0 -0.1465568,0 -0.2198352,0 -0.2289951,0 -0.4579901,0 -0.6869851,0 -0.3663921,0 -0.7327841,0 -1.0991762,0 -0.1282372,0 -0.2564744,0 -0.3847117,0 -0.036639,0 -0.073278,0 -0.1099176,0 -0.01832,0 -0.037186,-0.00444 -0.054959,0 -0.2776412,0.06941 0.019845,-0.00992 -0.1099176,0.054959 -0.00819,0.0041 -0.019287,-0.0041 -0.027479,0 -0.011586,0.00579 -0.015893,0.021686 -0.027479,0.027479 -0.00819,0.0041 -0.01879,-0.0029 -0.027479,0 -0.019431,0.00648 -0.035528,0.021003 -0.054959,0.02748 -0.00869,0.0029 -0.019287,-0.0041 -0.027479,0 -0.011586,0.00579 -0.015893,0.021686 -0.027479,0.027479 -0.029091,0.014545 -0.025868,-0.014545 -0.054959,0 -0.011586,0.00579 -0.01832,0.01832 -0.027479,0.027479 -0.00916,0.00916 -0.01832,0.01832 -0.027479,0.027479 -0.00916,0.00916 -0.01832,0.01832 -0.027479,0.027479 -0.00916,0.00916 -0.015893,0.021686 -0.027479,0.027479 -0.00819,0.0041 -0.019287,-0.0041 -0.027479,0 -0.032975,0.016488 -0.049463,0.065951 -0.082438,0.082438 -0.00819,0.0041 -0.01879,-0.0029 -0.027479,0 -0.1990447,0.066348 0.043324,-0.00792 -0.082438,0.054959 -0.025908,0.012954 -0.0576,0.012577 -0.082438,0.027479 -0.019014,0.011408 -0.1116708,0.1116708 -0.137397,0.137397 -0.030641,0.030641 -0.1192966,0.1102464 -0.137397,0.137397 -0.00508,0.00762 0.0029,0.01879 0,0.027479 -0.00648,0.019431 -0.021002,0.035528 -0.027479,0.054959 -0.0029,0.00869 0.0041,0.019287 0,0.027479 -0.00579,0.011586 -0.021686,0.015893 -0.02748,0.027479 -0.00409,0.00817 0,0.1533168 0,0.1648764 0,0.023028 -0.00584,0.1257178 0,0.137397 0.011586,0.023173 0.036639,0.036639 0.054959,0.054959 0.00916,0.00916 0.023383,0.01519 0.027479,0.027479 0.00579,0.01738 -0.00579,0.037579 0,0.054959 0.0041,0.012289 0.021686,0.015893 0.027479,0.027479 0.0041,0.00819 -0.0041,0.019287 0,0.027479 0.00579,0.011586 0.023383,0.01519 0.027479,0.027479 0.00579,0.01738 -0.00579,0.037579 0,0.054959 0.0041,0.012289 0.027479,0.014525 0.027479,0.027479 0,0.042963 -0.071707,0.023902 -0.082438,0.02748 -0.012289,0.0041 -0.015893,0.021686 -0.027479,0.027479 -0.00616,0.00308 -0.1033877,0 -0.1099177,0 -0.064119,0 -0.1282372,0 -0.1923558,0 -0.01468,0 -0.1295323,-0.00393 -0.137397,0 -0.011586,0.00579 -0.014912,0.024338 -0.027479,0.027479 -0.023505,0.00588 -0.1572766,0 -0.1923558,0 -0.01832,0 -0.037579,-0.00579 -0.054959,0 -0.049909,0.016636 -0.050998,0.023518 -0.082438,0.054959 -0.00916,0.00916 -0.015893,0.021686 -0.027479,0.027479 -0.00819,0.0041 -0.019287,-0.0041 -0.027479,0 -0.011586,0.00579 -0.015893,0.021686 -0.027479,0.027479 -0.025908,0.012954 -0.05653,0.014525 -0.082438,0.027479 -0.032975,0.016488 -0.049463,0.065951 -0.082438,0.082438 -0.00819,0.0041 -0.019287,-0.0041 -0.027479,0 -0.011586,0.00579 -0.015893,0.021686 -0.027479,0.027479 -0.00819,0.0041 -0.01832,0 -0.027479,0 -0.00916,0 -0.01832,0 -0.027479,0 -0.045799,0 -0.091598,0 -0.137397,0 -0.073278,0 -0.1465569,0 -0.2198353,0 -0.03151,0 -0.081452,0.00712 -0.1099176,0 -0.044363,-0.011091 -0.054505,-0.027025 -0.082438,-0.054959 -0.00916,-0.00916 -0.015893,-0.021686 -0.027479,-0.027479 -0.016386,-0.00819 -0.038573,0.00819 -0.054959,0 -0.011586,-0.00579 -0.015893,-0.021686 -0.027479,-0.027479 -0.00819,-0.0041 -0.019287,0.0041 -0.027479,0 -0.011586,-0.00579 -0.015893,-0.021686 -0.027479,-0.027479 -0.00819,-0.0041 -0.019858,0.00508 -0.027479,0 C 3.7889124,4.4931259 3.7396291,4.433601 3.7097196,4.4036915 3.6730804,4.3670523 3.6364411,4.3304131 3.5998019,4.2937738 3.5814823,4.2754542 3.5663997,4.2531861 3.5448431,4.238815 3.5278011,4.2274537 3.5069263,4.222697 3.4898843,4.2113356 3.4718311,4.1993001 3.422319,4.1338551 3.4074461,4.1288974 c -0.01738,-0.00579 -0.037579,0.00579 -0.054959,0 -0.012289,-0.0041 -0.01519,-0.023383 -0.027479,-0.027479 -0.01738,-0.00579 -0.037579,0.00579 -0.054959,0 -0.020851,-0.00695 -0.084662,-0.09729 -0.1099176,-0.1099176 -0.00819,-0.0041 -0.01832,0 -0.027479,0 -0.01832,-0.00916 -0.038573,-0.01519 -0.054959,-0.027479 C 2.9588369,3.8451646 3.0849729,3.9597143 2.9677756,3.8815828 2.9273404,3.854626 2.8982932,3.798622 2.857858,3.7716652 2.840816,3.7603038 2.8199412,3.7555471 2.8028992,3.7441858 c -0.010778,-0.00719 -0.01832,-0.01832 -0.027479,-0.027479 -0.00916,-0.00916 -0.021686,-0.015893 -0.027479,-0.027479 -0.00819,-0.016386 0.00819,-0.038573 0,-0.054959 -0.016488,-0.032975 -0.065951,-0.049463 -0.082438,-0.082438 -0.0041,-0.00819 0.0041,-0.019287 0,-0.027479 -0.00579,-0.011586 -0.021686,-0.015893 -0.027479,-0.027479 -0.0041,-0.00819 0.0041,-0.019287 0,-0.027479 -0.00579,-0.011586 -0.023383,-0.01519 -0.027479,-0.027479 -0.00579,-0.017379 0.00819,-0.038573 0,-0.054959 -0.01352,-0.027041 -0.096397,-0.082877 -0.1099176,-0.1099176 -0.00819,-0.016386 0.00579,-0.037579 0,-0.054959 -0.077845,-0.1556897 0.010241,0.040964 -0.027479,-0.1099176 0.016563,-0.049736 -0.044515,-0.051107 -0.054959,-0.082438 -0.00579,-0.017379 0.00579,-0.037579 0,-0.054959 -0.0041,-0.012289 -0.021686,-0.015893 -0.027479,-0.027479 -0.00264,-0.00529 -5.134e-4,-0.1358569 0,-0.137397 0.00669,-0.020082 0.029806,-0.069862 0.054959,-0.082438 0.00819,-0.0041 0.019287,0.0041 0.027479,0 0.023173,-0.011586 0.033402,-0.040588 0.054959,-0.054959 0.017042,-0.011361 0.037917,-0.016118 0.054959,-0.027479 0.021557,-0.014371 0.031786,-0.043372 0.054959,-0.054959 0.00819,-0.0041 0.01879,0.0029 0.027479,0 0.049909,-0.016636 0.050998,-0.023518 0.082438,-0.054959 0.063006,-0.063006 -0.011586,0.017379 0.054959,-0.082438 0.00719,-0.010778 0.021686,-0.015893 0.027479,-0.027479 0.00366,-0.00732 0,-0.152445 0,-0.1648765 0,-0.00916 -0.0041,-0.019287 0,-0.027479 0.011586,-0.023173 0.043372,-0.031786 0.054959,-0.054959 0.0041,-0.00819 -0.009,-0.025781 0,-0.027479 0.037837,-0.00714 0.076915,0.0038 0.1153727,0.00571 z"
+ id="path4122"
+ inkscape:connector-curvature="0"
+ transform="translate(0,16)" />
+ <path
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#000000;stroke-width:0.01;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 6.0211537,26.231901 c 0.072224,0.04494 0.152682,0.07877 0.216671,0.134821 0.00153,0.0013 0,0.122615 0,0.137397 0,0.03664 0,0.07328 0,0.109918 0,0.0092 -0.00222,0.01859 0,0.02748 0.00703,0.0281 0.020454,0.05434 0.027479,0.08244 0.00444,0.01777 0,0.03664 0,0.05496 0,0.02748 0,0.05496 0,0.08244 0,0.0092 0,0.01832 0,0.02748 0,0.0092 -0.0041,0.01929 0,0.02748 0.00579,0.01159 0.021686,0.01589 0.027479,0.02748 0.0041,0.0082 0,0.01832 0,0.02748 0,0.0092 0,0.01832 0,0.02748 0,0.04751 -0.00287,0.06439 0.027479,0.109917 0.00719,0.01078 0.015893,0.02169 0.027479,0.02748 0.00819,0.0041 0.01832,0 0.027479,0 0.01832,0 0.036639,0 0.054959,0 0.091598,0 0.1831961,0 0.2747941,0 0.274794,0 0.5495881,0 0.8243821,0 0.2564745,0 0.5129489,0 0.7694233,0 0.1007578,0 0.2015157,0 0.3022735,0 0.023265,0 0.095144,0.0049 0.1099176,0 0.012289,-0.0041 0.015893,-0.02169 0.027479,-0.02748 0.00819,-0.0041 0.01832,0 0.027479,0 0.00916,0 0.01832,0 0.027479,0 0.036639,0 0.073278,0 0.1099176,0 0.073278,0 0.1465568,0 0.2198353,0 0.027479,0 0.055492,0.0054 0.082438,0 0.028403,-0.0057 0.054337,-0.02045 0.082438,-0.02748 0.017773,-0.0044 0.038573,0.0082 0.054959,0 0.011586,-0.0058 0.015893,-0.02169 0.027479,-0.02748 0.00817,-0.0041 0.1533169,0 0.1648764,0 0.00916,0 0.019858,0.0051 0.027479,0 0.021557,-0.01437 0.031786,-0.04337 0.054959,-0.05496 0.021983,-0.01099 0.060455,0.01099 0.082438,0 0.011586,-0.0058 0.016701,-0.02029 0.027479,-0.02748 0.017042,-0.01136 0.040476,-0.013 0.054959,-0.02748 0.023353,-0.02335 0.040189,-0.0529 0.054959,-0.08244 0.0041,-0.0082 0,-0.01832 0,-0.02748 0,-0.0092 0,-0.01832 0,-0.02748 0,-0.03664 0,-0.07328 0,-0.109918 0,-0.100758 0,-0.201515 0,-0.302273 0,-0.201516 0,-0.403031 0,-0.604547 0,-0.07328 0,-0.146557 0,-0.219835 0,-0.0196 0.00507,-0.117112 0,-0.137397 -0.00703,-0.0281 -0.020454,-0.05434 -0.027479,-0.08244 -0.00444,-0.01777 0.00579,-0.03758 0,-0.05496 -0.00648,-0.01943 -0.021002,-0.03553 -0.02748,-0.05496 -0.0063,-0.0189 0.00811,-0.06622 0,-0.08244 -0.00579,-0.01159 -0.021686,-0.01589 -0.027479,-0.02748 -0.0041,-0.0082 0.0041,-0.01929 0,-0.02748 -0.00579,-0.01159 -0.01832,-0.01832 -0.027479,-0.02748 -0.00916,-0.0092 -0.015893,-0.02169 -0.027479,-0.02748 -0.016386,-0.0082 -0.038573,0.0082 -0.054959,0 -0.011586,-0.0058 -0.015893,-0.02169 -0.027479,-0.02748 -0.016213,-0.0081 -0.063537,0.0063 -0.082438,0 -0.1556897,-0.07784 0.040964,0.01024 -0.1099176,-0.02748 -0.1326965,-0.03317 0.00136,-0.01306 -0.082438,-0.05496 -0.015122,-0.0076 -0.1433932,0.0072 -0.1648764,0 -0.012289,-0.0041 -0.01519,-0.02338 -0.027479,-0.02748 -0.01738,-0.0058 -0.036639,0 -0.054959,0 -0.010745,0 -0.1805038,0.0039 -0.1923558,0 -0.012289,-0.0041 -0.015893,-0.02169 -0.027479,-0.02748 -0.00819,-0.0041 -0.01832,0 -0.027479,0 -0.021223,0 -0.1481115,0.0056 -0.1648764,0 -0.019431,-0.0065 -0.035088,-0.02251 -0.054959,-0.02748 -0.022346,-0.0056 -0.1361099,0 -0.1648764,0 -0.00916,0 -0.01879,0.0029 -0.02748,0 -0.1990447,-0.06635 0.043324,0.0079 -0.082438,-0.05496 -0.011736,-0.0059 -0.126534,0 -0.137397,0 -0.1190774,0 -0.2381548,0 -0.3572322,0 -0.064119,0 -0.1282373,0 -0.1923559,0 -0.00916,0 -0.01832,0 -0.027479,0 -0.00916,0 -0.019287,-0.0041 -0.027479,0 -0.011586,0.0058 -0.01519,0.02338 -0.027479,0.02748 -0.024731,0.0082 -0.057707,-0.0082 -0.082438,0 -0.038862,0.01295 -0.071056,0.042 -0.1099176,0.05496 -0.017379,0.0058 -0.038573,-0.0082 -0.054959,0 -0.02954,0.01477 -0.052899,0.04019 -0.082438,0.05496 -0.016386,0.0082 -0.037579,-0.0058 -0.054959,0 -0.019431,0.0065 -0.035528,0.021 -0.054959,0.02748 -0.017379,0.0058 -0.038573,-0.0082 -0.054959,0 -0.011586,0.0058 -0.015893,0.02169 -0.027479,0.02748 -0.00819,0.0041 -0.01879,-0.0029 -0.027479,0 -0.019431,0.0065 -0.036639,0.01832 -0.054959,0.02748 -0.01832,0.0092 -0.037917,0.01612 -0.054959,0.02748 -0.021557,0.01437 -0.031786,0.04337 -0.054959,0.05496 -0.016386,0.0082 -0.038573,-0.0082 -0.054959,0 -0.011586,0.0058 -0.01832,0.01832 -0.027479,0.02748 -0.027479,0 -0.055779,-0.0067 -0.082438,0 -0.012567,0.0031 -0.015893,0.02169 -0.027479,0.02748 -0.00819,0.0041 -0.019287,-0.0041 -0.027479,0 -0.023173,0.01159 -0.031786,0.04337 -0.054959,0.05496 -0.00819,0.0041 -0.019287,-0.0041 -0.027479,0 -0.011586,0.0058 -0.01519,0.02338 -0.027479,0.02748 -0.034759,0.01159 -0.075159,-0.01159 -0.1099177,0 -0.012289,0.0041 -0.015893,0.02169 -0.027479,0.02748 -0.00819,0.0041 -0.01832,0 -0.027479,0 -0.00916,0 -0.01832,0 -0.027479,0 -0.027466,0 -0.1138874,-0.0059 -0.137397,0 -0.028101,0.007 -0.054337,0.02045 -0.082438,0.02748 -0.00889,0.0022 -0.01832,0 -0.027479,0 -0.046839,0 -0.049166,-0.0029 -0.1099176,0.02748 -0.023173,0.01159 -0.03038,0.04677 -0.054959,0.05496 -0.017379,0.0058 -0.037579,-0.0058 -0.054959,0 -0.012289,0.0041 -0.01832,0.01832 -0.027479,0.02748 -0.00916,0.0092 -0.021686,0.01589 -0.027479,0.02748 -0.0041,0.0082 0.0041,0.01929 0,0.02748 -0.00579,0.01159 -0.021686,0.01589 -0.027479,0.02748 -0.0041,0.0082 0,0.01832 0,0.02748 0,0.0092 0,0.01832 0,0.02748 0,0.0065 -0.00308,0.103758 0,0.109917 0.00579,0.01159 0.01832,0.01832 0.027479,0.02748 0.00916,0.0092 0.015893,0.02169 0.027479,0.02748 0.037904,0.01895 0.02458,-0.03328 0.054959,0.02748 0.0041,0.0082 -0.0029,0.01879 0,0.02748 0.00648,0.01943 0.022512,0.03509 0.027479,0.05496 0.00444,0.01777 0,0.03664 0,0.05496 0,0.0092 -0.0041,0.01929 0,0.02748 0.011586,0.02317 0.046766,0.03038 0.054959,0.05496 0.00869,0.02607 0,0.05496 0,0.08244 0,0.0092 0.0041,0.01929 0,0.02748 -0.00579,0.01159 -0.029811,0.01474 -0.027479,0.02748 0.00909,0.0497 0.038749,0.09332 0.058123,0.139973 z"
+ id="path3903"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 5.8647996,18.952636 c 0.1100274,-0.06233 0.2199078,-0.134133 0.3300823,-0.187024 0.055934,-0.02686 0.1234287,0 0.1784406,0 0.109047,0 0.2180942,0 0.3271411,0 0.3469677,0 0.6939355,0 1.0409032,0 0.1090471,0 0.2180941,0 0.3271411,0 0.029375,0 0.1369758,0.03402 0.1487005,0 0.03197,-0.0927 0.057251,-0.252241 0.08922,-0.344943 0.00886,-0.02573 0.019828,0 0.029739,0 0.0099,0 0.019828,0 0.029739,0 0.059481,0 0.1189604,0 0.1784407,0 0.1883539,0 0.3767077,0 0.5650618,0 0.1288738,0 0.2577476,0 0.3866211,0 0.034425,0 0.1221491,-0.03847 0.1487005,0 0.021504,0.03119 0.03845,0.131817 0.059481,0.172469 0.0094,0.0182 0.019828,0 0.029739,0 0.019828,0.05749 0.03845,0.131816 0.059481,0.172468 0.01881,0.03634 0.041745,-0.0514 0.059481,0 0.041281,0.119697 0.029739,0.306883 0.029739,0.517412 0,0.862355 0,1.724709 0,2.587064 0,0.287458 0,0.574916 0,0.862355 0,0.05774 0,0.114983 0,0.172474 0,0.05774 -0.00444,0.121072 0,0.172475 0.00627,0.07274 0.023471,0.09973 0.029739,0.172475 0.00392,0.04519 0,0.599707 0,0.689886 0,0.459933 0,0.919847 0,1.379767 0,0.229966 0,0.459932 0,0.689886 0,0.05774 0,0.114983 0,0.172475 0,0.05774 0.00444,0.121071 0,0.172474 -0.00627,0.07274 -0.0172,0.136135 -0.029739,0.172475 -0.00886,0.02573 -0.019828,0 -0.029739,0 -0.0099,0 -0.019828,0 -0.029739,0 -0.0099,0 -0.019828,0 -0.029739,0 -0.0099,0 -0.020873,0.02573 -0.029739,0 -0.02508,-0.07274 -0.034401,-0.272206 -0.059481,-0.344949 -0.00886,-0.02573 -0.020873,0.02573 -0.029739,0 -0.012538,-0.0364 -0.0172,-0.136135 -0.029739,-0.172475 -0.00886,-0.02573 -0.019828,0 -0.029739,0 -0.019828,0 -0.040246,0.02762 -0.059481,0 -0.021504,-0.03138 -0.03845,-0.131804 -0.059481,-0.172475 -0.0094,-0.0182 -0.020122,0.01381 -0.029739,0 -0.030413,-0.04393 -0.058807,-0.128352 -0.08922,-0.172475 -0.034192,-0.04958 -0.088422,0.08856 -0.1189603,0 -0.02508,-0.07274 -0.036151,-0.254758 -0.059481,-0.344949 -0.00825,-0.03201 -0.019828,0 -0.029739,0 -0.019828,0 -0.039653,0 -0.059481,0 -0.069394,0 -0.1387871,0 -0.2081807,0 -0.039653,0 -0.079306,0 -0.1189603,0 -0.019828,0 -0.040246,-0.02762 -0.059481,0 -0.030412,0.04394 -0.058807,0.128352 -0.08922,0.172475 -0.019235,0.02762 -0.040246,-0.02762 -0.059481,0 -0.030413,0.04393 -0.058807,0.128352 -0.08922,0.172474 -0.039403,0.05712 -0.1078,-0.059 -0.1487004,0 -0.013602,0.01946 -0.0172,0.136135 -0.029739,0.172475 -0.010977,0.03201 -0.1525348,0 -0.1784405,0 -0.1387871,0 -0.2775742,0 -0.4163614,0 -0.029739,0 -0.059481,0 -0.08922,0 -0.0099,0 -0.020336,-0.0182 -0.029739,0 -0.2154199,0.416437 0.046888,-0.04958 -0.08922,0.34495 -0.016367,0.0477 -0.15519,-0.04519 -0.1784405,0 -0.013301,0.02573 -0.0172,0.136134 -0.029739,0.172474 -0.00886,0.02573 -0.019828,0 -0.029739,0 -0.0099,0 -0.019828,0 -0.029739,0 -0.029726,0 -0.1232569,-0.03703 -0.1487004,0 -0.030412,0.04394 -0.058807,0.128352 -0.08922,0.172475 -0.019235,0.02762 -0.039653,0 -0.059481,0 -0.049567,0 -0.099134,0 -0.1487004,0 -0.1487006,0 -0.297401,0 -0.4461014,0 -0.00541,0 -0.1960163,-0.02322 -0.2081807,0 -0.013301,0.02573 -0.01644,0.146742 -0.029739,0.172475 -0.017685,0.03389 -0.1433113,0 -0.1784405,0 -0.0099,0 -0.019828,0 -0.029739,0 -0.019828,0 -0.059481,0.114983 -0.059481,0 0,-0.114983 0.0735,-0.08128 0.059481,0 -0.031348,0.181826 -0.075951,0.282562 -0.1189604,0.344949 -0.00961,0.01381 0,-0.114983 0,-0.172475 0,-0.172474 -0.0094,-0.353799 0,-0.517424 0.00444,-0.07714 0.021964,-0.104815 0.029739,-0.172474 0.024612,-0.214087 0.049808,-0.637975 0.059481,-0.862355 0.0048,-0.111531 -0.00627,-0.235866 0,-0.34495 0.00701,-0.12195 0.022729,-0.222999 0.029739,-0.344949 0.02951,-0.513407 -0.07042,0.353862 0.029739,-0.517424 0.00778,-0.06766 0.023471,-0.09973 0.029739,-0.172475 0.00878,-0.10174 -0.00682,-0.398801 0,-0.517424 0.00701,-0.12195 0.022729,-0.223 0.029739,-0.344949 0.00559,-0.09728 0,-0.404073 0,-0.517425 0,-0.344949 0,-0.689886 0,-1.034829 0,-0.0408 0.00333,-0.651224 0,-0.68988 -0.00627,-0.07274 -0.025307,-0.09534 -0.029739,-0.172475 -0.00618,-0.107389 0.00723,-0.782306 0,-0.862355 -0.026732,-0.295931 -0.061442,-0.565187 -0.092161,-0.847804 z"
+ id="path3901"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.95999995;fill:none;stroke:#1b4955;stroke-width:0.55289942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4170-9-0-2"
+ sodipodi:type="arc"
+ sodipodi:cx="7.7867246"
+ sodipodi:cy="28.901749"
+ sodipodi:rx="1.7207294"
+ sodipodi:ry="0.38405609"
+ sodipodi:start="2.5307274"
+ sodipodi:end="6.8940505"
+ d="m 6.3771856,29.122034 a 1.7207294,0.38405609 0 1 1 2.819078,0"
+ transform="matrix(1.5488179,0,0,1.3517219,-4.2559533,-11.572959)"
+ sodipodi:open="true" />
+ <path
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#1b4955;stroke-width:0.09596665;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 4.600876,20.747816 3.904613,31.230425 6.0668854,30.349207 5.9373083,20.345849 z"
+ id="path3859"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#1b4955;stroke-width:0.09519828;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 10.753886,20.702278 2.356406,-0.775923 2.243459,9.926403 -3.216644,1.561092 z"
+ id="path3770"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#1b4955;stroke-width:0.02126046;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="M 10.650042,30.371125 9.7023562,29.912064 9.684568,29.797974 C 9.674778,29.735224 9.638246,29.631473 9.603376,29.567416 L 9.539969,29.450952 9.730382,24.822175 c 0.1047318,-2.545826 0.1941823,-4.634445 0.1987872,-4.641373 0.012688,-0.01908 1.1082958,0.418681 1.1073728,0.442468 -4.42e-4,0.01138 0.139319,2.298023 0.310577,5.081435 0.171261,2.78341 0.310759,5.076829 0.309997,5.096487 -7.62e-4,0.01965 -0.01444,0.03422 -0.0304,0.03237 -0.01596,-0.0018 -0.455457,-0.209949 -0.976687,-0.462434 z"
+ id="path4370"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b7d9ea;fill-opacity:1;stroke:#1b4955;stroke-width:0.10435142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 2.6780972,19.905213 0.9813375,30.869698 3.7095335,31.307187 4.4550529,20.427491 z"
+ id="path3766"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.6086182;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4165-4"
+ sodipodi:type="arc"
+ sodipodi:cx="7.8302102"
+ sodipodi:cy="18.130009"
+ sodipodi:rx="5.1149011"
+ sodipodi:ry="1.4208058"
+ sodipodi:start="2.2614725"
+ sodipodi:end="7.2010666"
+ d="m 4.5717188,19.225188 a 5.1149011,1.4208058 0 1 1 6.3658162,0.03339"
+ sodipodi:open="true"
+ transform="matrix(1.0316828,0,0,1.6659079,-0.01251233,-11.218213)" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:1.13524565;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4163-9-8"
+ sodipodi:type="arc"
+ sodipodi:cx="7.8302102"
+ sodipodi:cy="28.709202"
+ sodipodi:rx="7.4648666"
+ sodipodi:ry="2.9470069"
+ sodipodi:start="0"
+ sodipodi:end="0.98673157"
+ d="m 15.295077,28.709202 a 7.4648666,2.9470069 0 0 1 -3.348594,2.458476"
+ sodipodi:open="true"
+ transform="matrix(0.88917751,-0.00494776,0.00357622,0.55846548,1.4789654,13.871897)" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.65141845px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 9.8888183,20.250213 1.3223667,0.567791 0.723483,10.327916 -2.221664,-1.174307 0.1758153,-9.7214"
+ id="path4362"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.76914734;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 2.7095992,18.979566 0.81251271,29.79873"
+ id="path4284-8-9"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/export/home/cgenraul/SHAPER-CEA-FD20_64/SOURCES/SHAPER/src/GDMLPlugin/icons/cone_segment.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.68029219px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="M 5.8860988,20.326831 4.4824097,20.909169 3.7095784,31.521824 6.0679767,30.316985 5.8860988,20.326831"
+ id="path4362-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.95999995;fill:none;stroke:#1b4955;stroke-width:0.51512122;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:none"
+ id="path4170-9-1"
+ sodipodi:type="arc"
+ sodipodi:cx="7.8302102"
+ sodipodi:cy="18.09326"
+ sodipodi:rx="1.3616623"
+ sodipodi:ry="0.60200018"
+ sodipodi:start="2.5307274"
+ sodipodi:end="6.8940505"
+ d="m 6.7148018,18.438553 a 1.3616623,0.60200018 0 1 1 2.2308169,0"
+ transform="matrix(1.7012076,0,0,1.4177634,-5.4433402,-5.776816)"
+ inkscape:export-filename="/export/home/cgenraul/SHAPER-CEA-FD20_64/SOURCES/SHAPER/src/GDMLPlugin/icons/cone_segment.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:open="true" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.86699845;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4163-9-8-3"
+ sodipodi:type="arc"
+ sodipodi:cx="7.8302102"
+ sodipodi:cy="28.709202"
+ sodipodi:rx="7.4648666"
+ sodipodi:ry="2.9470069"
+ sodipodi:start="6.121775"
+ sodipodi:end="7.1199536"
+ d="m 15.198046,28.235587 a 7.4648666,2.9470069 0 0 1 -2.367377,2.661715"
+ sodipodi:open="true"
+ transform="matrix(-0.96237087,0.20186066,0.11856233,0.85984099,12.108927,2.3939424)" />
+ <path
+ style="fill:none;stroke:#1b4955;stroke-width:0.76914734;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 13.34074,18.856572 1.804551,10.834981"
+ id="path4284-8-9-9"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/export/home/cgenraul/SHAPER-CEA-FD20_64/SOURCES/SHAPER/src/GDMLPlugin/icons/cone_segment.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+</svg>
--- /dev/null
+<!-- Copyright (C) 2014-2016 CEA/DEN, EDF R&D -->
+
+<!-- File: plugin-GDML.xml -->
+<!-- Created: 23 Nov 2016 -->
+<!-- Author: Clarisse Genrault (CEA) -->
+
+<plugin>
+ <workbench id="GDML" document="Part">
+ <group id="GDML">
+ <feature id="ConeSegment" title="Cone Segment" tooltip="Create a Cone Segment" icon="icons/GDML/cone_segment.png">
+ <source path="conesegment_widget.xml"/>
+ </feature>
+ </group>
+ </workbench>
+</plugin>
#include<GeomAPI_Trsf.h>
#include <GeomAPI_Ax1.h>
+#include <GeomAPI_Ax2.h>
#include <gp_Ax1.hxx>
-#include<gp_Trsf.hxx>
+#include <gp_Ax2.hxx>
+#include <gp_Trsf.hxx>
#define MY_TRSF implPtr<gp_Trsf>()
{
MY_TRSF->SetRotation(theAxis->impl<gp_Ax1>(), theAngle / 180.0 * M_PI);
}
+
+//=================================================================================================
+void GeomAPI_Trsf::setSymmetry(const std::shared_ptr<GeomAPI_Pnt> thePoint)
+{
+ MY_TRSF->SetMirror(thePoint->impl<gp_Pnt>());
+}
+
+//=================================================================================================
+void GeomAPI_Trsf::setSymmetry(const std::shared_ptr<GeomAPI_Ax1> theAxis)
+{
+ MY_TRSF->SetMirror(theAxis->impl<gp_Ax1>());
+}
+
+//=================================================================================================
+void GeomAPI_Trsf::setSymmetry(const std::shared_ptr<GeomAPI_Ax2> thePlane)
+{
+ MY_TRSF->SetMirror(thePlane->impl<gp_Ax2>());
+}
#include <memory>
class GeomAPI_Ax1;
+class GeomAPI_Ax2;
class GeomAPI_Pnt;
/**\class GeomAPI_Trsf
*/
GEOMAPI_EXPORT void setRotation(const std::shared_ptr<GeomAPI_Ax1> theAxis,
const double theAngle);
+
+ /** \brief Sets a point symmetry transformation.
+ * \param[in] thePoint symmetry point.
+ */
+ GEOMAPI_EXPORT void setSymmetry(const std::shared_ptr<GeomAPI_Pnt> thePoint);
+
+ /** \brief Sets an axis symmetry transformation.
+ * \param[in] theAxis symmetry axis.
+ */
+ GEOMAPI_EXPORT void setSymmetry(const std::shared_ptr<GeomAPI_Ax1> theAxis);
+
+ /** \brief Sets a plane symmetry transformation.
+ * \param[in] thePlane symmetry plane.
+ */
+ GEOMAPI_EXPORT void setSymmetry(const std::shared_ptr<GeomAPI_Ax2> thePlane);
};
#endif
GeomAlgoAPI_XAOExport.h
GeomAlgoAPI_XAOImport.h
GeomAlgoAPI_Copy.h
+ GeomAlgoAPI_ConeSegment.h
+ GeomAlgoAPI_Symmetry.h
)
SET(PROJECT_SOURCES
GeomAlgoAPI_XAOExport.cpp
GeomAlgoAPI_XAOImport.cpp
GeomAlgoAPI_Copy.cpp
+ GeomAlgoAPI_ConeSegment.cpp
+ GeomAlgoAPI_Symmetry.cpp
)
SET(PROJECT_LIBRARIES
INSTALL(FILES ${SWIG_SCRIPTS} DESTINATION ${SHAPER_INSTALL_SWIG})
ADD_UNIT_TESTS(TestAPI_Box.py
+ TestAPI_GDMLConeSegment.py
+ TestAPI_Symmetry.py
TestAPI_Translation.py)
%shared_ptr(GeomAlgoAPI_Translation)
%shared_ptr(GeomAlgoAPI_Transform)
%shared_ptr(GeomAlgoAPI_Box)
+%shared_ptr(GeomAlgoAPI_ConeSegment)
%shared_ptr(GeomAlgoAPI_Copy)
+%shared_ptr(GeomAlgoAPI_Symmetry)
// all supported interfaces
%include "GeomAlgoAPI_MakeShape.h"
%include "GeomAlgoAPI_Exception.h"
%include "GeomAlgoAPI_ShapeAPI.h"
%include "GeomAlgoAPI_Copy.h"
+%include "GeomAlgoAPI_Symmetry.h"
%typemap(out) std::list< std::shared_ptr< GeomAPI_Shape > >::value_type & {
$result = SWIG_NewPointerObj(SWIG_as_voidptr(new std::shared_ptr<GeomAPI_Shape>(*$1)), $descriptor(std::shared_ptr<GeomAPI_Shape> *), SWIG_POINTER_OWN | 0 );
// Created: 17 Mar 2016
// Author: Clarisse Genrault (CEA)
-#ifndef GeomAlgoAPI_Box_H_
-#define GeomAlgoAPI_Box_H_
+#ifndef GEOMALGOAPI_BOX_H_
+#define GEOMALGOAPI_BOX_H_
#include <GeomAPI_Pnt.h>
#include <GeomAlgoAPI_MakeShape.h>
};
-#endif
+#endif // GEOMALGOAPI_BOX_H_
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GeomAlgoAPI_ConeSegment.cpp
+// Created: 24 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#include <GeomAlgoAPI_ConeSegment.h>
+
+#include <gp_Dir.hxx>
+#include <gp_Ax1.hxx>
+#include <gp_Pnt.hxx>
+#include <TopoDS_Edge.hxx>
+
+#include <BRepPrimAPI_MakeRevol.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+#include <BRepBuilderAPI_MakeWire.hxx>
+#include <BRepBuilderAPI_MakeFace.hxx>
+#include <Precision.hxx>
+
+#include <math.h>
+
+//=================================================================================================
+GeomAlgoAPI_ConeSegment::GeomAlgoAPI_ConeSegment()
+{
+}
+
+//=================================================================================================
+
+GeomAlgoAPI_ConeSegment::GeomAlgoAPI_ConeSegment(const double theRMin1,
+ const double theRMax1,
+ const double theRMin2,
+ const double theRMax2,
+ const double theZ,
+ const double theStartPhi,
+ const double theDeltaPhi)
+{
+ myRMin1 = theRMin1;
+ myRMax1 = theRMax1;
+ myRMin2 = theRMin2;
+ myRMax2 = theRMax2;
+ myZ = theZ;
+ myStartPhi = theStartPhi;
+ myDeltaPhi = theDeltaPhi;
+}
+
+//=================================================================================================
+bool GeomAlgoAPI_ConeSegment::check()
+{
+ if (myRMin1 < 0.)
+ {
+ myError = "Cone Segment builder :: rmin1 is negative.";
+ return false;
+ }
+ if (myRMin2 < 0.)
+ {
+ myError = "Cone Segment builder :: rmin2 is negative.";
+ return false;
+ }
+ if ((myRMax1-myRMin1) < Precision::Confusion())
+ {
+ myError = "Cone Segment builder :: rmin1 is larger than rmax1.";
+ return false;
+ }
+ if ((myRMax2-myRMin2) < Precision::Confusion())
+ {
+ myError = "Cone Segment builder :: rmin2 is larger than rmax2.";
+ return false;
+ }
+ if (myZ < Precision::Confusion())
+ {
+ myError = "Cone Segment builder :: z is negative or null.";
+ return false;
+ }
+ if (myDeltaPhi < Precision::Angular() * 180./M_PI)
+ {
+ myError = "Cone Segment builder :: deltaphi is negative or null.";
+ return false;
+ }
+ if (myDeltaPhi > 360)
+ {
+ myError = "Cone Segment builder :: deltaphi is larger than 360 degree.";
+ return false;
+ }
+ return true;
+}
+
+//=================================================================================================
+void GeomAlgoAPI_ConeSegment::build()
+{
+ myCreatedFaces.clear();
+
+ const double aStartPhiRad = myStartPhi * M_PI/180.;
+ BRepBuilderAPI_MakeWire aWireBuilder;
+
+ // Define the section from the 4 vertices
+ gp_Pnt aPointOuterBase(myRMax1 * cos(aStartPhiRad), myRMax1 * sin(aStartPhiRad), -myZ/2.);
+ gp_Pnt aPointInnerBase(myRMin1 * cos(aStartPhiRad), myRMin1 * sin(aStartPhiRad), -myZ/2.);
+ gp_Pnt aPointOuterTop(myRMax2 * cos(aStartPhiRad), myRMax2 * sin(aStartPhiRad), myZ/2.);
+ gp_Pnt aPointInnerTop(myRMin2 * cos(aStartPhiRad), myRMin2 * sin(aStartPhiRad), myZ/2.);
+
+ if ((myRMax1 - myRMin1) >= Precision::Confusion()){
+ BRepBuilderAPI_MakeEdge anEdgeBuilderBase(aPointOuterBase, aPointInnerBase);
+ anEdgeBuilderBase.Build();
+ aWireBuilder.Add(anEdgeBuilderBase.Edge());
+ }
+
+ BRepBuilderAPI_MakeEdge anEdgeBuilderOuter(aPointOuterBase, aPointOuterTop);
+ anEdgeBuilderOuter.Build();
+ aWireBuilder.Add(anEdgeBuilderOuter.Edge());
+ if ((myRMax2 - myRMin2) >= Precision::Confusion()){
+ BRepBuilderAPI_MakeEdge anEdgeBuilderTop(aPointOuterTop, aPointInnerTop);
+ anEdgeBuilderTop.Build();
+ aWireBuilder.Add(anEdgeBuilderTop.Edge());
+ }
+
+ BRepBuilderAPI_MakeEdge anEdgeBuilderInner(aPointInnerTop, aPointInnerBase);
+ anEdgeBuilderInner.Build();
+ aWireBuilder.Add(anEdgeBuilderInner.Edge());
+
+ aWireBuilder.Build();
+ BRepBuilderAPI_MakeFace aFaceBuilder(aWireBuilder.Wire());
+ aFaceBuilder.Build();
+
+ if (!aFaceBuilder.IsDone()){
+ myError = "Cone Segment builder :: section is not valid";
+ return;
+ }
+
+ // Perform a revolution based on the section to build the solid
+ gp_Dir aZDir(0., 0., 1.);
+ gp_Pnt anOrigin(0., 0., 0.);
+ gp_Ax1 aZAxis(anOrigin, aZDir);
+ BRepPrimAPI_MakeRevol* aRevolBuilder =
+ new BRepPrimAPI_MakeRevol(aFaceBuilder.Face(), aZAxis, myDeltaPhi * M_PI/180., Standard_True);
+ if(!aRevolBuilder) {
+ return;
+ myError = "Cone Segment builder :: section revolution did not succeed";
+ }
+ if(!aRevolBuilder->IsDone()) {
+ myError = "Cone Segment builder :: section revolution did not succeed";
+ return;
+ }
+
+ setImpl(aRevolBuilder);
+ setBuilderType(OCCT_BRepBuilderAPI_MakeShape);
+
+ std::shared_ptr<GeomAPI_Shape> aResultShape =
+ std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape());
+ aResultShape->setImpl(new TopoDS_Shape(aRevolBuilder->Shape()));
+
+ // Test on the shapes
+ if (!(aResultShape).get() || aResultShape->isNull()) {
+ myError = "Cone Segment builder :: resulting shape is null.";
+ return;
+ }
+
+ setShape(aResultShape);
+ setDone(true);
+}
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GeomAlgoAPI_ConeSegment.h
+// Created: 24 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GEOMALGOAPI_CONESEGMENT_H_
+#define GEOMALGOAPI_CONESEGMENT_H_
+
+#include <GeomAlgoAPI_MakeShape.h>
+
+/**\class GeomAlgoAPI_ConeSegment
+ * \ingroup DataAlgo
+ * \brief Allows to create Cone Segment GDML Primitives.
+ */
+class GeomAlgoAPI_ConeSegment : public GeomAlgoAPI_MakeShape
+{
+ public:
+ GEOMALGOAPI_EXPORT GeomAlgoAPI_ConeSegment();
+
+ /// Creates a cone segment using standard GDML parameters.
+ /// \param theRMin1 Cone base inner radius.
+ /// \param theRMax1 Cone base outer radius.
+ /// \param theRMin2 Cone top inner radius.
+ /// \param theRMax2 Cone top outer radius.
+ /// \param theZ Cone height.
+ /// \param theStartPhi Start angle of the cone segment.
+ /// \param theDeltaPhi Delta angle of the cone segment.
+ GEOMALGOAPI_EXPORT GeomAlgoAPI_ConeSegment(const double theRMin1,
+ const double theRMax1,
+ const double theRMin2,
+ const double theRMax2,
+ const double theZ,
+ const double theStartPhi,
+ const double theDeltaPhi);
+
+ /// Checks if the set of parameters used to define the cone segment are OK.
+ GEOMALGOAPI_EXPORT bool check();
+
+ /// Builds the cone segment based on the parameters given in the constructor.
+ GEOMALGOAPI_EXPORT void build();
+
+ private:
+ double myRMin1; /// Cone base inner radius.
+ double myRMax1; /// Cone base outer radius.
+ double myRMin2; /// Cone top inner radius.
+ double myRMax2; /// Cone top outer radius.
+ double myZ; /// Cone height.
+ double myStartPhi; /// Start angle of the cone segment.
+ double myDeltaPhi; /// Delta angle of the cone segment.
+};
+
+#endif // GEOMALGOAPI_CONESEGMENT_H_
+
// Author: Clarisse Genrault (CEA)
#include "GeomAlgoAPI_ShapeAPI.h"
-#include <GeomAlgoAPI_Box.h>
-#include <GeomAlgoAPI_Translation.h>
-#include <GeomAPI_Pnt.h>
-#include <GeomAPI_Edge.h>
+#include <GeomAlgoAPI_Box.h>
+#include <GeomAlgoAPI_ConeSegment.h>
#include <GeomAlgoAPI_EdgeBuilder.h>
-
-#include <iostream>
+#include <GeomAlgoAPI_Symmetry.h>
+#include <GeomAlgoAPI_Translation.h>
namespace GeomAlgoAPI_ShapeAPI
{
}
return aTranslationAlgo.shape();
}
+
+ //=========================================================================================================
+ std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeSymmetry(
+ std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Pnt> thePoint) throw (GeomAlgoAPI_Exception)
+ {
+ GeomAlgoAPI_Symmetry aSymmetryAlgo(theSourceShape, thePoint);
+
+ if (!aSymmetryAlgo.check()) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+
+ aSymmetryAlgo.build();
+
+ if(!aSymmetryAlgo.isDone()) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+ if (!aSymmetryAlgo.checkValid("Symmetry builder by a point")) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+ return aSymmetryAlgo.shape();
+ }
+
+ //=========================================================================================================
+ std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeSymmetry(
+ std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax1> theAxis) throw (GeomAlgoAPI_Exception)
+ {
+ GeomAlgoAPI_Symmetry aSymmetryAlgo(theSourceShape, theAxis);
+
+ if (!aSymmetryAlgo.check()) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+
+ aSymmetryAlgo.build();
+
+ if(!aSymmetryAlgo.isDone()) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+ if (!aSymmetryAlgo.checkValid("Symmetry builder by an axis")) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+ return aSymmetryAlgo.shape();
+ }
+
+ //=========================================================================================================
+ std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeSymmetry(
+ std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax2> thePlane) throw (GeomAlgoAPI_Exception)
+ {
+ GeomAlgoAPI_Symmetry aSymmetryAlgo(theSourceShape, thePlane);
+
+ if (!aSymmetryAlgo.check()) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+
+ aSymmetryAlgo.build();
+
+ if(!aSymmetryAlgo.isDone()) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+ if (!aSymmetryAlgo.checkValid("Symmetry builder by a plane")) {
+ throw GeomAlgoAPI_Exception(aSymmetryAlgo.getError());
+ }
+ return aSymmetryAlgo.shape();
+ }
+
+ //=========================================================================================================
+ std::shared_ptr<GeomAPI_Shape> GeomAlgoAPI_ShapeAPI::makeConeSegment(
+ const double theRMin1, const double theRMax1,
+ const double theRMin2, const double theRMax2,
+ const double theZ,
+ const double theStartPhi, const double theDeltaPhi) throw (GeomAlgoAPI_Exception)
+ {
+ GeomAlgoAPI_ConeSegment aConeSegmentAlgo(theRMin1, theRMax1, theRMin2, theRMax2,
+ theZ, theStartPhi, theDeltaPhi);
+
+ if (!aConeSegmentAlgo.check()) {
+ throw GeomAlgoAPI_Exception(aConeSegmentAlgo.getError());
+ }
+
+ aConeSegmentAlgo.build();
+
+ if(!aConeSegmentAlgo.isDone()) {
+ throw GeomAlgoAPI_Exception(aConeSegmentAlgo.getError());
+ }
+ if (!aConeSegmentAlgo.checkValid("Cone Segment builder")) {
+ throw GeomAlgoAPI_Exception(aConeSegmentAlgo.getError());
+ }
+ return aConeSegmentAlgo.shape();
+ }
}
#define GEOMALGOAPI_SHAPEAPI_H
#include <GeomAPI_Ax1.h>
+#include <GeomAPI_Ax2.h>
#include <GeomAPI_Edge.h>
#include <GeomAPI_Pnt.h>
#include <GeomAPI_Shape.h>
std::shared_ptr<GeomAPI_Shape> theSourceShape,
std::shared_ptr<GeomAPI_Pnt> theStartPoint,
std::shared_ptr<GeomAPI_Pnt> theEndPoint) throw (GeomAlgoAPI_Exception);
+
+ /// Performs a symmetry by a point
+ static std::shared_ptr<GeomAPI_Shape> makeSymmetry(
+ std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Pnt> thePoint) throw (GeomAlgoAPI_Exception);
+
+ /// Performs a symmetry by an axis
+ static std::shared_ptr<GeomAPI_Shape> makeSymmetry(
+ std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax1> theAxis) throw (GeomAlgoAPI_Exception);
+
+ /// Performs a symmetry by a plane
+ static std::shared_ptr<GeomAPI_Shape> makeSymmetry(
+ std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax2> thePlane) throw (GeomAlgoAPI_Exception);
+
+ /// Creates a cone segment using standard GDML parameters
+ /// \param theRMin1 Inner radius at base of cone
+ /// \param theRMax1 Outer radius at base of cone
+ /// \param theRMin2 Inner radius at top of cone
+ /// \param theRMax2 Outer radius at top of cone
+ /// \param theZ Height of cone segment
+ /// \param theStartPhi Start angle of the segment
+ /// \param theDeltaPhi Angle of the segment
+ static std::shared_ptr<GeomAPI_Shape> makeConeSegment(
+ const double theRMin1,
+ const double theRMax1,
+ const double theRMin2,
+ const double theRMax2,
+ const double theZ,
+ const double theStartPhi,
+ const double theDeltaPhi) throw (GeomAlgoAPI_Exception);
};
}
#endif
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GeomAlgoAPI_Symmetry.cpp
+// Created: 30 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#include "GeomAlgoAPI_Symmetry.h"
+
+#include <BRepBuilderAPI_Transform.hxx>
+
+//=================================================================================================
+GeomAlgoAPI_Symmetry::GeomAlgoAPI_Symmetry(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Pnt> thePoint)
+{
+ myMethodType = BY_POINT;
+ mySourceShape = theSourceShape;
+ myPoint = thePoint;
+}
+
+//=================================================================================================
+GeomAlgoAPI_Symmetry::GeomAlgoAPI_Symmetry(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax1> theAxis)
+{
+ myMethodType = BY_AXIS;
+ mySourceShape = theSourceShape;
+ myAxis = theAxis;
+}
+
+//=================================================================================================
+GeomAlgoAPI_Symmetry::GeomAlgoAPI_Symmetry(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax2> thePlane)
+{
+ myMethodType = BY_PLANE;
+ mySourceShape = theSourceShape;
+ myPlane = thePlane;
+}
+
+//=================================================================================================
+bool GeomAlgoAPI_Symmetry::check()
+{
+ switch (myMethodType) {
+ case BY_POINT: {
+ if (!myPoint) {
+ myError = "Mirror builder :: point is invalid.";
+ return false;
+ }
+ if (!mySourceShape) {
+ myError = "Mirror builder :: source shape is invalid.";
+ return false;
+ }
+ return true;
+ }
+ case BY_AXIS: {
+ if (!myAxis) {
+ myError = "Mirror builder :: axis is invalid.";
+ return false;
+ }
+ if (!mySourceShape) {
+ myError = "Mirror builder :: source shape is invalid.";
+ return false;
+ }
+ return true;
+ }
+ case BY_PLANE: {
+ if (!myPlane) {
+ myError = "Mirror builder :: plane is invalid.";
+ return false;
+ }
+ if (!mySourceShape) {
+ myError = "Translation builder :: source shape is invalid.";
+ return false;
+ }
+ return true;
+ }
+ default: {
+ myError = "Translation builder :: method not implemented.";
+ return false;
+ }
+ }
+}
+
+//=================================================================================================
+void GeomAlgoAPI_Symmetry::build()
+{
+ gp_Trsf* aTrsf = new gp_Trsf();
+
+ switch (myMethodType) {
+ case BY_POINT: {
+ const gp_Pnt& aPoint = myPoint->impl<gp_Pnt>();
+ aTrsf->SetMirror(aPoint);
+ break;
+ }
+ case BY_AXIS: {
+ const gp_Ax1& anAxis = myAxis->impl<gp_Ax1>();
+ aTrsf->SetMirror(anAxis);
+ break;
+ }
+ case BY_PLANE: {
+ const gp_Ax2& aPlane = myPlane->impl<gp_Ax2>();
+ aTrsf->SetMirror(aPlane);
+ break;
+ }
+ default: {
+ myError = "Mirror builder :: method not supported";
+ return;
+ }
+ }
+
+ const TopoDS_Shape& aSourceShape = mySourceShape->impl<TopoDS_Shape>();
+
+ if(aSourceShape.IsNull()) {
+ myError = "Mirror builder :: source shape does not contain any actual shape.";
+ return;
+ }
+
+ // Transform the shape while copying it.
+ BRepBuilderAPI_Transform* aBuilder = new BRepBuilderAPI_Transform(aSourceShape, *aTrsf, true);
+ if(!aBuilder) {
+ myError = "Mirror builder :: source shape does not contain any actual shape.";
+ return;
+ }
+
+ setImpl(aBuilder);
+ setBuilderType(OCCT_BRepBuilderAPI_MakeShape);
+
+ if(!aBuilder->IsDone()) {
+ myError = "Mirror builder :: source shape does not contain any actual shape.";
+ return;
+ }
+
+ TopoDS_Shape aResult = aBuilder->Shape();
+
+ std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
+ aShape->setImpl(new TopoDS_Shape(aResult));
+ setShape(aShape);
+ setDone(true);
+}
\ No newline at end of file
--- /dev/null
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+// File: GeomAlgoAPI_Symmetry.h
+// Created: 30 Nov 2016
+// Author: Clarisse Genrault (CEA)
+
+#ifndef GEOMALGOAPI_SYMMETRY_H_
+#define GEOMALGOAPI_SYMMETRY_H_
+
+#include <GeomAlgoAPI.h>
+#include <GeomAlgoAPI_MakeShape.h>
+
+#include <GeomAPI_Pnt.h>
+#include <GeomAPI_Ax1.h>
+#include <GeomAPI_Ax2.h>
+
+/// \class GeomAlgoAPI_Symmetry
+/// \ingroup DataAlgo
+/// \brief Creates a copy of the object by performing a symmetry operation by a point,
+/// by an axis or by a plane.
+class GeomAlgoAPI_Symmetry : public GeomAlgoAPI_MakeShape
+{
+public:
+ /// Type of mirror operation
+ enum MethodType {
+ BY_POINT, ///< Mirror by point.
+ BY_AXIS, ///< Mirror by axis.
+ BY_PLANE ///< Mirror by plane.
+ };
+
+ /// \brief Creates an object which is obtained from current object by performing
+ /// a symmetry operation by a point.
+ /// \param[in] theSourceShape a shape to be moved.
+ /// \param[in] thePoint symmetry point.
+ GEOMALGOAPI_EXPORT GeomAlgoAPI_Symmetry(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Pnt> thePoint);
+
+ /// \brief Creates an object which is obtained from current object by performing
+ /// a symmetry operation by a point.
+ /// \param[in] theSourceShape a shape to be moved.
+ /// \param[in] theAxis symmetry axis.
+ GEOMALGOAPI_EXPORT GeomAlgoAPI_Symmetry(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax1> theAxis);
+
+ /// \brief Creates an object which is obtained from current object by performing
+ /// a symmetry operation by a point.
+ /// \param[in] theSourceShape a shape to be moved.
+ /// \param[in] thePlane symmetry plane.
+ GEOMALGOAPI_EXPORT GeomAlgoAPI_Symmetry(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+ std::shared_ptr<GeomAPI_Ax2> thePlane);
+
+ /// Checks if data for the translation execution is OK.
+ GEOMALGOAPI_EXPORT bool check();
+
+ /// Execute the translation.
+ GEOMALGOAPI_EXPORT void build();
+
+private:
+ MethodType myMethodType; /// Type of method used.
+ std::shared_ptr<GeomAPI_Shape> mySourceShape; /// Shape to be moved.
+ std::shared_ptr<GeomAPI_Pnt> myPoint; /// Reflection point.
+ std::shared_ptr<GeomAPI_Ax1> myAxis; /// Reflection axis.
+ std::shared_ptr<GeomAPI_Ax2> myPlane; /// Reflection plane.
+};
+
+#endif // GEOMALGOAPI_SYMMETRY_H_
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+// Copyright (C) 2014-2016 CEA/DEN, EDF R&D
// File: GeomAlgoAPI_Translation.h
// Created: 8 June 2015
// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-// File: GeomAlgoAPI_swig.h
+// File: GeomAlgoAPI_swig.h
// Created: Dec 15, 2015
// Author: Sergey POKHODENKO
+// Modified by Clarisse Genrault (CEA) : 24 Nov 2016
#ifndef SRC_GEOMALGOAPI_GEOMALGOAPI_SWIG_H_
#define SRC_GEOMALGOAPI_GEOMALGOAPI_SWIG_H_
#include "GeomAlgoAPI_Exception.h"
#include "GeomAlgoAPI_ShapeAPI.h"
#include "GeomAlgoAPI_Box.h"
+ #include "GeomAlgoAPI_ConeSegment.h"
#include "GeomAlgoAPI_Copy.h"
+ #include "GeomAlgoAPI_Symmetry.h"
#include <memory>
#include <string>
--- /dev/null
+# Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+# File: TestAPI_Box.py
+# Created: 29 Nov 2016
+# Author: Clarisse Genrault (CEA)
+
+from GeomAlgoAPI import GeomAlgoAPI_ShapeAPI as shaperpy
+from GeomAlgoAPI import GeomAlgoAPI_Exception as myExcept
+from GeomAPI import GeomAPI_Pnt as pnt
+
+# Create several "cone segment"
+try :
+ CS1 = shaperpy.makeConeSegment(7.,11.,5.,8.,12.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS2 = shaperpy.makeConeSegment(5.,10.,7.,15.,15.,45.,180.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS3 = shaperpy.makeConeSegment(5.,10.,7.,15.,15.,-45.,180.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS4 = shaperpy.makeConeSegment(0.,10.,2.,7.,3.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS5 = shaperpy.makeConeSegment(5.,8.,0.,6.,10.,45.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS6 = shaperpy.makeConeSegment(0.,6.,0.,4.,17.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS7 = shaperpy.makeConeSegment(7.,11.,5.,8.,12.,0.,360.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS8 = shaperpy.makeConeSegment(-5.,11.,5.,8.,12.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS9 = shaperpy.makeConeSegment(11.,7.,5.,8.,12.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS10 = shaperpy.makeConeSegment(7.,11.,8.,5.,12.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS11 = shaperpy.makeConeSegment(7.,11.,-3.,5.,12.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS12 = shaperpy.makeConeSegment(7.,11.,5.,8.,0.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS13 = shaperpy.makeConeSegment(7.,11.,5.,8.,-10.,0.,270.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS14 = shaperpy.makeConeSegment(7.,11.,5.,8.,12.,-45.,-45.)
+except myExcept,ec:
+ print ec.what()
+
+try :
+ CS15 = shaperpy.makeConeSegment(7.,11.,5.,8.,12.,45.,450.)
+except myExcept,ec:
+ print ec.what()
\ No newline at end of file
--- /dev/null
+# Copyright (C) 2014-2016 CEA/DEN, EDF R&D
+
+# File: TestAPI_Symmetry.py
+# Created: 15 Nov 2016
+# Author: Clarisse Genrault (CEA)
+
+from GeomAlgoAPI import GeomAlgoAPI_ShapeAPI as shaperpy
+from GeomAlgoAPI import GeomAlgoAPI_Exception as myExcept
+from GeomAPI import GeomAPI_Ax1 as axis
+from GeomAPI import GeomAPI_Ax2 as plane
+from GeomAPI import GeomAPI_Pnt as pnt
+from GeomAPI import GeomAPI_Dir as direction
+
+# Create a box
+try :
+ box1 = shaperpy.makeBox(10.,10.,10.)
+ box2 = shaperpy.makeBox(10.,10.,10.)
+ box3 = shaperpy.makeBox(10.,10.,10.)
+
+except myExcept, ec:
+ print ec.what()
+
+# Perfom a symmetry by a point.
+try :
+ origin = pnt(0.,0.,0.)
+ symmetry1 = shaperpy.makeSymmetry(box1,origin)
+
+except myExcept, ec:
+ print ec.what()
+
+# Perfom a symmetry by an axis.
+try :
+ xDir = direction(1.,0.,0.)
+ xAxis = axis(origin, xDir)
+ translation2 = shaperpy.makeSymmetry(box2,xAxis)
+
+except myExcept, ec:
+ print ec.what()
+
+# Perfom a symmetry by a plane.
+try :
+ pnt1 = pnt(0.,0.,10.)
+ pnt2 = pnt(10.,0.,10.)
+ aPlane = plane(origin, xDir)
+ translation3 = shaperpy.makeSymmetry(box3,aPlane)
+
+except myExcept, ec:
+ print ec.what()
## Copyright (C) 2014-2016 CEA/DEN, EDF R&D
INCLUDE(Common)
+INCLUDE(UnitTest)
SET(PROJECT_HEADERS
PrimitivesAPI.h
${PROJECT_SOURCE_DIR}/src/PrimitivesPlugin
)
-#TODO(spo): is ${CAS_DEFINITIONS} necessary?
ADD_DEFINITIONS(-DPRIMITIVESAPI_EXPORTS ${CAS_DEFINITIONS})
ADD_LIBRARY(PrimitivesAPI SHARED ${PROJECT_SOURCES} ${PROJECT_HEADERS})
TARGET_LINK_LIBRARIES(PrimitivesAPI ${PROJECT_LIBRARIES})
SET_SOURCE_FILES_PROPERTIES(PrimitivesAPI.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(PrimitivesAPI.i PROPERTIES SWIG_DEFINITIONS "-shadow")
-#TODO(spo): is ModelAPI necessary or it could be received by INTERFACE_ (may require modern CMake)?
SET(SWIG_LINK_LIBRARIES
PrimitivesAPI
ModelHighAPI
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/PrimitivesAPI.py DESTINATION ${SHAPER_INSTALL_SWIG})
# Tests
-INCLUDE(UnitTest)
-
-ADD_UNIT_TESTS(
-)
-
-# ADD_SUBDIRECTORY (Test)
+ADD_UNIT_TESTS(TestBox.py)
\ No newline at end of file
#include <ModelHighAPI_swig.h>
+ #include "PrimitivesAPI.h"
#include "PrimitivesAPI_Box.h"
-
#endif // PrimitivesAPI_swig_H_
--- /dev/null
+"""
+Test case for Primitive Box feature.
+Written on High API.
+"""
+from ModelAPI import *
+from GeomAPI import *
+
+from salome.shaper import model
+
+# Get session
+aSession = ModelAPI_Session.get()
+
+# Create a part
+aDocument = aSession.activeDocument()
+aSession.startOperation()
+model.addPart(aDocument)
+aDocument = aSession.activeDocument()
+aSession.finishOperation()
+
+# Create a box with dimensions
+aSession.startOperation()
+aBox1 = model.addBox(aDocument, 10, 10, 10).result()
+aSession.finishOperation()
+assert (aBox1 is not None)
+
+# Create a first point
+aSession.startOperation()
+aFirstPoint = model.addPoint(aDocument, 0, 0, 0).result()
+aSession.finishOperation()
+
+# Create a second point
+aSession.startOperation()
+aSecondPoint = model.addPoint(aDocument, 50, 50, 50).result()
+aSession.finishOperation()
+
+# Create a box with 2 points
+aSession.startOperation()
+aBox2 = model.addBox(aDocument, aFirstPoint, aSecondPoint).result()
+aSession.finishOperation()
+assert (aBox2 is not None)
+
+# Create a box with dimensions (error)
+aSession.startOperation()
+aBox3 = model.addBox(aDocument, -10, 10, 10).result()
+aSession.finishOperation()
+assert (aBox3 is not None)
+
+# Create a box with 2 points (error)
+aSession.startOperation()
+aBox4 = model.addBox(aDocument, aFirstPoint, aFirstPoint).result()
+aSession.finishOperation()
+assert (aBox4 is not None)
+
# Created: 07 Apr 2016
# Author: Clarisse genrault (CEA)
-INCLUDE(UnitTest)
-
SET(PROJECT_HEADERS
PrimitivesPlugin.h
PrimitivesPlugin_Plugin.h
INSTALL(FILES ${XML_RESOURCES} DESTINATION ${SHAPER_INSTALL_XML_RESOURCES})
INSTALL(DIRECTORY icons/ DESTINATION ${SHAPER_INSTALL_XML_RESOURCES}/icons/Primitives)
-ADD_UNIT_TESTS(TestBox.py
-)
+++ /dev/null
-"""
-Test case for Primitive Box feature.
-Written on High API.
-"""
-from ModelAPI import *
-from GeomAPI import *
-
-from salome.shaper import model
-
-# Get session
-aSession = ModelAPI_Session.get()
-
-# Create a part
-aDocument = aSession.activeDocument()
-aSession.startOperation()
-model.addPart(aDocument)
-aDocument = aSession.activeDocument()
-aSession.finishOperation()
-
-# Create a box with dimensions
-aSession.startOperation()
-aBox1 = model.addBox(aDocument, 10, 10, 10).result()
-aSession.finishOperation()
-assert (aBox1 is not None)
-
-# Create a first point
-aSession.startOperation()
-aFirstPoint = model.addPoint(aDocument, 0, 0, 0).result()
-aSession.finishOperation()
-
-# Create a second point
-aSession.startOperation()
-aSecondPoint = model.addPoint(aDocument, 50, 50, 50).result()
-aSession.finishOperation()
-
-# Create a box with 2 points
-aSession.startOperation()
-aBox2 = model.addBox(aDocument, aFirstPoint, aSecondPoint).result()
-aSession.finishOperation()
-assert (aBox2 is not None)
-
-# Create a box with dimensions (error)
-aSession.startOperation()
-aBox3 = model.addBox(aDocument, -10, 10, 10).result()
-aSession.finishOperation()
-assert (aBox3 is not None)
-
-# Create a box with 2 points (error)
-aSession.startOperation()
-aBox4 = model.addBox(aDocument, aFirstPoint, aFirstPoint).result()
-aSession.finishOperation()
-assert (aBox4 is not None)
-
from parameter import *
from partset import *
from primitives import *
+from gdml import *
"""Package for Features plugin for the Parametric Geometry API of the Modeler.
"""
-from FeaturesAPI import addPlacement, addRotation, addTranslation
+from FeaturesAPI import addPlacement, addRotation, addSymmetry, addTranslation
from FeaturesAPI import addExtrusion, addExtrusionCut, addExtrusionFuse
from FeaturesAPI import addRevolution, addRevolutionCut, addRevolutionFuse
from FeaturesAPI import addPipe
--- /dev/null
+"""Package for GDML plugin for the Parametric Geometry API of the Modeler.
+"""
+
+from GDMLAPI import addConeSegment
+