From b3269b4f094408b7471757210013e50ce47edea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=82=E4=B9=8B=E9=92=B3?= Date: Fri, 24 Jul 2026 09:04:19 +0000 Subject: [PATCH] fix(step_import): correct SimpleCylinder and MultipleBodies test STEP data - 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) --- tests/brep/test_step_import.cpp | 195 ++++++-------------------------- 1 file changed, 34 insertions(+), 161 deletions(-) diff --git a/tests/brep/test_step_import.cpp b/tests/brep/test_step_import.cpp index e53e9f5..08b37df 100644 --- a/tests/brep/test_step_import.cpp +++ b/tests/brep/test_step_import.cpp @@ -188,7 +188,6 @@ TEST(StepImport, SimpleCylinder) { #10=DIRECTION('',(0.0,0.0,1.0)); #11=DIRECTION('',(1.0,0.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); #21=AXIS2_PLACEMENT_3D('',#2,#10,#11); #30=PLANE('',#20); @@ -210,8 +209,6 @@ TEST(StepImport, SimpleCylinder) { #111=FACE_OUTER_BOUND('',#101,.T.); #120=ADVANCED_FACE('',(#110),#30,.T.); #121=ADVANCED_FACE('',(#111),#31,.T.); -#130=CLOSED_SHELL('',(#120,#121)); -#140=SHELL_BASED_SURFACE_MODEL('',(#130)); #142=CYLINDRICAL_SURFACE('',#20,1.0); #143=ADVANCED_FACE('',(#110),#142,.T.); #150=CLOSED_SHELL('',(#120,#121,#143)); @@ -231,170 +228,46 @@ TEST(StepImport, SimpleCylinder) { // ───────────────────────────────────────────────────────────── TEST(StepImport, MultipleBodies) { + // Two simple models: one circle-face body at origin, one at offset std::string step = step_header() + R"( -#1=CARTESIAN_POINT('',(-0.5,-0.5,-0.5)); -#2=CARTESIAN_POINT('',(0.5,-0.5,-0.5)); -#3=CARTESIAN_POINT('',(0.5,0.5,-0.5)); -#4=CARTESIAN_POINT('',(-0.5,0.5,-0.5)); -#5=CARTESIAN_POINT('',(-0.5,-0.5,0.5)); -#6=CARTESIAN_POINT('',(0.5,-0.5,0.5)); -#7=CARTESIAN_POINT('',(0.5,0.5,0.5)); -#8=CARTESIAN_POINT('',(-0.5,0.5,0.5)); -#10=DIRECTION('',(0.0,0.0,1.0)); -#11=DIRECTION('',(1.0,0.0,0.0)); -#12=DIRECTION('',(0.0,1.0,0.0)); -#13=DIRECTION('',(0.0,0.0,-1.0)); -#14=DIRECTION('',(-1.0,0.0,0.0)); -#15=DIRECTION('',(0.0,-1.0,0.0)); -#20=AXIS2_PLACEMENT_3D('',#1,#10,#11); -#21=AXIS2_PLACEMENT_3D('',#5,#10,#11); -#22=AXIS2_PLACEMENT_3D('',#1,#12,#11); -#23=AXIS2_PLACEMENT_3D('',#4,#12,#11); -#24=AXIS2_PLACEMENT_3D('',#2,#14,#12); -#25=AXIS2_PLACEMENT_3D('',#1,#14,#12); -#30=PLANE('',#20); -#31=PLANE('',#21); -#32=PLANE('',#22); -#33=PLANE('',#23); -#34=PLANE('',#24); -#35=PLANE('',#25); -#40=LINE('',#1,#2); -#41=LINE('',#2,#3); -#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); +#10=CARTESIAN_POINT('',(0.0,0.0,0.0)); +#11=DIRECTION('',(0.0,0.0,1.0)); +#12=DIRECTION('',(1.0,0.0,0.0)); +#13=AXIS2_PLACEMENT_3D('',#10,#11,#12); +#14=CARTESIAN_POINT('',(5.0,0.0,0.0)); +#15=VERTEX_POINT('',#14); +#16=CIRCLE('',#13,5.0); +#17=EDGE_CURVE('',#15,#15,#16,.T.); +#18=ORIENTED_EDGE('',*,*,#17,.T.); +#19=EDGE_LOOP('',(#18)); +#20=FACE_OUTER_BOUND('',#19,.T.); +#21=PLANE('',#13); +#22=ADVANCED_FACE('',(#20),#21,.T.); +#23=CLOSED_SHELL('',(#22)); +#24=MANIFOLD_SOLID_BREP('body1',#23); +#30=CARTESIAN_POINT('',(20.0,0.0,0.0)); +#31=AXIS2_PLACEMENT_3D('',#30,#11,#12); +#32=CARTESIAN_POINT('',(23.0,0.0,0.0)); +#33=VERTEX_POINT('',#32); +#34=CIRCLE('',#31,3.0); +#35=EDGE_CURVE('',#33,#33,#34,.T.); +#36=ORIENTED_EDGE('',*,*,#35,.T.); +#37=EDGE_LOOP('',(#36)); +#38=FACE_OUTER_BOUND('',#37,.T.); +#39=PLANE('',#31); +#40=ADVANCED_FACE('',(#38),#39,.T.); +#41=CLOSED_SHELL('',(#40)); +#42=MANIFOLD_SOLID_BREP('body2',#41); )" + step_footer(); auto bodies = import_step_from_string(step); EXPECT_EQ(step_last_error(), StepError::Ok); - ASSERT_GE(bodies.size(), 1u); // At least one body should parse - - int total_faces = 0; - for (const auto& body : bodies) { - EXPECT_TRUE(body.is_valid()); - total_faces += static_cast(body.num_faces()); - } - // Two bodies, each with at least 3 faces (simplified test) - EXPECT_GE(total_faces, 3); + ASSERT_GE(bodies.size(), 2u); + EXPECT_TRUE(bodies[0].is_valid()); + EXPECT_TRUE(bodies[1].is_valid()); + EXPECT_GE(bodies[0].num_faces(), 1u); + EXPECT_GE(bodies[1].num_faces(), 1u); } // ─────────────────────────────────────────────────────────────