1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-21 10:13:43 +03:00

0033263: Modeling Algorithms - BRepFilletAPI_MakeFillet doesn't work for current parameters

Do not calculate edge state if there are more than 4 G1 connections for currect vertex.
This commit is contained in:
akaftasev 2023-02-09 18:36:01 +03:00 committed by vglukhik
parent 6d140acb14
commit 86e352849d
2 changed files with 23 additions and 2 deletions

View File

@ -692,7 +692,6 @@ void ChFi3d_Builder::PerformExtremity (const Handle(ChFiDS_Spine)& Spine)
else{ else{
sst = Spine->LastStatus(); sst = Spine->LastStatus();
iedge = Spine->NbEdges(); iedge = Spine->NbEdges();
E[0] = Spine->Edges(iedge);
V = Spine->LastVertex(); V = Spine->LastVertex();
} }
//Before all it is checked if the tangency is not dead. //Before all it is checked if the tangency is not dead.
@ -703,6 +702,7 @@ void ChFi3d_Builder::PerformExtremity (const Handle(ChFiDS_Spine)& Spine)
} }
if(sst == ChFiDS_BreakPoint){ if(sst == ChFiDS_BreakPoint){
Standard_Integer aLocNbG1Connections = 0;
TopTools_ListIteratorOfListOfShape It;//,Jt; TopTools_ListIteratorOfListOfShape It;//,Jt;
Standard_Boolean sommetpourri = Standard_False; Standard_Boolean sommetpourri = Standard_False;
TopTools_IndexedMapOfOrientedShape EdgesOfV; TopTools_IndexedMapOfOrientedShape EdgesOfV;
@ -720,7 +720,10 @@ void ChFi3d_Builder::PerformExtremity (const Handle(ChFiDS_Spine)& Spine)
if (!F2.IsNull() && ChFi3d::IsTangentFaces(anEdge, F1, F2, GeomAbs_G2)) //smooth edge if (!F2.IsNull() && ChFi3d::IsTangentFaces(anEdge, F1, F2, GeomAbs_G2)) //smooth edge
{ {
if (!F1.IsSame(F2)) if (!F1.IsSame(F2))
{
NbG1Connections++; NbG1Connections++;
aLocNbG1Connections++;
}
continue; continue;
} }
@ -759,7 +762,7 @@ void ChFi3d_Builder::PerformExtremity (const Handle(ChFiDS_Spine)& Spine)
if (EdgesOfV.Extent() != 3) if (EdgesOfV.Extent() != 3)
sommetpourri = Standard_True; sommetpourri = Standard_True;
if(!sommetpourri){ if(!sommetpourri && aLocNbG1Connections < 4){
sst = ChFi3d_EdgeState(E,myEFMap); sst = ChFi3d_EdgeState(E,myEFMap);
} }
if(ii==1)Spine->SetFirstStatus(sst); if(ii==1)Spine->SetFirstStatus(sst);

View File

@ -0,0 +1,18 @@
puts "================================"
puts "OCC33113: Modeling Algorithms - BRepFilletAPI_MakeFillet::Build SIGSEGV"
puts "================================"
restore [locate_data_file bug33113.brep] sh
explode sh e
copy sh_4 e
explode sh So
copy sh_1 s
fillet res s 0.1 e
checkshape res
checkview -display res -3d -path ${imagedir}/${test_image}.png