블로그 이미지
진연
3차원 CAD프로그램인 UGS에서 지원하는 API를 이용하여 프로그램하는 방법등을 소개하는 블로그입니다. 혹시 연락이 필요하신분은 youni7311@hanmail.net로 메일 보내주세요..

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

'NX Open for C/C++/초급 강좌'에 해당되는 글 8

  1. 2007.03.08 6. UG Interface Styler(1)

6. UG Interface Styler(1)

안녕하세요... 화창한 월요일입니다...
그러나, 어김없이 찾아오는 월요병에 시달리고 있습니다.. 웬지 컨디션도 안 좋은것 같고, 일도 하기싫고 그렇네요.. 강좌도 쓰기 싫고...ㅎㅎㅎ 농담이구요.. 오늘 진도를 한번 같이 나가보죠..

오늘은 UG Interface Styler에 대해서 알아보겠습니다.. 생각에 한번에 다하기는 힘들것 같고, 두번이나 세번정도로 나눠서 진행해야 할것 같습니다.

그럼 UG Interface Styler가 무엇인지부터 알아볼까요..? UG Styler는 대화식 프로그램을 만들기 위해 Dialog를 만들 수 있는 도구라고 생각하시면 됩니다. 불편한 점도 많이 있지만 개발자들이 빠른 시간에 Dialog를 만들고, 사용할 수 있도록 UG에서 많은 것들을 지원해 주고 있습니다.

UG Interface Styler
은 어디서 만들 수 있을까요..? 지금 바로 Unigraphics를 실행 시키세요.. 그리고, Application -> User Interface Styler... 를 클릭하시면 Dialog를 만들 수 있는 화면으로 전환됩니다.



위에 그림을 보시면 Dialog를 만들 때 사용하는 메뉴와 툴바 그리고, Design Dialog (1), Resource Editor (2), Object Brower (3)가 있습니다.

1. Design Dialog - 이 곳에 아이템을 추가 하거나 위치를 배열해서 Dialog를 만드 수 있습니다.



2. Resource Editor - Object Brower에서 선택한 아이템의 속성(Attributes), 콜백(Callbacks), 위치(Attachments)등을 설정합니다.



3. Object Brower - Design Dialog 안에 추가안 아이템을 디스플레이합니다.



그럼 간단하게 하나 만들어 볼까요..? [UG Open/API 프로그램 시작하기 1]에서 했던 라인 그리는 코드에서 Start Point와 End Point를 Styler Dialog를 이용해서 입력해 보도록 하겠습니다.

1. UG를 실행하고, Application -> User Interface Styler...를 선택. Dialog를 만들 수 있는 모드로 들어갑니다.
2. Object Brower에서 CHANGE를 선택하고, Resource Editor의 Attribute와 Callback을 아래과 같이 설정합니다.




 3. Insert - > Primitive 이나 툴바에 있는 아이템들을 선택해서 아래와 같이 구성하고, basic_line.dlg로 저장합니다. 저장 위치는 지난시간에 만들었던 Application폴더에 저장하십시요...



4. basic_line.dlg를 정장한 폴더를 가보시면 basic_line_template.c, basic_line.h이 자동으로 생성되어 있습니다. 이 파일은 방금전에 만든 UG Styler를 프로그램 할 수 있도록 자동으로 생성해주는 코드입니다.. 너무나도 감사한 일이죠...^^

두 파일을 열어보면 아래와 같습니다. (참고로 아래 코드는 전체가 아니라 중요한 일부만 표시했습니다.)

/*=============================================================================
Filename: basic_line.h
==============================================================================*/

#ifndef BASIC_LINE_H_INCLUDED
#define BASIC_LINE_H_INCLUDED

