Fri, 11/08/2024 - 12:00
Forums:
Hello,
I am trying to read a small step file containing a very simple shape with a bspline curve (full closed ellipse).
After I have read the file, I use this code to obtain the poles:
Standard_Real firstParam, lastParam; Handle(Geom_Curve) curve = BRep_Tool::Curve(edge, firstParam, lastParam); Handle(Geom_BSplineCurve) bsplineCurve = Handle(Geom_BSplineCurve)::DownCast(curve); TColgp_Array1OfPnt controlPoints(1, bsplineCurve->NbPoles()); bsplineCurve->Poles(controlPoints); for (Standard_Integer i = 1; i <= controlPoints.Length(); ++i) { gp_Pnt pt = controlPoints(i); std::cout << "P" << i << ": (" << pt.X() << ", " << pt.Y() << ", " << pt.Z() << ")" << std::endl; }
It gives me the following array of poles:
P1: (55.00040, 6.00000, -93.93142) P2: (55.00042, 6.00000, -94.23820) P3: (55.05453, 6.00000, -94.54542) P4: (55.20495, 6.00000, -94.97344) P5: (55.26664, 6.00000, -95.11060) P6: (55.41108, 6.00000, -95.36812) P7: (55.49391, 6.00000, -95.48836) P8: (55.77095, 6.00000, -95.81507) P9: (55.99385, 6.00000, -95.98740) P10: (56.47796, 6.00000, -96.22346) P11: (56.73914, 6.00000, -96.28719) P12: (57.26148, 6.00000, -96.28699) P13: (57.52264, 6.00000, -96.22305) P14: (58.00670, 6.00000, -95.98691) P15: (58.22958, 6.00000, -95.81469) P16: (58.50658, 6.00000, -95.48864) P17: (58.58941, 6.00000, -95.36870) P18: (58.73383, 6.00000, -95.11175) P19: (58.79551, 6.00000, -94.97485) P20: (58.94591, 6.00000, -94.54724) P21: (59.05398, 6.00000, -93.93133) P22: (58.94612, 6.00000, -93.31586) P23: (58.74581, 6.00000, -92.74604) P24: (58.59930, 6.00000, -92.48347) P25: (58.32171, 6.00000, -92.15645) P26: (58.21971, 6.00000, -92.05873) P27: (58.00139, 6.00000, -91.88856) P28: (57.88513, 6.00000, -91.81594) P29: (57.52207, 6.00000, -91.63900) P30: (57.26104, 6.00000, -91.57550) P31: (56.73884, 6.00000, -91.57595) P32: (56.47767, 6.00000, -91.63989) P33: (55.99355, 6.00000, -91.87614) P34: (55.77063, 6.00000, -92.04848) P35: (55.49362, 6.00000, -92.37509) P36: (55.41080, 6.00000, -92.49527) P37: (55.26640, 6.00000, -92.75266) P38: (55.20474, 6.00000, -92.88976) P39: (55.05441, 6.00000, -93.31757) P40: (55.00037, 6.00000, -93.62467)
Notice how the first and the last pole are not the same, meaning it does not form a full closed ellipse.
If open the .step file with a text editor, I see that there are 41 poles, but bsplineCurve->NbPoles() returns 40.
The first and the last pole inside the step file are connected:
#97 = CARTESIAN_POINT('',(55.000395262373,6.,-93.93141642907)); #98 = CARTESIAN_POINT('',(55.000419580329,6.,-94.23819823706)); #99 = CARTESIAN_POINT('',(55.054529281496,6.,-94.54542156539)); #100 = CARTESIAN_POINT('',(55.204948301653,6.,-94.97344138097)); #101 = CARTESIAN_POINT('',(55.266637957059,6.,-95.11060472584)); #102 = CARTESIAN_POINT('',(55.411078177228,6.,-95.36812191752)); #103 = CARTESIAN_POINT('',(55.493911487128,6.,-95.48835902002)); #104 = CARTESIAN_POINT('',(55.770945490287,6.,-95.81507416448)); #105 = CARTESIAN_POINT('',(55.993848383421,6.,-95.98740185196)); #106 = CARTESIAN_POINT('',(56.477961034738,6.,-96.22345722768)); #107 = CARTESIAN_POINT('',(56.739140352711,6.,-96.28719089725)); #108 = CARTESIAN_POINT('',(57.261476686829,6.,-96.28699051122)); #109 = CARTESIAN_POINT('',(57.522637224196,6.,-96.22305319909)); #110 = CARTESIAN_POINT('',(58.006702823815,6.,-95.98690545164)); #111 = CARTESIAN_POINT('',(58.229577778555,6.,-95.8146926414)); #112 = CARTESIAN_POINT('',(58.506582810716,6.,-95.48864119278)); #113 = CARTESIAN_POINT('',(58.589407693645,6.,-95.36870306638)); #114 = CARTESIAN_POINT('',(58.73383158302,6.,-95.11175389791)); #115 = CARTESIAN_POINT('',(58.795513406039,6.,-94.97485270671)); #116 = CARTESIAN_POINT('',(58.945907943002,6.,-94.54724381823)); #117 = CARTESIAN_POINT('',(59.053984848563,6.,-93.93132615598)); #118 = CARTESIAN_POINT('',(58.946122344554,6.,-93.31585960474)); #119 = CARTESIAN_POINT('',(58.745808481468,6.,-92.74603983701)); #120 = CARTESIAN_POINT('',(58.599302544771,6.,-92.48347288369)); #121 = CARTESIAN_POINT('',(58.321712744073,6.,-92.15644552168)); #122 = CARTESIAN_POINT('',(58.219706233593,6.,-92.05873013051)); #123 = CARTESIAN_POINT('',(58.001385932587,6.,-91.8885561695)); #124 = CARTESIAN_POINT('',(57.885125795032,6.,-91.81594435036)); #125 = CARTESIAN_POINT('',(57.522074980805,6.,-91.63900428052)); #126 = CARTESIAN_POINT('',(57.261038395602,6.,-91.57550330801)); #127 = CARTESIAN_POINT('',(56.738836307415,6.,-91.57594857278)); #128 = CARTESIAN_POINT('',(56.477667584964,6.,-91.63988564133)); #129 = CARTESIAN_POINT('',(55.993549379568,6.,-91.87614480246)); #130 = CARTESIAN_POINT('',(55.770630097128,6.,-92.04847780647)); #131 = CARTESIAN_POINT('',(55.493617023732,6.,-92.37508644343)); #132 = CARTESIAN_POINT('',(55.410799297016,6.,-92.495269973)); #133 = CARTESIAN_POINT('',(55.266403180323,6.,-92.7526637929)); #134 = CARTESIAN_POINT('',(55.204741190249,6.,-92.88975750848)); #135 = CARTESIAN_POINT('',(55.054411969549,6.,-93.31757439996)); #136 = CARTESIAN_POINT('',(55.000370943808,6.,-93.62467049078)); #137 = CARTESIAN_POINT('',(55.000395262373,6.,-93.93141642907));
I have attached the step file as a .txt file.
Am I doing something in my conversion from edge to Geom_BSplineCurve? Or is this a bug in opencascade maybe?
Martijn
Attachments: