X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConstructionAPI%2FConstructionAPI_Plane.cpp;h=c6c956662a9c920bea1818d07a81bac444f2d797;hb=b0d599305446d6542baefbf4bb7bcf5ae2de4633;hp=fdde03ebb39359a00f0d148482e3a5e057e90fc8;hpb=7d320d0406ddf756ca4fb478ed8d366f03e09b22;p=modules%2Fshaper.git diff --git a/src/ConstructionAPI/ConstructionAPI_Plane.cpp b/src/ConstructionAPI/ConstructionAPI_Plane.cpp index fdde03ebb..c6c956662 100644 --- a/src/ConstructionAPI/ConstructionAPI_Plane.cpp +++ b/src/ConstructionAPI/ConstructionAPI_Plane.cpp @@ -1,11 +1,25 @@ -// Name : ConstructionAPI_Plane.cpp -// Purpose: +// 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 // -// History: -// 27/05/16 - Sergey POKHODENKO - Creation of the file #include "ConstructionAPI_Plane.h" +#include #include //================================================================================================== @@ -105,7 +119,8 @@ void ConstructionAPI_Plane::setByFaceAndDistance(const ModelHighAPI_Selection& t { fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_OTHER_PLANE(), mycreationMethod); fillAttribute(theFace, myplane); - fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_DISTANCE_FROM_OTHER(), mycreationMethodByOtherPlane); + fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_DISTANCE_FROM_OTHER(), + mycreationMethodByOtherPlane); fillAttribute(theDistance, mydistance); fillAttribute(theIsReverse, myreverse); @@ -157,7 +172,8 @@ void ConstructionAPI_Plane::setByLineAndPoint(const ModelHighAPI_Selection& theL void ConstructionAPI_Plane::setByTwoParallelPlanes(const ModelHighAPI_Selection& thePlane1, const ModelHighAPI_Selection& thePlane2) { - fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_TWO_PARALLEL_PLANES(), mycreationMethod); + fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_TWO_PARALLEL_PLANES(), + mycreationMethod); fillAttribute(thePlane1, myplane1); fillAttribute(thePlane2, myplane2); @@ -170,7 +186,8 @@ void ConstructionAPI_Plane::setByCoincidentToPoint(const ModelHighAPI_Selection& { fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_OTHER_PLANE(), mycreationMethod); fillAttribute(thePlane, myplane); - fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_COINCIDENT_TO_POINT(), mycreationMethodByOtherPlane); + fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_COINCIDENT_TO_POINT(), + mycreationMethodByOtherPlane); fillAttribute(thePoint, mycoincidentPoint); execute(); @@ -183,13 +200,79 @@ void ConstructionAPI_Plane::setByRotation(const ModelHighAPI_Selection& thePlane { fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_OTHER_PLANE(), mycreationMethod); fillAttribute(thePlane, myplane); - fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_ROTATION(), mycreationMethodByOtherPlane); + fillAttribute(ConstructionPlugin_Plane::CREATION_METHOD_BY_ROTATION(), + mycreationMethodByOtherPlane); fillAttribute(theAxis, myaxis); fillAttribute(theAngle, myangle); execute(); } +//================================================================================================== +void ConstructionAPI_Plane::dump(ModelHighAPI_Dumper& theDumper) const +{ + FeaturePtr aBase = feature(); + const std::string& aDocName = theDumper.name(aBase->document()); + + theDumper << aBase << " = model.addPlane(" << aDocName; + + std::string aCreationMethod = + aBase->string(ConstructionPlugin_Plane::CREATION_METHOD())->value(); + + if(aCreationMethod == ConstructionPlugin_Plane::CREATION_METHOD_BY_GENERAL_EQUATION()) { + AttributeDoublePtr anAttrA = aBase->real(ConstructionPlugin_Plane::A()); + AttributeDoublePtr anAttrB = aBase->real(ConstructionPlugin_Plane::B()); + AttributeDoublePtr anAttrC = aBase->real(ConstructionPlugin_Plane::C()); + AttributeDoublePtr anAttrD = aBase->real(ConstructionPlugin_Plane::D()); + + theDumper << ", " << anAttrA << ", " << anAttrB << ", " << anAttrC << ", " << anAttrD; + } else if(aCreationMethod == ConstructionPlugin_Plane::CREATION_METHOD_BY_THREE_POINTS()) { + AttributeSelectionPtr anAttrPnt1 = aBase->selection(ConstructionPlugin_Plane::POINT1()); + AttributeSelectionPtr anAttrPnt2 = aBase->selection(ConstructionPlugin_Plane::POINT2()); + AttributeSelectionPtr anAttrPnt3 = aBase->selection(ConstructionPlugin_Plane::POINT3()); + + theDumper << ", " << anAttrPnt1 << ", " << anAttrPnt2 << ", " << anAttrPnt3; + } else if(aCreationMethod == ConstructionPlugin_Plane::CREATION_METHOD_BY_LINE_AND_POINT()) { + AttributeSelectionPtr anAttrLine = aBase->selection(ConstructionPlugin_Plane::LINE()); + AttributeSelectionPtr anAttrPoint = aBase->selection(ConstructionPlugin_Plane::POINT()); + AttributeBooleanPtr anAttrPerpendicular = + aBase->boolean(ConstructionPlugin_Plane::PERPENDICULAR()); + + theDumper << ", " << anAttrLine << ", " << anAttrPoint << ", " << anAttrPerpendicular; + } else if(aCreationMethod == ConstructionPlugin_Plane::CREATION_METHOD_BY_OTHER_PLANE()) { + AttributeSelectionPtr anAttrPlane = aBase->selection(ConstructionPlugin_Plane::PLANE()); + + std::string aCreationMethodOption = + aBase->string(ConstructionPlugin_Plane::CREATION_METHOD_BY_OTHER_PLANE_OPTION())->value(); + if(aCreationMethodOption == + ConstructionPlugin_Plane::CREATION_METHOD_BY_DISTANCE_FROM_OTHER()) { + AttributeDoublePtr anAttrDistance = aBase->real(ConstructionPlugin_Plane::DISTANCE()); + AttributeBooleanPtr anAttrReverse = aBase->boolean(ConstructionPlugin_Plane::REVERSE()); + + theDumper << ", " << anAttrPlane << ", " << anAttrDistance << ", " << anAttrReverse; + } else if(aCreationMethodOption == + ConstructionPlugin_Plane::CREATION_METHOD_BY_COINCIDENT_TO_POINT()) { + AttributeSelectionPtr anAttrPoint = + aBase->selection(ConstructionPlugin_Plane::COINCIDENT_POINT()); + + theDumper << ", " << anAttrPlane << ", " << anAttrPoint; + } else if(aCreationMethodOption == ConstructionPlugin_Plane::CREATION_METHOD_BY_ROTATION()) { + AttributeSelectionPtr anAttrAxis = aBase->selection(ConstructionPlugin_Plane::AXIS()); + AttributeDoublePtr anAttrAngle = aBase->real(ConstructionPlugin_Plane::ANGLE()); + + theDumper << ", " << anAttrPlane << ", " << anAttrAxis << ", " << anAttrAngle; + } + } else if(aCreationMethod == + ConstructionPlugin_Plane::CREATION_METHOD_BY_TWO_PARALLEL_PLANES()) { + AttributeSelectionPtr anAttrPlane1 = aBase->selection(ConstructionPlugin_Plane::PLANE1()); + AttributeSelectionPtr anAttrPlane2 = aBase->selection(ConstructionPlugin_Plane::PLANE2()); + + theDumper << ", " << anAttrPlane1 << ", " << anAttrPlane2; + } + + theDumper << ")" << std::endl; +} + //================================================================================================== PlanePtr addPlane(const std::shared_ptr& thePart, const ModelHighAPI_Selection& theFace,