Open CASCADE Technology 7.8.2.dev
ShapeFix_ComposeShell Class Reference

This class is intended to create a shell from the composite surface (grid of surfaces) and set of wires. It may be either division of the supporting surface of the face, or creating a shape corresponding to face on composite surface which is missing in CAS.CADE but exists in some other systems. More...

#include <ShapeFix_ComposeShell.hxx>

Inheritance diagram for ShapeFix_ComposeShell:

Public Member Functions

 ShapeFix_ComposeShell ()
 Creates empty tool.
 
void Init (const Handle< ShapeExtend_CompositeSurface > &Grid, const TopLoc_Location &L, const TopoDS_Face &Face, const Standard_Real Prec)
 Initializes with composite surface, face and precision. Here face defines both set of wires and way of getting pcurves. Precision is used (together with tolerance of edges) for handling subtle cases, such as tangential intersections.
 
Standard_BooleanClosedMode ()
 Returns (modifiable) flag for special 'closed' mode which forces ComposeShell to consider all pcurves on closed surface as modulo period. This can reduce reliability, but allows to deal with wires closed in 3d but open in 2d (missing seam) Default is False.
 
virtual Standard_Boolean Perform ()
 Performs the work on already loaded data.
 
void SplitEdges ()
 Splits edges in the original shape by grid. This is a part of Perform() which does not produce any resulting shape; the only result is filled context where splittings are recorded.
 
const TopoDS_ShapeResult () const
 Returns resulting shell or face (or Null shape if not done)
 
Standard_Boolean Status (const ShapeExtend_Status status) const
 Queries status of last call to Perform() OK : nothing done (some kind of error) DONE1: splitting is done, at least one new face created DONE2: splitting is done, several new faces obtained FAIL1: misoriented wire encountered (handled) FAIL2: recoverable parity error FAIL3: edge with no pcurve on supporting face FAIL4: unrecoverable algorithm error (parity check)
 
void DispatchWires (TopTools_SequenceOfShape &faces, ShapeFix_SequenceOfWireSegment &wires) const
 Creates new faces from the set of (closed) wires. Each wire is put on corresponding patch in the composite surface, and all pcurves on the initial (pseudo)face are reassigned to that surface. If several wires are one inside another, single face is created.
 
void SetTransferParamTool (const Handle< ShapeAnalysis_TransferParameters > &TransferParam)
 Sets tool for transfer parameters from 3d to 2d and vice versa.
 
Handle< ShapeAnalysis_TransferParametersGetTransferParamTool () const
 Gets tool for transfer parameters from 3d to 2d and vice versa.
 
- Public Member Functions inherited from ShapeFix_Root
 ShapeFix_Root ()
 Empty Constructor (no context is created)
 
virtual void Set (const Handle< ShapeFix_Root > &Root)
 Copy all fields from another Root object.
 
virtual void SetContext (const Handle< ShapeBuild_ReShape > &context)
 Sets context.
 
Handle< ShapeBuild_ReShapeContext () const
 Returns context.
 
virtual void SetMsgRegistrator (const Handle< ShapeExtend_BasicMsgRegistrator > &msgreg)
 Sets message registrator.
 
Handle< ShapeExtend_BasicMsgRegistratorMsgRegistrator () const
 Returns message registrator.
 
virtual void SetPrecision (const Standard_Real preci)
 Sets basic precision value.
 
Standard_Real Precision () const
 Returns basic precision value.
 
virtual void SetMinTolerance (const Standard_Real mintol)
 Sets minimal allowed tolerance.
 
Standard_Real MinTolerance () const
 Returns minimal allowed tolerance.
 
virtual void SetMaxTolerance (const Standard_Real maxtol)
 Sets maximal allowed tolerance.
 
Standard_Real MaxTolerance () const
 Returns maximal allowed tolerance.
 
Standard_Real LimitTolerance (const Standard_Real toler) const
 Returns tolerance limited by [myMinTol,myMaxTol].
 
void SendMsg (const TopoDS_Shape &shape, const Message_Msg &message, const Message_Gravity gravity=Message_Info) const
 Sends a message to be attached to the shape. Calls corresponding message of message registrator.
 
