#include <vector>
#include <map>
+#include <TopTools_DataMapOfShapeListOfShape.hxx>
+
/**\class Model_ResultBody
* \ingroup DataModel
* \brief The body (shape) result of a feature.
* Provides a shape that may be displayed in the viewer.
* May provide really huge results, so, working with this kind
* of result must be optimized.
-* Also provides a conainer of sub-body result in case it is compound or compsolid.
+* Also provides a container of sub-body result in case it is compound or compsolid.
*/
class Model_ResultBody : public ModelAPI_ResultBody
{
std::map<ObjectPtr, int> mySubsMap;
/// Keeps the last state of the concealment flag in order to update it when needed.
bool myLastConcealed;
+ /// History information for update subs
+ std::shared_ptr<GeomAlgoAPI_MakeShape> myAlgo;
+ /// All old shapes used for the root result construction
+ std::list<GeomShapePtr> myOlds;
+ /// Information about the kind of the history information: modified or generated
+ bool myIsGenerated;
+ /// Map from old shape to list of new shapes, cash for computeOldForSub method
+ TopTools_DataMapOfShapeListOfShape myHistoryCash;
public:
/// Records the subshape newShape which was generated during a topological construction.
/// As an example, consider the case of a face generated in construction of a box.
- MODEL_EXPORT virtual void generated(const GeomShapePtr& theNewShape,
- const std::string& theName) override;
+ MODEL_EXPORT virtual bool generated(const GeomShapePtr& theNewShape,
+ const std::string& theName, const bool theCheckIsInResult = true) override;
/// load generated shapes
MODEL_EXPORT
MODEL_EXPORT virtual ResultBodyPtr subResult(const int theIndex,
bool forTree = false) const;
- /// Returns true if feature or reuslt belong to this composite feature as subs
+ /// Returns true if feature or result belong to this composite feature as subs
/// Returns theIndex - zero based index of sub if found
MODEL_EXPORT virtual bool isSub(ObjectPtr theObject, int& theIndex) const;
- /// Returns the parameters of color definition in the resources config manager
+ /// Returns the parameters of color definition in the resources configuration manager
MODEL_EXPORT virtual void colorConfigInfo(std::string& theSection, std::string& theName,
std::string& theDefault);
/// Sets all subs as concealed in the data tree (referenced by other objects)
MODEL_EXPORT virtual void setIsConcealed(const bool theValue);
- /// Returns true if the latest modification of this body in the naming history
- // is equal to the given shape
- MODEL_EXPORT virtual bool isLatestEqual(const std::shared_ptr<GeomAPI_Shape>& theShape);
-
/// Returns true is the topology is connected.
MODEL_EXPORT virtual bool isConnectedTopology();
+ /// Cleans cash related to the already stored elements
+ MODEL_EXPORT virtual void cleanCash() override;
+
protected:
/// Makes a body on the given feature
Model_ResultBody();
void updateSubs(const std::shared_ptr<GeomAPI_Shape>& theThisShape,
const bool theShapeChanged = true);
- // Checks the state of children and partents to send events of creation/erase when needed
+ /// Updates the sub-bodies in accordance to the algorithm history information
+ void updateSubs(
+ const GeomShapePtr& theThisShape, const std::list<GeomShapePtr>& theOlds,
+ const std::shared_ptr<GeomAlgoAPI_MakeShape> theMakeShape, const bool isGenerated);
+
+ // Checks the state of children and parents to send events of creation/erase when needed
void updateConcealment();
+ /// Adds to theOldForSub only old shapes that where used for theSub creation
+ void computeOldForSub(const GeomShapePtr& theSub,
+ const std::list<GeomShapePtr>& theAllOlds, std::list<GeomShapePtr>& theOldForSub);
+
friend class Model_Objects;
};