-// Copyright (C) 2014-201x CEA/DEN, EDF R&D
-
-// File: FeaturesPlugin_Scale.cpp
-// Created: 13 Jan 2017
-// Author: Clarisse Genrault (CEA)
+// Copyright (C) 2014-2017 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<mailto:webmaster.salome@opencascade.com>
+//
#include <FeaturesPlugin_Scale.h>
#include <ModelAPI_ResultBody.h>
#include <ModelAPI_ResultPart.h>
+#include <FeaturesPlugin_Tools.h>
+
//=================================================================================================
FeaturesPlugin_Scale::FeaturesPlugin_Scale()
{
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_Scale aScaleAlgo(aBaseShape, aCenterPoint, aScaleFactor);
-
- if (!aScaleAlgo.check()) {
- setError(aScaleAlgo.getError());
- return;
- }
-
- aScaleAlgo.build();
-
- // Checking that the algorithm worked properly.
- if(!aScaleAlgo.isDone()) {
- static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
- setError(aFeatureError);
- break;
- }
- if(aScaleAlgo.shape()->isNull()) {
- static const std::string aShapeError = "Error: Resulting shape is Null.";
- setError(aShapeError);
- break;
- }
- if(!aScaleAlgo.isValid()) {
- std::string aFeatureError = "Error: Resulting shape is not valid.";
- setError(aFeatureError);
- break;
- }
-
- ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
- loadNamingDS(aScaleAlgo, aResultBody, aBaseShape);
- setResult(aResultBody, aResultIndex);
+ GeomAlgoAPI_Scale aScaleAlgo(aBaseShape, aCenterPoint, aScaleFactor);
+
+ if (!aScaleAlgo.check()) {
+ setError(aScaleAlgo.getError());
+ return;
+ }
+
+ aScaleAlgo.build();
+
+ // Checking that the algorithm worked properly.
+ if(!aScaleAlgo.isDone()) {
+ static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
+ setError(aFeatureError);
+ break;
+ }
+ if(aScaleAlgo.shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
+ setError(aShapeError);
+ break;
}
+ if(!aScaleAlgo.isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
+ setError(aFeatureError);
+ break;
+ }
+
+ ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aScaleAlgo, aResultBody, aBaseShape);
+ setResult(aResultBody, aResultIndex);
aResultIndex++;
}
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_Scale aScaleAlgo(aBaseShape, aCenterPoint,
- aScaleFactorX, aScaleFactorY, aScaleFactorZ);
-
- if (!aScaleAlgo.check()) {
- setError(aScaleAlgo.getError());
- return;
- }
-
- aScaleAlgo.build();
-
- // Checking that the algorithm worked properly.
- if(!aScaleAlgo.isDone()) {
- static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
- setError(aFeatureError);
- break;
- }
- if(aScaleAlgo.shape()->isNull()) {
- static const std::string aShapeError = "Error: Resulting shape is Null.";
- setError(aShapeError);
- break;
- }
- if(!aScaleAlgo.isValid()) {
- std::string aFeatureError = "Error: Resulting shape is not valid.";
- setError(aFeatureError);
- break;
- }
-
- ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
- loadNamingDS(aScaleAlgo, aResultBody, aBaseShape);
- setResult(aResultBody, aResultIndex);
+ GeomAlgoAPI_Scale aScaleAlgo(aBaseShape, aCenterPoint,
+ aScaleFactorX, aScaleFactorY, aScaleFactorZ);
+
+ if (!aScaleAlgo.check()) {
+ setError(aScaleAlgo.getError());
+ return;
+ }
+
+ aScaleAlgo.build();
+
+ // Checking that the algorithm worked properly.
+ if(!aScaleAlgo.isDone()) {
+ static const std::string aFeatureError = "Error: Symmetry algorithm failed.";
+ setError(aFeatureError);
+ break;
}
+ if(aScaleAlgo.shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
+ setError(aShapeError);
+ break;
+ }
+ if(!aScaleAlgo.isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
+ setError(aFeatureError);
+ break;
+ }
+
+ ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aScaleAlgo, aResultBody, aBaseShape);
+ setResult(aResultBody, aResultIndex);
aResultIndex++;
}
// Name the faces
std::shared_ptr<GeomAPI_DataMapOfShapeShape> aSubShapes = theScaleAlgo.mapOfSubShapes();
- int aReflectedTag = 1;
- std::string aReflectedName = "Scaled";
- theResultBody->loadAndOrientModifiedShapes(&theScaleAlgo,
- theBaseShape, GeomAPI_Shape::FACE,
- aReflectedTag, aReflectedName, *aSubShapes.get());
-}
\ No newline at end of file
+ std::string aScaledName = "Scaled";
+ FeaturesPlugin_Tools::storeModifiedShapes(theScaleAlgo, theResultBody,
+ theBaseShape, 1, 2, 3, aScaledName,
+ *aSubShapes.get());
+}