#include <uf.h>
#include <uf_defs.h>
#include <uf_styler.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
*****************************************************************************
Item ID를 #define문으로 정의 - Item ID는 Attribute에서 입력할 수 있고,
Item을 칭하는 고유 이름입니다.
*****************************************************************************
*/
#define BASIC_LINE_DLG_LABEL_START_POINT ("LABEL_START_POINT")
#define BASIC_LINE_DLG_REAL_START_XC ("REAL_START_XC")
#define BASIC_LINE_DLG_REAL_START_YC ("REAL_START_YC")
#define BASIC_LINE_DLG_REAL_START_ZC ("REAL_START_ZC")
#define BASIC_LINE_DLG_SEP_1 ("SEP_1")
#define BASIC_LINE_DLG_LABEL_END_POINT ("LABEL_END_POINT")
#define BASIC_LINE_DLG_REAL_END_XC ("REAL_END_XC")
#define BASIC_LINE_DLG_REAL_END_YC ("REAL_END_YC")
#define BASIC_LINE_DLG_REAL_END_ZC ("REAL_END_ZC")
#define BASIC_LINE_DLG_DIALOG_OBJECT_COUNT ( 9 )


/*
*****************************************************************************
콜백함수(Callback Function)은 버튼을 클릭하거나, 값을 입력할 때 실행되는 함수를
말합니다.

Constructor - Dialog 가 실행될 때...
OK - OK 버튼을 클릭했을때...
Apply - Apply 버튼을 클릭했을때...
Cancel - Cancel 버튼을 클릭했을때...
*****************************************************************************
*/

int BASIC_LINE_DLG_constructor_cb ( int dialog_id, void * client_data,
                              UF_STYLER_item_value_type_p_t callback_data);
int BASIC_LINE_DLG_ok_cb ( int dialog_id, void * client_data,
                              UF_STYLER_item_value_type_p_t callback_data);
int BASIC_LINE_DLG_apply_cb ( int dialog_id, void * client_data,
                               UF_STYLER_item_value_type_p_t callback_data);
int BASIC_LINE_DLG_cancel_cb ( int dialog_id, void * client_data,
                               UF_STYLER_item_value_type_p_t callback_data);

#ifdef __cplusplus
}
#endif

#endif /* BASIC_LINE_H_INCLUDED */

/*=============================================================================
Filename: basic_line_template.c
==============================================================================*/

#include <stdio.h>
#include <uf.h>
#include <uf_defs.h>
#include <uf_exit.h>
#include <uf_ui.h>
#include <uf_styler.h>
#include <uf_mb.h>
#include <basic_line.h>
/*
*****************************************************************************
콜백함수를 등록하기 위해 필요한 #define문과 배열입니다.
*****************************************************************************
*/

#define BASIC_LINE_DLG_CB_COUNT ( 4 + 1 )

static UF_STYLER_callback_info_t BASIC_LINE_DLG_cbs[BASIC_LINE_DLG_CB_COUNT] =
{
{UF_STYLER_DIALOG_INDEX, UF_STYLER_CONSTRUCTOR_CB , 0, BASIC_LINE_DLG_constructor_cb},
{UF_STYLER_DIALOG_INDEX, UF_STYLER_OK_CB , 0, BASIC_LINE_DLG_ok_cb},
{UF_STYLER_DIALOG_INDEX, UF_STYLER_APPLY_CB , 0, BASIC_LINE_DLG_apply_cb},
{UF_STYLER_DIALOG_INDEX, UF_STYLER_CANCEL_CB , 0, BASIC_LINE_DLG_cancel_cb},
{UF_STYLER_NULL_OBJECT, UF_STYLER_NO_CB, 0, 0 }
};


static UF_MB_styler_actions_t actions[] = {
   { "basic_line.dlg", NULL, BASIC_LINE_DLG_cbs, UF_MB_STYLER_IS_NOT_TOP },
   { NULL, NULL, NULL, 0 }
};

/*
*****************************************************************************
어디서 많이 보신거죠? 앞에서 했습니다.. 혹시, 기억 안나시면 다시 다녀오세요..
*****************************************************************************
*/

extern void ufsta (char *param, int *retcode, int rlen)
{
   int error_code;

   if ( (UF_initialize()) != 0)
      return;

   if ( (error_code = UF_MB_add_styler_actions ( actions ) ) != 0 )
   {
      char fail_message[133];

      UF_get_fail_message(error_code, fail_message);
      printf ( "%s\n", fail_message );
   }

   UF_terminate();
   return;
}

