2. 라인그려보기
안녕하세요..^^
오늘 진도를 좀더 나가 볼까요?
보통 프로그램 책들을 보면 처음에 "Hello XXX"라는 프로그램을 예제로 많이 사용하는데 우리는 "Hello XXX" 대신 라인을 하번 그려보겠습니다.
먼저 원하는 이름으로 프로젝트를 만드세요. 잘 모르시면 [UG Open.API 프로그램 시작하기 1] 를 다시 한번 보시기 바랍니다. 저는 "basic_line"이라는 이름으로 프로젝트를 만들었습니다.
프로젝트를 만드셨으면 라인을 그리기 위해 몇줄의 코드를 추가 해주어야 합니다.
아래 프로그램은 100mm의 길이를 가지는 라인을 생성하는 예제 입니다. 빨강색 글자로 표현된것은 새로 추가한 코드 입니다.
/*****************************************************************************
**
** basic_line.cpp
**
** Description:
** Contains Unigraphics entry points for the application.
**
*****************************************************************************/
#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
#include <uf.h>
#include <uf_ui.h>
#include <uf_exit.h>
/* /* static int report_error( char *file, int line, char *call, int irc) UF_get_fail_message(irc, err); if (!UF_UI_open_listing_window()) return(irc); /* line_coords.start_point[0] = 0.; line_coords.end_point[0] = 100.; rtn = UF_CALL(UF_CURVE_create_line (&line_coords, &line_tag)); extern int ufusr_ask_unload( void ) 라인을 그리기 위해서 11줄이 추가 되었습니다. 한번 볼까요? - curve에 관련된 함수가 들어있는 Header File입니다. UG Opne/API에서 가장 어려운점은 자신이 필요한 함수를 찾는 일입니다. 다시한번 말씀드리지만 UG NX3 Document -> NX Open -> Open C Reference Guide를 보시면 각종 Header File이 나와있고, 링크를 들어가 보면 Type, Function에 대한 설명이 나와 있습니다. line_coords.end_point[0] = 100.; - 라인을 생성하는 API함수에 "line_coords"를 입력하고, line tag를 받아옵니다. 이 과정이 일어나는 순간에 UG화면에는 라인이 하나 그려져 있을겁니다. //------------------------------------------------------------------------------------ tag_t * line Output Object identifier Of new line struct UF_CURVE_line_s 프로그램 코딩이 끝났으면 빌드->basic_line 빌드를 실행합니다. 특별히 변경한 내용이 없으시다면 프로젝트가 저장되어 있는 폴더안에 Debug라는 폴더가 있습니다. 이 폴더 안으로 들어가 보시면 basic_line.dll 이 만들어져 있습니다. 다시 Visual Studio로 돌아와서 디버그->시작(F5)를 누르시면 실행파일 이름을 물어봅니다. 이곳에"{UG_BASE_DIR}\UGII\ugraf.exe"를 입력하고, 확인 버튼을 누르면 UG가 실행됩니다. 오늘 여러분은 UG에 무엇인가를 그려보셨습니다. uf_curve.h 파일 안에는 여러가지 커브를 생성하는 함수가 들어 있습니다. 연습삼아 이것저것 만들어 보시기 바랍니다. 백문이불여일행 입니다. 안해보시면 절대 이해 못하십니다. 꼭 직접해보세요..^^ 여기까지 입니다. 다음에는 line그리는것 가지고 응용을 해보겠습니다...
*****************************************************************************
Line을 생성하는 함수가 들어있는 Header File 추가
*****************************************************************************
*/
#include <UF_CURVE.H>
*****************************************************************************
약속대로 Error Message를 보여주는 함수를 제사 사용하는것으로 변경해봤습니다.
원하시면 사용해 보세요.
*****************************************************************************
*/
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
{
if (irc)
{
char err[133], msg[133];
sprintf(msg, "error %d at line %d in %s", irc, line, file);
{
UF_UI_write_listing_window(err);
UF_UI_write_listing_window("\n");
UF_UI_write_listing_window(msg);
UF_UI_write_listing_window("\n");
UF_UI_write_listing_window(call);
UF_UI_write_listing_window(";\n\n");
}
else {}
}
}
*****************************************************************************
이곳에 대한 설명을 아래에...
*****************************************************************************
*/
extern DllExport void ufsta( char *param, int *returnCode, int rlen )
{
int rtn;
UF_CURVE_line_t line_coords;
tag_t line_tag;
if( UF_CALL(UF_initialize()) ) { return; }
line_coords.start_point[1] = 0.;
line_coords.start_point[2] = 0.;
line_coords.end_point[1] = 0.;
line_coords.end_point[2] = 0.;
UF_CALL(UF_terminate());
}
{
return( UF_UNLOAD_UG_TERMINATE );
}
#include
- return value를 받기 위한 변수입니다.
int rtn;
- 라인을 그리기 위해 사용할 구조체 입니다.
UF_CURVE_line_t line_coords;
- 생성된 라인의 테그를 받기 위한 변수입니다. 여기서 테그라는 말이 나오는데 이는 UG에서 Object를 식별하기 위한 고유 번호 입니다. UG에서 다루는 모든것을은 이 테그를 하나씩 가지고 있습니다.
tag_t line_tag;
- 구조체 변수에 라인을 그리기 위한 좌표를 입력합니다. 라인을 그리기 위해 사용하는 좌표는 절대좌표(ABS)입니다.
line_coords.start_point[0] = 0.;
line_coords.start_point[1] = 0.;
line_coords.start_point[2] = 0.;
line_coords.end_point[1] = 0.;
line_coords.end_point[2] = 0.;
rtn = UF_CALL(UF_CURVE_create_line (&line_coords, &line_tag));
아래 내용은 UG NX3 Document -> NX Open -> Open C Reference Guide에 있는 원문을 그대로 옮긴 것입니다.
Creates a line. You input the start and end points of the line by filling
out the line_coords data structure pointed to by UF_CURVE_line_p_t.
See Also
UF_CURVE_line_p_textern int UF_CURVE_create_line (UF_CURVE_line_p_t line_coords, tag_t * line );
UF_CURVE_line_p_t line_coords Input Coordinates of line in absolute space
Data Members
start_point
double start_point[ 3 ] - line start point
end_point
double end_point[ 3 ] - line end point
//------------------------------------------------------------------------------------
UG가 실행되면 새로운 파트 파일을 엽니다, 그리고, File->Execute->NX Open(Ctrl+U)를 선택하면 DLL파일을 선택할 수 있는 Dialog가 실행됩니다. 여기서 여러분이 만드(basic_line.dll)를 선택하고 확인을 누르면 확면에 라인이 그려진것을 확인 할 수 있습니다.
그럼...