X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FConstructionAPI%2FConstructionAPI_Axis.cpp;h=08e53d760071e1a4ebcfa68b32663b32d07a3f8a;hb=bb4d0036dd0785056ab21fc237ec7fcc0870ae5f;hp=132adba5124a93bf623cbb65a9f05b0913d46054;hpb=7d320d0406ddf756ca4fb478ed8d366f03e09b22;p=modules%2Fshaper.git diff --git a/src/ConstructionAPI/ConstructionAPI_Axis.cpp b/src/ConstructionAPI/ConstructionAPI_Axis.cpp index 132adba51..08e53d760 100644 --- a/src/ConstructionAPI/ConstructionAPI_Axis.cpp +++ b/src/ConstructionAPI/ConstructionAPI_Axis.cpp @@ -1,11 +1,25 @@ -// Name : ConstructionAPI_Axis.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: -// 15/06/16 - Sergey POKHODENKO - Creation of the file #include "ConstructionAPI_Axis.h" +#include #include //================================================================================================== @@ -85,7 +99,34 @@ ConstructionAPI_Axis::ConstructionAPI_Axis(const std::shared_ptr& theFeature, + const ModelHighAPI_Selection& thePlane1, + const ModelHighAPI_Selection& thePlane2, + const ModelHighAPI_Double& theOffset2, + const bool theReverseOffset2) +: ModelHighAPI_Interface(theFeature) +{ + if(initialize()) { + setByTwoPlanes(thePlane1, thePlane2, theOffset2, theReverseOffset2); + } +} + +//================================================================================================== +ConstructionAPI_Axis::ConstructionAPI_Axis(const std::shared_ptr& theFeature, + const ModelHighAPI_Selection& thePlane1, + const ModelHighAPI_Double& theOffset1, + const bool theReverseOffset1, + const ModelHighAPI_Selection& thePlane2) +: ModelHighAPI_Interface(theFeature) +{ + if(initialize()) { + setByTwoPlanes(thePlane1, theOffset1, theReverseOffset1, thePlane2); } } @@ -120,7 +161,8 @@ void ConstructionAPI_Axis::setByPointAndDirection(const ModelHighAPI_Selection& const ModelHighAPI_Double& theY, const ModelHighAPI_Double& theZ) { - fillAttribute(ConstructionPlugin_Axis::CREATION_METHOD_BY_POINT_AND_DIRECTION(), creationMethod()); + fillAttribute(ConstructionPlugin_Axis::CREATION_METHOD_BY_POINT_AND_DIRECTION(), + creationMethod()); fillAttribute(thePoint, firstPoint()); fillAttribute(theX, xDirection()); fillAttribute(theY, yDirection()); @@ -196,14 +238,118 @@ void ConstructionAPI_Axis::setByTwoPlanes(const ModelHighAPI_Selection& thePlane execute(); } +//================================================================================================== +void ConstructionAPI_Axis::setByTwoPlanes(const ModelHighAPI_Selection& thePlane1, + const ModelHighAPI_Selection& thePlane2, + const ModelHighAPI_Double& theOffset2, + const bool theReverseOffset2) +{ + fillAttribute(ConstructionPlugin_Axis::CREATION_METHOD_BY_TWO_PLANES(), creationMethod()); + fillAttribute(thePlane1, plane1()); + fillAttribute("", useOffset1()); + fillAttribute(thePlane2, plane2()); + fillAttribute(ConstructionPlugin_Axis::USE_OFFSET2(), useOffset2()); + fillAttribute(theOffset2, offset2()); + fillAttribute(theReverseOffset2, reverseOffset2()); + + execute(); +} + +//================================================================================================== +void ConstructionAPI_Axis::setByTwoPlanes(const ModelHighAPI_Selection& thePlane1, + const ModelHighAPI_Double& theOffset1, + const bool theReverseOffset1, + const ModelHighAPI_Selection& thePlane2) +{ + fillAttribute(ConstructionPlugin_Axis::CREATION_METHOD_BY_TWO_PLANES(), creationMethod()); + fillAttribute(thePlane1, plane1()); + fillAttribute(ConstructionPlugin_Axis::USE_OFFSET1(), useOffset1()); + fillAttribute(theOffset1, offset1()); + fillAttribute(theReverseOffset1, reverseOffset1()); + fillAttribute(thePlane2, plane2()); + fillAttribute("", useOffset2()); + + execute(); +} + +//================================================================================================== +void ConstructionAPI_Axis::dump(ModelHighAPI_Dumper& theDumper) const +{ + FeaturePtr aBase = feature(); + const std::string& aDocName = theDumper.name(aBase->document()); + + theDumper << aBase << " = model.addAxis(" << aDocName; + + std::string aCreationMethod = aBase->string(ConstructionPlugin_Axis::METHOD())->value(); + + if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_DIMENSIONS()) { + AttributeDoublePtr anAttrDX = aBase->real(ConstructionPlugin_Axis::DX()); + AttributeDoublePtr anAttrDY = aBase->real(ConstructionPlugin_Axis::DY()); + AttributeDoublePtr anAttrDZ = aBase->real(ConstructionPlugin_Axis::DZ()); + + theDumper << ", " << anAttrDX << ", " << anAttrDY << ", " << anAttrDZ; + } else if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_TWO_POINTS()) { + AttributeSelectionPtr anAttrFirstPnt = + aBase->selection(ConstructionPlugin_Axis::POINT_FIRST()); + AttributeSelectionPtr anAttrSecondPnt = + aBase->selection(ConstructionPlugin_Axis::POINT_SECOND()); + + theDumper << ", " << anAttrFirstPnt << ", " << anAttrSecondPnt; + } else if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_LINE()) { + AttributeSelectionPtr anAttrLine = aBase->selection(ConstructionPlugin_Axis::LINE()); + + theDumper << ", " << anAttrLine; + } else if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_CYLINDRICAL_FACE()) { + AttributeSelectionPtr anAttrFace = + aBase->selection(ConstructionPlugin_Axis::CYLINDRICAL_FACE()); + + theDumper << ", " << anAttrFace; + } else if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_PLANE_AND_POINT()) { + AttributeSelectionPtr anAttrPlane = aBase->selection(ConstructionPlugin_Axis::PLANE()); + AttributeSelectionPtr anAttrPoint = aBase->selection(ConstructionPlugin_Axis::POINT()); + + theDumper << ", " << anAttrPlane << ", " << anAttrPoint; + } else if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_TWO_PLANES()) { + AttributeSelectionPtr anAttrPlane1 = aBase->selection(ConstructionPlugin_Axis::PLANE1()); + AttributeSelectionPtr anAttrPlane2 = aBase->selection(ConstructionPlugin_Axis::PLANE2()); + + theDumper << ", " << anAttrPlane1; + if(aBase->string(ConstructionPlugin_Axis::USE_OFFSET1())->isInitialized() + && !aBase->string(ConstructionPlugin_Axis::USE_OFFSET1())->value().empty()) { + AttributeDoublePtr anAttrOffset1 = aBase->real(ConstructionPlugin_Axis::OFFSET1()); + AttributeBooleanPtr anAttrReverseOffset1 = + aBase->boolean(ConstructionPlugin_Axis::REVERSE_OFFSET1()); + theDumper << ", " << anAttrOffset1 << ", " << anAttrReverseOffset1; + } + + theDumper << ", " << anAttrPlane2; + if(aBase->string(ConstructionPlugin_Axis::USE_OFFSET2())->isInitialized() + && !aBase->string(ConstructionPlugin_Axis::USE_OFFSET2())->value().empty()) { + AttributeDoublePtr anAttrOffset2 = aBase->real(ConstructionPlugin_Axis::OFFSET2()); + AttributeBooleanPtr anAttrReverseOffset2 = + aBase->boolean(ConstructionPlugin_Axis::REVERSE_OFFSET2()); + theDumper << ", " << anAttrOffset2 << ", " << anAttrReverseOffset2; + } + } else if(aCreationMethod == ConstructionPlugin_Axis::CREATION_METHOD_BY_POINT_AND_DIRECTION()) { + AttributeSelectionPtr anAttrFirstPnt = aBase->selection(ConstructionPlugin_Axis::POINT_FIRST()); + AttributeDoublePtr anAttrX = aBase->real(ConstructionPlugin_Axis::X_DIRECTION()); + AttributeDoublePtr anAttrY = aBase->real(ConstructionPlugin_Axis::Y_DIRECTION()); + AttributeDoublePtr anAttrZ = aBase->real(ConstructionPlugin_Axis::Z_DIRECTION()); + + theDumper << ", " << anAttrFirstPnt << ", " << anAttrX << ", " << anAttrY << ", " << anAttrZ; + } + + theDumper << ")" << std::endl; +} + //================================================================================================== AxisPtr addAxis(const std::shared_ptr& thePart, - const ModelHighAPI_Selection& thePoint1, - const ModelHighAPI_Selection& thePoint2) + const ModelHighAPI_Selection& theObject1, + const ModelHighAPI_Selection& theObject2) { // TODO(spo): check that thePart is not empty std::shared_ptr aFeature = thePart->addFeature(ConstructionAPI_Axis::ID()); - return AxisPtr(new ConstructionAPI_Axis(aFeature, thePoint1, thePoint2)); + return AxisPtr(new ConstructionAPI_Axis(aFeature, theObject1, theObject2)); } //================================================================================================== @@ -252,3 +398,29 @@ AxisPtr addAxis(const std::shared_ptr& thePart, return AxisPtr(new ConstructionAPI_Axis(aFeature, thePlane1, theOffset1, theReverseOffset1, thePlane2, theOffset2, theReverseOffset2)); } + +//================================================================================================== +AxisPtr addAxis(const std::shared_ptr& thePart, + const ModelHighAPI_Selection& thePlane1, + const ModelHighAPI_Selection& thePlane2, + const ModelHighAPI_Double& theOffset2, + const bool theReverseOffset2) +{ + // TODO(spo): check that thePart is not empty + std::shared_ptr aFeature = thePart->addFeature(ConstructionAPI_Axis::ID()); + return AxisPtr(new ConstructionAPI_Axis(aFeature, thePlane1, + thePlane2, theOffset2, theReverseOffset2)); +} + +//================================================================================================== +AxisPtr addAxis(const std::shared_ptr& thePart, + const ModelHighAPI_Selection& thePlane1, + const ModelHighAPI_Double& theOffset1, + const bool theReverseOffset1, + const ModelHighAPI_Selection& thePlane2) +{ + // TODO(spo): check that thePart is not empty + std::shared_ptr aFeature = thePart->addFeature(ConstructionAPI_Axis::ID()); + return AxisPtr(new ConstructionAPI_Axis(aFeature, thePlane1, theOffset1, theReverseOffset1, + thePlane2)); +}