예 제

주요 파일 및 디렉토리 구성

  • ○ GMS_ROOT/
    • - gms_init.bat : SL-GMS 환경 설정용 batch file
    • - vsvars32.bat : Visual Studio 2005 환경 설정용 batch file
  • ○ GMS_ROOT/bin/
    • - 각종 Utility 및 binary 실행 파일들, DLL 파일들 위치
    • - dxf2g.exe : AutoCAD .dxf 파일을 SL-GMS .g 파일로 conversion하는 utility
    • - emf2g.exe : .wmf (Windows Metafile) 파일을 .g 파일로 conversion하는 utility
    • - gm1.exe, m1g.exe : SL-GMS 모델파일 (g -> m1, m1 -> g) conversion utility
  • ○ GMS_ROOT/demo.net/
    • - GMS_ROOT/demo.net/Doc/ : 사용자 Manual Directory
    • - 샘플 데모 프로그램들 위치
  • ○ GMS_ROOT/lib/
    • - KEYS : SL-GMS License 파일
    • - Colordef.acad : AutoCAD Color File
  • ○ GMS_ROOT/dongle/
    • - Dongle License 발급을 위한 setup 파일 위치
  • ○ GMS_ROOT/symbol/
    • - 미리 만들어진 Template Symbol 파일들 위치

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

  • 1. Model 작성 ( Example.0 )
    • - New with Background로 모델을 생성합니다.
    • - Filled Rectangle을 2개 생성합니다.
    • - 각각 변수 “f”의 값에 의해 Fill Percent가 변화하는 Dynamic 액션을 추가합니다.
    • - 녹색 사각형은 색이 채워지는 방향을 왼쪽에서 오른쪽으로 설정합니다.
      (Fill  Direction)
    • - 파일명을 “sample1.m1”으로 저장합니다.
    • x
  • 2. Dynamic 작동 확인
    • - Dynamics > Edit Data File 메뉴를 열어서 다음과 같이 Simulation Data를 입력합니다.
    • - Dynamics > Preview 기능으로 Dynamic 설정이 정상 작동하는지 확인합니다.
    • x
  • 3. 기초 Windows Application의 작성 ( Example.1 )
    • - Microsoft® Visual Studio 2005와 SL-GMS .NET Component를 이용한 간단한 Windows 응용 프로그램을 작성합니다.
    • - 신규 프로젝트의 작성, DLL의 참조 추가 등 SL-GMS Application 개발을 위한 Visual Studio 2005의 사용법을 익힙니다.
    • - Example.0에서 디자인한 SL-GMS 모델을 사용합니다.
    • - SL-GMS 모델과 Application을 연동하는 Programming 방법을 익힙니다.
    • - Timer Control을 이용해서 주기적으로 데이터를 변화시키며, 동시에 화면을 갱신합니다.
  • 3.1 새 Project의 생성
    • - Visual Studio 2005의 시작
    • - GMS Command Prompt를 실행시키고, 도스 창에서 vsvars32.bat 파일을 실행
    • - Visual Studio 2005에 SL-GMS 환경변수를 적용시키기 위함입니다.
    • - 파일 → 새로 만들기 → 프로젝트 → Visual C# → Windows
    • - 새 프로젝트를 만듭니다.
  • 3.2 SL-GMS Library의 참조 추가
    • - Visual Studio 2005에서 SL-GMS의 .NET Component 들을 사용하려면 사전에 SL-GMS의 DLL을 참조 추가 해야 합니다.
    • - 신규 Project를 작성했을 경우에는 다음의 방법을 따르면 됩니다.
    • - 참조 추가
    •    · 메뉴 → 프로젝트 → 참조 추가
    •    · ‘찾아보기’ 버튼을 통하여 다음의 DLL들을 추가합니다.
    •       Install Directory\bin\SL.GMS.dll
    •       Install Directory\bin\SL.GMS.Drawing.dll
    •       Install Directory\bin\SL.GMS.Windows.Forms.dll
    •       Install Directory\bin\SL.GMS.IO.dll
    •    · 솔루션 탐색기의 Tree에서 ‘참조 → 마우스 오른쪽 버튼 → 참조 추가’ 를 통해서도 DLL을 참조 추가 할 수 있습니다.
  • 3.3 SL-GMS Component 등록
    • - Visual Studio 2005에 SL-GMS Component들을 등록합니다.
    •    · 이 작업은 Visual Studio 2005에서 한 번만 수행하면 되는 작업이며, 한 번 등록한 이후로는 계속 SL-GMS Component들을 계속 사용하실 수 있습니다.
    • - 도구 상자에 SL-GMS 탭 추가
    •    · ‘도구 상자’ → 오른쪽 마우스 → ‘탭 추가’ → SL-GMS 입력
    •    · SL-GMS 탭에서 오른쪽 마우스 → ‘항목 선택’ → .Net Framework 구성요소 → ‘찾아보기’를 통하여 다음의 DLL들을 선택
    •       Install Directory\bin\SL.GMS.Windows.Forms.dll
    •       Install Directory\bin\SL.GMS.IO.dll
    •    · 확인 버튼 클릭 후 도구 상자의 SL-GMS 탭에 다음의 SL-GMS Component들이 등록되었는지 확인
    •       GmsViewer
    •       GmsWriteComponent
    •       GmsStreamComponent
  • 3.4 Windows Form에 GmsViewer Component의 추가
    • - 솔루션 탐색기로 Form1.cs을 통해 폼 디자인 화면을 엽니다.
    • - Windows Form의 크기를 적당하게 확장합니다.
    • - 도구 상자의 일반 탭에서 GmsViewer를 선택하여 Form에 추가합니다.
  • 3.5 GmsViewer Properties
    • - Model Name을 Property로 설정하여 직접 화면에 표현 될 Model을 확인할 수도 있지만, 이 chapter에서는 Model Name을 프로그램 소스에서 지정하므로 Property에서 굳이 설정하지 않습니다.
    • - Form의 사이즈를 표시되는 모델의 비율 맞추어 640×480으로 지정해 둡니다.
    • - 레이아웃 → Dock 속성을 ‘Fill’로 설정하면, Form의 resize시 모델의 출력 size가 Form size를 따릅니다.
  • 3.6 Timer Control 추가
    • - 도구 상자의 Windows Forms으로부터 Timer를 선택해서 Form에 추가합니다.
    • ※ Timer는 ‘구성 요소’ 탭의 Timer가 아니고, ‘Windows Forms’ 탭의 Timer 입니다.
  • 3.7 Timer Property
    • - 주기적으로 Timer Event가 발생하도록 해서 그 타이밍에 화면을 갱신하도록 합니다.
    • - Enabled :True   Interval : 200으로 설정합니다.
    • - 화면의 갱신은 반드시 Timer를 통해 주기적으로 실시해야만 하는 것은 아닙니다.
      즉, 임의의 비 동기 이벤트의 수신이 가능하면 그 타이밍에 화면을 갱신할 수 있습니다.
    • ※ 이 프로그램에서는 자체 Simulation을 위해서 Timer Control을 사용했습니다.
  • 3.8 모델을 변화시키기 위한 기본 API
    • - GmsViewer에서 다음의 Method를 사용합니다.
    • - UpdateGraphics( ) 모델의 그래픽을 갱신함
    • - SL-GMS 변수 타입으로는 아래의 것들이 있습니다.
    • GmsIntegerVariable 정수
      GmsDoubleVariable 실수
      GmsStringVariable 문자열
      GmsIntegerArrayVariable 정수 배열
      GmsDoubleArrayVariable 실수 배열
      GmsStringArrayVariable 문자열 배열
  • 3.9 추가하는 Code의 요점
    • - GmsViewer에 모델 ‘sample1.m1’에서 정의한 변수(Dynamic Variable)의 형태를 전합니다.
    • - Timer Interval을 기준으로 프로그램상의 변수 값을 갱신하면서, 그 갱신된 값을 GmsViewer 에게 전달하고, GmsViewer의 그래픽을 갱신합니다.
  • 3.10 프로그램의 작성
    • [form1.cs파일]
    • x
    • x
    • - Form Design 화면에서 Timer를 Double Click하면 다음의 Method가 생성됩니다.
    • x
    • - Form Design 화면에서 Form1 을 선택하고, 속성 다이얼로그에서 이벤트 탭을 선택합니다.
    • - FormClosed 이벤트에 ‘Form1_Closed’ 라고 입력하면 아래의 Method가 자동생성 됩니다.
    • - 이 부분은 윈도우가 닫힐 때의 이벤트 처리를 수행합니다. 여기에서는 gmsViewer1을 종료시킵니다.
    • x
  • 3.11 Build와 실행
    • - 솔루션을 Build 합니다.
    • - Build가 정상적으로 끝나면 sample1.m1 파일을 실행파일이 위치한 Directory에 Copy 합니다. ( 일반적으로 Project Root\bin\Debug )
    • - 실행을 하면 다음의 화면이 나옵니다.
    • x
  • 4. Object의 인식 ( Example.2 )
    • - GmsViewer에 Display 되는 Model에 포함된 각각의 Object를 대화적으로 인식하는 방법을 배웁니다.
    • - Object위에 Mouse Point가 위치할 경우 Pointer의 모양을 변화시키는 프로그램을 만듭니다.
    • - Example.1의 프로그램을 이용합니다.
  • 4.1 모델의 변경
    • - 기존의 sample1.m1 을 사용합니다.
    • - Object Properties 다이얼로그를 사용합니다.
    • - 모델내의 Object에 각각 이름을 붙입니다.
    • - 각 Object에 UserData를 설정합니다.
    • - UserData의 내용을 사용할 Cursor의 이름으로 설정합니다.
    • - sample1.m1 파일을 다시 열어서 다음과 같이 각각의 Object에 Name과 UserData를 설정합니다.
    • x
  • 4.2 Mouse Event의 인식
    • - MouseEventHandler() Delegate를 작성해서 GmsViewer에 등록합니다.
    • gmsViewer1.MouseMove += new MouseEventHandler(OnMouseMove)
    • - 이 장에서는 마우스 이동의 Event만 사용합니다.
    • - VS 2005에서 사용 가능한 다른 마우스 이벤트 역시 인식이 가능합니다.
    • - 마우스 이동의 Event Handler를 통하여 마우스 커서가 SL -GMS Object 위에 있는지 판단합니다.
    • - 마우스 커서가 SL -GMS Object 위에 있는 경우, 그 오브젝트의 UserData를 비교해서 마우스 커서 모양을 변경합니다.
    • - 마우스 커서가 SL -GMS Object 위에 있지 않는 경우, Default Cursor로 되돌립니다.
  • 4.3 프로그램의 작성
    • x
    • x
  • 4.4 Build와 실행
    • - Build 하고 실행합니다.
    • - Object 위로 마우스 커서를 움직이면서 커서의 모양이 바뀌는지 확인합니다.
  • 5. GmsStreamComponent의 사용
    • - GmsStreamComponent
    • - GmsStreamComponent를 이용하여 local source 또는 remote source로부터 stream data를 SL-GMS Control로 가져올 수 있습니다.
    • - data는 SL-GMS Model, SubModels, images, data files 등이 될 수 있습니다.
    • - GmsStreamComponent에 사용되는 Path ( URL format을 사용함)
    • file://C:/SL-GMS/Models
    • file://%GMS_HOME%/demo.net/SimpleViewer
    • - Path
    • - Application은 run-time시 stream component의 path를 조작할 수 있습니다.
    • string directory = Directory.GetCurrentDirectory();
    • string currentDirectoryPath = @"file://" + directory + Path.DirectorySeparatorChar;
    • gmsStreamComponent.Paths.Insert(0, currentDirectoryPath );
    • Protocol
    • - 사용 가능한 Protocol은 http: , file: , relpath:가 있습니다.
    • - relpath : Application에서 사용하는 Custom Protocol.
  • 6. Object의 인식 II ( Example.3 )
    • - GmsModelManager를 이용하여 Program Source상에서 모델 위의 Object들의 정보를 가져오는 방법을 익힙니다.
    • - 앞에서 배운 GmsStreamComponent를 사용하는 방법을 익힙니다.
    • - 모델 위의 Object들의 정보를 받아와서 사용하는 방법을 익힙니다.
    • - 최종으로는, MouseDown Event를 받아서 클릭된 Object의 Name을 MessageBox위에 출력하고, 모델상의 Object들의 UserData를 console에 출력하는 프로그램을 만듭니다.
    • - Example.2의 program을 사용합니다.
  • 6.1 GmsStreamComponent의 등록
    • - 도구상자 SL-GMS 탭에서 GmsStreamComponent를 Form 위로 Drag&Drop 합니다.
    • - GmsStreamComponent의 속성 중에서 Paths → List에 model 파일이 위치한 경로를 입력합니다.
    • - 이렇게 함으로써 model 파일을 프로그램의 실행파일과 다른 경로에 배치할 수 있습니다.
    • - 경로의 맨 끝에는 반드시 ‘ \ ’ 기호를 넣어줘야 정상적으로 작동됩니다.
    • - GmsViewer의 속성 중에서 GmsStreamComponent에다 새로 추가한 gmsStreamComponent1 값을 입력합니다.
  • 6.2 MouseDown Event 처리
    • - 앞에서 했던 것처럼 GmsViewer의 속성에 MouseDown 이벤트를 추가합니다.
  • 6.3 프로그램의 작성
    • x
    • x
  • 6.4 Build와 실행
    • - Sample.m1 파일을 GmsStreamComponent에 정의한 Path에 위치시키고 정상적으로 실행이 되는지 확인합니다.
  • 7. Dynamic Object Creation ( Example.4 )
    • - GmsDraw를 통해서가 아니라, Programming을 통하여 동적으로 Object를 화면상에 생성시키는 방법을 익힙니다.
  • 7.1 Model의 생성
    • - GmsDraw로 빈 모델파일을 생성합니다. ( ‘empty.m1’으로 저장 )
  • 7.2 Project 생성 및 DLL 참조 등록
  • 7.3 GmsViewer, GmsStreamComponent 등록
  • 7.4 생성된 gmsStreamComponent1을 gmsViewer1에 등록
  • 7.5 gmsStreamComponent1의 Path에 모델이 위치한 경로 추가
    • - ex) D:\Programming\NET\exam4\models\
  • 7.6 gmsViewer1의 속성 중에서 ModelName에 “empty”로 입력하고 모델이 제대로 나오는지 확인
    • - 텅 빈 화면이 나오면 제대로 설정된 것입니다.
  • 7.7 프로그램의 작성
    • x
    • x
  • 7.8 Build와 실행
    • - empty.m1의 모델 위에 정상적으로 Object들이 추가됐는지 확인합니다.
  • 8. Context Menu & Property Dialog ( Example.5 )
    • - Example.4의 프로그램을 사용합니다.
  • 8.1 Context Menu
    • - 마우스 오른쪽 버튼 클릭 Event를 통하여 실행시키는 Popup Menu 입니다.
  • 8.2 프로그램의 작성
    • x
    • x
  • 8.3 Build와 실행
    • - 실행화면에서 마우스 오른쪽 버튼을 클릭하면 Context Menu가 띄어지는지 확인합니다.
  • 8.4 Properties Dialog
    • - GmsDraw에서 Object Properties Dialog로 사용하는 Properties Dialog를 화면에 띄어봅니다.
  • 8.5 Dialog 파일 등록
    • - C:\Program Files\SL Corporation\SL-GMS 3.0b\demo.net\DynamicCreation\ 디렉토리에서 PropertiesDialog.cs 파일을 현재 Project 디렉토리로 복사하고, 읽기 전용 속성을 해제합니다.
    • Menu → 프로젝트 → ‘기존 항목 추가’에서 PropertiesDialog.cs 파일을 선택하여 현재 Project로 등록합니다.
  • 8.6 Mouse Event 등록
    • - gmsViewer1 Component 속성에 Mouse Event를 등록합니다.
    • - Mouse Down ( GmsViewer_MouseDown ) : Mouse Pointer가 위치한 Object를 선택
    • - Mouse Up ( GmsViewer_MouseUp ) : Properties Dialog를 띄움
  • 8.7 프로그램의 작성
    • - PropertiesDialog.cs 파일의 namespace를 exam5로 변경합니다.
    • - 앞장의 popupMenuHandler 함수의 주석부분을 제거합니다.
    • x
    • x
    • x
  • 8.8 Build와 실행
    • - 마우스 Left Button Click시 Object Properties Dialog가 띄어지는지 확인합니다.
    • - Context Menu의 기능들을 클릭해보면서 정상작동 되는지 확인합니다.

