X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPrimitivesPlugin%2FPrimitivesPlugin_Cylinder.cpp;h=9b5e544acf8d7a6b339b041e572f0ce55e35a006;hb=2cb4458b35ae6c9561a35b3b18dbdb673d0c12c9;hp=7a5cbab21dcd9cd8087c9a6290341cae3368eedd;hpb=acded43ea2ec19ea995e087ab651bd6360f7ac57;p=modules%2Fshaper.git diff --git a/src/PrimitivesPlugin/PrimitivesPlugin_Cylinder.cpp b/src/PrimitivesPlugin/PrimitivesPlugin_Cylinder.cpp index 7a5cbab21..9b5e544ac 100644 --- a/src/PrimitivesPlugin/PrimitivesPlugin_Cylinder.cpp +++ b/src/PrimitivesPlugin/PrimitivesPlugin_Cylinder.cpp @@ -1,14 +1,28 @@ -// Copyright (C) 2014-201x CEA/DEN, EDF R&D - -// File: PrimitivesPlugin_Cylinder.cpp -// Created: 09 Jan 2017 -// Author: Clarisse Genrault (CEA) +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include #include #include #include +#include #include @@ -98,21 +112,44 @@ void PrimitivesPlugin_Cylinder::createCylinder(bool withAngle) } // Getting axis. - std::shared_ptr anAxis; + static const std::string aSelectionError = "Error: The axis shape selection is bad."; + std::shared_ptr anEdgeRef = selection(AXIS_ID()); + GeomShapePtr aShape = anEdgeRef->value(); + if (!aShape.get()) { + if (anEdgeRef->context().get()) { + aShape = anEdgeRef->context()->shape(); + } + } + if (!aShape.get()) { + setError(aSelectionError); + return; + } std::shared_ptr anEdge; - std::shared_ptr anEdgeRef = - selection(PrimitivesPlugin_Cylinder::AXIS_ID()); - if(anEdgeRef && anEdgeRef->value() && anEdgeRef->value()->isEdge()) { - anEdge = std::shared_ptr(new GeomAPI_Edge(anEdgeRef->value())); - } else if (anEdgeRef && !anEdgeRef->value() && anEdgeRef->context() && - anEdgeRef->context()->shape() && anEdgeRef->context()->shape()->isEdge()) { - anEdge = std::shared_ptr(new GeomAPI_Edge(anEdgeRef->context()->shape())); + if (aShape->isEdge()) + { + anEdge = aShape->edge(); + } + else if (aShape->isCompound()) + { + GeomAPI_ShapeIterator anIt(aShape); + anEdge = anIt.current()->edge(); } - if(anEdge) { - anAxis = std::shared_ptr(new GeomAPI_Ax2(aBasePoint, - anEdge->line()->direction())); + else + { + setError(aSelectionError); + return; + } + + if (!anEdge.get()) + { + setError(aSelectionError); + return; } + std::shared_ptr anAxis(new GeomAPI_Ax2(aBasePoint, + anEdge->line()->direction())); + + // Getting radius and height double aRadius = real(PrimitivesPlugin_Cylinder::RADIUS_ID())->value(); double aHeight = real(PrimitivesPlugin_Cylinder::HEIGHT_ID())->value(); @@ -170,12 +207,12 @@ void PrimitivesPlugin_Cylinder::loadNamingDS(std::shared_ptrprepareNamingFaces(); // Insert to faces - int num = 1; std::map< std::string, std::shared_ptr > listOfFaces = theCylinderAlgo->getCreatedFaces(); - for (std::map< std::string, std::shared_ptr >::iterator - it=listOfFaces.begin(); it!=listOfFaces.end(); ++it) { - std::shared_ptr aFace = (*it).second; - theResultCylinder->generated(aFace, (*it).first, num++); + for (std::map< std::string, std::shared_ptr >::iterator it = listOfFaces.begin(); + it != listOfFaces.end(); + ++it) + { + theResultCylinder->generated((*it).second, (*it).first); } }