void SendMsg (const Message_Msg &message, const Message_Gravity gravity=Message_Info) const
 Sends a message to be attached to myShape. Calls previous method.
 
void SendWarning (const TopoDS_Shape &shape, const Message_Msg &message) const
 Sends a warning to be attached to the shape. Calls SendMsg with gravity set to Message_Warning.
 
void SendWarning (const Message_Msg &message) const
 Calls previous method for myShape.
 
void SendFail (const TopoDS_Shape &shape, const Message_Msg &message) const
 Sends a fail to be attached to the shape. Calls SendMsg with gravity set to Message_Fail.
 
void SendFail (const Message_Msg &message) const
 Calls previous method for myShape.
 
- Public Member Functions inherited from Standard_Transient
 Standard_Transient ()
 Empty constructor.
 
 Standard_Transient (const Standard_Transient &)
 Copy constructor – does nothing.
 
Standard_Transientoperator= (const Standard_Transient &)
 Assignment operator, needed to avoid copying reference counter.
 
virtual ~Standard_Transient ()
 Destructor must be virtual.
 
virtual const opencascade::handle< Standard_Type > & DynamicType () const
 Returns a type descriptor about this object.
 
Standard_Boolean IsInstance (const opencascade::handle< Standard_Type > &theType) const
 Returns a true value if this is an instance of Type.
 
Standard_Boolean IsInstance (const Standard_CString theTypeName) const
 Returns a true value if this is an instance of TypeName.
 
Standard_Boolean IsKind (const opencascade::handle< Standard_Type > &theType) const
 Returns true if this is an instance of Type or an instance of any class that inherits from Type. Note that multiple inheritance is not supported by OCCT RTTI mechanism.
 
Standard_Boolean IsKind (const Standard_CString theTypeName) const
 Returns true if this is an instance of TypeName or an instance of any class that inherits from TypeName. Note that multiple inheritance is not supported by OCCT RTTI mechanism.
 
Standard_TransientThis () const
 Returns non-const pointer to this object (like const_cast). For protection against creating handle to objects allocated in stack or call from constructor, it will raise exception Standard_ProgramError if reference counter is zero.
 
Standard_Integer GetRefCount () const noexcept
 Get the reference counter of this object.
 
void IncrementRefCounter () noexcept
 Increments the reference counter of this object.
 
Standard_Integer DecrementRefCounter () noexcept
 Decrements the reference counter of this object; returns the decremented value.
 
virtual void Delete () const
 Memory deallocator for transient classes.
 

Protected Member Functions

void LoadWires (ShapeFix_SequenceOfWireSegment &seqw) const
 Fill sequence of wire segments by wires from myFace (pre-loaded). It performs reorder so that edges in segments are well-ordered. The context is applied to all wires before using them.
 
Standard_Integer ComputeCode (const Handle< ShapeExtend_WireData > &wire, const gp_Lin2d &line, const Standard_Integer begInd, const Standard_Integer endInd, const Standard_Real begPar, const Standard_Real endPar, const Standard_Boolean IsInternal=Standard_False)
 Analyze tangencies and compute orientation code for wire segment between two intersections: tells if segment is on left or right side of cutting line, or tangent to it (by several points recomputed to 3d, distance is compared with tolerance of corresponding edge).
 
ShapeFix_WireSegment SplitWire (ShapeFix_WireSegment &wire, TColStd_SequenceOfInteger &indexes, const TColStd_SequenceOfReal &values, TopTools_SequenceOfShape &vertices, const TColStd_SequenceOfInteger &segcodes, const Standard_Boolean cutbyu, const Standard_Integer cutindex)
 Splits edges in the wire by given indices of edges and parameters on them. Returns resulting wire and vertices corresponding to splitting parameters. If two consecutive splitting points are too near one to another (with tolerance of edge), edge is divided in single point. In the same way, splitting which is too near to end of edge, is not applied (end vertex is returned instead).
 
