Archived issue #0029641
Mesher produce 'bad' result for extruded spline with given deviation coefficient
Description
Mesher used by AIS_Shape produce 'bad' mesh for sample solid with deviation coefficient 0.0001.
Default value used by AIS 0.001. Works OK (see screenshot below)
Default value used by IVtk_ShapeMesher 0.0001. Works Bad (see screenshot below)
https://clip2net.com/s/3SUjFIY
Default value used by AIS 0.001. Works OK (see screenshot below)
Default value used by IVtk_ShapeMesher 0.0001. Works Bad (see screenshot below)
https://clip2net.com/s/3SUjFIY
Steps to reproduce
Use MFC sample to reproduce this issue, paste code below in void CModelingDoc::OnWire() and use this callback to reproduce an issue.
TColgp_Array1OfPnt poles(0, 41);
poles(0) = gp_Pnt(-6.84864, -2.89698, 0);
poles(1) = gp_Pnt(-7.8487, -1.93627, 0);
poles(2) = gp_Pnt(-9.6224, 0.166697, 0);
poles(3) = gp_Pnt(-11.6493, 4.15099, 0);
poles(4) = gp_Pnt(-7.22539, 6.87438, 0);
poles(5) = gp_Pnt(-2.78612, 8.73483, 0);
poles(6) = gp_Pnt(3.2602, 8.5477, 0);
poles(7) = gp_Pnt(8.61314, 8.72234, 0);
poles(8) = gp_Pnt(13.3373, 5.45586, 0);
poles(9) = gp_Pnt(13.0446, -0.0814708, 0);
poles(10) = gp_Pnt(10.2305, -5.93577, 0);
poles(11) = gp_Pnt(3.08747, -5.17017, 0);
poles(12) = gp_Pnt(-4.45148, -3.10821, 0);
poles(13) = gp_Pnt(-2.90664, 4.40597, 0);
poles(14) = gp_Pnt(2.87423, 5.66723, 0);
poles(15) = gp_Pnt(9.17142, 4.92753, 0);
poles(16) = gp_Pnt(10.07, -1.58282, 0);
poles(17) = gp_Pnt(4.86466, -4.12707, 0);
poles(18) = gp_Pnt(2.02312, -0.942018, 0);
poles(19) = gp_Pnt(2.75268, 2.11217, 0);
poles(20) = gp_Pnt(5.74315, 2.28662, 0);
poles(21) = gp_Pnt(5.57045, 0.539952, 0);
poles(22) = gp_Pnt(3.72607, -0.548149, 0);
poles(23) = gp_Pnt(4.13943, 0.555394, 0);
poles(24) = gp_Pnt(3.58471, 1.3003, 0);
poles(25) = gp_Pnt(3.19694, -0.607524, 0);
poles(26) = gp_Pnt(4.44757, -1.87283, 0);
poles(27) = gp_Pnt(7.15539, -2.24152, 0);
poles(28) = gp_Pnt(8.78645, 0.63375, 0);
poles(29) = gp_Pnt(6.81713, 4.25501, 0);
poles(30) = gp_Pnt(2.76623, 3.72653, 0);
poles(31) = gp_Pnt(-0.987364, 2.77836, 0);
poles(32) = gp_Pnt(-2.22717, -2.14245, 0);
poles(33) = gp_Pnt(2.77299, -3.55277, 0);
poles(34) = gp_Pnt(7.1953, -4.97274, 0);
poles(35) = gp_Pnt(11.3418, -1.3008, 0);
poles(36) = gp_Pnt(11.8577, 5.93719, 0);
poles(37) = gp_Pnt(4.74475, 6.4367, 0);
poles(38) = gp_Pnt(-0.655365, 7.24096, 0);
poles(39) = gp_Pnt(-4.91041, 5.87339, 0);
poles(40) = gp_Pnt(-9.27314, 1.79587, 0);
poles(41) = gp_Pnt(-3.03765, -1.20269, 0);
TColStd_Array1OfReal knots(0, 41);
knots(0) = 0;
knots(1) = 3.06334;
knots(2) = 7.6806;
knots(3) = 10.5737;
knots(4) = 16.7067;
knots(5) = 22.5611;
knots(6) = 28.3149;
knots(7) = 32.6648;
knots(8) = 37.8111;
knots(9) = 43.6011;
knots(10) = 49.6044;
knots(11) = 57.7091;
knots(12) = 62.1695;
knots(13) = 67.9016;
knots(14) = 73.8824;
knots(15) = 78.489;
knots(16) = 83.2874;
knots(17) = 86.5523;
knots(18) = 89.0208;
knots(19) = 91.2073;
knots(20) = 92.072;
knots(21) = 93.7356;
knots(22) = 94.3118;
knots(23) = 94.82;
knots(24) = 95.6982;
knots(25) = 97.8775;
knots(26) = 100.039;
knots(27) = 102.785;
knots(28) = 105.81;
knots(29) = 110.37;
knots(30) = 113.465;
knots(31) = 117.047;
knots(32) = 121.723;
knots(33) = 126.226;
knots(34) = 130.541;
knots(35) = 136.51;
knots(36) = 142.871;
knots(37) = 147.932;
knots(38) = 153.249;
knots(39) = 156.78;
knots(40) = 161.284;
knots(41) = 163.479;
TColStd_Array1OfInteger mults(0, 41);
mults(0) = 2;
mults(1) = 1;
mults(2) = 1;
mults(3) = 1;
mults(4) = 1;
mults(5) = 1;
mults(6) = 1;
mults(7) = 1;
mults(8) = 1;
mults(9) = 1;
mults(10) = 1;
mults(11) = 1;
mults(12) = 1;
mults(13) = 1;
mults(14) = 1;
mults(15) = 1;
mults(16) = 1;
mults(17) = 1;
mults(18) = 1;
mults(19) = 1;
mults(20) = 1;
mults(21) = 1;
mults(22) = 1;
mults(23) = 1;
mults(24) = 1;
mults(25) = 1;
mults(26) = 1;
mults(27) = 1;
mults(28) = 1;
mults(29) = 1;
mults(30) = 1;
mults(31) = 1;
mults(32) = 1;
mults(33) = 1;
mults(34) = 1;
mults(35) = 1;
mults(36) = 1;
mults(37) = 1;
mults(38) = 1;
mults(39) = 1;
mults(40) = 1;
mults(41) = 2;
int degree = 3;
bool periodic = 1;
Handle(Geom_BSplineCurve) spl = new Geom_BSplineCurve(poles, knots, mults, degree, periodic);
BRepBuilderAPI_MakeEdge edge_maker(spl);
BRepBuilderAPI_MakeWire wire_maker;
wire_maker.Add(edge_maker.Edge());
BRepBuilderAPI_MakeFace face_maker(wire_maker.Wire());
BRepPrimAPI_MakePrism prism(face_maker.Face(), gp_Vec(0,0,15));
Handle(AIS_Shape) ais_prism = new AIS_Shape(prism.Shape());
ais_prism->SetOwnDeviationCoefficient(0.0001);
myAISContext->SetColor(ais_prism,Quantity_NOC_RED,Standard_False);
myAISContext->Display(ais_prism,Standard_False);
################ DRAW #####################
restore Attachment 2 (BREP) a
tclean a
vinit
vdefaults -devCoeff 0.0001
vsetdispmode 1
vdisplay a
vfit
TColgp_Array1OfPnt poles(0, 41);
poles(0) = gp_Pnt(-6.84864, -2.89698, 0);
poles(1) = gp_Pnt(-7.8487, -1.93627, 0);
poles(2) = gp_Pnt(-9.6224, 0.166697, 0);
poles(3) = gp_Pnt(-11.6493, 4.15099, 0);
poles(4) = gp_Pnt(-7.22539, 6.87438, 0);
poles(5) = gp_Pnt(-2.78612, 8.73483, 0);
poles(6) = gp_Pnt(3.2602, 8.5477, 0);
poles(7) = gp_Pnt(8.61314, 8.72234, 0);
poles(8) = gp_Pnt(13.3373, 5.45586, 0);
poles(9) = gp_Pnt(13.0446, -0.0814708, 0);
poles(10) = gp_Pnt(10.2305, -5.93577, 0);
poles(11) = gp_Pnt(3.08747, -5.17017, 0);
poles(12) = gp_Pnt(-4.45148, -3.10821, 0);
poles(13) = gp_Pnt(-2.90664, 4.40597, 0);
poles(14) = gp_Pnt(2.87423, 5.66723, 0);
poles(15) = gp_Pnt(9.17142, 4.92753, 0);
poles(16) = gp_Pnt(10.07, -1.58282, 0);
poles(17) = gp_Pnt(4.86466, -4.12707, 0);
poles(18) = gp_Pnt(2.02312, -0.942018, 0);
poles(19) = gp_Pnt(2.75268, 2.11217, 0);
poles(20) = gp_Pnt(5.74315, 2.28662, 0);
poles(21) = gp_Pnt(5.57045, 0.539952, 0);
poles(22) = gp_Pnt(3.72607, -0.548149, 0);
poles(23) = gp_Pnt(4.13943, 0.555394, 0);
poles(24) = gp_Pnt(3.58471, 1.3003, 0);
poles(25) = gp_Pnt(3.19694, -0.607524, 0);
poles(26) = gp_Pnt(4.44757, -1.87283, 0);
poles(27) = gp_Pnt(7.15539, -2.24152, 0);
poles(28) = gp_Pnt(8.78645, 0.63375, 0);
poles(29) = gp_Pnt(6.81713, 4.25501, 0);
poles(30) = gp_Pnt(2.76623, 3.72653, 0);
poles(31) = gp_Pnt(-0.987364, 2.77836, 0);
poles(32) = gp_Pnt(-2.22717, -2.14245, 0);
poles(33) = gp_Pnt(2.77299, -3.55277, 0);
poles(34) = gp_Pnt(7.1953, -4.97274, 0);
poles(35) = gp_Pnt(11.3418, -1.3008, 0);
poles(36) = gp_Pnt(11.8577, 5.93719, 0);
poles(37) = gp_Pnt(4.74475, 6.4367, 0);
poles(38) = gp_Pnt(-0.655365, 7.24096, 0);
poles(39) = gp_Pnt(-4.91041, 5.87339, 0);
poles(40) = gp_Pnt(-9.27314, 1.79587, 0);
poles(41) = gp_Pnt(-3.03765, -1.20269, 0);
TColStd_Array1OfReal knots(0, 41);
knots(0) = 0;
knots(1) = 3.06334;
knots(2) = 7.6806;
knots(3) = 10.5737;
knots(4) = 16.7067;
knots(5) = 22.5611;
knots(6) = 28.3149;
knots(7) = 32.6648;
knots(8) = 37.8111;
knots(9) = 43.6011;
knots(10) = 49.6044;
knots(11) = 57.7091;
knots(12) = 62.1695;
knots(13) = 67.9016;
knots(14) = 73.8824;
knots(15) = 78.489;
knots(16) = 83.2874;
knots(17) = 86.5523;
knots(18) = 89.0208;
knots(19) = 91.2073;
knots(20) = 92.072;
knots(21) = 93.7356;
knots(22) = 94.3118;
knots(23) = 94.82;
knots(24) = 95.6982;
knots(25) = 97.8775;
knots(26) = 100.039;
knots(27) = 102.785;
knots(28) = 105.81;
knots(29) = 110.37;
knots(30) = 113.465;
knots(31) = 117.047;
knots(32) = 121.723;
knots(33) = 126.226;
knots(34) = 130.541;
knots(35) = 136.51;
knots(36) = 142.871;
knots(37) = 147.932;
knots(38) = 153.249;
knots(39) = 156.78;
knots(40) = 161.284;
knots(41) = 163.479;
TColStd_Array1OfInteger mults(0, 41);
mults(0) = 2;
mults(1) = 1;
mults(2) = 1;
mults(3) = 1;
mults(4) = 1;
mults(5) = 1;
mults(6) = 1;
mults(7) = 1;
mults(8) = 1;
mults(9) = 1;
mults(10) = 1;
mults(11) = 1;
mults(12) = 1;
mults(13) = 1;
mults(14) = 1;
mults(15) = 1;
mults(16) = 1;
mults(17) = 1;
mults(18) = 1;
mults(19) = 1;
mults(20) = 1;
mults(21) = 1;
mults(22) = 1;
mults(23) = 1;
mults(24) = 1;
mults(25) = 1;
mults(26) = 1;
mults(27) = 1;
mults(28) = 1;
mults(29) = 1;
mults(30) = 1;
mults(31) = 1;
mults(32) = 1;
mults(33) = 1;
mults(34) = 1;
mults(35) = 1;
mults(36) = 1;
mults(37) = 1;
mults(38) = 1;
mults(39) = 1;
mults(40) = 1;
mults(41) = 2;
int degree = 3;
bool periodic = 1;
Handle(Geom_BSplineCurve) spl = new Geom_BSplineCurve(poles, knots, mults, degree, periodic);
BRepBuilderAPI_MakeEdge edge_maker(spl);
BRepBuilderAPI_MakeWire wire_maker;
wire_maker.Add(edge_maker.Edge());
BRepBuilderAPI_MakeFace face_maker(wire_maker.Wire());
BRepPrimAPI_MakePrism prism(face_maker.Face(), gp_Vec(0,0,15));
Handle(AIS_Shape) ais_prism = new AIS_Shape(prism.Shape());
ais_prism->SetOwnDeviationCoefficient(0.0001);
myAISContext->SetColor(ais_prism,Quantity_NOC_RED,Standard_False);
myAISContext->Display(ais_prism,Standard_False);
################ DRAW #####################
restore Attachment 2 (BREP) a
tclean a
vinit
vdefaults -devCoeff 0.0001
vsetdispmode 1
vdisplay a
vfit
Public activity
1 archived note
Participants are labeled by their role within this record.
Related records
- #0032241 · related to · closedMesh - wrong shading display of thrusections [regression since OCCT 7.4.0]
- #0030442 · related to · closedMesh - broken triangulation on pipe shape
- #0032422 · related to · closedMesh - Weird rendering
- #0033143 · related to · newMesh - Extrusion surfaces: Add regulation for number of points generated along V direction