+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
+
// File: SketchPlugin_Sketch.cxx
// Created: 27 Mar 2014
// Author: Mikhail PONIKAROV
return aNew;
}
+void SketchPlugin_Sketch::removeFeature(ModelAPI_Feature* theFeature)
+{
+ if (!data().get()) // sketch is already removed (case on undo of sketch), sync is not needed
+ return;
+ list<ObjectPtr> aSubs = data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->list();
+ list<ObjectPtr>::iterator aSubIt = aSubs.begin(), aLastIt = aSubs.end();
+ bool isRemoved = false;
+ bool aHasEmtpyFeature = false;
+ for(; aSubIt != aLastIt && !isRemoved; aSubIt++) {
+ std::shared_ptr<ModelAPI_Feature> aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*aSubIt);
+ if (aFeature.get() != NULL && aFeature.get() == theFeature) {
+ data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->remove(aFeature);
+ isRemoved = true;
+ }
+ else if (aFeature.get() == NULL)
+ aHasEmtpyFeature = true;
+ }
+ // if the object is not found in the sketch sub-elements, that means that the object is removed already.
+ // Find the first empty element and remove it
+ if (!isRemoved && aHasEmtpyFeature)
+ data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->remove(ObjectPtr());
+}
+
int SketchPlugin_Sketch::numberOfSubs() const
{
return data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->size();
return std::shared_ptr<GeomAPI_Pln>(new GeomAPI_Pln(anOrigin->pnt(), aNorm->dir()));
}
-//void addPlane(double theX, double theY, double theZ,
-// std::list<std::shared_ptr<GeomAPI_Shape> >& theShapes)
-//{
-// std::shared_ptr<GeomAPI_Pnt> anOrigin(new GeomAPI_Pnt(0, 0, 0));
-// std::shared_ptr<GeomAPI_Dir> aNormal(new GeomAPI_Dir(theX, theY, theZ));
-// double aSize = Config_PropManager::integer("Sketch planes", "Size of planes", PLANE_SIZE);
-// std::shared_ptr<GeomAPI_Shape> aFace = GeomAlgoAPI_FaceBuilder::square(anOrigin, aNormal,
-// aSize);
-// theShapes.push_back(aFace);
-//}
-
-//AISObjectPtr SketchPlugin_Sketch::getAISObject(AISObjectPtr thePrevious)
-//{
-// std::shared_ptr<GeomDataAPI_Dir> aNorm = std::dynamic_pointer_cast<GeomDataAPI_Dir>(
-// data()->attribute(SketchPlugin_Sketch::NORM_ID()));
-//
-// if (!aNorm || (aNorm->x() == 0 && aNorm->y() == 0 && aNorm->z() == 0)) {
-// AISObjectPtr aAIS = thePrevious;
-// if (!aAIS) {
-// std::list<std::shared_ptr<GeomAPI_Shape> > aFaces;
-//
-// addPlane(1, 0, 0, aFaces); // YZ plane
-// addPlane(0, 1, 0, aFaces); // XZ plane
-// addPlane(0, 0, 1, aFaces); // XY plane
-// std::shared_ptr<GeomAPI_Shape> aCompound = GeomAlgoAPI_CompoundBuilder::compound(aFaces);
-// aAIS = AISObjectPtr(new GeomAPI_AISObject());
-// aAIS->createShape(aCompound);
-//
-// std::vector<int> aRGB = Config_PropManager::color("Sketch planes", "planes_color",
-// SKETCH_PLANE_COLOR);
-// aAIS->setColor(aRGB[0], aRGB[1], aRGB[2]);
-//
-// aAIS->setWidth(Config_PropManager::integer("Sketch planes", "planes_thickness",
-// SKETCH_WIDTH));
-// }
-// return aAIS;
-// }
-// return AISObjectPtr();
-//}
-
void SketchPlugin_Sketch::erase()
{
std::shared_ptr<ModelAPI_AttributeRefList> aRefList = std::dynamic_pointer_cast<
for (; anIt != aFeatures.end(); anIt++) {
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*anIt);
if (aFeature) {
- // subs are referenced from sketch, but must be removed for sure, so not checkings
- document()->removeFeature(aFeature, false);
+ // subs are referenced from sketch, but must be removed for sure, so not checkings
+ document()->removeFeature(aFeature);
}
}
ModelAPI_CompositeFeature::erase();