+
+bool Model_BodyBuilder::isLatestEqual(const std::shared_ptr<GeomAPI_Shape>& theShape)
+{
+ if (theShape.get()) {
+ TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
+ std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(data());
+ if (aData) {
+ TDF_Label& aShapeLab = aData->shapeLab();
+ Handle(TNaming_NamedShape) aName;
+ if (aShapeLab.FindAttribute(TNaming_NamedShape::GetID(), aName)) {
+ TopoDS_Shape aLatest = TNaming_Tool::CurrentShape(aName);
+ if (aLatest.IsNull())
+ return false;
+ if (aLatest.IsEqual(aShape))
+ return true;
+ // check sub-shapes for comp-solids:
+ for (TopExp_Explorer anExp(aShape, aLatest.ShapeType()); anExp.More(); anExp.Next()) {
+ if (aLatest.IsEqual(anExp.Current()))
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}