예 제

주요 파일 및 디렉토리 구성

  • ○ GMS_ROOT/
    • - gms_init.bat : SL-GMS 환경 설정용 batch file
  • ○ GMS_ROOT/bin/
    • - 각종 Utility 및 binary 실행 파일들, DLL 파일들 위치
    • - dxf2g.exe : AutoCAD *.dxf 파일을 SL-GMS *.g 파일로 conversion하는 utility
    • - emf2g.exe : *.wmf (Windows Metafile) 파일을 SL-GMS *.g 파일로 conversion하는 utility
    • - gm1.exe, m1g.exe : SL-GMS 모델파일 (g -> m1, m1 -> g) conversion utility
  • ○ GMS_ROOT/demo.net/
    • - 샘플 데모 프로그램들 위치
  • ○ GMS_ROOT/lib/
    • - 각종 header file 및 library 파일들 위치
    • - KEYS : SL-GMS License 저장 파일
    • - colordef.dat : Color Table 저장 파일
    • - fontdef.dat : Font Table 저장 파일
  • ○ GMS_ROOT/dongle/
    • - Dongle Drive 인식을 위한 setup 파일 위치
  • ○ GMS_ROOT/symbol/
    • - 미리 만들어진 Template Symbol 파일들 위치
  • ○ GMS_ROOT/work/
    • - Programming 작업용 디렉토리, 각종 Sample 프로그램 위치

