#include <ModelAPI_Session.h>
#include <ModelAPI_Validator.h>
+#include <GeomAlgoAPI_CompoundBuilder.h>
#include <GeomAlgoAPI_Partition.h>
#include <GeomAlgoAPI_MakeShapeCustom.h>
#include <GeomAlgoAPI_MakeShapeList.h>
data()->addAttribute(COMBINE_ID(), ModelAPI_AttributeBoolean::typeId());
}
-//=================================================================================================
-std::shared_ptr<GeomAPI_Shape> FeaturesPlugin_Partition::getShape(const std::string& theAttrName)
-{
- std::shared_ptr<ModelAPI_AttributeReference> aObjRef =
- std::dynamic_pointer_cast<ModelAPI_AttributeReference>(data()->attribute(theAttrName));
- if (aObjRef) {
- std::shared_ptr<ModelAPI_ResultBody> aConstr =
- std::dynamic_pointer_cast<ModelAPI_ResultBody>(aObjRef->value());
- if (aConstr)
- return aConstr->shape();
- }
- return std::shared_ptr<GeomAPI_Shape>();
-}
-
//=================================================================================================
void FeaturesPlugin_Partition::execute()
{
aTool = GeomAlgoAPI_ShapeTools::fitPlaneToBox(aContext->shape(), aBoundingPoints);
std::shared_ptr<GeomAlgoAPI_MakeShapeCustom> aMkShCustom(new GeomAlgoAPI_MakeShapeCustom);
aMkShCustom->addModified(aContext->shape(), aTool);
- aMakeShapeList.append(aMkShCustom);
+ aMakeShapeList.appendAlgo(aMkShCustom);
aTools.push_back(aTool);
aToolsForNaming.push_back(aContext->shape());
}
bool isCombine = boolean(COMBINE_ID())->value();
if(anObjects.empty()/* || aTools.empty()*/) {
- std::string aFeatureError = "Not enough objects for partition operation";
+ std::string aFeatureError = "Error: Not enough objects for partition operation.";
setError(aFeatureError);
return;
}
if(isCombine) {
// Create single result.
- GeomAlgoAPI_Partition aPartitionAlgo(anObjects, aTools);
+ //if(!aTools.empty()) {
+ // // This is a workaround for naming. Passing compound of objects as argument instead each object separately.
+ // std::shared_ptr<GeomAPI_Shape> aCompoud = GeomAlgoAPI_CompoundBuilder::compound(anObjects);
+ // anObjects.clear();
+ // anObjects.push_back(aCompoud);
+ //}
+ std::shared_ptr<GeomAlgoAPI_Partition> aPartitionAlgo(new GeomAlgoAPI_Partition(anObjects, aTools));
// Checking that the algorithm worked properly.
- if (!aPartitionAlgo.isDone()) {
- static const std::string aFeatureError = "Partition algorithm failed";
+ if (!aPartitionAlgo->isDone()) {
+ static const std::string aFeatureError = "Error: Partition algorithm failed.";
setError(aFeatureError);
return;
}
- if (aPartitionAlgo.shape()->isNull()) {
- static const std::string aShapeError = "Resulting shape is Null";
+ if (aPartitionAlgo->shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
setError(aShapeError);
return;
}
- if (!aPartitionAlgo.isValid()) {
- std::string aFeatureError = "Warning: resulting shape is not valid";
+ if (!aPartitionAlgo->isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
setError(aFeatureError);
return;
}
- if (GeomAlgoAPI_ShapeTools::volume(aPartitionAlgo.shape()) > 1.e-7) {
+ if (GeomAlgoAPI_ShapeTools::volume(aPartitionAlgo->shape()) > 1.e-7) {
std::shared_ptr<ModelAPI_ResultBody> aResultBody = document()->createBody(data(), aResultIndex);
- aMakeShapeList.append(aPartitionAlgo.makeShape());
- GeomAPI_DataMapOfShapeShape aMapOfShapes = *aPartitionAlgo.mapOfShapes().get();
- loadNamingDS(aResultBody, anObjects.front(), aToolsForNaming, aPartitionAlgo.shape(), aMakeShapeList, aMapOfShapes);
+ aMakeShapeList.appendAlgo(aPartitionAlgo);
+ GeomAPI_DataMapOfShapeShape& aMapOfShapes = *aPartitionAlgo->mapOfSubShapes().get();
+ std::shared_ptr<GeomAPI_Shape> aBaseShape = anObjects.front();
+ anObjects.pop_front();
+ aToolsForNaming.insert(aToolsForNaming.end(), anObjects.begin(), anObjects.end());
+ loadNamingDS(aResultBody, aBaseShape, aToolsForNaming, aPartitionAlgo->shape(), aMakeShapeList, aMapOfShapes);
setResult(aResultBody, aResultIndex);
aResultIndex++;
}
for (ListOfShape::iterator anObjectsIt = anObjects.begin(); anObjectsIt != anObjects.end(); anObjectsIt++) {
std::shared_ptr<GeomAPI_Shape> anObject = *anObjectsIt;
ListOfShape aListWithObject; aListWithObject.push_back(anObject);
- GeomAlgoAPI_Partition aPartitionAlgo(aListWithObject, aTools);
+ std::shared_ptr<GeomAlgoAPI_Partition> aPartitionAlgo(new GeomAlgoAPI_Partition(aListWithObject, aTools));
// Checking that the algorithm worked properly.
- if (!aPartitionAlgo.isDone()) {
- static const std::string aFeatureError = "Partition algorithm failed";
+ if (!aPartitionAlgo->isDone()) {
+ static const std::string aFeatureError = "Error: Partition algorithm failed.";
setError(aFeatureError);
return;
}
- if (aPartitionAlgo.shape()->isNull()) {
- static const std::string aShapeError = "Resulting shape is Null";
+ if (aPartitionAlgo->shape()->isNull()) {
+ static const std::string aShapeError = "Error: Resulting shape is Null.";
setError(aShapeError);
return;
}
- if (!aPartitionAlgo.isValid()) {
- std::string aFeatureError = "Warning: resulting shape is not valid";
+ if (!aPartitionAlgo->isValid()) {
+ std::string aFeatureError = "Error: Resulting shape is not valid.";
setError(aFeatureError);
return;
}
- if (GeomAlgoAPI_ShapeTools::volume(aPartitionAlgo.shape()) > 1.e-7) {
+ if (GeomAlgoAPI_ShapeTools::volume(aPartitionAlgo->shape()) > 1.e-7) {
std::shared_ptr<ModelAPI_ResultBody> aResultBody = document()->createBody(data(), aResultIndex);
- aMakeShapeList.append(aPartitionAlgo.makeShape());
- GeomAPI_DataMapOfShapeShape aMapOfShapes = *aPartitionAlgo.mapOfShapes().get();
- loadNamingDS(aResultBody, anObject, aToolsForNaming, aPartitionAlgo.shape(), aMakeShapeList, aMapOfShapes);
+ GeomAlgoAPI_MakeShapeList aMakeShapeListCopy = aMakeShapeList;
+ aMakeShapeListCopy.appendAlgo(aPartitionAlgo);
+ GeomAPI_DataMapOfShapeShape aMapOfShapes = *aPartitionAlgo->mapOfSubShapes().get();
+ loadNamingDS(aResultBody, anObject, aToolsForNaming, aPartitionAlgo->shape(), aMakeShapeListCopy, aMapOfShapes);
setResult(aResultBody, aResultIndex);
aResultIndex++;
}