VIZCore3D.NET 컨트롤을 활용하여 Microsoft Visual Studio 개발 프로젝트에 적용하는 방법을 설명합니다.
개발환경 구성
Figure 1: 새 프로젝트 만들기
Figure 2 : 참조 추가
Figure 3 : 참조 관리자
Figure 4 : VIZCore3D.NET.dll 파일 선택
Figure 5 : 참조 추가 결과 화면
Figure 6 : Visual Studio 환경설정
Figure 7 : Visual Studio Tool Box(도구상자)
Figure 8 : Panel 컨트롤 추가
Figure 9 : Button 컨트롤 추가
Figure 10 : Button 속성 변경
Figure 11 : [코드 보기] 화면
public partial class Form1 : Form
{
private VIZCore3D.NET.VIZCore3DControl vizcore3d;
public Form1()
{
InitializeComponent();
}
}
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)
{
}
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;
}
}
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();
}
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
{
//모든 개체 선택 해제
}
}
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;
}