/*
*****************************************************************************
아래 extern int ( int *response )와 extern void (char *param, int *retcode, int rlen)는 별로 중요하지 않습니다. 그러나 그 안에 UF_STYLER_create_dialogdialog를 호출하는 함수입니다. 꼭 기억해주세요...
*****************************************************************************
*/

extern int ( int *response )
{
   int error_code = 0;

   if ( ( error_code = UF_initialize() ) != 0 ) return (0) ;

   if ( ( error_code = UF_STYLER_create_dialog ( "basic_line.dlg", BASIC_LINE_DLG_cbs,
                                                BASIC_LINE_DLG_CB_COUNT, NULL, response ) ) != 0 )

   {
      char fail_message[133];

      UF_get_fail_message(error_code, fail_message);
      UF_UI_set_status (fail_message);
      printf ( "%s\n", fail_message );
   }
   UF_terminate();

   return (error_code);
}


extern void (char *param, int *retcode, int rlen)
{
   int response = 0;
   int error_code = 0;

   if ( ( UF_initialize() ) != 0 ) return;

   if ( ( error_code = UF_STYLER_create_dialog ( "basic_line.dlg", BASIC_LINE_DLG_cbs,
                                                BASIC_LINE_DLG_CB_COUNT, NULL, response ) ) != 0 )

   {
      char fail_message[133];

      UF_get_fail_message(error_code, fail_message);
      UF_UI_set_status (fail_message);
      printf ( "%s\n", fail_message );
   }
   UF_terminate();

   return;
}

/*
*****************************************************************************
요 아래들은 모두 콜백함수 입니다.. 예를 들어 Ok버튼을 클릭했을 때 해야 될 일이
있다면 아래 BASIC_LINE_DLG_ok_cb 함수에 코딩하시면 됩니다.

참고로 return (UF_UI_CB_CONTINUE_DIALOG);는 Dialog를 계속 진행하고,
return (UF_UI_CB_EXIT_DIALOG);는 Dialog를 계속 종료합니다.

*****************************************************************************
*/

int BASIC_LINE_DLG_constructor_cb ( int dialog_id, void * client_data,                              
                              UF_STYLER_item_value_type_p_t callback_data)
{
   if ( UF_initialize() != 0)
      return ( UF_UI_CB_CONTINUE_DIALOG );

   UF_terminate ();

   return (UF_UI_CB_CONTINUE_DIALOG);
}

int BASIC_LINE_DLG_ok_cb ( int dialog_id, void * client_data,
                              UF_STYLER_item_value_type_p_t callback_data)
{
   if ( UF_initialize() != 0)
      return ( UF_UI_CB_CONTINUE_DIALOG );

   UF_terminate ();

   return (UF_UI_CB_EXIT_DIALOG);
}

int BASIC_LINE_DLG_apply_cb ( int dialog_id, void * client_data,

                              UF_STYLER_item_value_type_p_t callback_data)
{
   if ( UF_initialize() != 0)
      return ( UF_UI_CB_CONTINUE_DIALOG );

   UF_terminate ();
   
   return (UF_UI_CB_CONTINUE_DIALOG);
}

int BASIC_LINE_DLG_cancel_cb ( int dialog_id, void * client_data,
                              UF_STYLER_item_value_type_p_t callback_data)
{
   if ( UF_initialize() != 0)
      return ( UF_UI_CB_CONTINUE_DIALOG );

   UF_terminate ();

   return (UF_UI_CB_EXIT_DIALOG);
}

오늘을 이 코드를 보여 드리는데 까지 하겠습니다.. 다음에는 목적했던 프로그램을 완셩해 보죠...^^ 오늘은 그림이 많아서 블로그에 올리기가 힘드네요..

그럼 다음에 뵙겠습니다...

posted by 진연
prev 1 2 3 4 5 6 ··· 8 next