Standard_Boolean SplitByLine (ShapeFix_WireSegment &wire, const gp_Lin2d &line, const Standard_Boolean cutbyu, const Standard_Integer cutindex, TColStd_SequenceOfReal &SplitLinePar, TColStd_SequenceOfInteger &SplitLineCode, TopTools_SequenceOfShape &SplitLineVertex)
 Split edges in the wire by cutting line. Wires with FORWARD or REVERSED orientation are considered as closed.
 
void SplitByLine (ShapeFix_SequenceOfWireSegment &seqw, const gp_Lin2d &line, const Standard_Boolean cutbyu, const Standard_Integer cutindex)
 Split edges in the sequence of wires by cutting line. Wires with FORWARD or REVERSED orientation are considered as closed.
 
void SplitByGrid (ShapeFix_SequenceOfWireSegment &seqw)
 Split initial set of (closed) wires by grid of lines corresponding to joints between patches on the composite surface. Parts of joint lines which get inside the face are also added into the sequence as wires with orientation EXTERNAL. They share common vertices with all wires they intersect. All modifications (splitting) are recorded in context, except splitting of joint edge itself and wires marked as EXTERNAL (they supposed to be another joint edges).
 
void BreakWires (ShapeFix_SequenceOfWireSegment &seqw)
 Break wires into open wire segments by common vertices (splitting points), so that each segment is either closed and not touching others, or touches others at ends (have common vertices). After that, each wire segment lies on its own patch of grid.
 
void CollectWires (ShapeFix_SequenceOfWireSegment &wires, ShapeFix_SequenceOfWireSegment &seqw)
 Collect set of wire segments (already split) into closed wires. This is done by traversing all the segments in allowed directions, starting only from the REVERSED and FORWARD and taking EXTERNAL as necessary in fork points. Forks are detected by common vertices. In fork point, most left way is selected among all possible ways.
 
void MakeFacesOnPatch (TopTools_SequenceOfShape &faces, const Handle< Geom_Surface > &surf, TopTools_SequenceOfShape &loops) const
 Creates new faces on one path of grid. It dispatches given loops (wires) into one or several faces depending on their mutual position.
 

Protected Attributes

TopAbs_Orientation myOrient
 
TopoDS_Shape myResult
 
Standard_Integer myStatus
 
- Protected Attributes inherited from ShapeFix_Root
TopoDS_Shape myShape
 

Additional Inherited Members

- Public Types inherited from Standard_Transient
typedef void base_type
 Returns a type descriptor about this object.
 
- Static Public Member Functions inherited from Standard_Transient
static constexpr const char * get_type_name ()
 Returns a type descriptor about this object.
 
static const opencascade::handle< Standard_Type > & get_type_descriptor ()
 Returns type descriptor of Standard_Transient class.
 
- Static Protected Member Functions inherited from ShapeFix_Root
static Standard_Boolean NeedFix (const Standard_Integer flag, const Standard_Boolean def=Standard_True)
 Auxiliary method for work with three-position (on/off/default) flags (modes) in ShapeFix.
 

Detailed Description

This class is intended to create a shell from the composite surface (grid of surfaces) and set of wires. It may be either division of the supporting surface of the face, or creating a shape corresponding to face on composite surface which is missing in CAS.CADE but exists in some other systems.

It splits (if necessary) original face to several ones by splitting lines which are joint lines on a supplied grid of surfaces (U- and V- isolines of the composite surface). There are two modes of work, which differ in the way of handling faces on periodic surfaces:

  • if ClosedMode is False (default), when splitting itself is done as if surface were not periodic. The periodicity of the underlying surface is taken into account by duplicating splitting lines in the periodic direction, as necessary to split all the wires (whole parametrical range of a face) In this mode, some regularization procedures are performed (indexation of split segments by patch numbers), and it is expected to be more reliable and robust in case of bad shapes
  • if ClosedMode is True, when everything on a periodic surfaces is considered as modulo period. This allows to deal with wires which are closed in 3d but not in 2d, with wires which may be shifted on several periods in 2d etc. However, this mode is less reliable since some regularizations do not work for it.

The work is made basing on pcurves of the edges. These pcurves should already exist (for example, in the case of division of existing face), then they are taken as is. The existing pcurves should be assigned to one surface (face) for all edges, this surface (face) will be used only for accessing pcurves, and it may have any geometry.

All the modifications are recorded in the context tool (ShapeBuild_ReShape).

Constructor & Destructor Documentation

◆ ShapeFix_ComposeShell()

ShapeFix_ComposeShell::ShapeFix_ComposeShell ( )

Creates empty tool.

Member Function Documentation

◆ BreakWires()

void ShapeFix_ComposeShell::BreakWires ( ShapeFix_SequenceOfWireSegment & seqw)
protected

Break wires into open wire segments by common vertices (splitting points), so that each segment is either closed and not touching others, or touches others at ends (have common vertices). After that, each wire segment lies on its own patch of grid.

◆ ClosedMode()

Standard_Boolean & ShapeFix_ComposeShell::ClosedMode ( )

Returns (modifiable) flag for special 'closed' mode which forces ComposeShell to consider all pcurves on closed surface as modulo period. This can reduce reliability, but allows to deal with wires closed in 3d but open in 2d (missing seam) Default is False.

◆ CollectWires()

void ShapeFix_ComposeShell::CollectWires ( ShapeFix_SequenceOfWireSegment & wires,
ShapeFix_SequenceOfWireSegment & seqw )
protected

Collect set of wire segments (already split) into closed wires. This is done by traversing all the segments in allowed directions, starting only from the REVERSED and FORWARD and taking EXTERNAL as necessary in fork points. Forks are detected by common vertices. In fork point, most left way is selected among all possible ways.

◆ ComputeCode()

Standard_Integer ShapeFix_ComposeShell::ComputeCode ( const Handle< ShapeExtend_WireData > & wire,
const gp_Lin2d & line,
const Standard_Integer begInd,
const Standard_Integer endInd,
const Standard_Real begPar,
const Standard_Real endPar,
const Standard_Boolean IsInternal = Standard_False )
protected

Analyze tangencies and compute orientation code for wire segment between two intersections: tells if segment is on left or right side of cutting line, or tangent to it (by several points recomputed to 3d, distance is compared with tolerance of corresponding edge).

◆ DispatchWires()

void ShapeFix_ComposeShell::DispatchWires ( TopTools_SequenceOfShape & faces,
ShapeFix_SequenceOfWireSegment & wires ) const

Creates new faces from the set of (closed) wires. Each wire is put on corresponding patch in the composite surface, and all pcurves on the initial (pseudo)face are reassigned to that surface. If several wires are one inside another, single face is created.

◆ GetTransferParamTool()

Handle< ShapeAnalysis_TransferParameters > ShapeFix_ComposeShell::GetTransferParamTool ( ) const

Gets tool for transfer parameters from 3d to 2d and vice versa.

◆ Init()

void ShapeFix_ComposeShell::Init ( const Handle< ShapeExtend_CompositeSurface > & Grid,
const TopLoc_Location & L,
const TopoDS_Face & Face,
const Standard_Real Prec )

Initializes with composite surface, face and precision. Here face defines both set of wires and way of getting pcurves. Precision is used (together with tolerance of edges) for handling subtle cases, such as tangential intersections.

◆ LoadWires()

void ShapeFix_ComposeShell::LoadWires ( ShapeFix_SequenceOfWireSegment & seqw) const
protected

Fill sequence of wire segments by wires from myFace (pre-loaded). It performs reorder so that edges in segments are well-ordered. The context is applied to all wires before using them.

◆ MakeFacesOnPatch()

void ShapeFix_ComposeShell::MakeFacesOnPatch ( TopTools_SequenceOfShape & faces,
const Handle< Geom_Surface > & surf,
TopTools_SequenceOfShape & loops ) const
protected

Creates new faces on one path of grid. It dispatches given loops (wires) into one or several faces depending on their mutual position.

◆ Perform()

virtual Standard_Boolean ShapeFix_ComposeShell::Perform ( )
virtual

Performs the work on already loaded data.

◆ Result()

const TopoDS_Shape & ShapeFix_ComposeShell::Result ( ) const

Returns resulting shell or face (or Null shape if not done)

◆ SetTransferParamTool()

void ShapeFix_ComposeShell::SetTransferParamTool ( const Handle< ShapeAnalysis_TransferParameters > & TransferParam)

