블로그 이미지
진연
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

1. 시작하기

지금부터 UG Open/API를 이용해서 프로그램 하는 방법에 대해서 강좌(?)를 시작하려고 합니다.
모자란 실력이지만 만은 도움이 되었으면 합니다.

어떻게 괜찮겄습니까? 그럼 한번 빠져 봅시다..^^

UG Open/API 프로그램을 하기 위해서 여러분에 컴퓨터에는 적어도 두가지 프로그램이 설치 되어 있어야 합니다. 이미 아시겠지만 하나는 Unigraphics이고, 또 하나는 Visual Studio 입니다. 저는 여기서 Unigraphics NX3와 Visual Studio.NET 를 사용해서 강좌를 진행하겠습니다. 그리고, UG Open/API는 C++언어를 사용하고 있습니다. 어느정도는 C++에 대해서 알고 계셔야 프로그램을 할 수 있습니다. 만약 모르신다면 먼저 공부를 하시는것이 좋을것 같습니다.

먼저 Visual Studio.NET을 실행시키고, 파일->새로만들기->프로젝트를 실행하면 아래와 같은 다이얼로그가 실행됩니다. 빨간색 박스로 표시한 부분이 보이실 겁니다. 친절하게도 UG에서 Wizard를 지원해줘서 초기 설정을 이것으로 간단하게 처리할 수 있습니다.

만약 Wizard가 나오지 않으면 "{UG_BASE_DIR}\UGOPEN\vc7_files" 에 가보시면 vcprojects, VCWizards 두개의 폴더가 있습니다. 이 두개의 폴더를 통채로 " C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7" 폴더안에 복사해 넣으시면 됩니다.



NX3 Open Wizard를 선택하시고, 이름과 위치를 입력하시고 확인을 누릅니다.
그러면 아래과 같이 세 단계를 거치게 됩니다.





우선 처음이니 기본설정으로 만들어 보겠습니다.
바로 Finish 버튼을 누르시면 아래 그림과 같이 솔루션과 프로젝트가 하나 만들어 지고, 자동으로 cpp파일이 하나 생성됩니다.



cpp파일에 마우스를 가져가서 더블 클릭하면 뭔지 모르는 코드가 자동으로 생성되어 있습니다.
그럼 지금부터 cpp파일 안에 코드를 분석해보겠습니다.

/*****************************************************************************
**
** NX3 Open Wizard2.cpp
**
** Description:
** Contains Unigraphics entry points for the application.
**
*****************************************************************************/

/* Include files */
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
# include <strstream>
# include <iostream>
using std::ostrstream;
using std::endl;
using std::ends;
using std::cerr;
#else
# include <strstream.h>
# include <iostream.h>
#endif

/*
*****************************************************************************
UG Open/API 라이브러리 header 파일들입니다.
Header 파일들은 UG NX3 Document -> NX Open -> Open C Reference Guide에서 보실 수 있습니다
*****************************************************************************
*/
#include "UF.H"
#include "UF_UI.H"
#include "UF_EXIT.H"

/*
*****************************************************************************
UG Open/API함수를 사용할 때 Error Message를 볼수 있게 해주는 구문입니다.
그러나 이 자체로 사용하기가 좀 불편하죠^^ 나중에 제가 사용하는 함수를 올려드리겠습니다.

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

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

static int report_error( char *file, int line, char *call, int irc)
{
  if (irc)
  {
     char err[133],
     msg[133];

     sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ", irc, line, file);
     UF_get_fail_message(irc, err);

     UF_print_syslog(msg, FALSE);
     UF_print_syslog(err, FALSE);
     UF_print_syslog("\n", FALSE);
     UF_print_syslog(call, FALSE);
     UF_print_syslog(";\n", FALSE);

     if (!UF_UI_open_listing_window())
     {
          UF_UI_write_listing_window(msg);
          UF_UI_write_listing_window(err);
          UF_UI_write_listing_window("\n");
          UF_UI_write_listing_window(call);
          UF_UI_write_listing_window(";\n");
     }
  }

  return(irc);
}

/*****************************************************************************
** Activation Methods
*****************************************************************************/
/* Unigraphics Startup
** This entry point activates the application at Unigraphics startup */

/*
*****************************************************************************
아마 여기에서는 이 함수가 가장 중요합니다. 위에 영어로 친절하게 설명이 나왔듯이
만들 DLL을 실행하면 가장 먼저 실행되는 함수 입니다. (Entry Point)

간단하게는 여러분이 원하는 프로그램을 이 함수안에 작성하시면 됩니다.
*****************************************************************************
*/

extern DllExport void ufsta( char *param, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    if( UF_CALL(UF_initialize()) )
    {
       /* Failed to initialize */
       return;
    }

    /* TODO: Add your application code here */

    /* Terminate the API environment */
    UF_CALL(UF_terminate());
}

/*****************************************************************************
** Utilities
*****************************************************************************/

/* Unload Handler
** This function specifies when to unload your application from Unigraphics.
** If your application registers a callback (from a MenuScript item or a
** User Defined Object for example), this function MUST return
** "UF_UNLOAD_UG_TERMINATE". */

/*
*****************************************************************************
이 함수는DLL를 종료할 때 실행되는 함수입니다.

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

extern int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}

위에서 코드분석이라고 하면서 시작했는데 막상 해보니 별 내용이 없네요.^^ 여러분은 UG Open/API 프로그램을 하기 위한 가장 기본적인 골격이 만드셨습니다. 이제부터는 원하는 기능을 만들기만 하면 됩니다.

몇 줄 쓰지도 않았는데 어렵네요... 오늘은 여기까지 하겠습니다..
다음에는 라인이라도 하나 그려보도록 하죠..^^ 아마 눈에 무엇인가 동작하는게 보이면 슬슬 재미가...^^

아!! 그리고, 혹시 틀린부분이 있으면 이야기 해 주시기 바랍니다. 다 사람이 하는일이라..^^;

posted by 진연