STEP-file에서 면 위치, edge 관련 entity에 대한 고찰

STEP-file에서 면 위치에 대한 고찰

  STEP-file을 Graph \(G(V,E)\)로 표현하여, Node에 face관련 attribute들을 부여하는 과정에서 face 위치 정보 및 face 관련된 vector값을 얻는데 문제가 생겼다.
Figure 1. 가로, 세로, 높이가인 (5, 10, 15)인 단순한 block

 Figure 1과 같이 ADVANCED_FACE의 두 번째 attribute이 face의 geometry 정보를 제대로 담고 있을 줄 알았는데, 예상했던 정보를 담고 있지 못 했다. STEP-file의 hierarchy를 보면 AXIS2_PLACEMENT_3D가 있는데, 해당 entity가 face의 위치 및 surface normal과 같은 정보를 담고 있는 방식이 내 생각과는 차이가 있었다. 같은 형상을 다른 방식으로도 그려본 결과, AXIS2_PLACEMENT_3D는 그려진 방식에 따라서 face의 기준 원점을 나타내는데 차이가 있었고 면이 향하는 방향(Z)도 달랐다. ADVANCED_FACE의 두 번째 attribute을 통해 얻을 수 있는 정보는 face의 타입(PLAN, CYLINDRICAL SURFACE 등) 정도일 것 같다. STEP-file을 \(G(V,E)\)로 나타낼 때 대부분의 유의미한 정보는 edge들을 통해 얻을 것 같다.
 AXIS2_PLACEMENT_3D가 나타내는 위치를 바꿔봄으로써 어떤 영향을 미치는지 알아본 결과, 값을 극단적으로 바꾸어도 (적어도 FreeCAD에서는) 오류없이 원래 형상을 불러올 수 있었다. 단, PLANE entity를 지웠을 때는 해당 면이 사라졌다.
 

Edge 관련 entity에 대한 고찰

의문점
 STEP-file의 EDGE_CURVE는 vertex start point, vertex end point, edge_geometry 정보를 참조한다. 여기서 edge_geometry에 위치하는 entity가 CAD프로그램에 따라 차이가 난다. 내가 확인한 바로 FreeCAD에서 export한 STEP-file 및 MFCAD는 반드시 SURFACE_CURVE 또는 SEAM_CURVE의 첫 번째 attribute을 통해 LINE, CIRCLE 등의 edge_geometry 정보를 나타낸다. 하지만 Inventor, NX에서 export한 경우에는 EDGE_CURVE가 바로 LINE, CIRCLE 등의 edge_geometry를 참조한다.
 
SURFACE_CURVE 및 SEAM_CURVE가 주는 영향 확인
 아래에 간단한 형상의 STEP-file의 일부를 나타내었다. EDGE_CURVE 부터 참조관계를 따라가면 #54까지 연관되어있음을 알 수 있다. 이 중, SURFACE_CURVE, PCURVE 및 PCURVE의 두 번째 entity와 연관된 것들을 제거했다. 이 중, PLANE을 없애지 않은 이유는 ADVANCED_FACE에서도 참조하고 있기 때문이다. 끝으로 EDGE_CURVE에서 참조하고 있는 edge_geometry를 SURFACE_CURVE 대신 직접적인 LINE, CIRCLE 등의 entity로 연결해주어야 한다.
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
#21 = EDGE_CURVE('',#22,#24,#27,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(-50.,25.,0.));
#24 = VERTEX_POINT('',#25);
#25 = CARTESIAN_POINT('',(-50.,25.,20.));

#26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);
#27 = LINE('',#28,#29);
#28 = CARTESIAN_POINT('',(-50.,25.,0.));
#29 = VECTOR('',#30,1.);
#30 = DIRECTION('',(0.,0.,1.));

#31 = PCURVE('',#32,#37);
#32 = PLANE('',#33);
#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
#34 = CARTESIAN_POINT('',(-50.,25.,0.));
#35 = DIRECTION('',(0.,1.,0.));
#36 = DIRECTION('',(1.,0.,0.));

#37 = DEFINITIONAL_REPRESENTATION('',(#38),#42);
#38 = LINE('',#39,#40);
#39 = CARTESIAN_POINT('',(0.,0.));
#40 = VECTOR('',#41,1.);
#41 = DIRECTION('',(0.,-1.));
#42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#43 = PCURVE('',#44,#49);

#44 = PLANE('',#45);
#45 = AXIS2_PLACEMENT_3D('',#46,#47,#48);
#46 = CARTESIAN_POINT('',(-50.,-25.,0.));
#47 = DIRECTION('',(-1.,0.,0.));
#48 = DIRECTION('',(0.,1.,0.));

#49 = DEFINITIONAL_REPRESENTATION('',(#50),#54);
#50 = LINE('',#51,#52);
#51 = CARTESIAN_POINT('',(50.,0.));
#52 = VECTOR('',#53,1.);
#53 = DIRECTION('',(0.,-1.));
#54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
 이와 같이 entity들을 없애도 CAD program에서 파일을 제대로 열 수 있는 것을 확인할 수 있었다. CAD program에 따라 차이가 발생하는 이유는 STEP-file 생성을 위한 kernel이 달라서 발생하는 것 같다. AP버전에 따른 차이도 있을 것으로 생각된다.
 STEP-file을 전처리 할 때, 위와 같은 작업을 수행하여 initial edge feature를 만들어 주어야 한다.

댓글

이 블로그의 인기 게시물

로봇의 작업영역(Workspace)

Frenet-Serret formulas (프레네-세레 공식)

yes24 [뷰어 서버의 기본정보가 존재하지 않습니다.] 오류 해결