mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Prototype the possibility to extend the 3D Offset algorithm to set the new face manually.
This commit is contained in:
@@ -1386,6 +1386,7 @@ void BRepOffset_Inter2d::Compute (const Handle(BRepAlgo_AsDes)& AsDes,
|
|||||||
void BRepOffset_Inter2d::ConnexIntByInt
|
void BRepOffset_Inter2d::ConnexIntByInt
|
||||||
(const TopoDS_Face& FI,
|
(const TopoDS_Face& FI,
|
||||||
BRepOffset_Offset& OFI,
|
BRepOffset_Offset& OFI,
|
||||||
|
const TopoDS_Face& FIO,
|
||||||
TopTools_DataMapOfShapeShape& MES,
|
TopTools_DataMapOfShapeShape& MES,
|
||||||
const TopTools_DataMapOfShapeShape& Build,
|
const TopTools_DataMapOfShapeShape& Build,
|
||||||
const Handle(BRepAlgo_AsDes)& AsDes,
|
const Handle(BRepAlgo_AsDes)& AsDes,
|
||||||
@@ -1415,22 +1416,20 @@ void BRepOffset_Inter2d::ConnexIntByInt
|
|||||||
if (YaBuild) {
|
if (YaBuild) {
|
||||||
for (itL.Initialize(L); itL.More(); itL.Next()) {
|
for (itL.Initialize(L); itL.More(); itL.Next()) {
|
||||||
const TopoDS_Edge& EI = TopoDS::Edge(itL.Value());
|
const TopoDS_Edge& EI = TopoDS::Edge(itL.Value());
|
||||||
TopoDS_Shape aLocalShape = OFI.Generated(EI);
|
if (!Build.IsBound(EI)) {
|
||||||
const TopoDS_Edge& OE = TopoDS::Edge(aLocalShape);
|
TopoDS_Shape aLocalShape = OFI.Generated(EI);
|
||||||
// const TopoDS_Edge& OE = TopoDS::Edge(OFI.Generated(EI));
|
const TopoDS_Edge& OE = TopoDS::Edge(aLocalShape);
|
||||||
if (!MES.IsBound(OE) && !Build.IsBound(EI)) {
|
if (!MES.IsBound(OE)) {
|
||||||
// Modified by skv - Fri Dec 26 16:59:52 2003 OCC4455 Begin
|
ExtentEdge(OE,NE, Offset);
|
||||||
// ExtentEdge(OE,NE);
|
MES.Bind (OE,NE);
|
||||||
ExtentEdge(OE,NE, Offset);
|
}
|
||||||
// Modified by skv - Fri Dec 26 16:59:54 2003 OCC4455 End
|
|
||||||
MES.Bind (OE,NE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TopoDS_Face FIO = TopoDS::Face(OFI.Face());
|
//TopoDS_Face FIO = TopoDS::Face(OFI.Face());
|
||||||
if (MES.IsBound(FIO)) FIO = TopoDS::Face(MES(FIO));
|
//if (MES.IsBound(FIO)) FIO = TopoDS::Face(MES(FIO));
|
||||||
//
|
//
|
||||||
TopTools_MapOfShape aME;
|
TopTools_MapOfShape aME;
|
||||||
const TopTools_ListOfShape& aLE = AsDes->Descendant(FIO);
|
const TopTools_ListOfShape& aLE = AsDes->Descendant(FIO);
|
||||||
@@ -1470,34 +1469,48 @@ void BRepOffset_Inter2d::ConnexIntByInt
|
|||||||
gp_Pnt Pref = BRep_Tool::Pnt(Vref);
|
gp_Pnt Pref = BRep_Tool::Pnt(Vref);
|
||||||
//IFV------------
|
//IFV------------
|
||||||
|
|
||||||
TopoDS_Shape aLocalShape = OFI.Generated(CurE);
|
|
||||||
TopoDS_Edge CEO = TopoDS::Edge(aLocalShape);
|
|
||||||
aLocalShape = OFI.Generated(NextE);
|
|
||||||
TopoDS_Edge NEO = TopoDS::Edge(aLocalShape);
|
|
||||||
// TopoDS_Edge CEO = TopoDS::Edge(OFI.Generated(CurE));
|
|
||||||
// TopoDS_Edge NEO = TopoDS::Edge(OFI.Generated(NextE));
|
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
// Inter processing of images of CurE NextE.
|
// Inter processing of images of CurE NextE.
|
||||||
//------------------------------------------
|
//------------------------------------------
|
||||||
TopTools_ListOfShape LV1,LV2;
|
TopTools_ListOfShape LV1,LV2;
|
||||||
Standard_Boolean DoInter = 1;
|
|
||||||
TopoDS_Shape NE1,NE2;
|
TopoDS_Shape NE1,NE2;
|
||||||
|
Standard_Boolean DoInter = 0;
|
||||||
|
|
||||||
if (Build.IsBound(CurE) && Build.IsBound(NextE)) {
|
if (Build.IsBound(CurE) && Build.IsBound(NextE)) {
|
||||||
NE1 = Build(CurE );
|
NE1 = Build(CurE );
|
||||||
NE2 = Build(NextE);
|
NE2 = Build(NextE);
|
||||||
}
|
DoInter = 1;
|
||||||
else if (Build.IsBound(CurE) && MES.IsBound(NEO)) {
|
|
||||||
NE1 = Build(CurE);
|
|
||||||
NE2 = MES (NEO);
|
|
||||||
}
|
|
||||||
else if (Build.IsBound(NextE) && MES.IsBound(CEO)) {
|
|
||||||
NE1 = Build(NextE);
|
|
||||||
NE2 = MES(CEO);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DoInter = 0;
|
TopoDS_Shape aLocalShape = OFI.Generated(CurE);
|
||||||
|
TopoDS_Edge CEO = TopoDS::Edge(aLocalShape);
|
||||||
|
aLocalShape = OFI.Generated(NextE);
|
||||||
|
TopoDS_Edge NEO = TopoDS::Edge(aLocalShape);
|
||||||
|
//
|
||||||
|
if (Build.IsBound(CurE) && MES.IsBound(NEO)) {
|
||||||
|
NE1 = Build(CurE);
|
||||||
|
NE2 = MES (NEO);
|
||||||
|
DoInter = 1;
|
||||||
|
}
|
||||||
|
else if (Build.IsBound(NextE) && MES.IsBound(CEO)) {
|
||||||
|
NE1 = Build(NextE);
|
||||||
|
NE2 = MES(CEO);
|
||||||
|
DoInter = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (MES.IsBound(CEO)) {
|
||||||
|
TopoDS_Vertex V = CommonVertex(CEO,NEO);
|
||||||
|
UpdateVertex (V,CEO,TopoDS::Edge(MES(CEO)),Tol);
|
||||||
|
AsDes2d->Add (MES(CEO),V);
|
||||||
|
}
|
||||||
|
else if (MES.IsBound(NEO)) {
|
||||||
|
TopoDS_Vertex V = CommonVertex(CEO,NEO);
|
||||||
|
UpdateVertex (V,NEO,TopoDS::Edge(MES(NEO)),Tol);
|
||||||
|
AsDes2d->Add (MES(NEO),V);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
if (DoInter) {
|
if (DoInter) {
|
||||||
//------------------------------------
|
//------------------------------------
|
||||||
// NE1,NE2 can be a compound of Edges.
|
// NE1,NE2 can be a compound of Edges.
|
||||||
@@ -1531,18 +1544,18 @@ void BRepOffset_Inter2d::ConnexIntByInt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
//else {
|
||||||
if (MES.IsBound(CEO)) {
|
// if (MES.IsBound(CEO)) {
|
||||||
TopoDS_Vertex V = CommonVertex(CEO,NEO);
|
// TopoDS_Vertex V = CommonVertex(CEO,NEO);
|
||||||
UpdateVertex (V,CEO,TopoDS::Edge(MES(CEO)),Tol);
|
// UpdateVertex (V,CEO,TopoDS::Edge(MES(CEO)),Tol);
|
||||||
AsDes2d->Add (MES(CEO),V);
|
// AsDes2d->Add (MES(CEO),V);
|
||||||
}
|
// }
|
||||||
else if (MES.IsBound(NEO)) {
|
// else if (MES.IsBound(NEO)) {
|
||||||
TopoDS_Vertex V = CommonVertex(CEO,NEO);
|
// TopoDS_Vertex V = CommonVertex(CEO,NEO);
|
||||||
UpdateVertex (V,NEO,TopoDS::Edge(MES(NEO)),Tol);
|
// UpdateVertex (V,NEO,TopoDS::Edge(MES(NEO)),Tol);
|
||||||
AsDes2d->Add (MES(NEO),V);
|
// AsDes2d->Add (MES(NEO),V);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
CurE = NextE;
|
CurE = NextE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -59,6 +59,7 @@ public:
|
|||||||
//! theDMVV contains the vertices that should be fused.
|
//! theDMVV contains the vertices that should be fused.
|
||||||
Standard_EXPORT static void ConnexIntByInt (const TopoDS_Face& FI,
|
Standard_EXPORT static void ConnexIntByInt (const TopoDS_Face& FI,
|
||||||
BRepOffset_Offset& OFI,
|
BRepOffset_Offset& OFI,
|
||||||
|
const TopoDS_Face& FIO,
|
||||||
TopTools_DataMapOfShapeShape& MES,
|
TopTools_DataMapOfShapeShape& MES,
|
||||||
const TopTools_DataMapOfShapeShape& Build,
|
const TopTools_DataMapOfShapeShape& Build,
|
||||||
const Handle(BRepAlgo_AsDes)& AsDes,
|
const Handle(BRepAlgo_AsDes)& AsDes,
|
||||||
|
@@ -420,7 +420,7 @@ void BRepOffset_Inter3d::ConnexIntByArc(const TopTools_ListOfShape& /*SetOfFaces
|
|||||||
|
|
||||||
void BRepOffset_Inter3d::ConnexIntByInt
|
void BRepOffset_Inter3d::ConnexIntByInt
|
||||||
(const TopoDS_Shape& SI,
|
(const TopoDS_Shape& SI,
|
||||||
const BRepOffset_DataMapOfShapeOffset& MapSF,
|
const TopTools_DataMapOfShapeShape& MapSF,
|
||||||
const BRepOffset_Analyse& Analyse,
|
const BRepOffset_Analyse& Analyse,
|
||||||
TopTools_DataMapOfShapeShape& MES,
|
TopTools_DataMapOfShapeShape& MES,
|
||||||
TopTools_DataMapOfShapeShape& Build,
|
TopTools_DataMapOfShapeShape& Build,
|
||||||
@@ -543,8 +543,8 @@ void BRepOffset_Inter3d::ConnexIntByInt
|
|||||||
F1 = TopoDS::Face(itF1.Value());
|
F1 = TopoDS::Face(itF1.Value());
|
||||||
F2 = TopoDS::Face(itF2.Value());
|
F2 = TopoDS::Face(itF2.Value());
|
||||||
//
|
//
|
||||||
OF1 = TopoDS::Face(MapSF(F1).Face());
|
OF1 = TopoDS::Face(MapSF.Find(F1));
|
||||||
OF2 = TopoDS::Face(MapSF(F2).Face());
|
OF2 = TopoDS::Face(MapSF.Find(F2));
|
||||||
if (!MES.IsBound(OF1)) {
|
if (!MES.IsBound(OF1)) {
|
||||||
Standard_Boolean enlargeU = Standard_True;
|
Standard_Boolean enlargeU = Standard_True;
|
||||||
Standard_Boolean enlargeVfirst = Standard_True, enlargeVlast = Standard_True;
|
Standard_Boolean enlargeVfirst = Standard_True, enlargeVlast = Standard_True;
|
||||||
|
@@ -53,7 +53,7 @@ public:
|
|||||||
|
|
||||||
Standard_EXPORT void ConnexIntByArc (const TopTools_ListOfShape& SetOfFaces, const TopoDS_Shape& ShapeInit, const BRepOffset_Analyse& Analyse, const BRepAlgo_Image& InitOffsetFace);
|
Standard_EXPORT void ConnexIntByArc (const TopTools_ListOfShape& SetOfFaces, const TopoDS_Shape& ShapeInit, const BRepOffset_Analyse& Analyse, const BRepAlgo_Image& InitOffsetFace);
|
||||||
|
|
||||||
Standard_EXPORT void ConnexIntByInt (const TopoDS_Shape& SI, const BRepOffset_DataMapOfShapeOffset& MapSF, const BRepOffset_Analyse& A, TopTools_DataMapOfShapeShape& MES, TopTools_DataMapOfShapeShape& Build, TopTools_ListOfShape& Failed, const Standard_Boolean bIsPlanar = Standard_False);
|
Standard_EXPORT void ConnexIntByInt (const TopoDS_Shape& SI, const TopTools_DataMapOfShapeShape& MapSF, const BRepOffset_Analyse& A, TopTools_DataMapOfShapeShape& MES, TopTools_DataMapOfShapeShape& Build, TopTools_ListOfShape& Failed, const Standard_Boolean bIsPlanar = Standard_False);
|
||||||
|
|
||||||
Standard_EXPORT void ContextIntByInt (const TopTools_IndexedMapOfShape& ContextFaces, const Standard_Boolean ExtentContext, const BRepOffset_DataMapOfShapeOffset& MapSF, const BRepOffset_Analyse& A, TopTools_DataMapOfShapeShape& MES, TopTools_DataMapOfShapeShape& Build, TopTools_ListOfShape& Failed, const Standard_Boolean bIsPlanar = Standard_False);
|
Standard_EXPORT void ContextIntByInt (const TopTools_IndexedMapOfShape& ContextFaces, const Standard_Boolean ExtentContext, const BRepOffset_DataMapOfShapeOffset& MapSF, const BRepOffset_Analyse& A, TopTools_DataMapOfShapeShape& MES, TopTools_DataMapOfShapeShape& Build, TopTools_ListOfShape& Failed, const Standard_Boolean bIsPlanar = Standard_False);
|
||||||
|
|
||||||
|
@@ -670,6 +670,21 @@ void BRepOffset_MakeOffset::SetOffsetOnFace(const TopoDS_Face& F,
|
|||||||
myFaceOffset.Bind(F,Off);
|
myFaceOffset.Bind(F,Off);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetOffsetFace
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
void BRepOffset_MakeOffset::SetOffsetFace(const TopoDS_Face& F,
|
||||||
|
const TopoDS_Face& OF)
|
||||||
|
{
|
||||||
|
// Check the orientation of the offset face and make
|
||||||
|
// it oriented the same way as original
|
||||||
|
Handle(IntTools_Context) aCtx = new IntTools_Context;
|
||||||
|
Standard_Boolean bToReverse = BOPTools_AlgoTools::IsSplitToReverse(F, OF, aCtx);
|
||||||
|
TopoDS_Face anOffsetFace = bToReverse ? TopoDS::Face(OF.Reversed()) : OF;
|
||||||
|
myMapFaceOffsetFace.Bind(F, anOffsetFace);
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : RemoveCorks
|
//function : RemoveCorks
|
||||||
//purpose :
|
//purpose :
|
||||||
@@ -1113,6 +1128,9 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
BRepOffset_DataMapOfShapeOffset MapSF;
|
BRepOffset_DataMapOfShapeOffset MapSF;
|
||||||
|
TopTools_DataMapOfShapeShape aMapFaceOffsetFace;
|
||||||
|
// MES : Map of OffsetShape -> Extended Shapes.
|
||||||
|
TopTools_DataMapOfShapeShape MES;
|
||||||
TopTools_MapOfShape Done;
|
TopTools_MapOfShape Done;
|
||||||
Standard_Boolean OffsetOutside = (myOffset > 0.)? Standard_True : Standard_False;
|
Standard_Boolean OffsetOutside = (myOffset > 0.)? Standard_True : Standard_False;
|
||||||
//--------------------------------------------------------
|
//--------------------------------------------------------
|
||||||
@@ -1127,6 +1145,15 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
TopTools_DataMapOfShapeShape ShapeTgt;
|
TopTools_DataMapOfShapeShape ShapeTgt;
|
||||||
for (itLF.Initialize(LF); itLF.More(); itLF.Next()) {
|
for (itLF.Initialize(LF); itLF.More(); itLF.Next()) {
|
||||||
const TopoDS_Face& F = TopoDS::Face(itLF.Value());
|
const TopoDS_Face& F = TopoDS::Face(itLF.Value());
|
||||||
|
const TopoDS_Shape* pOFace = myMapFaceOffsetFace.Seek(F);
|
||||||
|
if (pOFace) {
|
||||||
|
// avoid creation of the new offset face
|
||||||
|
// if it was already given by the user
|
||||||
|
aMapFaceOffsetFace.Bind(F, *pOFace);
|
||||||
|
MES.Bind(*pOFace, *pOFace);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Standard_Real CurOffset = myOffset;
|
Standard_Real CurOffset = myOffset;
|
||||||
if (myFaceOffset.IsBound(F)) CurOffset = myFaceOffset(F);
|
if (myFaceOffset.IsBound(F)) CurOffset = myFaceOffset(F);
|
||||||
BRepOffset_Offset OF(F,CurOffset,ShapeTgt,OffsetOutside,myJoin);
|
BRepOffset_Offset OF(F,CurOffset,ShapeTgt,OffsetOutside,myJoin);
|
||||||
@@ -1161,13 +1188,12 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
MapSF.Bind(F,OF);
|
MapSF.Bind(F,OF);
|
||||||
|
aMapFaceOffsetFace.Bind(F, OF.Face());
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
// MES : Map of OffsetShape -> Extended Shapes.
|
|
||||||
// Build : Map of Initial SS -> OffsetShape build by Inter.
|
// Build : Map of Initial SS -> OffsetShape build by Inter.
|
||||||
// can be an edge or a compound of edges
|
// can be an edge or a compound of edges
|
||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
TopTools_DataMapOfShapeShape MES;
|
|
||||||
TopTools_DataMapOfShapeShape Build;
|
TopTools_DataMapOfShapeShape Build;
|
||||||
TopTools_ListOfShape Failed;
|
TopTools_ListOfShape Failed;
|
||||||
TopAbs_State Side = TopAbs_IN;
|
TopAbs_State Side = TopAbs_IN;
|
||||||
@@ -1181,7 +1207,7 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
|
|
||||||
BRepOffset_Inter3d Inter3 (AsDes,Side,myTol);
|
BRepOffset_Inter3d Inter3 (AsDes,Side,myTol);
|
||||||
// Intersection between parallel faces
|
// Intersection between parallel faces
|
||||||
Inter3.ConnexIntByInt(myShape,MapSF,myAnalyse,MES,Build,Failed,myIsPlanar);
|
Inter3.ConnexIntByInt(myShape,aMapFaceOffsetFace,myAnalyse,MES,Build,Failed,myIsPlanar);
|
||||||
// Intersection with caps.
|
// Intersection with caps.
|
||||||
Inter3.ContextIntByInt(myFaces,ExtentContext,MapSF,myAnalyse,MES,Build,Failed,myIsPlanar);
|
Inter3.ContextIntByInt(myFaces,ExtentContext,MapSF,myAnalyse,MES,Build,Failed,myIsPlanar);
|
||||||
|
|
||||||
@@ -1195,7 +1221,19 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
{
|
{
|
||||||
const TopoDS_Face& FI = TopoDS::Face(Exp.Current());
|
const TopoDS_Face& FI = TopoDS::Face(Exp.Current());
|
||||||
Standard_Real aCurrFaceTol = BRep_Tool::Tolerance(FI);
|
Standard_Real aCurrFaceTol = BRep_Tool::Tolerance(FI);
|
||||||
BRepOffset_Inter2d::ConnexIntByInt (FI, MapSF(FI), MES, Build,
|
|
||||||
|
BRepOffset_Offset OFI;
|
||||||
|
TopoDS_Face FIO;
|
||||||
|
if (myMapFaceOffsetFace.IsBound(FI)) {
|
||||||
|
FIO = TopoDS::Face(myMapFaceOffsetFace.Find(FI));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OFI = MapSF(FI);
|
||||||
|
FIO = TopoDS::Face(OFI.Face());
|
||||||
|
if (MES.IsBound(FIO)) FIO = TopoDS::Face(MES(FIO));
|
||||||
|
}
|
||||||
|
|
||||||
|
BRepOffset_Inter2d::ConnexIntByInt (FI, OFI, FIO, MES, Build,
|
||||||
AsDes, AsDes2d, myOffset, aCurrFaceTol, aDMVV);
|
AsDes, AsDes2d, myOffset, aCurrFaceTol, aDMVV);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -1213,7 +1251,7 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
|
|
||||||
for (Exp.Init(myShape,TopAbs_FACE) ; Exp.More(); Exp.Next()) {
|
for (Exp.Init(myShape,TopAbs_FACE) ; Exp.More(); Exp.Next()) {
|
||||||
const TopoDS_Face& FI = TopoDS::Face(Exp.Current());
|
const TopoDS_Face& FI = TopoDS::Face(Exp.Current());
|
||||||
NF = MapSF(FI).Face();
|
NF = TopoDS::Face(myMapFaceOffsetFace.IsBound(FI) ? myMapFaceOffsetFace.Find(FI) : MapSF(FI).Face());
|
||||||
if (MES.IsBound(NF)) {
|
if (MES.IsBound(NF)) {
|
||||||
NF = TopoDS::Face(MES(NF));
|
NF = TopoDS::Face(MES(NF));
|
||||||
}
|
}
|
||||||
@@ -1313,7 +1351,7 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
BRepAlgo_Image IMOE;
|
BRepAlgo_Image IMOE;
|
||||||
for (Exp.Init(myShape,TopAbs_FACE) ; Exp.More(); Exp.Next()) {
|
for (Exp.Init(myShape,TopAbs_FACE) ; Exp.More(); Exp.Next()) {
|
||||||
const TopoDS_Shape& FI = Exp.Current();
|
const TopoDS_Shape& FI = Exp.Current();
|
||||||
const TopoDS_Shape& OFI = MapSF(FI).Face();
|
const TopoDS_Shape& OFI = myMapFaceOffsetFace.IsBound(FI) ? myMapFaceOffsetFace.Find(FI) : MapSF(FI).Face();
|
||||||
if (MES.IsBound(OFI)) {
|
if (MES.IsBound(OFI)) {
|
||||||
const TopoDS_Face& aLocalFace = TopoDS::Face(MES(OFI));
|
const TopoDS_Face& aLocalFace = TopoDS::Face(MES(OFI));
|
||||||
LFE.Append(aLocalFace);
|
LFE.Append(aLocalFace);
|
||||||
@@ -1393,7 +1431,8 @@ void BRepOffset_MakeOffset::BuildOffsetByInter()
|
|||||||
for (Exp.Init(myShape,TopAbs_FACE) ; Exp.More(); Exp.Next()) {
|
for (Exp.Init(myShape,TopAbs_FACE) ; Exp.More(); Exp.Next()) {
|
||||||
const TopoDS_Shape& FI = Exp.Current();
|
const TopoDS_Shape& FI = Exp.Current();
|
||||||
myInitOffsetFace.SetRoot(FI);
|
myInitOffsetFace.SetRoot(FI);
|
||||||
TopoDS_Face OF = MapSF(FI).Face();
|
TopoDS_Face OF = TopoDS::Face(myMapFaceOffsetFace.IsBound(FI) ? myMapFaceOffsetFace.Find(FI) : MapSF(FI).Face());
|
||||||
|
// TopoDS_Face OF = MapSF(FI).Face();
|
||||||
if (MES.IsBound(OF)) {
|
if (MES.IsBound(OF)) {
|
||||||
OF = TopoDS::Face(MES(OF));
|
OF = TopoDS::Face(MES(OF));
|
||||||
if (IMOE.HasImage(OF)) {
|
if (IMOE.HasImage(OF)) {
|
||||||
@@ -4207,6 +4246,24 @@ Standard_Boolean BRepOffset_MakeOffset::CheckInputData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isFound)
|
||||||
|
{
|
||||||
|
// Check the availability of the user-defined modifications
|
||||||
|
TopTools_IndexedMapOfShape aMF;
|
||||||
|
TopExp::MapShapes(myShape, TopAbs_FACE, aMF);
|
||||||
|
TopTools_DataMapIteratorOfDataMapOfShapeShape anSSIter(myMapFaceOffsetFace);
|
||||||
|
for (; anSSIter.More(); anSSIter.Next())
|
||||||
|
{
|
||||||
|
const TopoDS_Shape& aFace = anSSIter.Key();
|
||||||
|
const TopoDS_Shape& anOffsetFace = anSSIter.Value();
|
||||||
|
if (aMF.Contains(aFace) && !anOffsetFace.IsNull())
|
||||||
|
{
|
||||||
|
isFound = Standard_True;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
if (!isFound)
|
if (!isFound)
|
||||||
{
|
{
|
||||||
// No face with non-null offset found.
|
// No face with non-null offset found.
|
||||||
|
@@ -83,6 +83,9 @@ public:
|
|||||||
|
|
||||||
//! set the offset <Off> on the Face <F>
|
//! set the offset <Off> on the Face <F>
|
||||||
Standard_EXPORT void SetOffsetOnFace (const TopoDS_Face& F, const Standard_Real Off);
|
Standard_EXPORT void SetOffsetOnFace (const TopoDS_Face& F, const Standard_Real Off);
|
||||||
|
|
||||||
|
//! Sets the offset face for the face in the shape.
|
||||||
|
Standard_EXPORT void SetOffsetFace (const TopoDS_Face& F, const TopoDS_Face& OF);
|
||||||
|
|
||||||
Standard_EXPORT void MakeOffsetShape();
|
Standard_EXPORT void MakeOffsetShape();
|
||||||
|
|
||||||
@@ -205,6 +208,7 @@ private:
|
|||||||
Standard_Boolean myIsPlanar;
|
Standard_Boolean myIsPlanar;
|
||||||
TopoDS_Shape myBadShape;
|
TopoDS_Shape myBadShape;
|
||||||
|
|
||||||
|
TopTools_DataMapOfShapeShape myMapFaceOffsetFace; // map of the face - extended offset face
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _BRepOffset_MakeOffset_HeaderFile
|
#endif // _BRepOffset_MakeOffset_HeaderFile
|
||||||
|
@@ -1116,6 +1116,26 @@ Standard_Integer offsetonface(Draw_Interpretor&, Standard_Integer n, const char*
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : addoffsetface
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
static Standard_Integer addoffsetface(Draw_Interpretor&, Standard_Integer n, const char** a)
|
||||||
|
{
|
||||||
|
if ( n < 3) return 1;
|
||||||
|
|
||||||
|
for (Standard_Integer i = 1 ; i < n; i+=2) {
|
||||||
|
TopoDS_Shape SF = DBRep::Get(a[i],TopAbs_FACE);
|
||||||
|
if (!SF.IsNull()) {
|
||||||
|
TopoDS_Shape OF = DBRep::Get(a[i+1],TopAbs_FACE);
|
||||||
|
if (!OF.IsNull()) {
|
||||||
|
TheOffset.SetOffsetFace(TopoDS::Face(SF), TopoDS::Face(OF));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : offsetperform
|
//function : offsetperform
|
||||||
//purpose :
|
//purpose :
|
||||||
@@ -2338,6 +2358,10 @@ void BRepTest::FeatureCommands (Draw_Interpretor& theCommands)
|
|||||||
"offsetonface face1 offset1 face2 offset2 ...",
|
"offsetonface face1 offset1 face2 offset2 ...",
|
||||||
__FILE__,offsetonface,g);
|
__FILE__,offsetonface,g);
|
||||||
|
|
||||||
|
theCommands.Add("addoffsetface",
|
||||||
|
"addoffsetface face1 offset_face1 face2 offset_face2 ...",
|
||||||
|
__FILE__,addoffsetface,g);
|
||||||
|
|
||||||
theCommands.Add("offsetperform",
|
theCommands.Add("offsetperform",
|
||||||
"offsetperform result",
|
"offsetperform result",
|
||||||
__FILE__,offsetperform,g);
|
__FILE__,offsetperform,g);
|
||||||
|
Reference in New Issue
Block a user