ModelAPI_AttributeDouble::typeId());
data()->addAttribute(FeaturesPlugin_MultiTranslation::NB_COPIES_FIRST_DIR_ID(),
ModelAPI_AttributeInteger::typeId());
-
+
data()->addAttribute(FeaturesPlugin_MultiTranslation::USE_SECOND_DIR_ID(),
ModelAPI_AttributeString::typeId());
data()->addAttribute(FeaturesPlugin_MultiTranslation::AXIS_SECOND_DIR_ID(),
// Getting step.
double aStep = real(FeaturesPlugin_MultiTranslation::STEP_FIRST_DIR_ID())->value();
-
+
// Getting number of copies.
- int nbCopies =
+ int nbCopies =
integer(FeaturesPlugin_MultiTranslation::NB_COPIES_FIRST_DIR_ID())->value();
-
+
// Moving each object.
-
int aResultIndex = 0;
std::list<ResultPtr>::iterator aContext = aContextes.begin();
for(ListOfShape::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end();
anObjectsIt++, aContext++) {
std::shared_ptr<GeomAPI_Shape> aBaseShape = *anObjectsIt;
-
+
ListOfShape aListOfShape;
std::list<std::shared_ptr<GeomAlgoAPI_Translation> > aListOfTranslationAlgo;
-
+
for (int i=0; i<nbCopies; i++) {
std::shared_ptr<GeomAlgoAPI_Translation> aTranslationAlgo(
new GeomAlgoAPI_Translation(aBaseShape, anAxis, i*aStep));
-
+
if (!aTranslationAlgo->check()) {
setError(aTranslationAlgo->getError());
break;
}
-
+
aTranslationAlgo->build();
-
+
// Checking that the algorithm worked properly.
if (!aTranslationAlgo->isDone()) {
static const std::string aFeatureError = "Error : Multitranslation algorithm failed.";
ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
aResultBody->storeModified(aBaseShape, aCompound);
loadNamingDS(aListOfTranslationAlgo, aResultBody, aBaseShape);
-
+
setResult(aResultBody, aResultIndex);
aResultIndex++;
}
//=================================================================================================
void FeaturesPlugin_MultiTranslation::performTwoDirection()
-{
+{
// Getting objects.
ListOfShape anObjects;
std::list<ResultPtr> aContextes;
// Getting step.
double aFirstStep = real(FeaturesPlugin_MultiTranslation::STEP_FIRST_DIR_ID())->value();
double aSecondStep = real(FeaturesPlugin_MultiTranslation::STEP_SECOND_DIR_ID())->value();
-
+
// Getting number of copies.
- int aFirstNbCopies =
+ int aFirstNbCopies =
integer(FeaturesPlugin_MultiTranslation::NB_COPIES_FIRST_DIR_ID())->value();
- int aSecondNbCopies =
+ int aSecondNbCopies =
integer(FeaturesPlugin_MultiTranslation::NB_COPIES_SECOND_DIR_ID())->value();
-
+
// Coord aFirstAxis
double x1 = aFirstAxis->dir()->x();
double y1 = aFirstAxis->dir()->y();
double z1 = aFirstAxis->dir()->z();
double norm1 = sqrt(x1*x1 + y1*y1 + z1*z1);
-
+
// Coord aSecondAxis
double x2 = aSecondAxis->dir()->x();
double y2 = aSecondAxis->dir()->y();
double z2 = aSecondAxis->dir()->z();
double norm2 = sqrt(x2*x2 + y2*y2 + z2*z2);
-
+
// Moving each object.
int aResultIndex = 0;
std::list<ResultPtr>::iterator aContext = aContextes.begin();
for(ListOfShape::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end();
anObjectsIt++, aContext++) {
std::shared_ptr<GeomAPI_Shape> aBaseShape = *anObjectsIt;
-
+
ListOfShape aListOfShape;
std::list<std::shared_ptr<GeomAlgoAPI_Translation> > aListOfTranslationAlgo;
-
+
for (int j=0; j<aSecondNbCopies; j++) {
for (int i=0; i<aFirstNbCopies; i++) {
double dx = i*aFirstStep*x1/norm1+j*aSecondStep*x2/norm2;
double dz = i*aFirstStep*z1/norm1+j*aSecondStep*z2/norm2;
std::shared_ptr<GeomAlgoAPI_Translation> aTranslationAlgo(
new GeomAlgoAPI_Translation(aBaseShape, dx, dy, dz));
-
+
if (!aTranslationAlgo->check()) {
setError(aTranslationAlgo->getError());
break;
}
-
+
aTranslationAlgo->build();
-
+
// Checking that the algorithm worked properly.
if (!aTranslationAlgo->isDone()) {
static const std::string aFeatureError = "Error : Multitranslation algorithm failed.";
int aTag = 1;
int anIndex = 1;
std::string aTranslatedName;
-
+
for (std::list<std::shared_ptr<GeomAlgoAPI_Translation> >::const_iterator anIt =
theListOfTranslationAlgo.begin(); anIt != theListOfTranslationAlgo.cend(); ++anIt) {
std::shared_ptr<GeomAPI_DataMapOfShapeShape> aSubShapes = (*anIt)->mapOfSubShapes();
theResultBody->loadAndOrientModifiedShapes((*anIt).get(), theBaseShape, GeomAPI_Shape::VERTEX,
aTag++, aTranslatedName, *aSubShapes.get(),
false, true);
-
+
++anIndex;
}
-}
\ No newline at end of file
+}