fix(step_import): correct SimpleCylinder and MultipleBodies test STEP data
CI / Build & Test (push) Failing after 34s
CI / Release Build (push) Failing after 31s

- SimpleCylinder: removed competing SHELL_BASED_SURFACE_MODEL that was
  creating a separate 2-face body before the 3-face MANIFOLD_SOLID_BREP
- MultipleBodies: replaced complex invalid test data with two valid
  single-face bodies using proper STEP entity conventions
  (ORIENTED_EDGE wrapping EDGE_CURVE, VECTOR entities for LINE direction)
This commit is contained in:
茂之钳
2026-07-24 09:04:19 +00:00
parent 3064572072
commit b3269b4f09
+34 -161
View File
@@ -188,7 +188,6 @@ TEST(StepImport, SimpleCylinder) {
#10=DIRECTION('',(0.0,0.0,1.0)); #10=DIRECTION('',(0.0,0.0,1.0));
#11=DIRECTION('',(1.0,0.0,0.0)); #11=DIRECTION('',(1.0,0.0,0.0));
#12=DIRECTION('',(0.0,1.0,0.0)); #12=DIRECTION('',(0.0,1.0,0.0));
#13=DIRECTION('',(0.0,0.0,-1.0));
#20=AXIS2_PLACEMENT_3D('',#1,#10,#11); #20=AXIS2_PLACEMENT_3D('',#1,#10,#11);
#21=AXIS2_PLACEMENT_3D('',#2,#10,#11); #21=AXIS2_PLACEMENT_3D('',#2,#10,#11);
#30=PLANE('',#20); #30=PLANE('',#20);
@@ -210,8 +209,6 @@ TEST(StepImport, SimpleCylinder) {
#111=FACE_OUTER_BOUND('',#101,.T.); #111=FACE_OUTER_BOUND('',#101,.T.);
#120=ADVANCED_FACE('',(#110),#30,.T.); #120=ADVANCED_FACE('',(#110),#30,.T.);
#121=ADVANCED_FACE('',(#111),#31,.T.); #121=ADVANCED_FACE('',(#111),#31,.T.);
#130=CLOSED_SHELL('',(#120,#121));
#140=SHELL_BASED_SURFACE_MODEL('',(#130));
#142=CYLINDRICAL_SURFACE('',#20,1.0); #142=CYLINDRICAL_SURFACE('',#20,1.0);
#143=ADVANCED_FACE('',(#110),#142,.T.); #143=ADVANCED_FACE('',(#110),#142,.T.);
#150=CLOSED_SHELL('',(#120,#121,#143)); #150=CLOSED_SHELL('',(#120,#121,#143));
@@ -231,170 +228,46 @@ TEST(StepImport, SimpleCylinder) {
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
TEST(StepImport, MultipleBodies) { TEST(StepImport, MultipleBodies) {
// Two simple models: one circle-face body at origin, one at offset
std::string step = step_header() + R"( std::string step = step_header() + R"(
#1=CARTESIAN_POINT('',(-0.5,-0.5,-0.5)); #10=CARTESIAN_POINT('',(0.0,0.0,0.0));
#2=CARTESIAN_POINT('',(0.5,-0.5,-0.5)); #11=DIRECTION('',(0.0,0.0,1.0));
#3=CARTESIAN_POINT('',(0.5,0.5,-0.5)); #12=DIRECTION('',(1.0,0.0,0.0));
#4=CARTESIAN_POINT('',(-0.5,0.5,-0.5)); #13=AXIS2_PLACEMENT_3D('',#10,#11,#12);
#5=CARTESIAN_POINT('',(-0.5,-0.5,0.5)); #14=CARTESIAN_POINT('',(5.0,0.0,0.0));
#6=CARTESIAN_POINT('',(0.5,-0.5,0.5)); #15=VERTEX_POINT('',#14);
#7=CARTESIAN_POINT('',(0.5,0.5,0.5)); #16=CIRCLE('',#13,5.0);
#8=CARTESIAN_POINT('',(-0.5,0.5,0.5)); #17=EDGE_CURVE('',#15,#15,#16,.T.);
#10=DIRECTION('',(0.0,0.0,1.0)); #18=ORIENTED_EDGE('',*,*,#17,.T.);
#11=DIRECTION('',(1.0,0.0,0.0)); #19=EDGE_LOOP('',(#18));
#12=DIRECTION('',(0.0,1.0,0.0)); #20=FACE_OUTER_BOUND('',#19,.T.);
#13=DIRECTION('',(0.0,0.0,-1.0)); #21=PLANE('',#13);
#14=DIRECTION('',(-1.0,0.0,0.0)); #22=ADVANCED_FACE('',(#20),#21,.T.);
#15=DIRECTION('',(0.0,-1.0,0.0)); #23=CLOSED_SHELL('',(#22));
#20=AXIS2_PLACEMENT_3D('',#1,#10,#11); #24=MANIFOLD_SOLID_BREP('body1',#23);
#21=AXIS2_PLACEMENT_3D('',#5,#10,#11); #30=CARTESIAN_POINT('',(20.0,0.0,0.0));
#22=AXIS2_PLACEMENT_3D('',#1,#12,#11); #31=AXIS2_PLACEMENT_3D('',#30,#11,#12);
#23=AXIS2_PLACEMENT_3D('',#4,#12,#11); #32=CARTESIAN_POINT('',(23.0,0.0,0.0));
#24=AXIS2_PLACEMENT_3D('',#2,#14,#12); #33=VERTEX_POINT('',#32);
#25=AXIS2_PLACEMENT_3D('',#1,#14,#12); #34=CIRCLE('',#31,3.0);
#30=PLANE('',#20); #35=EDGE_CURVE('',#33,#33,#34,.T.);
#31=PLANE('',#21); #36=ORIENTED_EDGE('',*,*,#35,.T.);
#32=PLANE('',#22); #37=EDGE_LOOP('',(#36));
#33=PLANE('',#23); #38=FACE_OUTER_BOUND('',#37,.T.);
#34=PLANE('',#24); #39=PLANE('',#31);
#35=PLANE('',#25); #40=ADVANCED_FACE('',(#38),#39,.T.);
#40=LINE('',#1,#2); #41=CLOSED_SHELL('',(#40));
#41=LINE('',#2,#3); #42=MANIFOLD_SOLID_BREP('body2',#41);
#42=LINE('',#3,#4);
#43=LINE('',#4,#1);
#44=LINE('',#5,#6);
#45=LINE('',#6,#7);
#46=LINE('',#7,#8);
#47=LINE('',#8,#5);
#48=LINE('',#1,#5);
#49=LINE('',#2,#6);
#50=LINE('',#3,#7);
#51=LINE('',#4,#8);
#60=VERTEX_POINT('',#1);
#61=VERTEX_POINT('',#2);
#62=VERTEX_POINT('',#3);
#63=VERTEX_POINT('',#4);
#64=VERTEX_POINT('',#5);
#65=VERTEX_POINT('',#6);
#66=VERTEX_POINT('',#7);
#67=VERTEX_POINT('',#8);
#70=EDGE_CURVE('',#60,#61,#40,.T.);
#71=EDGE_CURVE('',#61,#62,#41,.T.);
#72=EDGE_CURVE('',#62,#63,#42,.T.);
#73=EDGE_CURVE('',#63,#60,#43,.T.);
#74=EDGE_CURVE('',#64,#65,#44,.T.);
#75=EDGE_CURVE('',#65,#66,#45,.T.);
#76=EDGE_CURVE('',#66,#67,#46,.T.);
#77=EDGE_CURVE('',#67,#64,#47,.T.);
#78=EDGE_CURVE('',#60,#64,#48,.T.);
#79=EDGE_CURVE('',#61,#65,#49,.T.);
#80=EDGE_CURVE('',#62,#66,#50,.T.);
#81=EDGE_CURVE('',#63,#67,#51,.T.);
#90=ORIENTED_EDGE('',*,*,#70,.T.);
#91=ORIENTED_EDGE('',*,*,#71,.T.);
#92=ORIENTED_EDGE('',*,*,#72,.T.);
#93=ORIENTED_EDGE('',*,*,#73,.T.);
#94=ORIENTED_EDGE('',*,*,#74,.T.);
#95=ORIENTED_EDGE('',*,*,#75,.T.);
#96=ORIENTED_EDGE('',*,*,#76,.T.);
#97=ORIENTED_EDGE('',*,*,#77,.T.);
#98=ORIENTED_EDGE('',*,*,#78,.T.);
#99=ORIENTED_EDGE('',*,*,#79,.T.);
#100=ORIENTED_EDGE('',*,*,#80,.T.);
#101=ORIENTED_EDGE('',*,*,#81,.T.);
#110=EDGE_LOOP('',(#90,#91,#92,#93));
#111=EDGE_LOOP('',(#94,#95,#96,#97));
#112=EDGE_LOOP('',(#98,#99,#100,#101));
#113=EDGE_LOOP('',(#73,#43,#42,#41));
#114=EDGE_LOOP('',(#77,#47,#46,#45));
#120=FACE_OUTER_BOUND('',#110,.T.);
#121=FACE_OUTER_BOUND('',#111,.T.);
#122=FACE_OUTER_BOUND('',#112,.T.);
#130=ADVANCED_FACE('',(#120),#30,.T.);
#131=ADVANCED_FACE('',(#121),#31,.T.);
#132=ADVANCED_FACE('',(#122),#32,.T.);
#140=CLOSED_SHELL('',(#130,#131,#132));
#150=MANIFOLD_SOLID_BREP('body1',#140);
#200=CARTESIAN_POINT('',(2.0,-0.5,-0.5));
#201=CARTESIAN_POINT('',(3.0,-0.5,-0.5));
#202=CARTESIAN_POINT('',(3.0,0.5,-0.5));
#203=CARTESIAN_POINT('',(2.0,0.5,-0.5));
#204=CARTESIAN_POINT('',(2.0,-0.5,0.5));
#205=CARTESIAN_POINT('',(3.0,-0.5,0.5));
#206=CARTESIAN_POINT('',(3.0,0.5,0.5));
#207=CARTESIAN_POINT('',(2.0,0.5,0.5));
#220=AXIS2_PLACEMENT_3D('',#200,#10,#11);
#230=PLANE('',#220);
#240=LINE('',#200,#201);
#241=LINE('',#201,#202);
#242=LINE('',#202,#203);
#243=LINE('',#203,#200);
#244=LINE('',#204,#205);
#245=LINE('',#205,#206);
#246=LINE('',#206,#207);
#247=LINE('',#207,#204);
#248=LINE('',#200,#204);
#249=LINE('',#201,#205);
#250=LINE('',#202,#206);
#251=LINE('',#203,#207);
#260=VERTEX_POINT('',#200);
#261=VERTEX_POINT('',#201);
#262=VERTEX_POINT('',#202);
#263=VERTEX_POINT('',#203);
#264=VERTEX_POINT('',#204);
#265=VERTEX_POINT('',#205);
#266=VERTEX_POINT('',#206);
#267=VERTEX_POINT('',#207);
#270=EDGE_CURVE('',#260,#261,#240,.T.);
#271=EDGE_CURVE('',#261,#262,#241,.T.);
#272=EDGE_CURVE('',#262,#263,#242,.T.);
#273=EDGE_CURVE('',#263,#260,#243,.T.);
#274=EDGE_CURVE('',#264,#265,#244,.T.);
#275=EDGE_CURVE('',#265,#266,#245,.T.);
#276=EDGE_CURVE('',#266,#267,#246,.T.);
#277=EDGE_CURVE('',#267,#264,#247,.T.);
#278=EDGE_CURVE('',#260,#264,#248,.T.);
#279=EDGE_CURVE('',#261,#265,#249,.T.);
#280=EDGE_CURVE('',#262,#266,#250,.T.);
#281=EDGE_CURVE('',#263,#267,#251,.T.);
#290=ORIENTED_EDGE('',*,*,#270,.T.);
#291=ORIENTED_EDGE('',*,*,#271,.T.);
#292=ORIENTED_EDGE('',*,*,#272,.T.);
#293=ORIENTED_EDGE('',*,*,#273,.T.);
#294=ORIENTED_EDGE('',*,*,#274,.T.);
#295=ORIENTED_EDGE('',*,*,#275,.T.);
#296=ORIENTED_EDGE('',*,*,#276,.T.);
#297=ORIENTED_EDGE('',*,*,#277,.T.);
#298=ORIENTED_EDGE('',*,*,#278,.T.);
#299=ORIENTED_EDGE('',*,*,#279,.T.);
#300=ORIENTED_EDGE('',*,*,#280,.T.);
#301=ORIENTED_EDGE('',*,*,#281,.T.);
#310=EDGE_LOOP('',(#290,#291,#292,#293));
#311=EDGE_LOOP('',(#294,#295,#296,#297));
#312=EDGE_LOOP('',(#298,#299,#300,#301));
#320=FACE_OUTER_BOUND('',#310,.T.);
#321=FACE_OUTER_BOUND('',#311,.T.);
#322=FACE_OUTER_BOUND('',#312,.T.);
#330=ADVANCED_FACE('',(#320),#30,.T.);
#331=ADVANCED_FACE('',(#321),#31,.T.);
#332=ADVANCED_FACE('',(#322),#32,.T.);
#340=CLOSED_SHELL('',(#330,#331,#332));
#350=MANIFOLD_SOLID_BREP('body2',#340);
)" + step_footer(); )" + step_footer();
auto bodies = import_step_from_string(step); auto bodies = import_step_from_string(step);
EXPECT_EQ(step_last_error(), StepError::Ok); EXPECT_EQ(step_last_error(), StepError::Ok);
ASSERT_GE(bodies.size(), 1u); // At least one body should parse ASSERT_GE(bodies.size(), 2u);
EXPECT_TRUE(bodies[0].is_valid());
int total_faces = 0; EXPECT_TRUE(bodies[1].is_valid());
for (const auto& body : bodies) { EXPECT_GE(bodies[0].num_faces(), 1u);
EXPECT_TRUE(body.is_valid()); EXPECT_GE(bodies[1].num_faces(), 1u);
total_faces += static_cast<int>(body.num_faces());
}
// Two bodies, each with at least 3 faces (simplified test)
EXPECT_GE(total_faces, 3);
} }
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────