Sets tool for transfer parameters from 3d to 2d and vice versa.

◆ SplitByGrid()

void ShapeFix_ComposeShell::SplitByGrid ( ShapeFix_SequenceOfWireSegment & seqw)
protected

Split initial set of (closed) wires by grid of lines corresponding to joints between patches on the composite surface. Parts of joint lines which get inside the face are also added into the sequence as wires with orientation EXTERNAL. They share common vertices with all wires they intersect. All modifications (splitting) are recorded in context, except splitting of joint edge itself and wires marked as EXTERNAL (they supposed to be another joint edges).

◆ SplitByLine() [1/2]

void ShapeFix_ComposeShell::SplitByLine ( ShapeFix_SequenceOfWireSegment & seqw,
const gp_Lin2d & line,
const Standard_Boolean cutbyu,
const Standard_Integer cutindex )
protected

Split edges in the sequence of wires by cutting line. Wires with FORWARD or REVERSED orientation are considered as closed.

Parts of cutting line which get inside the face (defined by parity check of intersections with all wires) are added into that sequence (with orientation EXTERNAL). Each part is represented by one-edge wire segment with no 3d curve. They share common vertices with all wires they intersect.

All modifications (splitting) are recorded in context, except splitting of wires marked as EXTERNAL (they are supposed to be former cutting lines).

◆ SplitByLine() [2/2]

Standard_Boolean ShapeFix_ComposeShell::SplitByLine ( ShapeFix_WireSegment & wire,
const gp_Lin2d & line,
const Standard_Boolean cutbyu,
const Standard_Integer cutindex,
TColStd_SequenceOfReal & SplitLinePar,
TColStd_SequenceOfInteger & SplitLineCode,
TopTools_SequenceOfShape & SplitLineVertex )
protected

Split edges in the wire by cutting line. Wires with FORWARD or REVERSED orientation are considered as closed.

All modifications (splitting) are recorded in context, except splitting of wires marked as EXTERNAL (they are supposed to be former cutting lines).

Method fills sequences of parameters of intersection points of cutting line with all edges, their types, and corresponding vertices (including ones created during splitting edges).

◆ SplitEdges()

void ShapeFix_ComposeShell::SplitEdges ( )

Splits edges in the original shape by grid. This is a part of Perform() which does not produce any resulting shape; the only result is filled context where splittings are recorded.

NOTE: If edge is split, it is replaced by wire, and order of edges in the wire corresponds to FORWARD orientation of the edge.

◆ SplitWire()

ShapeFix_WireSegment ShapeFix_ComposeShell::SplitWire ( ShapeFix_WireSegment & wire,
TColStd_SequenceOfInteger & indexes,
const TColStd_SequenceOfReal & values,
TopTools_SequenceOfShape & vertices,
const TColStd_SequenceOfInteger & segcodes,
const Standard_Boolean cutbyu,
const Standard_Integer cutindex )
protected

Splits edges in the wire by given indices of edges and parameters on them. Returns resulting wire and vertices corresponding to splitting parameters. If two consecutive splitting points are too near one to another (with tolerance of edge), edge is divided in single point. In the same way, splitting which is too near to end of edge, is not applied (end vertex is returned instead).

NOTE: If edge is split, it is replaced by wire, and order of edges in the wire corresponds to FORWARD orientation of the edge.

◆ Status()

Standard_Boolean ShapeFix_ComposeShell::Status ( const ShapeExtend_Status status) const

Queries status of last call to Perform() OK : nothing done (some kind of error) DONE1: splitting is done, at least one new face created DONE2: splitting is done, several new faces obtained FAIL1: misoriented wire encountered (handled) FAIL2: recoverable parity error FAIL3: edge with no pcurve on supporting face FAIL4: unrecoverable algorithm error (parity check)

Field Documentation

◆ myOrient

TopAbs_Orientation ShapeFix_ComposeShell::myOrient
protected

◆ myResult

TopoDS_Shape ShapeFix_ComposeShell::myResult
protected

◆ myStatus

Standard_Integer ShapeFix_ComposeShell::myStatus
protected

The documentation for this class was generated from the following file: