본문 바로가기
C++ 200제/코딩 IT 정보

[NX UG API] C++ 2D 도면(드로잉 시트) 만들기 예제

by vicddory 2017. 6. 12.

[NX UG API] C++ 2D 도면(드로잉 시트) 만들기 예제


UG NX 10 드래프팅 기능 중 3D 모델링에서 2D 도면을 생성하는 방법이 있습니다. 이 과정을 C++ API 코드로 구현하는 방법이 있는데 좀 기니 부분별로 끊어서 설명합니다.


드로잉 시트 1. 모델링 뷰로 변환


1
2
3
4
5
6
7
int drawing_state = 0;
 
UF_ASSEM_set_work_part(UF_PART_ask_display_part());
UF_DRAW_ask_display_state(&drawing_state);
 
if (drawing_state == 2// 2 = Drawing View, UG NX 10
    UF_DRAW_set_display_state(1); // Modeling View, C++ API
cs


3번 라인으로 현재 디스플레이 파트를 워크 파트로 설정합니다.


그리고 드래프팅으로 진입하기 위해 디스플레이 상태를 모델링뷰로 변경합니다. UG NX 10 기준으로 3D 모델링에서 2D 도면을 추출하기 위함이죠.

드로잉 시트 2. 도면 객체 생성 (drawing sheet using C++ API)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
UF_DRAW_info_t drawing_info;
tag_t drawing_sheet = NULL_TAG;
char drawing_name[MAX_ENTITY_NAME_SIZE];
 
drawing_info.size_state = UF_DRAW_METRIC_SIZE;
drawing_info.drawing_scale = 1.;
drawing_info.units = UF_PART_METRIC;
drawing_info.projection_angle = UF_DRAW_THIRD_ANGLE_PROJECTION;
drawing_info.size.metric_size_code = UF_DRAW_A0;
 
sprintf(drawing_name, "TEST");
 
UF_DRAW_create_drawing(drawing_name, &drawing_info, &drawing_sheet);
 
if (drawing_sheet == NULL_TAG)
{
    uc1601("Drawing Sheet 생성에 실패하였습니다.", TRUE);
 
    return false;
}
cs


UF_DRAW_info_t는 2D 도면이라 생각하면 됩니다. 객체를 만들고 크기, 각도 등을 설정하는데, 9번 라인을 보면 UF_DRAW_A0입니다. A0 크기로 만들겠다는 뜻이죠.


도면의 이름은 TEST입니다. 11번 라인에 있죠. 13번 라인을 통해 2D 도면을 최종 생성하게 되는데, 만약 sheet의 객체가 NULL이라면 객체 생성에 실패한 겁니다. UG NX 10에서 더는 진행할 수 없죠.


그러나, 태그가 생성된다면 C++ API로 도면이 잘 생성된 겁니다.


드로잉 시트 3. 도면에 들어갈 도형 모양 설정


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tag_t view = NULL_TAG;
tag_t dwg_view = NULL_TAG;
UF_DRAW_view_info_t view_info;
 
double view_posistion[2= { 100.0600.0 };
 
view_info.view_status = UF_DRAW_ACTIVE_VIEW;
view_info.anchor_point = NULL_TAG;
view_info.view_scale = 1.0;
view_info.use_ref_pt = FALSE;
view_info.inherit_boundary = FALSE;
        
UF_VIEW_ask_tag_of_view_name("ISOMETRIC"&view);
UF_DRAW_import_view(drawing_sheet, view, view_posistion, &view_info, &dwg_view);
UF_DRAW_move_view (dwg_view, view_posistion);
UF_DRAW_update_one_view(drawing_sheet, dwg_view);
cs


view_position은 도형의 2D 도면상 위치입니다. 그리고 13번 라인을 보면 "ISOMETRIC"입니다.


이건 UG NX 10 UI에서 확인할 수 있습니다.


NX - ReplaceView - Isometric[Siemens CAD] ISOMETRIC 뷰

하나 주의할 것은 코딩할 때 뷰의 이름은 무조건 대문자로 해야 한다는 겁니다.


가령, 뷰의 이름을 "TOP"이라 하면 잘 되는데, "Top"라 하면 뷰가 엉망이 됩니다. C++ API 다룰 때 주의하세요.


드로잉 시트 4. UG NX 10에서 실행해 보기


자, 위의 2D 도면 소스를 그대로 실행해 보세요.


NX 3D 모델링에서 2D 도면[Siemens CAD] NX 3D 모델링에서 2D 도면


파트 네비게이터를 보니 TEST란 이름의 도면이 생성되었네요. 뷰는 ISOMETRIC이고요.


UG NX 10 뷰를 좀 바꿔볼까요? "FRONT"로 해보면 이런 결과가 나오네요.


NX 3D 모델링에서 2D 도면[Siemens CAD] 뷰 - FRONT


마지막으로, 꼭 C++ API 함수 하나를 호출해야 합니다.


16번 라인에 UF_DRAW_update_one_view(drawing_sheet, dwg_view); 가 있는데, 이걸 해줘야 도면으로 갱신됩니다. 안 해주면 도면 안 보여요.


[NX UG API] C++ 2D 도면(드로잉 시트) 만들기 예제

댓글