다양한 C# 컨트롤을 이용한 Programming

  • 1. 모델의 변환 ( Example.6 )
    • - 버튼 클릭을 통하여 화면상의 모델을 바꾸어보고, ScrollBar 기능과 Label Control을 배우게 됩니다.
    • - 맨 처음에 만들었던 sample1.m1 파일과, 새로 만든 간단한 sample2.m1 파일을 사용합니다.
  • 1.1 Model 생성
    • - GmsDraw로 새로운 간단한 모델 파일을 생성합니다. ( sample2.m1 )
  • 1.2 Project 생성 및 DLL 참조 추가
  • 1.3 Project에 GmsViewer, GmsStreamComponent 등록
    • - 이번에는 GmsViewer의 ‘레이아웃’ → ‘Dock’ 속성을 Fill로 하지 않고 Form의 아랫부분에 약간 여유 공간을 둡니다.
  • 1.4 GmsViewer의 속성에서 GmsStreamComponent 항목에 gmsStreamComponent1 등록
  • 1.5 GmsStreamComponent의 속성에서 Path List 지정
    • - ex) D:\Programming\NET\exam6\
  • 1.6 Form Design에 2개의 Button, 1개의 Label, 1개의 HScrollBar를 추가합니다.
    • - ‘Windows Forms’ 탭에 있는 Control들을 추가하면 됩니다.
    • - GmsViewer 아래의 빈 공간에다 적당히 배치합니다.
  • 1.7 HScrollBar의 이벤트 속성에서 ‘Scroll’ 속성에 ‘ScrollBar_scroll’ 이라고 입력합니다.
  • 1.8 프로그램의 작성
    • x
    • - 아래의 두 함수는 Form Design에서 각 Button을 더블 클릭해서 생성된 함수입니다.
    • x
  • 1.9 Build와 실행
    • - 각 Button, ScrollBar, Label이 정상적으로 작동하는지 확인합니다.
  • 2. Zoom & Pan ( Example.7 )
    • - 여기서는 GMS Model에 Zoom 기능과 Pan 기능을 적용하는 방법에 대해서 배웁니다.
    • - 앞 Chapter에서 만든 Example.6 프로그램을 사용합니다.
  • 2.1 Viewer Component에 Zoom, Pan을 위한 버튼과 콤보 박스를 추가합니다.
    • - Button Text : Zoom In, Zoom Out, Zoom Rect, Pan, None
    • - ComboBox Text : Zoom/Pan Reversal Key
    • - ComboBox Name : reversalComboBox
  • 2.2 ComboBox의 SelectionChangeCommitted 이벤트에 ‘reversalComboBox_SelectionChangeCommitted’를 추가합니다.
  • 2.3 ComboBox의 속성 → Items 항목에 None, Alt, Shift, Control 을 추가합니다.
  • 2.4 프로그램의 작성 & 실행
    • x
    • x
    • x
  • 3. Tree & Tab Control
    • - VS2005가 제공하는 Tree, Tab Control을 이용해서 화면상의 모델을 전환하는 방법을 익힙니다.
    • - sample1.m1, sample2.m1 파일을 사용합니다.
  • 3.1 Tab Control ( Example.8 )
  • 3.1.1 Project 생성 및 DLL 참조 추가
  • 3.1.2 Form에 TabControl을 추가
    • - TabControl의 사이즈는 마우스 Drag를 이용하여 Form의 전체영역을 다 차지하도록 잡습니다.
  • 3.1.3 Form에 GmsStreamComponent 등록하고, TabControl의 각 Tab에 GmsViewer 등록
    • - Form Designer에서 TabControl의 각 Tab을 클릭하고 GmsViewer를 각각 등록합니다.
  • 3.1.4 각 Tab의 GmsViewer의 속성에서 GmsStreamComponent 항목에 gmsStreamComponent1 설정합니다.
  • 3.1.5 각 gmsStreamComponent1의 속성에서 Path List 지정
    • - ex) D:\Programming\NET\exam8\
  • 3.1.6 각 GmsViewer 속성에서 ModelName을 설정
    • - gmsViewer1의 ModelName : sample1
    • - gmsViewer2의 ModelName : sample2
  • 3.1.7 Build와 실행
  • 3.2 Tree Control ( Example.9 )
  • 3.2.1 Project 생성 및 DLL 참조 추가
  • 3.2.2 Form에 Tree Control을 추가
    • - Tree Control 추가 시 마우스 Drag로 Form의 왼쪽부분에 길게 배치합니다.
    • - Tree의 속성 중에서 ‘Nodes’를 클릭하고, Root 및 2개의 Child Node를 추가합니다.
    • - Root Node Text : SL-GMS
    • - Child Nodes’ Text : Sample1, Sample2
  • 3.2.3 Form에 GmsViewer 콤포넌트 추가
    • - Tree Control의 오른쪽에 GmsViewer를 배치합니다.
  • 3.2.4 Form에 GmsStreamComponent를 추가하고 Path 설정
    • - ex) D:\Programming\NET\exam9\
  • 3.2.5 Tree Control의 이벤트중 ‘AfterSelect’의 값을 ‘ItemSelected’로 설정
  • 3.2.6 프로그램의 작성
    • x
  • 3.2.7 Build와 실행
  • 4. MDI Programming ( Example.10 )
    • - MDI (Multiple Document Interface) Application 개발방법을 익히고 샘플 프로그램을 만들어봅니다.
    • - Menu Bar를 추가하여 특정 Menu 선택 시 Child Form을 화면에 출력하도록 합니다.
    • - Model 파일을 Open할 수 있는 File Open Dialog를 만들어봅니다.
    • - 기존의 sample1.m1 , sample2.m1 파일을 사용합니다.
  • 4.1 MDI Project 생성
    • - 기존의 방식과 똑같이 Project를 생성합니다.
    • - Form의 size를 800, 600으로 좀 크게 확장합니다.
    • - Form의 속성 중에서 ‘IsMdiContainer’를 False → True로 설정합니다.
  • 4.2 Menu Bar 추가
    • - Windows Forms 도구상자에서 ‘MenuStrip’ Control을 Form에 추가합니다.
    • - File 메뉴 아래로 Sample1 , Sample2 , Open , Exit 메뉴를 추가합니다.
  • 4.3 Child Form을 3개 추가
    • - 메뉴의 ‘프로젝트’ → ‘Windows Form 추가’ 를 통하여 sample1.m1 , sample2.m1 및 새 모델 파일을 불러올 Child Form을 3개 생성합니다.
    • - Form2 , Form3에서 sample1.m1 , sample2.m1 파일을 로딩하도록 Design 합니다.
    • - GmsViewer, GmsStreamComponent 추가 및 Path 설정, ModelName 초기화
    • - Form4의 경우에는 GmsViewer Component 만 로딩시키고 Viewer상의 Model은 초기화 하지 않습니다.
  • 4.4 Menu Bar의 Event 처리
    • -Form1의 Menu Bar에서 각 Menu 클릭 시 발생하는 Event에 대한 처리구문을 Programming 합니다.
    • - Menu Bar의 각 Menu를 더블 클릭하여 자동으로 Function이 생성되도록 합니다.
  • 4.5 프로그램의 작성
  • 4.5.1 Form4.cs 파일에 using 구문을 추가하고, 다음의 함수를 추가합니다.
    • x
  • 4.5.2 Form1.cs 파일을 다음과 같이 프로그래밍 합니다.
    • x
    • x
    • x
  • 4.5.3 Build와 실행
    • - 의도한대로 프로그램이 정상 작동하는지 확인합니다.