C/C++/Dev를 이용한 기초 애플리케이션의 개발

  • 1. MFC SDI 기초 Application 의 작성 ( Example_1 )
    • - Microsoft® Visual Studio 2005와 SL-GMS C++/Dev를 이용한 기본 응용 프로그램을 작성합니다.
    • - 신규 프로젝트의 작성, 프로젝트 속성설정 등 SL-GMS Application 개발을 위한 Visual Studio 2005의 환경을 설정합니다.
    • - SL-GMS Draw Editor에서 디자인한 SL-GMS Model을 사용합니다.
    • - SL-GMS Model과 Application을 연동하는 Programming 방법을 익힙니다.
    • ※ 참고 : MFC SDI Programming with VS2005.doc
  • x
  • 2. 특정 Model을 불러오는 Application의 작성 ( Example_2 )
    • - Example_1을 바탕으로, Application 실행 시 특정 Model을 바로 Open하는 방법을 익힙니다.
    • - MyProject_SDI.cpp 파일에 모델 이름을 입력하여 초기화 합니다.
    • - Example_1에서 불필요한 기능(File_Open 및 File_New 기능 등)들은 제거합니다.
    • - State Invoke Parameter 값 수정을 통한 Application Optimize
  • 모델이름 초기값 설정 ( MyProject_SDI.cpp )
    • BOOL CMyProject_SDIApp::InitInstance()
    • {
    •    // GMS_ADDED - command line arguments and Model name
    •    char **argv;
    •    int argc;
    •    char model_name[1024] = "model1"; // 모델이름 입력
    •    ···
    •    // strcpy(model_name, ""); // 주석 처리
    • }
  • 메뉴의 “새로 만들기”, “열기” 기능 비활성화
    • App Class의 이벤트 항목 => ID_FILE_OPEN 의 OnFileOpen 삭제
    • Doc Class의 이벤트 항목 => ID_FILE_NEW 의 OnFileNew 삭제
  • Myproject_sdi.cpp 파일의 OnfileNew 와 OnFileOpen 부분을 주석 처리
    • // CMyproject_sdiApp
    • BEGIN_MESSAGE_MAP(CMyproject_sdiApp, GMS_App)
    •    ON_COMMAND(ID_APP_ABOUT, &CMyproject_sdiApp::OnAppAbout)
    •    // 표준 파일을 기초로 하는 문서 명령입니다.
    • // ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
    • // ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
    • // 표준 인쇄 설정 명령입니다.
    • // ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
    • // ON_COMMAND(ID_FILE_OPEN, &CMyproject_sdiApp::OnFileOpen)
    • END_MESSAGE_MAP()
  • 기존의 user_top.c 파일과 똑같은 내용의 user_top.c 파일을 프로젝트 디렉토리에 만들고, 기존의 user_top.c 파일과 교체
  • State Invoke Parameter 수정 (user_top.c)
    • STINVOKE 함수에서 “dat_flag“ 값을 “1“에서 “0”으로 수정 (2군데)
  • x
  • 3. Dynamic을 이용한 Application 작성 ( Example_3 )
    • - Example_2를 바탕으로, 모델의 Object에 Dynamic을 부여하여 실제 Application과 통신하는 방법을 익힙니다.
    • - GmsDraw_mfc에서 작성한 DAT파일을 사용하거나, Data Source로부터 직접 Data를 전달받는 방법을 익힙니다.
    •    · User_ds.c 파일 작성을 통한 Data 전달
    • - Simulator의 Update Period를 변경하여 Simulation 속도를 변환해봅니다.
    • - State Invoke Parameter 값 수정을 통한 Application Optimize
  • 3-1. GmsDraw_mfc를 사용하여 Application에서 사용할 모델 수정
    • - Dynamic 값 입력 시 Dynamic Variable을 “fill” 로 지정
    • x
    • - Simulation Data 생성 및 Test
    • x
  • 3-2. 해당 DAT 파일을 이용하여 Application 실행
    • - user_top.c 파일에서 STINVOKE 함수의 "dat_flag" 값을 “1”으로 설정
  • 3-3. Data를 직접 프로그래밍하여 Application 실행
    • - user_top.c 파일에서 STINVOKE 함수의 "dat_flag" 값을 “1”으로 설정
    • - user_ds.c 프로그래밍
    • x
    • x
  • 4. GISMO Object를 이용한 Application 작성 (Example_4)
    • - GISMO Object를 통해 사용자 이벤트를 받아 처리할 수 있습니다.
    • - Object의 Callback 함수의 사용법을 익힙니다.
  • 4-1. 기존 Model에 GISMO Object 삽입
    • - 앞의 예제에서 사용했던 model1.m1 파일에 그림과 같이 switch.m1 을 삽입
    • x
    • - switch.m1 파일을 열어서 GISMO에서 사용중인 DynProp을 확인
    • x
  • 4-2. GISMO의 이벤트를 받아 처리하는 user_ds.c 파일 프로그래밍
    • x
    • - UPDATE FUNCTION 함수 수정
    • x
    • - GISMO Object의 CallBack 함수를 처리하는 프로그램 작성
    • x
    • - Initialization Function 프로그램 수정
    • x
  • 4-3. Application 작동 확인
    • x
  • 4-3. . GISMO Button을 이용한 Application 작성
    • - 사용하고자 하는 GISMO 버튼을 model1.m1 에 추가
    • - Palettes 메뉴의 Available Submodels에 있는 GISMO 항목에서 m_call 버튼 삽입
    • x
  • 4-3. . GISMO Button을 이용한 Application 작성
    • - user_ds.c 파일에 다음의 함수를 추가
    • x
    • - Custom function 추가에 따른 user_ds_initialize () 부분에 다음을 추가
    • x
  • 4-6. Application 작동 확인
    • x
  • 5. View State를 이용한 Application Frame 구분 Sample 작성 ( Example_5 )
    • - View State를 이용하여 Application의 프레임을 구분하여 표현할 수 있다.
    • - 특정 위치에 View State를 위치 시킬 수 있다.
    • - 해당 프레임의 Model을 변경하여 표현할 수 있다.
  • 5-1. 특정 프레임 위에 위치시킬 MainTop.m1 모델을 만든다
    • x
  • 5-2. Main Frame에 위치시킬 모델을 만든다 (2가지)
    • - MainModel.m1 과 test.m1 모델 생성
    • - test.m1 작성시 간단한 Dynamic 함수를 넣는다 (Example_7에서 사용예정)
    • - 이때 변수 명은 실습의 용이성을 위해 “fill”을 사용한다
    • x
  • 5-3. 각 Model 파일을 각각의 Frame에 Loading하기 위한 프로그램 작성
    • - Model State를 올릴 View State 생성
    • - user_top.c 파일의 model_name() 함수 아래 부분에 다음을 추가
    • x
    • - Button Event를 통한 모델 변경을 위한 함수 추가
    • x
    • - Button Event을 통한 Application 종료를 위한 함수를 추가
    • x
    • - Custom Function 추가로 인한 INITIALIZE FUNCTION에 정의
    • - int my_top_initialize () 함수 안에 다음을 작성
    • x
  • 5-4. Application 작동 확인
    • - 각 Button에 따라 Model이 변경된다
    • x
  • 6. Zoom , Pan 기능을 가진 Application 작성 (Example_6)
    • - GISMO Button을 이용하여 Zoom, Pan 기능을 간단히 구현할 수 있습니다.
  • 6-1. 각 기능을 위한 GISMO Button을 추가
    • - 이전 예제에서 사용한 mainTop.m1 파일에 Button을 추가
    • - Reset, Zoom In/Out/Rectangle, Pan 의 기능을 위해 5개 Button 추가
    • x
  • 6-2. 각 Button 별 Renamed Variable을 추가
    • 구 분 Display_expr label msg_statename msg_strmsg
      Reset zoomin_viewmgr_button_state "Reset" "viewmgr_state" "reset_view"
      Zoom In zoomin_viewmgr_button_state "Zoom In" "viewmgr_state" "zoomin"
      Zoom Out zoomout_viewmgr_button_state "Zoom Out" "viewmgr_state" "zoomout"
      Zoom Rect zoomrect_viewmgr_button_state "Zoom Rect" "viewmgr_state" "zoomrect"
      Pan pan_viewmgr_button_state "Pan" viewmgr_state "pan"
  • 6-3. ViewManagerState를 추가하기 위한 프로그램 작성
    • - user_top.c 의 model_name () 함수에 추가
    • x
  • 6-4. Application 작동 확인
    • x
  • 7. Dialog를 통한 이벤트 핸들링 Application 작성 (Example_7)
    • - Main Frame으로부터 Child Dialog를 생성할 수 있습니다.
    • - Child Dialog를 생성하여 Main Frame의 Object를 핸들링 할 수 있다.
  • 7-1. Dialog 생성 이벤트를 위한 GISMO Button을 생성
    • - 이전 예제에서 사용했던 test.m1에 GISMO Button을 추가
    • x
  • 7-2. 새로운 Dialog 창을 위한 Dialog.m1 작성
    • - Dialog Model 작성과 더불어 이벤트 발생을 위한 버튼 생성
    • x
  • 7-3. Mouse Click Event 발생시 Dialog 생성을 위한 프로그램 작성
    • - user_top.c 에 Dialog 생성을 위한 함수 정의
    • x
  • 7-4. Custom Function 추가로 인한 INITIALIZE FUNCTION에 정의
    • - Int my_top_initialize () 함수 안에 다음을 작성
    • x
  • 7-5. Application 작동 확인
    • x