1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-05-06 10:36:12 +03:00
occt/src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cdl
bugmaster b311480ed5 0023024: Update headers of OCCT files
Added appropriate copyright and license information in source files
2012-03-21 19:43:04 +04:00

558 lines
23 KiB
Plaintext
Executable File

-- Created on: 1995-03-23
-- Created by: Jing Cheng MEI
-- Copyright (c) 1995-1999 Matra Datavision
-- Copyright (c) 1999-2012 OPEN CASCADE SAS
--
-- The content of this file is subject to the Open CASCADE Technology Public
-- License Version 6.5 (the "License"). You may not use the content of this file
-- except in compliance with the License. Please obtain a copy of the License
-- at http://www.opencascade.org and read it completely before using this file.
--
-- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
--
-- The Original Code and all software distributed under the License is
-- distributed on an "AS IS" basis, without warranty of any kind, and the
-- Initial Developer hereby disclaims all such warranties, including without
-- limitation, any warranties of merchantability, fitness for a particular
-- purpose or non-infringement. Please see the License for the specific terms
-- and conditions governing the rights and limitations under the License.
-- Modified Thu May 7 15:20:25 1998 by David Carbonel (dcl)
-- Little faces management.
-- Add of Cutting option.
-- Optimisation of cutting fonction
-- Modified Thu Jan 21 13:00:58 MET 1999 by Jing Cheng MEI
-- Nonmanifold processing
class Sewing from BRepBuilderAPI inherits TShared from MMgt
---Purpose: Provides methods to
--
-- - identify possible contigous boundaries (for control
-- afterwards)
--
-- - assemble contigous shapes into one shape.
-- Only manifold shapes will be found. Sewing will not
-- be done in case of multiple edges.
--
-- For sewing, use this function as following:
-- - create an empty object
-- - default tolerance 1.E-06
-- - with face analysis on
-- - with sewing operation on
-- - set the cutting option as you need (default True)
-- - define a tolerance
-- - add shapes to be sewed -> Add
-- - compute -> Perfom
-- - output the resulted shapes
-- - output free edges if necessary
-- - output multiple edges if necessary
-- - output the problems if any
-- For control, use this function as following:
-- - create an empty object
-- - default tolerance 1.E-06
-- - with face analysis on
-- - with sewing operation on
-- - set the cutting option as you need (default True)
-- - define a tolerance to capture contigous boundaries
-- - set if necessary face analysis off
-- - set sewing operation off
-- - add shapes to be controlled -> Add
-- - compute -> Perfom
-- - output couples of connected edges (contigous) and
-- their original boundary for control
-- - output the problems if any
uses
Shape from TopoDS,
Edge from TopoDS,
ListOfShape from TopTools,
MapOfShape from TopTools,
DataMapOfShapeShape from TopTools,
DataMapOfShapeListOfShape from TopTools,
IndexedMapOfShape from TopTools,
IndexedDataMapOfShapeShape from TopTools,
IndexedDataMapOfShapeListOfShape from TopTools,
SequenceOfShape from TopTools,
Array1OfShape from TopTools,
Face from TopoDS,
Array1OfInteger from TColStd,
Array1OfPnt from TColgp,
Array2OfPnt2d from TColgp,
Array1OfBoolean from TColStd,
Array1OfReal from TColStd,
IndexedMapOfInteger from TColStd,
Surface from Geom,
Location from TopLoc,
Curve from Geom2d,
Curve from Geom,
Surface from Geom,
Pnt from gp,
ReShape from BRepTools,
SequenceOfInteger from TColStd,
SequenceOfReal from TColStd,
SequenceOfPnt from TColgp,
ProgressIndicator from Message
raises
OutOfRange from Standard,
NoSuchObject from Standard
is
Create(tolerance: Real = 1.0e-06; -- tolerance of connexity
option1 : Boolean = Standard_True; -- option for sewing
option2 : Boolean = Standard_True; -- option for analysis of degenerated shapes
option3 : Boolean = Standard_True; -- option for cutting of free edges.
option4 : Boolean = Standard_False) -- option for non manifold processing
returns Sewing from BRepBuilderAPI;
---Purpose: Creates an object with
-- tolerance of connexity
-- option for sewing (if false only control)
-- option for analysis of degenerated shapes
-- option for cutting of free edges.
-- option for non manifold processing
Init(me : mutable; tolerance: Real = 1.0e-06; -- tolerance of connexity
option1: Boolean = Standard_True; -- option for sewing
option2: Boolean = Standard_True; -- option for analysis of degenerated shapes
option3: Boolean = Standard_True; -- option for cutting free edge after first merging
-- This option can be set to False if no edge need to be cut.
option4: Boolean = Standard_False);-- option for non manifold processing
---Purpose: initialize the parameters if necessary
Load(me : mutable; shape : Shape from TopoDS);
---Purpose: Loades the context shape.
Add(me : mutable; shape : Shape from TopoDS);
---Purpose: Defines the shapes to be sewed or controlled
Perform(me : mutable;
thePI : ProgressIndicator from Message = 0);
---Purpose: Computing
-- thePI - progress indicator of algorithm
SewedShape(me) returns Shape from TopoDS;
---C++: return const &
---Purpose: Gives the sewed shape
-- a null shape if nothing constructed
-- may be a face, a shell, a solid or a compound
NbFreeEdges(me) returns Integer;
---Purpose: Gives the number of free edges (edge shared by one face)
FreeEdge(me; index: Integer) returns Edge from TopoDS
raises OutOfRange from Standard; -- raised if index < 1 or > NbFreeEdges
---C++: return const &
---Purpose: Gives each free edge
NbMultipleEdges(me) returns Integer;
---Purpose: Gives the number of multiple edges
-- (edge shared by more than two faces)
MultipleEdge(me; index: Integer) returns Edge from TopoDS
raises OutOfRange from Standard; -- raised if index < 1 or > NbMultipleEdges
---C++: return const &
---Purpose: Gives each multiple edge
NbContigousEdges(me) returns Integer;
---Purpose: Gives the number of contigous edges (edge shared by two faces)
ContigousEdge(me; index: Integer) returns Edge from TopoDS
raises OutOfRange from Standard; -- raised if index < 1 or > NbContigousEdges
---C++: return const &
---Purpose: Gives each contigous edge
ContigousEdgeCouple(me; index: Integer) returns ListOfShape from TopTools
raises OutOfRange from Standard; -- raised if index < 1 or > NbContigousEdges
---C++: return const &
---Purpose: Gives the sections (edge) belonging to a contigous edge
IsSectionBound(me; section: Edge from TopoDS) returns Boolean;
---Purpose: Indicates if a section is bound (before use SectionToBoundary)
SectionToBoundary(me; section: Edge from TopoDS) returns Edge from TopoDS
raises NoSuchObject from Standard; -- raised if section has not been bound
---C++: return const &
---Purpose: Gives the original edge (free boundary) which becomes the
-- the section. Remember that sections constitute common edges.
-- This imformation is important for control because with
-- original edge we can find the surface to which the section
-- is attached.
NbDegeneratedShapes(me) returns Integer;
---Purpose: Gives the number of degenerated shapes
DegeneratedShape(me; index: Integer) returns Shape from TopoDS
raises OutOfRange from Standard; -- raised if index < 1 or > NbDegeneratedShapes
---C++: return const &
---Purpose: Gives each degenerated shape
IsDegenerated(me; shape: Shape from TopoDS) returns Boolean;
---Purpose: Indicates if a input shape is degenerated
IsModified(me; shape: Shape from TopoDS) returns Boolean;
---Purpose: Indicates if a input shape has been modified
Modified(me ; shape: Shape from TopoDS) returns Shape from TopoDS
raises NoSuchObject from Standard; -- raised if shape has not been modified
---C++: return const &
---Purpose: Gives a modifieded shape
IsModifiedSubShape(me; shape: Shape from TopoDS) returns Boolean;
---Purpose: Indicates if a input subshape has been modified
ModifiedSubShape(me ; shape: Shape from TopoDS) returns Shape from TopoDS
raises NoSuchObject from Standard; -- raised if shape has not been modified
---Purpose: Gives a modifieded subshape
Dump(me);
---Purpose: print the informations
NbDeletedFaces(me) returns Integer;
---Purpose: Gives the number of deleted faces (faces smallest than tolerance)
DeletedFace(me; index: Integer) returns Face from TopoDS
raises OutOfRange from Standard; -- raised if index < 1 or > NbDeletedFaces
---C++: return const &
---Purpose: Gives each deleted face
WhichFace(me; theEdg: Edge from TopoDS; index: Integer = 1) returns Face from TopoDS;
---Purpose: Gives a modified shape
SameParameterMode(me) returns Boolean;
---C++: inline
---Purpose: Gets same parameter mode.
SetSameParameterMode(me: in mutable; SameParameterMode : Boolean);
---C++: inline
---Purpose: Sets same parameter mode.
Tolerance(me) returns Real;
---C++: inline
---Purpose: Gives set tolerance.
SetTolerance(me: mutable; theToler : Real);
---C++: inline
---Purpose: Sets tolerance
MinTolerance(me) returns Real;
---C++: inline
---Purpose: Gives set min tolerance.
SetMinTolerance(me: mutable; theMinToler : Real);
---C++: inline
---Purpose: Sets min tolerance
MaxTolerance(me) returns Real;
---C++: inline
---Purpose: Gives set max tolerance
SetMaxTolerance(me:mutable; theMaxToler : Real);
---C++: inline
---Purpose: Sets max tolerance.
FaceMode(me) returns Boolean;
---C++: inline
---Purpose: Returns mode for sewing faces By default - true.
SetFaceMode(me: mutable; theFaceMode : Boolean);
---C++: inline
---Purpose: Sets mode for sewing faces By default - true.
FloatingEdgesMode(me) returns Boolean;
---C++: inline
---Purpose: Returns mode for sewing floating edges By default - false.
SetFloatingEdgesMode(me: mutable; theFloatingEdgesMode : Boolean);
---C++: inline
---Purpose: Sets mode for sewing floating edges By default - false.
-- CuttingFloatingEdgesMode(me) returns Boolean;
---C++: inline
---Purpose: Returns mode for cutting floating edges By default - false.
-- SetCuttingFloatingEdgesMode(me: mutable; theCuttingFloatingEdgesMode : Boolean);
---C++: inline
---Purpose: Sets mode for cutting floating edges By default - false.
LocalTolerancesMode(me) returns Boolean;
---C++: inline
---Purpose: Returns mode for accounting of local tolerances
-- of edges and vertices during of merging.
SetLocalTolerancesMode(me: mutable; theLocalTolerancesMode : Boolean);
---C++: inline
---Purpose: Sets mode for accounting of local tolerances
-- of edges and vertices during of merging
-- in this case WorkTolerance = myTolerance + tolEdge1+ tolEdg2;
SetNonManifoldMode(me: mutable; theNonManifoldMode : Boolean);
---C++: inline
---Purpose: Sets mode for non-manifold sewing.
NonManifoldMode(me) returns Boolean;
---C++: inline
---Purpose: Gets mode for non-manifold sewing.
-------------------------
--- INTERNAL FUCTIONS ---
-------------------------
Cutting(me : mutable;
thePI : ProgressIndicator from Message = 0) is protected;
---Purpose: Performs cutting of sections
-- thePI - progress indicator of processing
Merging(me : mutable; passage : Boolean;
thePI : ProgressIndicator from Message = 0) is protected;
IsMergedClosed(me;
Edge1 : Edge from TopoDS;
Edge2 : Edge from TopoDS;
fase : Face from TopoDS)
returns Boolean is protected;
FindCandidates(me : mutable;
seqSections : in out SequenceOfShape from TopTools;
mapReference : in out IndexedMapOfInteger from TColStd;
seqCandidates : in out SequenceOfInteger from TColStd;
seqOrientations : in out SequenceOfInteger from TColStd)
returns Boolean is protected;
AnalysisNearestEdges(me : mutable;
sequenceSec : SequenceOfShape from TopTools;
seqIndCandidate : in out SequenceOfInteger from TColStd;
seqOrientations : in out SequenceOfInteger from TColStd;
evalDist : Boolean = Standard_True) is protected;
---Purpose:
MergedNearestEdges(me : mutable;
edge : Shape from TopoDS;
SeqMergedEdge : in out SequenceOfShape from TopTools;
SeqMergedOri : in out SequenceOfInteger from TColStd)
returns Boolean is protected;
---Purpose: Merged nearest edges.
EdgeProcessing(me : mutable;
thePI : ProgressIndicator from Message = 0) is protected;
CreateOutputInformations(me : mutable) is protected;
---------------------------------
--- VIRTUAL INTERNAL FUCTIONS ---
---------------------------------
IsUClosedSurface(me; surf : Surface from Geom; theEdge : Shape from TopoDS;
theloc : Location from TopLoc)
returns Boolean is virtual protected;
---Purpose: Defines if surface is U closed.
IsVClosedSurface(me; surf : Surface from Geom; theEdge : Shape from TopoDS;
theloc : Location from TopLoc)
returns Boolean is virtual protected;
---Purpose:Defines if surface is V closed.
FaceAnalysis(me : mutable;
thePI : ProgressIndicator from Message = 0) is virtual protected;
---Purpose:
-- This method is called from Perform only
-- thePI - progress indicator of processing
FindFreeBoundaries(me : mutable) is virtual protected;
---Purpose:
-- This method is called from Perform only
VerticesAssembling(me : mutable;
thePI : ProgressIndicator from Message = 0) is virtual protected;
---Purpose:
-- This method is called from Perform only
-- thePI - progress indicator of processing
CreateSewedShape(me : mutable) is virtual protected;
---Purpose:
-- This method is called from Perform only
GetFreeWires(me : mutable;
MapFreeEdges : in out MapOfShape from TopTools;
seqWires : in out SequenceOfShape from TopTools) is virtual protected;
---Purpose: Get wire from free edges.
-- This method is called from EdgeProcessing only
EvaluateAngulars(me;
sequenceSec : in out SequenceOfShape from TopTools;
secForward : in out Array1OfBoolean from TColStd;
tabAng : in out Array1OfReal from TColStd;
indRef : in Integer) is virtual protected;
---Purpose:
-- This method is called from MergingOfSections only
EvaluateDistances(me;
sequenceSec : in out SequenceOfShape from TopTools;
secForward : in out Array1OfBoolean from TColStd;
tabAng : in out Array1OfReal from TColStd;
arrLen : in out Array1OfReal from TColStd;
tabMinDist : in out Array1OfReal from TColStd;
indRef : in Integer) is virtual protected;
---Purpose:
-- This method is called from MergingOfSections only
SameRange(me;
CurvePtr : Curve from Geom2d;
FirstOnCurve : Real from Standard;
LastOnCurve : Real from Standard;
RequestedFirst : Real from Standard;
RequestedLast : Real from Standard)
returns Curve from Geom2d is virtual protected;
---Purpose:
-- This method is called from SameParameterEdge only
SameParameter(me; edge : Edge from TopoDS) is virtual protected;
---Purpose:
-- This method is called from SameParameterEdge only
SameParameterEdge(me : mutable;
edge : Shape from TopoDS;
seqEdges : SequenceOfShape from TopTools;
seqForward : SequenceOfInteger from TColStd;
mapMerged : in out MapOfShape from TopTools;
locReShape : ReShape from BRepTools)
returns Edge from TopoDS is virtual protected;
---Purpose:
-- This method is called from Merging only
SameParameterEdge(me : mutable;
edge1 : Edge from TopoDS;
edge2 : Edge from TopoDS;
listFaces1 : ListOfShape from TopTools;
listFaces2 : ListOfShape from TopTools;
secForward : Boolean ;
whichSec : in out Integer;
firstCall : Boolean = Standard_True)
returns Edge from TopoDS is virtual protected;
---Purpose:
-- This method is called from Merging only
ProjectPointsOnCurve(me;
arrPnt : Array1OfPnt from TColgp;
Crv : Curve from Geom;
first : Real from Standard;
last : Real from Standard;
arrDist : in out Array1OfReal from TColStd;
arrPara : in out Array1OfReal from TColStd;
arrProj : in out Array1OfPnt from TColgp;
isConsiderEnds : in Boolean from Standard) is protected;
---Purpose: Projects points on curve
-- This method is called from Cutting only
CreateCuttingNodes(me : mutable;
MapVert : IndexedMapOfShape from TopTools;
bound : Shape from TopoDS;
vfirst : Shape from TopoDS;
vlast : Shape from TopoDS;
arrDist : Array1OfReal from TColStd;
arrPara : Array1OfReal from TColStd;
arrPnt : Array1OfPnt from TColgp;
seqNode : in out SequenceOfShape from TopTools;
seqPara : in out SequenceOfReal from TColStd) is virtual protected;
---Purpose: Creates cutting vertices on projections
-- This method is called from Cutting only
CreateSections(me : mutable;
bound : Shape from TopoDS;
seqNode : SequenceOfShape from TopTools;
seqPara : SequenceOfReal from TColStd;
listEdge : in out ListOfShape from TopTools) is virtual protected;
---Purpose: Performs cutting of bound
-- This method is called from Cutting only
SameParameterShape(me : mutable) is virtual protected;
---Purpose: Makes all edges from shape same parameter
-- if SameParameterMode is equal to Standard_True
-- This method is called from Perform only
fields
-- Input data
myTolerance : Real is protected;
mySewing : Boolean is protected;
myAnalysis : Boolean is protected;
myCutting : Boolean is protected;
-- Indicates if the cutting will be done or not.
-- Default value is true.
myNonmanifold : Boolean is protected;
myFaceMode : Boolean; -- Mode for sewing faces by default true
myFloatingEdgesMode : Boolean; -- Mode for sewing floating edges by default - false
-- myCuttingFloatingEdgesMode : Boolean; -- Mode for cutting of floating edges by default - false
mySameParameterMode : Boolean;
myLocalToleranceMode : Boolean;
myOldShapes : IndexedDataMapOfShapeShape from TopTools is protected;
-- input shape -> input shape after analysis
mySewedShape : Shape from TopoDS is protected;
-- contains the sewed shape
myDegenerated : IndexedMapOfShape from TopTools is protected;
-- contains all degenerated shapes
myFreeEdges : IndexedMapOfShape from TopTools is protected;
-- contains all free edges
-- (edge shared by only one face)
myMultipleEdges : IndexedMapOfShape from TopTools is protected;
-- contains all multiple edges
-- (edge shared by more than two faces)
myContigousEdges : IndexedDataMapOfShapeListOfShape from TopTools is protected;
-- contains all contigous edges
-- (edge shared by two faces) and a list of sections
-- (two edges) which constitute each contigous edge
myContigSecBound : DataMapOfShapeShape is protected;
-- for each section belong to a contigous edge
-- indicates its the original free boundary
-- Work data
-- OldShape : input shapes
-- Shape : input shapes after analysis
-- Bound : free boundaries
-- Section : free boundaries after cutting
-- Edge : connected sections become edge
-- - Free edge : edge shared by one face
-- - Contigous edge : edge shared by two faces
-- - Multiple edge : edge shared by more than two faces
-- Vertex : vertices on free boundaries
-- Node : assembled vertices become node
myNbShapes : Integer is protected; -- number of input shapes after analysis
myNbVertices : Integer is protected; -- number of nodes after assembling
myNbEdges : Integer is protected; -- number of edges after merging
myBoundFaces : IndexedDataMapOfShapeListOfShape from TopTools is protected;
-- for EACH bound contains a list of faces (REFERENCE map)
myBoundSections : DataMapOfShapeListOfShape from TopTools is protected;
-- for bound contains a list of cutting sections if any
--mySectionEdge : DataMapOfShapeShape from TopTools is protected;
-- for section contains a merged edge for this section
mySectionBound : DataMapOfShapeShape from TopTools is protected;
-- for EACH section contains its bound
myVertexNode : IndexedDataMapOfShapeShape from TopTools is protected;
-- for EACH original vertex contains a node
myVertexNodeFree : IndexedDataMapOfShapeShape from TopTools is protected;
-- for EACH floating vertex contains a node
myNodeSections : DataMapOfShapeListOfShape from TopTools is protected;
-- for EACH node contains a list of sections
myCuttingNode : DataMapOfShapeListOfShape from TopTools is protected;
-- nodes cutting edges
myLittleFace : IndexedMapOfShape from TopTools is protected;
-- Faces to be suppress because they are too little
myMinTolerance : Real;
myMaxTolerance : Real;
myShape : Shape from TopoDS is protected;
myReShape : ReShape from BRepTools is protected;
myMergedEdges : MapOfShape from TopTools;
end Sewing;