// This file is generated by WOK (CPPExt). // Please do not edit this file; modify original file instead. // The copyright and license terms as defined for the original file apply to // this header file considered to be the "object code" form of the original source. #ifndef _XCAFDoc_ShapeTool_HeaderFile #define _XCAFDoc_ShapeTool_HeaderFile #ifndef _Standard_HeaderFile #include #endif #ifndef _Standard_DefineHandle_HeaderFile #include #endif #ifndef _Handle_XCAFDoc_ShapeTool_HeaderFile #include #endif #ifndef _XCAFDoc_DataMapOfShapeLabel_HeaderFile #include #endif #ifndef _Standard_Boolean_HeaderFile #include #endif #ifndef _TDF_Attribute_HeaderFile #include #endif #ifndef _Standard_Integer_HeaderFile #include #endif #ifndef _Handle_TDF_Attribute_HeaderFile #include #endif #ifndef _Handle_TDF_RelocationTable_HeaderFile #include #endif #ifndef _Handle_XCAFDoc_GraphNode_HeaderFile #include #endif class Standard_GUID; class TDF_Label; class TopoDS_Shape; class TDF_LabelSequence; class TopLoc_Location; class TDF_Attribute; class TDF_RelocationTable; class TColStd_SequenceOfHAsciiString; class XCAFDoc_GraphNode; class TDF_AttributeSequence; class TopTools_SequenceOfShape; //! A tool to store shapes in an XDE
//! document in the form of assembly structure, and to maintain this structure.
//! The API provided by this class allows to work with this
//! structure regardless of its low-level implementation.
//! All the shapes are stored on child labels of a main label which is
//! XCAFDoc_DocumentTool::LabelShapes(). The label for assembly also has
//! sub-labels, each of which represents the instance of
//! another shape in that assembly (component). Such sub-label
//! stores reference to the label of the original shape in the form
//! of TDataStd_TreeNode with GUID XCAFDoc::ShapeRefGUID(), and its
//! location encapsulated into the NamedShape.
//! For correct work with an XDE document, it is necessary to use
//! methods for analysis and methods for working with shapes.
//! For example:
//! if ( STool->IsAssembly(aLabel) )
//! { Standard_Boolean subchilds = Standard_False; (default)
//! Standard_Integer nbc = STool->NbComponents
//! (aLabel[,subchilds]);
//! }
//! If subchilds is True, commands also consider sub-levels. By
//! default, only level one is checked.
//! In this example, number of children from the first level of
//! assembly will be returned. Methods for creation and initialization:
//! Constructor:
//! XCAFDoc_ShapeTool::XCAFDoc_ShapeTool()
//! Getting a guid:
//! Standard_GUID GetID ();
//! Creation (if does not exist) of ShapeTool on label L:
//! Handle(XCAFDoc_ShapeTool) XCAFDoc_ShapeTool::Set(const TDF_Label& L)
//! Analyze whether shape is a simple shape or an instance or a
//! component of an assembly or it is an assembly ( methods of analysis).
//! For example:
//! STool->IsShape(aLabel) ;
//! Analyze that the label represents a shape (simple
//! shape, assembly or reference) or
//! STool->IsTopLevel(aLabel);
//! Analyze that the label is a label of a top-level shape.
//! Work with simple shapes, assemblies and instances (
//! methods for work with shapes).
//! For example:
//! Add shape:
//! Standard_Boolean makeAssembly;
//! // True to interpret a Compound as an Assembly, False to take it
//! as a whole
//! aLabel = STool->AddShape(aShape, makeAssembly);
//! Get shape:
//! TDF_Label aLabel...
//! // A label must be present if
//! (aLabel.IsNull()) { ... no such label : abandon .. }
//! TopoDS_Shape aShape;
//! aShape = STool->GetShape(aLabel);
//! if (aShape.IsNull())
//! { ... this label is not for a Shape ... }
//! To get a label from shape.
//! Standard_Boolean findInstance = Standard_False;
//! (this is default value)
//! aLabel = STool->FindShape(aShape [,findInstance]);
//! if (aLabel.IsNull())
//! { ... no label found for this shape ... }
class XCAFDoc_ShapeTool : public TDF_Attribute { public: Standard_EXPORT static const Standard_GUID& GetID() ; //! Create (if not exist) ShapeTool from XCAFDoc on .
Standard_EXPORT static Handle_XCAFDoc_ShapeTool Set(const TDF_Label& L) ; //! Creates an empty tool
//! Creates a tool to work with a document
//! Attaches to label XCAFDoc::LabelShapes()
Standard_EXPORT XCAFDoc_ShapeTool(); //! Returns True if the label is a label of top-level shape,
//! as opposed to component of assembly or subshape
Standard_EXPORT Standard_Boolean IsTopLevel(const TDF_Label& L) const; //! Returns True if the label is not used by any assembly, i.e.
//! contains sublabels which are assembly components
//! This is relevant only if IsShape() is True
//! (There is no Father TreeNode on this )
Standard_EXPORT static Standard_Boolean IsFree(const TDF_Label& L) ; //! Returns True if the label represents a shape (simple shape,
//! assembly or reference)
Standard_EXPORT static Standard_Boolean IsShape(const TDF_Label& L) ; //! Returns True if the label is a label of simple shape
Standard_EXPORT static Standard_Boolean IsSimpleShape(const TDF_Label& L) ; //! Return true if is a located instance of other shape
//! i.e. reference
Standard_EXPORT static Standard_Boolean IsReference(const TDF_Label& L) ; //! Returns True if the label is a label of assembly, i.e.
//! contains sublabels which are assembly components
//! This is relevant only if IsShape() is True
Standard_EXPORT static Standard_Boolean IsAssembly(const TDF_Label& L) ; //! Return true if is reference serving as component
//! of assembly
Standard_EXPORT static Standard_Boolean IsComponent(const TDF_Label& L) ; //! Returns True if the label is a label of compound, i.e.
//! contains some sublabels
//! This is relevant only if IsShape() is True
Standard_EXPORT static Standard_Boolean IsCompound(const TDF_Label& L) ; //! Return true if is subshape of the top-level shape
Standard_EXPORT static Standard_Boolean IsSubShape(const TDF_Label& L) ; //! Checks whether shape is subshape of shape stored on
//! label shapeL
Standard_EXPORT Standard_Boolean IsSubShape(const TDF_Label& shapeL,const TopoDS_Shape& sub) const; Standard_EXPORT Standard_Boolean SearchUsingMap(const TopoDS_Shape& S,TDF_Label& L,const Standard_Boolean findWithoutLoc,const Standard_Boolean findSubshape) const; //! General tool to find a (sub) shape in the document
//! * If findInstance is True, and S has a non-null location,
//! first tries to find the shape among the top-level shapes
//! with this location
//! * If not found, and findComponent is True, tries to find the shape
//! among the components of assemblies
//! * If not found, tries to find the shape without location
//! among top-level shapes
//! * If not found and findSubshape is True, tries to find a
//! shape as a subshape of top-level simple shapes
//! Returns False if nothing is found
Standard_EXPORT Standard_Boolean Search(const TopoDS_Shape& S,TDF_Label& L,const Standard_Boolean findInstance = Standard_True,const Standard_Boolean findComponent = Standard_True,const Standard_Boolean findSubshape = Standard_True) const; //! Returns the label corresponding to shape S
//! (searches among top-level shapes, not including subcomponents
//! of assemblies)
//! If findInstance is False (default), searches for the
//! non-located shape (i.e. among original shapes)
//! If findInstance is True, searches for the shape with the same
//! location, including shape instances
//! Return True if is found.
Standard_EXPORT Standard_Boolean FindShape(const TopoDS_Shape& S,TDF_Label& L,const Standard_Boolean findInstance = Standard_False) const; //! Does the same as previous method
//! Returns Null label if not found
Standard_EXPORT TDF_Label FindShape(const TopoDS_Shape& S,const Standard_Boolean findInstance = Standard_False) const; //! To get TopoDS_Shape from shape's label
//! For component, returns new shape with correct location
//! Returns False if label does not contain shape
Standard_EXPORT static Standard_Boolean GetShape(const TDF_Label& L,TopoDS_Shape& S) ; //! To get TopoDS_Shape from shape's label
//! For component, returns new shape with correct location
//! Returns Null shape if label does not contain shape
Standard_EXPORT static TopoDS_Shape GetShape(const TDF_Label& L) ; //! Creates new (empty) top-level shape.
//! Initially it holds empty TopoDS_Compound
Standard_EXPORT TDF_Label NewShape() const; //! Sets representation (TopoDS_Shape) for top-level shape
Standard_EXPORT void SetShape(const TDF_Label& L,const TopoDS_Shape& S) ; //! Adds a new top-level (creates and returns a new label)
//! If makeAssembly is True, treats TopAbs_COMPOUND shapes
//! as assemblies (creates assembly structure).
//! NOTE: replace components without location
//! in assmebly by located components to avoid some problems.
Standard_EXPORT TDF_Label AddShape(const TopoDS_Shape& S,const Standard_Boolean makeAssembly = Standard_True,const Standard_Boolean makePrepare = Standard_True) ; //! Removes shape (whole label and all its sublabels)
//! Returns False (and does nothing) if shape is not free
//! or is not top-level shape
Standard_EXPORT Standard_Boolean RemoveShape(const TDF_Label& L) const; //! set hasComponents into false
Standard_EXPORT void Init() ; //! recursive
Standard_EXPORT void ComputeShapes(const TDF_Label& L) ; //! Compute a sequence of simple shapes
Standard_EXPORT void ComputeSimpleShapes() ; //! Returns a sequence of all top-level shapes
Standard_EXPORT void GetShapes(TDF_LabelSequence& Labels) const; //! Returns a sequence of all top-level shapes
//! which are free (i.e. not referred by any other)
Standard_EXPORT void GetFreeShapes(TDF_LabelSequence& FreeLabels) const; //! Returns list of labels which refer shape L as component
//! Returns number of users (0 if shape is free)
Standard_EXPORT static Standard_Integer GetUsers(const TDF_Label& L,TDF_LabelSequence& Labels,const Standard_Boolean getsubchilds = Standard_False) ; //! Returns location of instance
Standard_EXPORT static TopLoc_Location GetLocation(const TDF_Label& L) ; //! Returns label which corresponds to a shape referred by L
//! Returns False if label is not reference
Standard_EXPORT static Standard_Boolean GetReferredShape(const TDF_Label& L,TDF_Label& Label) ; //! Returns number of Assembles components
Standard_EXPORT static Standard_Integer NbComponents(const TDF_Label& L,const Standard_Boolean getsubchilds = Standard_False) ; //! Returns list of components of assembly
//! Returns False if label is not assembly
Standard_EXPORT static Standard_Boolean GetComponents(const TDF_Label& L,TDF_LabelSequence& Labels,const Standard_Boolean getsubchilds = Standard_False) ; //! Adds a component given by its label and location to the assembly
//! Note: assembly must be IsAssembly() or IsSimpleShape()
Standard_EXPORT TDF_Label AddComponent(const TDF_Label& assembly,const TDF_Label& comp,const TopLoc_Location& Loc) const; //! Adds a shape (located) as a component to the assembly
//! If necessary, creates an additional top-level shape for
//! component and return the Label of component.
//! If expand is True and component is Compound, it will
//! be created as assembly also
//! Note: assembly must be IsAssembly() or IsSimpleShape()
Standard_EXPORT TDF_Label AddComponent(const TDF_Label& assembly,const TopoDS_Shape& comp,const Standard_Boolean expand = Standard_False) ; //! Removes a component from its assembly
Standard_EXPORT void RemoveComponent(const TDF_Label& comp) const; //! Update an assembly at label
Standard_EXPORT void UpdateAssembly(const TDF_Label& L) const; //! Finds a label for subshape of shape stored on
//! label shapeL
//! Returns Null label if it is not found
Standard_EXPORT Standard_Boolean FindSubShape(const TDF_Label& shapeL,const TopoDS_Shape& sub,TDF_Label& L) const; //! Adds a label for subshape of shape stored on
//! label shapeL
//! Returns Null label if it is not subshape
Standard_EXPORT TDF_Label AddSubShape(const TDF_Label& shapeL,const TopoDS_Shape& sub) const; Standard_EXPORT TDF_Label FindMainShapeUsingMap(const TopoDS_Shape& sub) const; //! Performs a search among top-level shapes to find
//! the shape containing as subshape
//! Checks only simple shapes, and returns the first found
//! label (which should be the only one for valid model)
Standard_EXPORT TDF_Label FindMainShape(const TopoDS_Shape& sub) const; //! Returns list of labels identifying subshapes of the given shape
//! Returns False if no subshapes are placed on that label
Standard_EXPORT static Standard_Boolean GetSubShapes(const TDF_Label& L,TDF_LabelSequence& Labels) ; //! returns the label under which shapes are stored
Standard_EXPORT TDF_Label BaseLabel() const; Standard_EXPORT void Dump(const Standard_Boolean deep = Standard_False) const; //! Print in cout type of shape found on label
//! and the entry of , with tabs before.
//! If , print also TShape and Location addresses
Standard_EXPORT static void DumpShape(const TDF_Label& L,const Standard_Integer level = 0,const Standard_Boolean deep = Standard_False) ; Standard_EXPORT const Standard_GUID& ID() const; Standard_EXPORT void Restore(const Handle(TDF_Attribute)& with) ; Standard_EXPORT Handle_TDF_Attribute NewEmpty() const; Standard_EXPORT void Paste(const Handle(TDF_Attribute)& into,const Handle(TDF_RelocationTable)& RT) const; //! Returns True if the label is a label of external references, i.e.
//! there are some reference on the no-step files, which are
//! described in document only their names
Standard_EXPORT static Standard_Boolean IsExternRef(const TDF_Label& L) ; //! Sets the names of references on the no-step files
Standard_EXPORT TDF_Label SetExternRefs(const TColStd_SequenceOfHAsciiString& SHAS) const; //! Sets the names of references on the no-step files
Standard_EXPORT void SetExternRefs(const TDF_Label& L,const TColStd_SequenceOfHAsciiString& SHAS) const; //! Gets the names of references on the no-step files
Standard_EXPORT static void GetExternRefs(const TDF_Label& L,TColStd_SequenceOfHAsciiString& SHAS) ; //! Sets the SHUO structure between upper_usage and next_usage
//! create multy-level (if number of labels > 2) SHUO from first to last
//! Initialise out by main upper_usage SHUO attribute.
//! Returns FALSE if some of labels in not component label
Standard_EXPORT Standard_Boolean SetSHUO(const TDF_LabelSequence& Labels,Handle(XCAFDoc_GraphNode)& MainSHUOAttr) const; //! Returns founded SHUO GraphNode attribute
//! Returns false in other case
Standard_EXPORT static Standard_Boolean GetSHUO(const TDF_Label& SHUOLabel,Handle(XCAFDoc_GraphNode)& aSHUOAttr) ; //! Returns founded SHUO GraphNodes of indicated component
//! Returns false in other case
Standard_EXPORT static Standard_Boolean GetAllComponentSHUO(const TDF_Label& CompLabel,TDF_AttributeSequence& SHUOAttrs) ; //! Returns the sequence of labels of SHUO attributes,
//! which is upper_usage for this next_usage SHUO attribute
//! (that indicated by label)
//! NOTE: returns upper_usages only on one level (not recurse)
//! NOTE: do not clear the sequence before filling
Standard_EXPORT static Standard_Boolean GetSHUOUpperUsage(const TDF_Label& NextUsageL,TDF_LabelSequence& Labels) ; //! Returns the sequence of labels of SHUO attributes,
//! which is next_usage for this upper_usage SHUO attribute
//! (that indicated by label)
//! NOTE: returns next_usages only on one level (not recurse)
//! NOTE: do not clear the sequence before filling
Standard_EXPORT static Standard_Boolean GetSHUONextUsage(const TDF_Label& UpperUsageL,TDF_LabelSequence& Labels) ; //! Remove SHUO from component sublabel,
//! remove all dependencies on other SHUO.
//! Returns FALSE if cannot remove SHUO dependencies.
//! NOTE: remove any styles that associated with this SHUO.
Standard_EXPORT Standard_Boolean RemoveSHUO(const TDF_Label& SHUOLabel) const; //! Serach the path of labels in the document,
//! that corresponds the component from any assembly
//! Try to search the sequence of labels with location that
//! produce this shape as component of any assembly
//! NOTE: Clear sequence of labels before filling
Standard_EXPORT Standard_Boolean FindComponent(const TopoDS_Shape& theShape,TDF_LabelSequence& Labels) const; //! Search for the component shape that styled by shuo
//! Returns null shape if no any shape is found.
Standard_EXPORT TopoDS_Shape GetSHUOInstance(const Handle(XCAFDoc_GraphNode)& theSHUO) const; //! Search for the component shape by labelks path
//! and set SHUO structure for founded label structure
//! Returns null attribute if no component in any assembly found.
Standard_EXPORT Handle_XCAFDoc_GraphNode SetInstanceSHUO(const TopoDS_Shape& theShape) const; //! Seaching for component shapes that styled by shuo
//! Returns empty sequence of shape if no any shape is found.
Standard_EXPORT Standard_Boolean GetAllSHUOInstances(const Handle(XCAFDoc_GraphNode)& theSHUO,TopTools_SequenceOfShape& theSHUOShapeSeq) const; //! Searchs the SHUO by labels of components
//! from upper_usage componet to next_usage
//! Returns null attribute if no SHUO found
Standard_EXPORT static Standard_Boolean FindSHUO(const TDF_LabelSequence& Labels,Handle(XCAFDoc_GraphNode)& theSHUOAttr) ; DEFINE_STANDARD_RTTI(XCAFDoc_ShapeTool) protected: private: //! Adds a new top-level (creates and returns a new label)
//! For internal use. Used by public method AddShape.
Standard_EXPORT TDF_Label addShape(const TopoDS_Shape& S,const Standard_Boolean makeAssembly = Standard_True) ; //! Makes a shape on label L to be a reference to shape refL
//! with location loc
Standard_EXPORT static void MakeReference(const TDF_Label& L,const TDF_Label& refL,const TopLoc_Location& loc) ; XCAFDoc_DataMapOfShapeLabel myShapeLabels; XCAFDoc_DataMapOfShapeLabel mySubShapes; XCAFDoc_DataMapOfShapeLabel mySimpleShapes; Standard_Boolean hasSimpleShapes; }; // other Inline functions and methods (like "C++: function call" methods) #endif