X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchAPI%2FSketchAPI_Rotation.cpp;h=5215bbf5b18cf056ee38ad1282a8e87c48d72c64;hb=ff4d5d0f42cf5d24b86b2bd2b6e1f58e74f52032;hp=b7b5c546b4bfaa6ddf2c404f398849804adc8133;hpb=84fc5a28f68ca5301b9466f92b511ccf411de0fc;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Rotation.cpp b/src/SketchAPI/SketchAPI_Rotation.cpp index b7b5c546b..5215bbf5b 100644 --- a/src/SketchAPI/SketchAPI_Rotation.cpp +++ b/src/SketchAPI/SketchAPI_Rotation.cpp @@ -1,17 +1,22 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D // Name : SketchAPI_Rotation.cpp -// Purpose: +// Purpose: // // History: // 16/06/16 - Sergey POKHODENKO - Creation of the file //-------------------------------------------------------------------------------------- #include "SketchAPI_Rotation.h" +#include //-------------------------------------------------------------------------------------- +#include #include + +#include //-------------------------------------------------------------------------------------- SketchAPI_Rotation::SketchAPI_Rotation( const std::shared_ptr & theFeature) -: SketchAPI_SketchEntity(theFeature) +: ModelHighAPI_Interface(theFeature) { initialize(); } @@ -23,17 +28,16 @@ SketchAPI_Rotation::SketchAPI_Rotation( const ModelHighAPI_Double & theAngle, const ModelHighAPI_Integer & theNumberOfObjects, bool theFullValue) -: SketchAPI_SketchEntity(theFeature) +: ModelHighAPI_Interface(theFeature) { if (initialize()) { fillAttribute(theObjects, rotationList()); fillAttribute(theCenter, center()); fillAttribute(theAngle, angle()); fillAttribute(theNumberOfObjects, numberOfObjects()); - if (theFullValue) - fillAttribute("SingleAngle", valueType()); + fillAttribute(theFullValue ? "FullAngle" : "SingleAngle", valueType()); - execute(); + execute(true); } } @@ -42,4 +46,68 @@ SketchAPI_Rotation::~SketchAPI_Rotation() } +std::list > SketchAPI_Rotation::rotated() const +{ + std::list aList = rotatedObjects()->list(); + // remove all initial features + std::list anIntermediate; + std::list::const_iterator anIt = aList.begin(); + for (; anIt != aList.end(); ++anIt) { + FeaturePtr aFeature = ModelAPI_Feature::feature(*anIt); + AttributeBooleanPtr isCopy = aFeature->boolean(SketchPlugin_SketchEntity::COPY_ID()); + if (isCopy.get() && isCopy->value()) + anIntermediate.push_back(aFeature); + } + return SketchAPI_SketchEntity::wrap(anIntermediate); +} + //-------------------------------------------------------------------------------------- + +void SketchAPI_Rotation::dump(ModelHighAPI_Dumper& theDumper) const +{ + FeaturePtr aBase = feature(); + const std::string& aSketchName = theDumper.parentName(aBase); + + AttributeRefListPtr aRotObjects = rotationList(); + AttributeRefAttrPtr aCenter = center(); + AttributeDoublePtr anAngle = angle(); + AttributeIntegerPtr aNbCopies = numberOfObjects(); + bool isFullValue = valueType()->value() != "SingleAngle"; + + theDumper << aBase << " = " << aSketchName << ".addRotation(" + << aRotObjects << ", " << aCenter << ", " << anAngle << ", " << aNbCopies; + if (isFullValue) + theDumper << ", " << isFullValue; + theDumper << ")" << std::endl; + + // Dump variables for a list of rotated features + theDumper << "["; + std::list > aList = rotated(); + std::list >::const_iterator anIt = aList.begin(); + for (; anIt != aList.end(); ++anIt) { + if (anIt != aList.begin()) + theDumper << ", "; + theDumper << (*anIt)->feature(); + } + theDumper << "] = " << theDumper.name(aBase) << ".rotated()" << std::endl; + + // Set necessary "auxiliary" flag for rotated features + // (flag is set if it differs to base entity) + std::list aRotList = aRotObjects->list(); + std::list::const_iterator aRIt = aRotList.begin(); + anIt = aList.begin(); + for (; aRIt != aRotList.end(); ++aRIt) { + FeaturePtr aFeature = ModelAPI_Feature::feature(*aRIt); + if (!aFeature) + continue; + bool aBaseAux = aFeature->boolean(SketchPlugin_SketchEntity::AUXILIARY_ID())->value(); + + for (int i = 1; i < aNbCopies->value(); ++i, ++anIt) { + aFeature = (*anIt)->feature(); + bool aFeatAux = aFeature->boolean(SketchPlugin_SketchEntity::AUXILIARY_ID())->value(); + if (aFeatAux != aBaseAux) + theDumper << theDumper.name((*anIt)->feature(), false) + << ".setAuxiliary(" << aFeatAux << ")" <