mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-05-31 11:15:31 +03:00
Macro NO_CXX_EXCEPTION was removed from code. Method Raise() was replaced by explicit throw statement. Method Standard_Failure::Caught() was replaced by normal C++mechanism of exception transfer. Method Standard_Failure::Caught() is deprecated now. Eliminated empty constructors. Updated samples. Eliminate empty method ChangeValue from NCollection_Map class. Removed not operable methods from NCollection classes.
1394 lines
46 KiB
C++
1394 lines
46 KiB
C++
// Created on: 1993-06-23
|
|
// Created by: Jean Yves LEBEY
|
|
// 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.
|
|
|
|
|
|
#include <Geom_Surface.hxx>
|
|
#include <Standard_ProgramError.hxx>
|
|
#include <TopoDS.hxx>
|
|
#include <TopoDS_Edge.hxx>
|
|
#include <TopoDS_Shape.hxx>
|
|
#include <TopOpeBRepDS_Curve.hxx>
|
|
#include <TopOpeBRepDS_CurveData.hxx>
|
|
#include <TopOpeBRepDS_CurveExplorer.hxx>
|
|
#include <TopOpeBRepDS_DataStructure.hxx>
|
|
#include <TopOpeBRepDS_define.hxx>
|
|
#include <TopOpeBRepDS_Interference.hxx>
|
|
#include <TopOpeBRepDS_Point.hxx>
|
|
#include <TopOpeBRepDS_PointData.hxx>
|
|
#include <TopOpeBRepDS_PointExplorer.hxx>
|
|
#include <TopOpeBRepDS_ShapeData.hxx>
|
|
#include <TopOpeBRepDS_ShapeWithState.hxx>
|
|
#include <TopOpeBRepDS_Surface.hxx>
|
|
#include <TopOpeBRepDS_SurfaceData.hxx>
|
|
#include <TopOpeBRepDS_SurfaceExplorer.hxx>
|
|
#include <TopOpeBRepTool_ShapeTool.hxx>
|
|
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
|
|
|
//=======================================================================
|
|
//function : TopOpeBRepDS_DataStructure
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_DataStructure::TopOpeBRepDS_DataStructure() :
|
|
myNbSurfaces(0),
|
|
myNbCurves(0),
|
|
myNbPoints(0),
|
|
myIsfafa(Standard_False),
|
|
myI(0)
|
|
{
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : Init
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::Init()
|
|
{
|
|
myNbSurfaces = 0;
|
|
myNbCurves = 0;
|
|
myNbPoints = 0;
|
|
mySurfaces.Clear();
|
|
myCurves.Clear();
|
|
myPoints.Clear();
|
|
myShapes.Clear();
|
|
//Begin modified by NIZHNY-MZV Tue Apr 18 16:33:26 2000
|
|
myMapOfShapeWithStateObj.Clear();
|
|
myMapOfShapeWithStateTool.Clear();
|
|
myMapOfRejectedShapesObj.Clear();
|
|
myMapOfRejectedShapesTool.Clear();
|
|
//End modified by NIZHNY-MZV Tue Apr 18 16:33:32 2000
|
|
InitSectionEdges();
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : AddSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddSurface(const TopOpeBRepDS_Surface& S)
|
|
{
|
|
myNbSurfaces++;
|
|
//modified by NIZNHY-PKV Tue Oct 30 09:22:04 2001 f
|
|
TopOpeBRepDS_SurfaceData aSD(S);
|
|
mySurfaces.Bind(myNbSurfaces, aSD);
|
|
//mySurfaces.Bind(myNbSurfaces,S);
|
|
//modified by NIZNHY-PKV Tue Oct 30 09:22:20 2001 t
|
|
return myNbSurfaces;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : RemoveSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::RemoveSurface(const Standard_Integer I)
|
|
{
|
|
mySurfaces.UnBind(I);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepSurface(const Standard_Integer I) const
|
|
{
|
|
const TopOpeBRepDS_Surface& S = Surface(I);
|
|
Standard_Boolean b = S.Keep();
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepSurface(TopOpeBRepDS_Surface& S) const
|
|
{
|
|
Standard_Boolean b = S.Keep();
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepSurface(const Standard_Integer I,const Standard_Boolean FindKeep)
|
|
{
|
|
TopOpeBRepDS_Surface& S = ChangeSurface(I);
|
|
S.ChangeKeep(FindKeep);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepSurface(TopOpeBRepDS_Surface& S,const Standard_Boolean FindKeep)
|
|
{
|
|
S.ChangeKeep(FindKeep);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AddCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddCurve(const TopOpeBRepDS_Curve& C)
|
|
{
|
|
myNbCurves++;
|
|
|
|
// NYI : modifier const & sur Curve dans le CDL NYI
|
|
TopOpeBRepDS_Curve* PC = (TopOpeBRepDS_Curve*)(void*)&C;
|
|
PC->ChangeDSIndex(myNbCurves);
|
|
|
|
TopOpeBRepDS_CurveData CD(C);
|
|
myCurves.Bind(myNbCurves,CD);
|
|
|
|
return myNbCurves;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : RemoveCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::RemoveCurve(const Standard_Integer I)
|
|
{
|
|
TopOpeBRepDS_Curve& C = ChangeCurve(I);
|
|
|
|
TopoDS_Shape S1,S2;
|
|
C.GetShapes(S1,S2);
|
|
Handle(TopOpeBRepDS_Interference) I1,I2;
|
|
C.GetSCI(I1,I2);
|
|
if ( ! I1.IsNull() ) RemoveShapeInterference(S1,I1);
|
|
if ( ! I2.IsNull() ) RemoveShapeInterference(S2,I2);
|
|
C.ChangeKeep(Standard_False);
|
|
|
|
// NYI : nullify interferences I1,I2
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepCurve(const Standard_Integer I) const
|
|
{
|
|
const TopOpeBRepDS_Curve& C = Curve(I);
|
|
Standard_Boolean b = C.Keep();
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepCurve(const TopOpeBRepDS_Curve& C) const
|
|
{
|
|
Standard_Boolean b = C.Keep();
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepCurve(const Standard_Integer I,const Standard_Boolean FindKeep)
|
|
{
|
|
TopOpeBRepDS_Curve& C = ChangeCurve(I);
|
|
C.ChangeKeep(FindKeep);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepCurve(TopOpeBRepDS_Curve& C,const Standard_Boolean FindKeep)
|
|
{
|
|
C.ChangeKeep(FindKeep);
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : AddPoint
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddPoint(const TopOpeBRepDS_Point& PDS)
|
|
{
|
|
myNbPoints++;
|
|
myPoints.Bind(myNbPoints,PDS);
|
|
return myNbPoints;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AddPointSS
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddPointSS(const TopOpeBRepDS_Point& PDS,
|
|
const TopoDS_Shape& /*S1*/,
|
|
const TopoDS_Shape& /*S2*/)
|
|
{
|
|
Standard_Integer i = AddPoint(PDS);
|
|
return i;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : RemovePoint
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::RemovePoint(const Standard_Integer I)
|
|
{
|
|
TopOpeBRepDS_Point& P = ChangePoint(I);
|
|
P.ChangeKeep(Standard_False);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepPoint
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepPoint(const Standard_Integer I) const
|
|
{
|
|
const TopOpeBRepDS_Point& P = Point(I);
|
|
Standard_Boolean b = P.Keep();
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepPoint
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepPoint(const TopOpeBRepDS_Point& P) const
|
|
{
|
|
Standard_Boolean b = P.Keep();
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepPoint
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepPoint(const Standard_Integer I,const Standard_Boolean FindKeep)
|
|
{
|
|
TopOpeBRepDS_Point& P = ChangePoint(I);
|
|
P.ChangeKeep(FindKeep);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepPoint
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepPoint(TopOpeBRepDS_Point& P,const Standard_Boolean FindKeep)
|
|
{
|
|
P.ChangeKeep(FindKeep);
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : AddShape
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddShape(const TopoDS_Shape& S)
|
|
{
|
|
Standard_Integer iS = myShapes.FindIndex(S);
|
|
if (iS == 0) {
|
|
TopOpeBRepDS_ShapeData SD;
|
|
iS = myShapes.Add(S,SD);
|
|
// a shape is its own reference, oriented as itself
|
|
SameDomainRef(iS,iS);
|
|
SameDomainOri(iS,TopOpeBRepDS_SAMEORIENTED);
|
|
}
|
|
return iS;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AddShape
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddShape(const TopoDS_Shape& S,const Standard_Integer Ianc)
|
|
{
|
|
Standard_Integer iS = myShapes.FindIndex(S);
|
|
if (iS == 0) {
|
|
TopOpeBRepDS_ShapeData SD;
|
|
iS = myShapes.Add(S,SD);
|
|
// a shape is its own reference, oriented as itself
|
|
SameDomainRef(iS,iS);
|
|
SameDomainOri(iS,TopOpeBRepDS_SAMEORIENTED);
|
|
AncestorRank(iS,Ianc);
|
|
}
|
|
return iS;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepShape
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepShape(const Standard_Integer I,const Standard_Boolean FindKeep) const
|
|
{
|
|
Standard_Boolean b = Standard_False;
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
const TopoDS_Shape& S = myShapes.FindKey(I);
|
|
if(FindKeep)
|
|
b = KeepShape(S);
|
|
else
|
|
b = Standard_True;
|
|
}
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : KeepShape
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::KeepShape(const TopoDS_Shape& S,const Standard_Boolean FindKeep) const
|
|
{
|
|
Standard_Boolean b = Standard_False;
|
|
if ( (!myShapes.IsEmpty()) && (!S.IsNull()) && myShapes.Contains(S)) {
|
|
const TopOpeBRepDS_ShapeData& SD = myShapes.FindFromKey(S);
|
|
if(FindKeep)
|
|
b = SD.Keep();
|
|
else
|
|
b = Standard_True;
|
|
}
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepShape
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepShape(const Standard_Integer I, const Standard_Boolean FindKeep)
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
const TopoDS_Shape& S = myShapes.FindKey(I);
|
|
ChangeKeepShape(S, FindKeep);
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeKeepShape
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeKeepShape(const TopoDS_Shape& S,const Standard_Boolean FindKeep)
|
|
{
|
|
if(!S.IsNull() && myShapes.Contains(S)) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
SD.ChangeKeep(FindKeep);
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : InitSectionEdges
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::InitSectionEdges()
|
|
{
|
|
mySectionEdges.Clear();
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AddSectionEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AddSectionEdge(const TopoDS_Edge& E)
|
|
{
|
|
Standard_Integer iE = mySectionEdges.FindIndex(E);
|
|
if (iE == 0) iE = mySectionEdges.Add(E);
|
|
return iE;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeShapes
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_MapOfShapeData& TopOpeBRepDS_DataStructure::ChangeShapes ()
|
|
{
|
|
return myShapes;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : SurfaceInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::SurfaceInterferences(const Standard_Integer I)const
|
|
{
|
|
|
|
if ( !mySurfaces.IsBound(I) ) {
|
|
return myEmptyListOfInterference;
|
|
}
|
|
const TopOpeBRepDS_SurfaceData& SD = mySurfaces.Find(I);
|
|
const TopOpeBRepDS_ListOfInterference& LI = SD.Interferences();
|
|
return LI;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeSurfaceInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ChangeSurfaceInterferences(const Standard_Integer I)
|
|
{
|
|
|
|
if ( !mySurfaces.IsBound(I) ) {
|
|
return myEmptyListOfInterference;
|
|
}
|
|
TopOpeBRepDS_SurfaceData& SD = mySurfaces.ChangeFind(I);
|
|
TopOpeBRepDS_ListOfInterference& LI = SD.ChangeInterferences();
|
|
return LI;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : CurveInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::CurveInterferences(const Standard_Integer I)const
|
|
{
|
|
|
|
if ( !myCurves.IsBound(I) ) {
|
|
return myEmptyListOfInterference;
|
|
}
|
|
const TopOpeBRepDS_CurveData& CD = myCurves.Find(I);
|
|
const TopOpeBRepDS_ListOfInterference& LI = CD.Interferences();
|
|
return LI;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeCurveInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ChangeCurveInterferences(const Standard_Integer I)
|
|
{
|
|
|
|
if ( !myCurves.IsBound(I) ) {
|
|
return myEmptyListOfInterference;
|
|
}
|
|
TopOpeBRepDS_CurveData& CD = myCurves.ChangeFind(I);
|
|
TopOpeBRepDS_ListOfInterference& LI = CD.ChangeInterferences();
|
|
return LI;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : PointInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::PointInterferences(const Standard_Integer I)const
|
|
{
|
|
|
|
if ( !myPoints.IsBound(I) ) {
|
|
return myEmptyListOfInterference;
|
|
}
|
|
const TopOpeBRepDS_PointData& PD = myPoints.Find(I);
|
|
const TopOpeBRepDS_ListOfInterference& LI = PD.Interferences();
|
|
return LI;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangePointInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ChangePointInterferences(const Standard_Integer I)
|
|
{
|
|
|
|
if ( !myPoints.IsBound(I) ) {
|
|
return myEmptyListOfInterference;
|
|
}
|
|
TopOpeBRepDS_PointData& PD = myPoints.ChangeFind(I);
|
|
TopOpeBRepDS_ListOfInterference& LI = PD.ChangeInterferences();
|
|
return LI;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ShapeInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ShapeInterferences(const TopoDS_Shape& S,const Standard_Boolean FindKeep)const
|
|
{
|
|
if(HasShape(S, FindKeep))
|
|
return myShapes.FindFromKey(S).myInterferences;
|
|
return myEmptyListOfInterference;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeShapeInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ChangeShapeInterferences(const TopoDS_Shape& S)
|
|
{
|
|
if(!HasShape(S))
|
|
return myEmptyListOfInterference;
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
return SD.myInterferences;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ShapeInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ShapeInterferences(const Standard_Integer I,const Standard_Boolean FindKeep) const
|
|
{
|
|
if(FindKeep && !KeepShape(I))
|
|
return myEmptyListOfInterference;
|
|
return myShapes.FindFromIndex(I).myInterferences;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeShapeInterferences
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_ListOfInterference& TopOpeBRepDS_DataStructure::ChangeShapeInterferences(const Standard_Integer I)
|
|
{
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromIndex(I);
|
|
return SD.myInterferences;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ShapeSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopTools_ListOfShape& TopOpeBRepDS_DataStructure::ShapeSameDomain(const TopoDS_Shape& S)const
|
|
{
|
|
if(!S.IsNull())
|
|
if (myShapes.Contains(S)) {
|
|
const TopOpeBRepDS_ShapeData& SD = myShapes.FindFromKey(S);
|
|
const TopTools_ListOfShape& l = SD.mySameDomain;
|
|
return l;
|
|
}
|
|
return myEmptyListOfShape;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeShapeSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
TopTools_ListOfShape& TopOpeBRepDS_DataStructure::ChangeShapeSameDomain(const TopoDS_Shape& S)
|
|
{
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
return SD.mySameDomain;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ShapeSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopTools_ListOfShape& TopOpeBRepDS_DataStructure::ShapeSameDomain(const Standard_Integer I)const
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
const TopOpeBRepDS_ShapeData& SD = myShapes.FindFromIndex(I);
|
|
const TopTools_ListOfShape& l = SD.mySameDomain;
|
|
return l;
|
|
}
|
|
else {
|
|
return myEmptyListOfShape;
|
|
}
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeShapeSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
TopTools_ListOfShape& TopOpeBRepDS_DataStructure::ChangeShapeSameDomain(const Standard_Integer I)
|
|
{
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromIndex(I);
|
|
return SD.mySameDomain;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : AddShapeSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::AddShapeSameDomain(const TopoDS_Shape& S, const TopoDS_Shape& SSD)
|
|
{
|
|
Standard_Boolean append = Standard_True;
|
|
{
|
|
TopTools_ListIteratorOfListOfShape it(ShapeSameDomain(S));
|
|
for (; it.More(); it.Next() ) {
|
|
const TopoDS_Shape& itS = it.Value();
|
|
if ( itS.IsSame(SSD) ) {
|
|
append = Standard_False;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (append) {
|
|
ChangeShapeSameDomain(S).Append(SSD);
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : RemoveShapeSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::RemoveShapeSameDomain(const TopoDS_Shape& S, const TopoDS_Shape& SSD)
|
|
{
|
|
TopTools_ListOfShape& L = ChangeShapeSameDomain(S);
|
|
TopTools_ListIteratorOfListOfShape it(L);
|
|
while (it.More()) {
|
|
const TopoDS_Shape& itS = it.Value();
|
|
Standard_Boolean remove = itS.IsSame(SSD);
|
|
if (remove)
|
|
L.Remove(it);
|
|
else
|
|
it.Next();
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainRef
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::SameDomainRef(const Standard_Integer I)const
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
return myShapes.FindFromIndex(I).mySameDomainRef;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainRef
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::SameDomainRef(const TopoDS_Shape& S) const
|
|
{
|
|
if(S.IsNull()) return 0;
|
|
if (myShapes.Contains(S)) {
|
|
return myShapes.FindFromKey(S).mySameDomainRef;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainRef
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SameDomainRef(const Standard_Integer I, const Standard_Integer Ref)
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromIndex(I);
|
|
SD.mySameDomainRef = Ref;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainRef
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SameDomainRef(const TopoDS_Shape& S, const Standard_Integer Ref)
|
|
{
|
|
if(S.IsNull()) return;
|
|
if (myShapes.Contains(S)) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
SD.mySameDomainRef = Ref;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainOri
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_Config TopOpeBRepDS_DataStructure::SameDomainOri(const Standard_Integer I)const
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
return myShapes.FindFromIndex(I).mySameDomainOri;
|
|
}
|
|
return TopOpeBRepDS_UNSHGEOMETRY;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainOri
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_Config TopOpeBRepDS_DataStructure::SameDomainOri(const TopoDS_Shape& S) const
|
|
{
|
|
if(!S.IsNull())
|
|
if (myShapes.Contains(S)) {
|
|
return myShapes.FindFromKey(S).mySameDomainOri;
|
|
}
|
|
return TopOpeBRepDS_UNSHGEOMETRY;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainOri
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SameDomainOri(const Standard_Integer I, const TopOpeBRepDS_Config Ori)
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromIndex(I);
|
|
SD.mySameDomainOri = Ori;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainOri
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SameDomainOri(const TopoDS_Shape& S, const TopOpeBRepDS_Config Ori)
|
|
{
|
|
if(!S.IsNull())
|
|
if (myShapes.Contains(S)) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
SD.mySameDomainOri = Ori;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainInd
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::SameDomainInd(const Standard_Integer I)const
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
return myShapes.FindFromIndex(I).mySameDomainInd;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainInd
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::SameDomainInd(const TopoDS_Shape& S) const
|
|
{
|
|
if(!S.IsNull())
|
|
if (myShapes.Contains(S)) {
|
|
return myShapes.FindFromKey(S).mySameDomainInd;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainInd
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SameDomainInd(const Standard_Integer I, const Standard_Integer Ind)
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromIndex(I);
|
|
SD.mySameDomainInd = Ind;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SameDomainInd
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SameDomainInd(const TopoDS_Shape& S, const Standard_Integer Ind)
|
|
{
|
|
if(S.IsNull()) return;
|
|
if (myShapes.Contains(S)) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
SD.mySameDomainInd = Ind;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AncestorRank
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AncestorRank(const Standard_Integer I)const
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
return myShapes.FindFromIndex(I).myAncestorRank;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AncestorRank
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::AncestorRank(const TopoDS_Shape& S) const
|
|
{
|
|
if(S.IsNull()) return 0;
|
|
if (myShapes.Contains(S)) {
|
|
return myShapes.FindFromKey(S).myAncestorRank;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AncestorRank
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::AncestorRank(const Standard_Integer I, const Standard_Integer Ianc)
|
|
{
|
|
if (I >= 1 && I <= myShapes.Extent()) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromIndex(I);
|
|
SD.myAncestorRank = Ianc;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AncestorRank
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::AncestorRank(const TopoDS_Shape& S, const Standard_Integer Ianc)
|
|
{
|
|
if(S.IsNull()) return;
|
|
if (myShapes.Contains(S)) {
|
|
TopOpeBRepDS_ShapeData& SD = myShapes.ChangeFromKey(S);
|
|
SD.myAncestorRank = Ianc;
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : AddShapeInterference
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::AddShapeInterference(const TopoDS_Shape& S, const Handle(TopOpeBRepDS_Interference)& I)
|
|
{
|
|
ChangeShapeInterferences(S).Append(I);
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : RemoveShapeInterference
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::RemoveShapeInterference(const TopoDS_Shape& S, const Handle(TopOpeBRepDS_Interference)& I)
|
|
{
|
|
TopOpeBRepDS_ListOfInterference& L = ChangeShapeInterferences(S);
|
|
TopOpeBRepDS_ListIteratorOfListOfInterference it(L);
|
|
Standard_Boolean b = FindInterference(it,I);
|
|
if (b) {
|
|
L.Remove(it);
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : FillShapesSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::FillShapesSameDomain(const TopoDS_Shape& S1,
|
|
const TopoDS_Shape& S2,
|
|
const Standard_Boolean refFirst)
|
|
{
|
|
TopAbs_Orientation o1 = S1.Orientation();
|
|
TopAbs_Orientation o2 = S2.Orientation();
|
|
|
|
Standard_Integer iS1 = AddShape(S1,1);
|
|
TopOpeBRepDS_ShapeData& SD1 = myShapes.ChangeFromIndex(iS1);
|
|
Standard_Boolean isdef1 = SD1.myOrientationDef;
|
|
Standard_Boolean todef1 = ( !isdef1 );
|
|
if ( isdef1 && SD1.mySameDomainOri == TopOpeBRepDS_UNSHGEOMETRY ) todef1 = Standard_True;
|
|
if ( todef1 ) {
|
|
SD1.myOrientation = o1;
|
|
SD1.myOrientationDef = Standard_True;
|
|
}
|
|
|
|
Standard_Integer iS2 = AddShape(S2,2);
|
|
TopOpeBRepDS_ShapeData& SD2 = myShapes.ChangeFromIndex(iS2);
|
|
Standard_Boolean isdef2 = SD2.myOrientationDef;
|
|
Standard_Boolean todef2 = ( !isdef2 );
|
|
if ( isdef2 && SD2.mySameDomainOri == TopOpeBRepDS_UNSHGEOMETRY ) todef2 = Standard_True;
|
|
if ( todef2 ) {
|
|
SD2.myOrientation = o2;
|
|
SD2.myOrientationDef = Standard_True;
|
|
}
|
|
|
|
Standard_Integer n1 = ShapeSameDomain(S1).Extent();
|
|
Standard_Integer n2 = ShapeSameDomain(S2).Extent();
|
|
|
|
AddShapeSameDomain(S1,S2);
|
|
AddShapeSameDomain(S2,S1);
|
|
|
|
Standard_Integer n11 = ShapeSameDomain(S1).Extent();
|
|
Standard_Integer n22 = ShapeSameDomain(S2).Extent();
|
|
|
|
Standard_Boolean cond = ( n11 == n1 ) && (n22 == n2);
|
|
cond = cond && (!todef1) && (!todef2);
|
|
if ( cond ) {
|
|
// nothing changed in SameDomain data of S1 and S2 : return
|
|
return;
|
|
}
|
|
|
|
Standard_Integer r1 = SameDomainRef(S1);
|
|
Standard_Integer r2 = SameDomainRef(S2);
|
|
Standard_Integer r = 0;
|
|
// r1 == i1 r2 == i2 : shapes have no SameDomain ref : take S1 as reference
|
|
// r1 == i1 r2 != i2 : S2 has a SameDomain reference : give it to S1
|
|
// r1 != i1 r2 == i2 : S1 has a SameDomain reference : give it to S2
|
|
// r1 != i1 r2 != i2 : S1,S2 have SameDomain reference : check equality
|
|
if ( r1 == iS1 && r2 == iS2 ) r = (refFirst? iS1 : iS2);
|
|
else if ( r1 == iS1 && r2 != iS2 ) r = r2;
|
|
else if ( r1 != iS1 && r2 == iS2 ) r = r1;
|
|
else if ( r1 != iS1 && r2 != iS2 ) {
|
|
if (r1 != r2) {
|
|
// throw Standard_ProgramError("FacesFiller::Insert SD 1");
|
|
}
|
|
r = (refFirst? r1 : r2);
|
|
}
|
|
|
|
if (r == 0) {
|
|
throw Standard_ProgramError("FacesFiller::Insert SD 2");
|
|
}
|
|
|
|
TopoDS_Shape Sr = Shape(r);
|
|
const TopOpeBRepDS_ShapeData& SD = myShapes.FindFromKey(Sr);
|
|
TopAbs_Orientation oSr = SD.myOrientation;
|
|
Sr.Orientation(oSr);
|
|
|
|
if ( r != r1 || todef1) { // S1 gets a new reference r
|
|
TopOpeBRepDS_Config o = TopOpeBRepDS_SAMEORIENTED;
|
|
if ( r != iS1 || todef1) {
|
|
Standard_Boolean sso = TopOpeBRepTool_ShapeTool::ShapesSameOriented(S1,Sr);
|
|
if (!sso) o = TopOpeBRepDS_DIFFORIENTED;
|
|
}
|
|
SameDomainRef(iS1,r);
|
|
SameDomainOri(iS1,o);
|
|
}
|
|
|
|
if ( r != r2 || todef2) { // S2 gets a new reference r
|
|
TopOpeBRepDS_Config o = TopOpeBRepDS_SAMEORIENTED;
|
|
if ( r != iS2 || todef2) {
|
|
Standard_Boolean sso = TopOpeBRepTool_ShapeTool::ShapesSameOriented(S2,Sr);
|
|
if (!sso) o = TopOpeBRepDS_DIFFORIENTED;
|
|
}
|
|
SameDomainRef(iS2,r);
|
|
SameDomainOri(iS2,o);
|
|
}
|
|
|
|
// index
|
|
SameDomainInd(S1,1);
|
|
SameDomainInd(S2,2);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : FillShapesSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::FillShapesSameDomain(const TopoDS_Shape& S1,
|
|
const TopoDS_Shape& S2,
|
|
const TopOpeBRepDS_Config c1,
|
|
const TopOpeBRepDS_Config c2,
|
|
const Standard_Boolean refFirst)
|
|
{
|
|
Standard_Integer iS1 = AddShape(S1,1);
|
|
TopOpeBRepDS_ShapeData& SD1 = myShapes.ChangeFromIndex(iS1);
|
|
Standard_Boolean isdef1 = SD1.myOrientationDef;
|
|
Standard_Boolean todef1 = Standard_True;
|
|
if (c1 == TopOpeBRepDS_UNSHGEOMETRY && isdef1) todef1 = Standard_False;
|
|
|
|
Standard_Integer iS2 = AddShape(S2,2);
|
|
TopOpeBRepDS_ShapeData& SD2 = myShapes.ChangeFromIndex(iS2);
|
|
Standard_Boolean isdef2 = SD2.myOrientationDef;
|
|
Standard_Boolean todef2 = Standard_True;
|
|
if (c2 == TopOpeBRepDS_UNSHGEOMETRY && isdef2) todef2 = Standard_False;
|
|
|
|
if (todef1 || todef2 ) {
|
|
FillShapesSameDomain(S1,S2,refFirst);
|
|
}
|
|
|
|
if (todef1 && c1 == TopOpeBRepDS_UNSHGEOMETRY)
|
|
SameDomainOri(S1,TopOpeBRepDS_UNSHGEOMETRY);
|
|
if (todef2 && c2 == TopOpeBRepDS_UNSHGEOMETRY)
|
|
SameDomainOri(S2,TopOpeBRepDS_UNSHGEOMETRY);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : UnfillShapesSameDomain
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::UnfillShapesSameDomain(const TopoDS_Shape& S1,const TopoDS_Shape& S2)
|
|
{
|
|
RemoveShapeSameDomain(S1,S2);
|
|
RemoveShapeSameDomain(S2,S1);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : NbSurfaces
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::NbSurfaces()const
|
|
{
|
|
Standard_Integer n = myNbSurfaces;
|
|
return n;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : NbCurves
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::NbCurves()const
|
|
{
|
|
Standard_Integer n = myNbCurves;
|
|
return n;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeNbCurves
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::ChangeNbCurves(const Standard_Integer n)
|
|
{
|
|
myNbCurves = n;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : NbPoints
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::NbPoints()const
|
|
{
|
|
Standard_Integer n = myNbPoints;
|
|
return n;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : NbShapes
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::NbShapes()const
|
|
{
|
|
Standard_Integer n = myShapes.Extent();
|
|
return n;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : NbSectionEdges
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::NbSectionEdges()const
|
|
{
|
|
Standard_Integer n = mySectionEdges.Extent();
|
|
return n;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : Surface
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_Surface& TopOpeBRepDS_DataStructure::Surface(const Standard_Integer I) const
|
|
{
|
|
if ( mySurfaces.IsBound(I) )
|
|
return mySurfaces(I).mySurface;
|
|
else
|
|
return myEmptySurface;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : ChangeSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_Surface& TopOpeBRepDS_DataStructure::ChangeSurface(const Standard_Integer I)
|
|
{
|
|
if ( mySurfaces.IsBound(I) )
|
|
return mySurfaces(I).mySurface;
|
|
else
|
|
return myEmptySurface;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : Curve
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_Curve& TopOpeBRepDS_DataStructure::Curve(const Standard_Integer I)const
|
|
{
|
|
if ( myCurves.IsBound(I) ) {
|
|
const TopOpeBRepDS_CurveData& CD = myCurves(I);
|
|
const TopOpeBRepDS_Curve& C = CD.myCurve;
|
|
return C;
|
|
}
|
|
else
|
|
return myEmptyCurve;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeCurve
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_Curve& TopOpeBRepDS_DataStructure::ChangeCurve(const Standard_Integer I)
|
|
{
|
|
if ( myCurves.IsBound(I) ) {
|
|
TopOpeBRepDS_CurveData& CD = myCurves.ChangeFind(I);
|
|
TopOpeBRepDS_Curve& C = CD.myCurve;
|
|
return C;
|
|
}
|
|
return myEmptyCurve;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : Point
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_Point& TopOpeBRepDS_DataStructure::Point(const Standard_Integer I)const
|
|
{
|
|
if ( I < 1 || I > myNbPoints ) {
|
|
throw Standard_ProgramError("TopOpeBRepDS_DataStructure::Point");
|
|
}
|
|
|
|
if ( myPoints.IsBound(I) )
|
|
return myPoints(I).myPoint;
|
|
else
|
|
return myEmptyPoint;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangePoint
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_Point& TopOpeBRepDS_DataStructure::ChangePoint(const Standard_Integer I)
|
|
{
|
|
if ( I < 1 || I > myNbPoints ) {
|
|
throw Standard_ProgramError("TopOpeBRepDS_DataStructure::Point");
|
|
}
|
|
|
|
if ( myPoints.IsBound(I) )
|
|
return myPoints(I).myPoint;
|
|
else
|
|
return myEmptyPoint;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : Shape
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopoDS_Shape& TopOpeBRepDS_DataStructure::Shape(const Standard_Integer I,const Standard_Boolean FindKeep) const
|
|
{
|
|
if(KeepShape(I, FindKeep)) {
|
|
const TopoDS_Shape& S = myShapes.FindKey(I);
|
|
return S;
|
|
}
|
|
return myEmptyShape;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : Shape
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::Shape(const TopoDS_Shape& S,const Standard_Boolean FindKeep)const
|
|
{
|
|
Standard_Integer i = 0;
|
|
Standard_Boolean hs = HasShape(S, FindKeep);
|
|
if (hs) {
|
|
i = myShapes.FindIndex(S);
|
|
}
|
|
return i;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : SectionEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopoDS_Edge& TopOpeBRepDS_DataStructure::SectionEdge(const Standard_Integer I,const Standard_Boolean FindKeep) const
|
|
{
|
|
const TopoDS_Shape& S = mySectionEdges.FindKey(I);
|
|
if(HasShape(S, FindKeep))
|
|
return TopoDS::Edge(S);
|
|
return TopoDS::Edge(myEmptyShape);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SectionEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Integer TopOpeBRepDS_DataStructure::SectionEdge(const TopoDS_Edge& S,const Standard_Boolean FindKeep) const
|
|
{
|
|
Standard_Integer i = 0;
|
|
if(KeepShape(S, FindKeep))
|
|
i = mySectionEdges.FindIndex(S);
|
|
return i;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : IsSectionEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::IsSectionEdge(const TopoDS_Edge& S,const Standard_Boolean FindKeep) const
|
|
{
|
|
Standard_Boolean b = KeepShape(S, FindKeep);
|
|
if(b) {
|
|
b = mySectionEdges.Contains(S);
|
|
}
|
|
return b;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : HasGeometry
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::HasGeometry(const TopoDS_Shape& S)const
|
|
{
|
|
Standard_Boolean has = HasShape(S);
|
|
if ( has ) {
|
|
has = ! ShapeInterferences(S).IsEmpty();
|
|
}
|
|
return has;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : HasShape
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::HasShape(const TopoDS_Shape& S,const Standard_Boolean FindKeep)const
|
|
{
|
|
Standard_Boolean res = KeepShape(S, FindKeep);
|
|
return res;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : SetNewSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::SetNewSurface(const TopoDS_Shape& F, const Handle(Geom_Surface)& S)
|
|
{
|
|
myNewSurface.Bind(F,S);
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : HasNewSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::HasNewSurface(const TopoDS_Shape& F) const
|
|
{
|
|
Standard_Boolean b = myNewSurface.IsBound(F);
|
|
return b;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : NewSurface
|
|
//purpose :
|
|
//=======================================================================
|
|
const Handle(Geom_Surface)& TopOpeBRepDS_DataStructure::NewSurface(const TopoDS_Shape& F) const
|
|
{
|
|
if (HasNewSurface(F)) return myNewSurface.Find(F);
|
|
return myEmptyGSurface;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : FindInterference
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::FindInterference(TopOpeBRepDS_ListIteratorOfListOfInterference& IT,const Handle(TopOpeBRepDS_Interference)& I) const
|
|
{
|
|
for( ; IT.More(); IT.Next()) if (IT.Value() == I ) return Standard_True;
|
|
return Standard_False;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : Isfafa
|
|
//purpose :
|
|
//=======================================================================
|
|
void TopOpeBRepDS_DataStructure::Isfafa(const Standard_Boolean isfafa)
|
|
{
|
|
myIsfafa = isfafa;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : Isfafa
|
|
//purpose :
|
|
//=======================================================================
|
|
Standard_Boolean TopOpeBRepDS_DataStructure::Isfafa() const
|
|
{
|
|
return myIsfafa;
|
|
}
|
|
|
|
//
|
|
//=======================================================================
|
|
//function :ChangeMapOfShapeWithStateObj
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_IndexedDataMapOfShapeWithState& TopOpeBRepDS_DataStructure::ChangeMapOfShapeWithStateObj()
|
|
{
|
|
return myMapOfShapeWithStateObj;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function :ChangeMapOfShapeWithStateTool
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_IndexedDataMapOfShapeWithState& TopOpeBRepDS_DataStructure::ChangeMapOfShapeWithStateTool()
|
|
{
|
|
return myMapOfShapeWithStateTool;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function :ChangeMapOfShapeWithState
|
|
//purpose :
|
|
//=======================================================================
|
|
TopOpeBRepDS_IndexedDataMapOfShapeWithState& TopOpeBRepDS_DataStructure::ChangeMapOfShapeWithState
|
|
(const TopoDS_Shape& aShape, Standard_Boolean& aFlag)
|
|
{
|
|
static TopOpeBRepDS_IndexedDataMapOfShapeWithState dummy;
|
|
aFlag=Standard_True;
|
|
|
|
if (myMapOfShapeWithStateObj.Contains(aShape))
|
|
return myMapOfShapeWithStateObj;
|
|
|
|
if (myMapOfShapeWithStateTool.Contains(aShape))
|
|
return myMapOfShapeWithStateTool;
|
|
|
|
aFlag=Standard_False;
|
|
return dummy;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function :GetShapeWithState
|
|
//purpose :
|
|
//=======================================================================
|
|
const TopOpeBRepDS_ShapeWithState& TopOpeBRepDS_DataStructure::GetShapeWithState(const TopoDS_Shape& aShape) const
|
|
{
|
|
static TopOpeBRepDS_ShapeWithState dummy;
|
|
if(myMapOfShapeWithStateObj.Contains(aShape))
|
|
return myMapOfShapeWithStateObj.FindFromKey(aShape);
|
|
else if(myMapOfShapeWithStateTool.Contains(aShape))
|
|
return myMapOfShapeWithStateTool.FindFromKey(aShape);
|
|
|
|
return dummy;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function :ChangeMapOfRejectedShapesObj
|
|
//purpose :
|
|
//=======================================================================
|
|
TopTools_IndexedMapOfShape& TopOpeBRepDS_DataStructure::ChangeMapOfRejectedShapesObj()
|
|
{
|
|
return myMapOfRejectedShapesObj;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function :ChangeMapOfRejectedShapesTool
|
|
//purpose :
|
|
//=======================================================================
|
|
TopTools_IndexedMapOfShape& TopOpeBRepDS_DataStructure::ChangeMapOfRejectedShapesTool()
|
|
{
|
|
return myMapOfRejectedShapesTool;
|
|
}
|
|
|
|
|