본문으로 건너뛰기

Development Environment

VIZCore3D.NET 컨트롤을 활용하여 Microsoft Visual Studio 개발 프로젝트에 적용하는 방법을 설명합니다.

개발환경 구성

  1. Microsoft Visual Studio를 실행합니다.
  2. [새 프로젝트 만들기] 혹은 [Visual C# / Window Forms 앱(.NET Framework)] 생성을 선택합니다.

Figure 1 : 새 프로젝트 만들기

VIZCore3D_NET_DEV_001

프로젝트 이름

VIZCore3D.NET.Demo


  1. 다운로드한 VIZCore3D.NET.dll 파일을 프로젝트에 참조합니다.

Figure 2 : 참조 추가

VIZCore3D_NET_DEV_002

Figure 3 : 참조 관리자

VIZCore3D_NET_DEV_003

Figure 4 : VIZCore3D.NET.dll 파일 선택

VIZCore3D_NET_DEV_004

Figure 5 : 참조 추가 결과 화면

VIZCore3D_NET_DEV_005


  1. [속성:Properties] → [빌드:Build] → [플랫폼 대상(G)] 에 "Any CPU" 및 "32비트 기본 사용(P)"이 Uncheck 되어 있어야 합니다.

Figure 6 : Visual Studio 환경설정

VIZCore3D_NET_DEV_005-1


  1. VIZCore3D.NET 컨트롤을 Form에 추가하기 위해서 컨테이너 컨트롤을 추가합니다. 컨테이너 컨트롤은 Panel, SplitContainer 등을 활용합니다.

Figure 7 : Visual Studio Tool Box(도구상자)

VIZCore3D_NET_DEV_006

Figure 8 : Panel 컨트롤 추가

VIZCore3D_NET_DEV_007

노트

추가된 Panel 컨트롤은 이름을 panelView로 변경하고, Form 사이즈 변경에 따른 크기 자동 조절을 위해 Anchor 속성을 부여합니다. Anchor : Top, Bottom, Left, Right


  1. 기능 수행을 위해 이 예제에서는 버튼을 하나 추가합니다.

Figure 9 : Button 컨트롤 추가

VIZCore3D_NET_DEV_008

Figure 10 : Button 속성 변경

VIZCore3D_NET_DEV_009

노트

추가된 버튼은 이름(Name)을 btnOpen으로 수정하고, 텍스트(Text)는 Open으로 변경합니다.


  1. [코드 보기] 혹은 단축키 [F7]를 입력하여 코드 개발 화면으로 전환합니다.

Figure 11 : 코드 보기

VIZCore3D_NET_DEV_010


  1. 참조된 VIZCore3D.NET.dll 의 변수를 선언 합니다.
public partial class Form1 : Form
{
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

public Form1()
{
InitializeComponent();
}
}

  1. VIZCore3D.NET 컨트롤의 초기화 수행 코드를 추가합니다.

모듈 초기화, 객체 생성 및 필수 이벤트를 정의합니다.

public Form1()
{
InitializeComponent();

// Initialize VIZCore3D.NET
VIZCore3D.NET.ModuleInitializer.Run();

// Construction
vizcore3d = new VIZCore3DControl();
vizcore3d.Dock = DockStyle.Fill;
panelView.Controls.Add(vizcore3d);

// 필수 Event
vizcore3d.OnInitializedVIZCore3D += VIZCore3D_OnInitializedVIZCore3D;
}

private void VIZCore3D_OnInitializedVIZCore3D(object sender, EventArgs e)
{
}
주의

모듈 초기화(VIZCore3D.NET.ModuleInitializer.Run()) 단계에서는 VIZCore3D.NET 컨트롤이 실행되는 환경에 따라, 필요한 Unmanaged(C/C++/MFC) Library를 실행 경로에 생성합니다.

주의

필수 이벤트(OnInitializedVIZCore3D)는 VIZCore3D.NET 객체의 정상 초기화 완료 후, 발생되는 이벤트이며, 해당 이벤트 처리기에서 라이선스 인증을 수행하도록 합니다.


  1. 라이선스 인증 코드 추가
private void VIZCore3D_OnInitializedVIZCore3D(object sender, EventArgs e)
{
// ================================================================
// Example
// ================================================================
// 라이선스 파일을 통한 인증
//vizcore3d.License.LicenseFile("C:\\Temp\\VIZCore3D.NET.lic");

// 라이선스 서버를 통한 인증
//vizcore3d.License.LicenseServer("127.0.0.1", 8901);
//vizcore3d.License.LicenseServer("127.0.0.1", 8901, Data.PRODUCTS.AUTO);
//vizcore3d.License.LicenseServer("127.0.0.1", 8901, Data.PRODUCTS.VIZZARD_MANAGER);
//vizcore3d.License.LicenseServer("127.0.0.1", 8901, Data.PRODUCTS.VIZZARD_STANDARD);
//vizcore3d.License.LicenseServer("127.0.0.1", 8901, Data.PRODUCTS.VIZCORE3D_MANAGER);
//vizcore3d.License.LicenseServer("127.0.0.1", 8901, Data.PRODUCTS.VIZCORE3D_STANDARD);

// ================================================================
// CODE
// ================================================================
VIZCore3D.NET.Data.LicenseResults result = vizcore3d.License.LicenseFile("C:\\Temp\\VIZCore3D.NET.lic");
if (result != Data.LicenseResults.SUCCESS)
{
MessageBox.Show(string.Format("LICENSE CODE : {0}", result.ToString()), "VIZCore3D.NET", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
노트

라이선스 인증은 파일 혹은 서버를 통한 인증 기능을 지원합니다.


  1. 필요 시, VIZCore3D.NET 컨트롤의 기본 설정을 변경 할 수 있으며, 아래의 예제와 같이 개별 옵션을 변경할 수 있습니다.
private void VIZCore3D_OnInitializedVIZCore3D(object sender, EventArgs e)
{
InitializeVIZCore3D();
}

private void InitializeVIZCore3D()
{
// ================================================================
// 모델 열기 시, 3D 화면 Rendering 차단
// ================================================================
vizcore3d.BeginUpdate();

// ================================================================
// 설정 - 기본
// ================================================================
#region 설정 - 기본
// 모델 자동 언로드 (파일 노드 언체크 시, 언로드)
vizcore3d.Model.UncheckToUnload = true;
// 모델 열기 시, Edge 정보 로드 활성화
vizcore3d.Model.LoadEdgeData = true;
// 모델 조회 시, 하드웨어 가속
vizcore3d.View.EnableHardwareAcceleration = true;
// 모델 열기 시, 스트럭처 병합 설정
vizcore3d.Model.OpenMergeStructureMode = Data.MergeStructureModes.NONE;
// 모델 저장 시, 스트럭처 병합 설정
vizcore3d.Model.SaveMergeStructureMode = Data.MergeStructureModes.NONE;
// 실린더 원형 품질 개수 : Nomal(12~36), Small(6~36)
vizcore3d.Model.ReadNormalCylinderSide = 12;
vizcore3d.Model.ReadSmallCylinderSide = 6;
// 보이는 모델만 저장
// VIZXML to VIZ 옵션
vizcore3d.Model.VIZXMLtoVIZOption = Data.ExportVIZXMLToVIZOptions.LOAD_UNLOADED_NODE;
// 선택 가능 개체 : 전체, 불투명한 개체
vizcore3d.View.SelectionObject3DType = Data.SelectionObject3DTypes.ALL;
// 개체 선택 유형 : 색상, 경계로 선택 (개체), 경계로 선택 (전체)
vizcore3d.View.SelectionMode = Data.Object3DSelectionOptions.HIGHLIGHT_COLOR;
// 개체 선택 색상
vizcore3d.View.SelectionColor = Color.Red;
// PreSelect 기능 활성화
vizcore3d.View.PreSelect.Enable = true;
// PreSelect 하이라이트 색상 설정
vizcore3d.View.PreSelect.HighlightColor = System.Drawing.Color.Lime;
// PreSelect Label 유형 지정
vizcore3d.View.PreSelect.Label = VIZCore3D.NET.Data.PreSelectStyle.LabelKind.HIERACHY_TOP_DOWN;
// PreSelect Label Font 설정
vizcore3d.View.PreSelect.LabelFont = new System.Drawing.Font("Arial", 10.0f);
#endregion

// ================================================================
// 설정 - 보기
// ================================================================
#region 설정 - 보기
// 자동 애니메이션 : 박스줌, 개체로 비행 등 기능에서 애니메이션 활성화/비활성화
vizcore3d.View.EnableAnimation = true;
// 자동화면맞춤
vizcore3d.View.EnableAutoFit = false;
// 연속회전모드
vizcore3d.View.EnableInertiaRotate = false;
// 확대/축소 비율 : 5.0f ~ 50.0f
vizcore3d.View.ZoomRatio = 30.0f;
// 회전각도
vizcore3d.View.RotationAngle = 90.0f;
// 회전 축
vizcore3d.View.RotationAxis = Data.Axis.X;
#endregion

// ================================================================
// 설정 - 탐색
// ================================================================
#region 설정 - 탐색
// Z축 고정
vizcore3d.Walkthrough.LockZAxis = true;
// 선속도 : m/s
vizcore3d.Walkthrough.Speed = 2.0f;
// 각속도
vizcore3d.Walkthrough.AngularSpeed = 30.0f;
// 높이
vizcore3d.Walkthrough.AvatarHeight = 1800.0f;
// 반지름
vizcore3d.Walkthrough.AvatarCollisionRadius = 400.0f;
// 숙임높이
vizcore3d.Walkthrough.AvatarBowWalkHeight = 1300.0f;
// 충돌
vizcore3d.Walkthrough.UseAvatarCollision = false;
// 중력
vizcore3d.Walkthrough.UseAvatarGravity = false;
// 숙임
vizcore3d.Walkthrough.UseAvatarBowWalk = false;
// 모델
vizcore3d.Walkthrough.AvatarModel = (int)Data.AvatarModels.MAN1;
// 자동줌
vizcore3d.Walkthrough.EnableAvatarAutoZoom = false;
// 충돌상자보기
vizcore3d.Walkthrough.ShowAvatarCollisionCylinder = false;
#endregion

// ================================================================
// 설정 - 조작
// ================================================================
// 시야각
vizcore3d.View.FOV = 60.0f;
// 광원 세기
vizcore3d.View.SpecularGamma = 30.0f;
// 모서리 굵기
vizcore3d.View.EdgeWidthRatio = 0.0f;
// X-Ray 모델 조회 시, 개체 색상 - 선택색상, 모델색상
vizcore3d.View.XRay.ColorType = Data.XRayColorTypes.SELECTION_COLOR;
// 배경유형
//vizcore3d.View.BackgroundMode = Data.BackgroundModes.COLOR_ONE;
// 배경색1
//vizcore3d.View.BackgroundColor1 = Color.Gray;
// 배경색2
//vizcore3d.View.BackgroundColor2 = Color.Gray;

// ================================================================
// 설정 - 노트
// ================================================================

// ================================================================
// 설정 - 측정
// ================================================================

// ================================================================
// 설정 - 단면
// ================================================================
// 단면 좌표간격으로 이동
vizcore3d.Section.MoveSectionByFrameGrid = true;

// ================================================================
// 설정 - 간섭검사
// ================================================================
// 다중간섭검사
vizcore3d.Clash.EnableMultiThread = true;

// ================================================================
// 설정 - 프레임(SHIP GRID)
// ================================================================
#region 설정 - 프레임
// 프레임 평면 설정
vizcore3d.Frame.XYPlane = true;
vizcore3d.Frame.YZPlane = true;
vizcore3d.Frame.ZXPlane = true;
vizcore3d.Frame.PlanLine = true;
vizcore3d.Frame.SectionLine = true;
vizcore3d.Frame.ElevationLine = true;
// 좌표값 표기
vizcore3d.Frame.ShowNumber = true;
// 모델 앞에 표기
vizcore3d.Frame.BringToFront = false;
// Frame(좌표계, SHIP GRID) 색상
vizcore3d.Frame.ForeColor = Color.Black;
// 홀수번째 표시
vizcore3d.Frame.ShowOddNumber = true;
// 짝수번째 표시
vizcore3d.Frame.ShowEvenNumber = true;
// 단면상자에 자동 맞춤
vizcore3d.Frame.AutoFitSectionBox = true;
#endregion

// ================================================================
// 설정 - 툴바
// ================================================================
vizcore3d.ToolbarNote.Visible = false;
vizcore3d.ToolbarMeasure.Visible = false;
vizcore3d.ToolbarSection.Visible = false;
vizcore3d.ToolbarClash.Visible = false;
vizcore3d.ToolbarAnimation.Visible = false;
vizcore3d.ToolbarSimulation.Visible = false;

// ================================================================
// 설정 - 상태바
// ================================================================
vizcore3d.Statusbar.Visible = true;

// ================================================================
// 모델 열기 시, 3D 화면 Rendering 재시작
// ================================================================
vizcore3d.EndUpdate();
}

  1. 개체 선택에 대한 이벤트를 처리하고자 하는 경우, 아래와 같이 이벤트 처리기를 추가할 수 있습니다.
private void VIZCore3D_OnInitializedVIZCore3D(object sender, EventArgs e)
{
InitializeVIZCore3DEvent();
}

private void InitializeVIZCore3DEvent()
{
vizcore3d.Object3D.OnObject3DSelected += Object3D_OnObject3DSelected;
}

private void Object3D_OnObject3DSelected(object sender, Event.EventManager.Object3DSelectedEventArgs e)
{
if(e.Node.Count > 0)
{
// 선택된 개체가 있음
//MessageBox.Show(e.NodeIndex.Count.ToString());
}
else
{
//모든 개체 선택 해제
}
}

  1. 버튼(btnOpen) 클릭 이벤트 처리를 추가하여, 아래와 같이 모델 열기를 수행 할 수 있습니다.
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = vizcore3d.Model.OpenFilter;
if (dlg.ShowDialog() != DialogResult.OK) return;

vizcore3d.Model.OnModelProgressChangedEvent += Model_OnModelProgressChangedEvent;
vizcore3d.Model.Open(dlg.FileName);
vizcore3d.Model.OnModelProgressChangedEvent -= Model_OnModelProgressChangedEvent;
}

private void Model_OnModelProgressChangedEvent(object sender, VIZCore3D.NET.Event.EventManager.ModelProgressEventArgs e)
{
//e.Progress;
}