1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-09 18:50:54 +03:00
occt/src/HLRBRep/HLRBRep_Data.hxx
abk 681f3919f0 0027870: Modeling - refactoring of HLR algorithms
Toolkit 'TKHLR' was fully refactored for 'Standard_Address' and macros except about half of package 'HLRBREP' there 'Standard_Address' is used through the 'generic' mechanism.
2016-11-03 14:16:56 +03:00

286 lines
9.6 KiB
C++

// Created on: 1993-01-11
// Created by: Christophe MARION
// Copyright (c) 1993-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _HLRBRep_Data_HeaderFile
#define _HLRBRep_Data_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Standard_Integer.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include <HLRBRep_Array1OfEData.hxx>
#include <HLRBRep_Array1OfFData.hxx>
#include <TColStd_Array1OfInteger.hxx>
#include <Standard_ShortReal.hxx>
#include <HLRAlgo_Projector.hxx>
#include <HLRBRep_CLProps.hxx>
#include <HLRBRep_SLProps.hxx>
#include <Standard_Real.hxx>
#include <HLRBRep_FaceIterator.hxx>
#include <Standard_Address.hxx>
#include <GeomAbs_SurfaceType.hxx>
#include <Standard_Boolean.hxx>
#include <GeomAbs_CurveType.hxx>
#include <TopAbs_Orientation.hxx>
#include <HLRBRep_Intersector.hxx>
#include <HLRAlgo_Interference.hxx>
#include <MMgt_TShared.hxx>
#include <BRepTopAdaptor_MapOfShapeTool.hxx>
#include <TopAbs_State.hxx>
#include <HLRAlgo_InterferenceList.hxx>
class BRepTopAdaptor_TopolTool;
class StdFail_UndefinedDerivative;
class HLRAlgo_Projector;
class HLRAlgo_Interference;
class gp_Dir2d;
class HLRBRep_EdgeData;
class HLRBRep_FaceData;
class IntRes2d_IntersectionPoint;
class TableauRejection;
class HLRBRep_Data;
DEFINE_STANDARD_HANDLE(HLRBRep_Data, MMgt_TShared)
class HLRBRep_Data : public MMgt_TShared
{
public:
//! Create an empty data structure of <NV> vertices,
//! <NE> edges and <NF> faces.
Standard_EXPORT HLRBRep_Data(const Standard_Integer NV, const Standard_Integer NE, const Standard_Integer NF);
//! Write <DS> in me with a translation of
//! <dv>,<de>,<df>.
Standard_EXPORT void Write (const Handle(HLRBRep_Data)& DS, const Standard_Integer dv, const Standard_Integer de, const Standard_Integer df);
HLRBRep_Array1OfEData& EDataArray();
HLRBRep_Array1OfFData& FDataArray();
//! Set the tolerance for the rejections during the
//! exploration
void Tolerance (const Standard_ShortReal tol);
//! returns the tolerance for the rejections during
//! the exploration
Standard_ShortReal Tolerance() const;
//! end of building of the Data and updating
//! all the informations linked to the projection.
Standard_EXPORT void Update (const HLRAlgo_Projector& P);
HLRAlgo_Projector& Projector();
Standard_Integer NbVertices() const;
Standard_Integer NbEdges() const;
Standard_Integer NbFaces() const;
TopTools_IndexedMapOfShape& EdgeMap();
TopTools_IndexedMapOfShape& FaceMap();
//! to compare with only non rejected edges.
Standard_EXPORT void InitBoundSort (const HLRAlgo_EdgesBlock::MinMaxIndices& MinMaxTot, const Standard_Integer e1, const Standard_Integer e2);
//! Begin an iteration only on visible Edges
//! crossing the face number <FI>.
Standard_EXPORT void InitEdge (const Standard_Integer FI, BRepTopAdaptor_MapOfShapeTool& MST);
Standard_EXPORT Standard_Boolean MoreEdge();
Standard_EXPORT void NextEdge (const Standard_Boolean skip = Standard_True);
//! Returns the current Edge
Standard_EXPORT Standard_Integer Edge() const;
//! Returns true if the current edge to be hidden
//! belongs to the hiding face.
Standard_Boolean HidingTheFace() const;
//! Returns true if the current hiding face is not an
//! auto-intersected one.
Standard_Boolean SimpleHidingFace() const;
//! Intersect the current Edge with the boundary of
//! the hiding face. The interferences are given by
//! the More, Next, and Value methods.
Standard_EXPORT void InitInterference();
Standard_Boolean MoreInterference() const;
Standard_EXPORT void NextInterference();
//! Returns True if the interference is rejected.
Standard_EXPORT Standard_Boolean RejectedInterference();
//! Returns True if the rejected interference is above
//! the face.
Standard_EXPORT Standard_Boolean AboveInterference();
HLRAlgo_Interference& Interference();
//! Returns the local description of the projection of
//! the current LEdge at parameter <Param>.
Standard_EXPORT void LocalLEGeometry2D (const Standard_Real Param, gp_Dir2d& Tg, gp_Dir2d& Nm, Standard_Real& Cu);
//! Returns the local description of the projection of
//! the current FEdge at parameter <Param>.
Standard_EXPORT void LocalFEGeometry2D (const Standard_Integer FE, const Standard_Real Param, gp_Dir2d& Tg, gp_Dir2d& Nm, Standard_Real& Cu);
//! Returns the local 3D state of the intersection
//! between the current edge and the current face at the
//! <p1> and <p2> parameters.
Standard_EXPORT void EdgeState (const Standard_Real p1, const Standard_Real p2, TopAbs_State& stbef, TopAbs_State& staf);
//! Returns the true if the Edge <ED> belongs to the
//! Hiding Face.
Standard_Boolean EdgeOfTheHidingFace (const Standard_Integer E, const HLRBRep_EdgeData& ED) const;
//! Returns the number of levels of hiding face above
//! the first point of the edge <ED>. The
//! InterferenceList is given to compute far away of
//! the Interferences and then come back.
Standard_EXPORT Standard_Integer HidingStartLevel (const Standard_Integer E, const HLRBRep_EdgeData& ED, const HLRAlgo_InterferenceList& IL);
//! Returns the state of the Edge <ED> after
//! classification.
Standard_EXPORT TopAbs_State Compare (const Standard_Integer E, const HLRBRep_EdgeData& ED);
//! Simple classification of part of edge [p1, p2]
//! returns OUT if at least 1 of Nbp points of edge is out
//! othewise returns IN
//! It is used to check "suspision" hided part of edge.
Standard_EXPORT TopAbs_State SimplClassify (const Standard_Integer E, const HLRBRep_EdgeData& ED, const Standard_Integer Nbp, const Standard_Real p1, const Standard_Real p2);
//! Classification of an edge.
Standard_EXPORT TopAbs_State Classify (const Standard_Integer E, const HLRBRep_EdgeData& ED, const Standard_Boolean LevelFlag, Standard_Integer& Level, const Standard_Real param);
//! Returns true if the current face is bad.
Standard_EXPORT Standard_Boolean IsBadFace() const;
Standard_EXPORT void Destroy();
~HLRBRep_Data()
{
Destroy();
}
DEFINE_STANDARD_RTTIEXT(HLRBRep_Data,MMgt_TShared)
protected:
private:
//! Orient the OutLines ( left must be inside in
//! projection ). Returns True if the face of a closed
//! shell has been inverted;
Standard_EXPORT Standard_Boolean OrientOutLine (const Standard_Integer I, HLRBRep_FaceData& FD);
//! Orient the Edges which are not Internal OutLine,
//! not Double and not IsoLine.
Standard_EXPORT void OrientOthEdge (const Standard_Integer I, HLRBRep_FaceData& FD);
//! Returns True if the intersection is rejected.
Standard_EXPORT Standard_Boolean RejectedPoint (const IntRes2d_IntersectionPoint& PInter, const TopAbs_Orientation BoundOri, const Standard_Integer NumSeg);
//! returns True if there is a common vertex between
//! myLE and myFE dependig on <head1> and <head2>.
Standard_EXPORT Standard_Boolean SameVertex (const Standard_Boolean head1, const Standard_Boolean head2);
Standard_Integer myNbVertices;
Standard_Integer myNbEdges;
Standard_Integer myNbFaces;
TopTools_IndexedMapOfShape myEMap;
TopTools_IndexedMapOfShape myFMap;
HLRBRep_Array1OfEData myEData;
HLRBRep_Array1OfFData myFData;
TColStd_Array1OfInteger myEdgeIndices;
Standard_ShortReal myToler;
HLRAlgo_Projector myProj;
HLRBRep_CLProps myLLProps;
HLRBRep_CLProps myFLProps;
HLRBRep_SLProps mySLProps;
Standard_Real myBigSize;
HLRBRep_FaceIterator myFaceItr1;
HLRBRep_FaceIterator myFaceItr2;
Standard_Integer iFace;
HLRBRep_FaceData* iFaceData;
Standard_Address iFaceGeom;
HLRAlgo_EdgesBlock::MinMaxIndices* iFaceMinMax;
GeomAbs_SurfaceType iFaceType;
Standard_Boolean iFaceBack;
Standard_Boolean iFaceSimp;
Standard_Boolean iFaceSmpl;
Standard_Boolean iFaceTest;
Standard_Integer myHideCount;
Standard_Real myDeca[16];
Standard_Real mySurD[16];
Standard_Integer myCurSortEd;
Standard_Integer myNbrSortEd;
Standard_Integer myLE;
Standard_Boolean myLEOutLine;
Standard_Boolean myLEInternal;
Standard_Boolean myLEDouble;
Standard_Boolean myLEIsoLine;
HLRBRep_EdgeData* myLEData;
const HLRBRep_Curve* myLEGeom;
HLRAlgo_EdgesBlock::MinMaxIndices* myLEMinMax;
GeomAbs_CurveType myLEType;
Standard_ShortReal myLETol;
Standard_Integer myFE;
TopAbs_Orientation myFEOri;
Standard_Boolean myFEOutLine;
Standard_Boolean myFEInternal;
Standard_Boolean myFEDouble;
HLRBRep_EdgeData* myFEData;
HLRBRep_Curve* myFEGeom;
GeomAbs_CurveType myFEType;
Standard_ShortReal myFETol;
HLRBRep_Intersector myIntersector;
Handle(BRepTopAdaptor_TopolTool) myClassifier;
Standard_Boolean mySameVertex;
Standard_Boolean myIntersected;
Standard_Integer myNbPoints;
Standard_Integer myNbSegments;
Standard_Integer iInterf;
HLRAlgo_Interference myIntf;
Standard_Boolean myAboveIntf;
TableauRejection* myReject;
};
#include <HLRBRep_Data.lxx>
#endif // _HLRBRep_Data_HeaderFile