본문으로 건너뛰기

V.2.6.22.203

Major Features

  • 노트(3D/2D/SURFACE) 텍스트 Context Menu에서 수정하는 기능 추가

  • 노드 복사 기능 추가

  • 현재 모델의 Max 노드 아이디 값 반환 API 추가

  • Body 유형의 노드를 모델 트리에서 조회 여부 설정 API 추가

  • 뷰 영역에 포함된 개체 선택 API 추가

  • 뷰 영역에 포함된 개체 반환 API 추가

  • 뷰 화면 기준축 회전 API 추가

  • 키보드 숫자패드로 카메라 이동 기능 단축키 추가

    • ISO+ : Num5
    • X+ : Num3
    • X- : Num1
    • Y+ : Num4
    • Y- : Num6
    • Z+ : Num8
    • Z- : Num2
  • 복수개의 노드를 이동하는 기능 추가

  • 모델 파일(*.viz) 단위 공간검색 속도 개선

  • 프레임(SHIPGRID) 조회 상태에서 모델 삭제 시, 프레임 렌더링이 갱신 안되는 문제 수정

  • 프레임(SHIPGRID) 강제로 다시 그리기 API 추가

  • UDA (User-Defined Attribute) 제거 기능 추가

  • 리뷰 정보(노트, 측정, 사용자뷰[관측점]) JSON (JavaScript Object Notation) 형식으로 내보내기 API 추가

  • 3D 모델(*.viz)을 OBJ 형식으로 내보내기 내장 다이얼로그 실행 API 추가

  • Body 노드의 정점 정보 반환 API 추가

  • Body 노드의 정점 정보 변경 API 추가

  • 노드의 정점 정보 반환 API 추가

  • 노드의 정점별 색상 반환 및 설정 API 추가

  • 리뷰정보(노트, 측정)가 화면에 수 백개 이상 표시되는 상태에서 렌더링 속도 개선

  • 모델트리 보이기/숨기기 API 변경

  • VIZ 파일의 일부 노드를 개별 파일로 내보내기 API 추가

  • 모델 간소화 기능 내장 다이얼로그 추가

  • 신규로 생성한 노드에 VIZ 파일 혹은 노드경로를 설정하는 API 추가

  • Indexed Triangle Set 기반 Body 노드 및 Mesh 생성 API 추가

  • Vertex3D Constructor Overloading

  • 복수개의 노드를 생성하는 API 추가

  • 화면 표시 텍스트 그림자 기능 활성화/비활성화 옵션 API 추가

  • 영역으로 개체 선택 시, 카메라에서 가까운 모델만 선택 옵션 추가

  • 지정된 노드간 최단거리 반환 API 추가

  • 조회중인 노트의 스크린 좌표계 기준 위치 정보 갱신 API 추가

  • 노트정보의 스크린 좌표계 기준 위치 정보 반환 속성 추가

  • 노트정보의 스크린 좌표계 기반 크기 정보 속성 추가

  • 화면에 겹쳐져 표시되는 노트 검색 API 추가

  • 노드의 정점정보를 화면 좌표계 형식으로 반환 API 추가

  • 사용자 정의형 마우스 이벤트 정보 설정 API 추가

  • StreamData Constructor Overloading

  • 모델 열기 시, StreamData 형식 지원

  • 투영 면적 기능 API 추가

  • Xray 모드에서 커스텀 선택 상태 항목 반환 API 추가


Full List

Full List of Issues Covering all Changes in this Release

ModuleSummaryCategory
NoteManager노트(3D/2D/SURFACE) 텍스트 Context Menu에서 수정하는 기능 추가
NoteManager.EditNoteTextDialog(NoteItem)
NoteManager.EditNoteText(Int32, String)
NoteItem.UpdateText(String)
New Feature
StructureManager
Object3DManager
노드 복사 기능 추가
StructureManager.CopyNodes
Object3DManager.CopyNodes
New Feature
StructureManager현재 모델의 Max 노드 아이디 값 반환 API 추가
StructureManager.GetMaxId()
New Feature
ModelManagerBody 유형의 노드를 모델 트리에서 조회 여부 설정 API 추가
ModelManager.EnableBody
New Feature
Object3DManager뷰 영역에 포함된 개체 선택 API 추가
Object3DManager.Select(Int32, Int32, Int32, Int32, Boolean)
New Feature
Object3DManager뷰 영역에 포함된 개체 반환 API 추가
Object3DManager.FromScreen
New Feature
ViewManager뷰 화면 기준축 회전 API 추가
ViewManager.RotateCameraByScreenAxis(Single, Single, Single,)
New Feature
StructureManager복수개의 노드를 이동하는 기능 API 추가
StructureManager.MoveNodes
New Feature
SpaceSearchManager모델 파일(*.viz) 단위 공간검색 속도 개선
SpaceSearchManager.Search
GitHub (Example)
Enhancement
FrameManager프레임(SHIPGRID) 조회 상태에서 모델 삭제 시, 프레임 렌더링이 갱신 안되는 문제 수정Bug
FrameManager프레임(SHIPGRID) 강제로 다시 그리기 API 추가
FrameManager.ReDraw()
New Feature
UDAManagerUDA (User-Defined Attribute) 제거 API 추가
UDAManager.Remove(String)
UDAManager.Clear()
New Feature
UserViewManager사용자뷰(관측점) JSON (JavaScript Object Notation) 형식으로 내보내기 API 추가
UserViewManager.ExportJson(String)
New Feature
NoteManager노트정보 JSON (JavaScript Object Notation) 형식으로 내보내기 API 추가
NoteManager.ExportJson(String)
New Feature
MeasureManager측정정보 JSON (JavaScript Object Notation) 형식으로 내보내기 API 추가
MeasureManager.ExportJson(String)
New Feature
ModelManager3D 모델(*.viz)을 OBJ 형식으로 내보내기 내장 다이얼로그 실행 API 추가
ModelManager.ExportObjDialog()
New Feature
MeshEditManagerBody 노드의 정점 정보 반환 API 추가
MeshEditManager.GetBodyVertices(Int32)
New Feature
MeshEditManagerBody 노드의 정점 정보 변경 API 추가
MeshEditManager.SetBodyVertices(Int32, List<BodyVertexData>, Boolean)
New Feature
MeshEditManager노드의 정점 정보 반환 API 추가
MeshEditManager.GetNodeVertices(Int32)
New Feature
VertexColorManager노드의 정점별 색상 반환 및 설정 API 추가
VertexColorManager.GetColor(Int32)
VertexColorManager.SetColor
New Feature
VIZCore3DControl모델트리 보이기/숨기기 API 변경
• 변경: VIZCore3DControl.ModelTreeVisible
• 기존: VIZCore3DControl.ShowModelTree
Enhancement
ModelManagerVIZ 파일의 일부 노드를 개별 파일로 내보내기 API 추가
ModelManager.ExportNodes
New Feature
ModelManager모델 간소화 기능 내장 다이얼로그 조회 API 추가
ModelManager.ShowSimplifyModelDialog()
New Feature
StructureManager신규로 생성한 노드에 VIZ 파일 혹은 노드경로를 설정하는 API 추가
StructureManager.LinkExternalFile
StructureManager.LinkExternalNode
New Feature
MeshEditManagerIndexed Triangle Set 기반 Body 노드 및 Mesh 생성 API 추가
MeshEditManager.CreateBodyWithIndexedTriangleSet(Int32, String, List<Vertex3D>, List<TriangleIndex>, Color)
New Feature
Vertex3DVertex3D Constructor Overloading
Vertex3D.Vertex3D(String, String)
New Feature
MeshEditManager복수개의 노드를 생성하는 API 추가
MeshEditManager.CreateNodes
New Feature
MessageManager화면 표시 텍스트 그림자 기능 활성화/비활성화 옵션 API 추가
MessageManager.Show(MessageId, String, Int32, Int32, FontSize, Color, Boolean)
New Feature
ViewManager영역으로 개체 선택 시, 카메라에서 가까운 모델만 선택 옵션 API 추가
ViewManager.EnableBoxSelectionFrontObjectOnly
New Feature
GeometryUtilityManager지정된 노드간 최단거리 반환 API 추가
GeometryUtilityManager.GetShortestDistanceByPartToPart
New Feature
NoteManager조회중인 노트의 스크린 좌표계 기준 위치 정보 갱신 API 추가
NoteManager.UpdateScreenDisplaySize()
New Feature
NoteItem노트정보의 스크린 좌표계 기준 위치 정보 반환 속성 추가
NoteItem.ScreenPosition
New Feature
NoteItem노트정보의 스크린 좌표계 기반 크기 정보 속성 추가
NoteItem.ScreenDisplaySize
New Feature
NoteManager화면에 겹쳐져 표시되는 노트 검색 API 추가
NoteManager.FindOverlappingItems
New Feature
MeshEditManager노드의 정점정보를 화면 좌표계 형식으로 반환 API 추가
MeshEditManager.GetScreenCoordinatesInVertex(Int32, Boolean)
New Feature
ViewManager사용자 정의형 마우스 이벤트 정보 설정 API 추가
ViewManager.SetCustomMouseWheel(Int32, Int32, Int32)
ViewManager.SetCustomMouseDown(MouseButtons, Int32, Int32)
ViewManager.SetCustomMouseUp(MouseButtons, Int32, Int32)
ViewManager.SetCustomMouseMove(Int32, Int32)
ViewManager.SetCustomMouseDoubleClick(MouseButtons, Int32, Int32)
New Feature
StreamDataStreamData Constructor Overloading
StreamData.StreamData(String)
New Feature
ModelManager모델 열기 시, StreamData 형식 지원
ModelManager.OpenStream(StreamData)
New Feature
MeasureManager투영 면적 기능 API 추가
MeasureManager.AddProjectedArea
MeasureManager.AddProjectedAreaByPickSurface()
MeasureManager.ShowProjectedAreaLabel(Boolean, Boolean, Boolean)
MeasureManager.GetProjectedAreaLabelVisibleStatus(Int32)
New Feature
XRayManagerXray 모드에서 커스텀 선택 상태 항목 반환 API 추가
XRayManager.GetSelectedNode()
XRayManager.GetSelectedIndex()
New Feature

Resource

Figure 1 : 노트(3D/2D/SURFACE) 텍스트 Context Menu에서 수정

RELEASE_2.6.001.png

Figure 2 : Body 유형의 노드를 모델 트리에서 조회

RELEASE_2.6.002.png

Figure 3 : 키보드 숫자패드로 카메라 이동 기능 단축키

RELEASE_2.6.003.png

Figure 4 : 복수개의 노드를 이동하는 기능

RELEASE_2.6.004.png

Figure 5 : 모델 간소화 기능 내장 다이얼로그 화면

RELEASE_2.6.005.png

Figure 6 : 신규로 생성한 노드에 VIZ 파일 혹은 노드경로를 설정

RELEASE_2.6.006.png

Figure 7 : UDA(User-Defined Attribute) 삭제 및 전체 초기화

RELEASE_2.6.007.png

Figure 8 : 영역으로 개체 선택 시, 카메라에서 가까운 모델만 선택 옵션

RELEASE_2.6.008.png

Figure 9 : 투영 면적 측정 기능

RELEASE_2.6.009.png

Sample

노트(3D/2D/SURFACE) 텍스트 수정 예제 코드

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
List<Data.NoteItem> notes = vizcore3d.Review.Note.GetSelectedItems();
if (notes.Count == 0) return;

bool result = vizcore3d.Review.Note.EditNoteTextDialog(notes[0]);
}

노드 복사 예제 코드

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
List<VIZCore3D.NET.Data.Node> selectedItems =
vizcore3d.Object3D.FromFilter(VIZCore3D.NET.Data.Object3dFilter.SELECTED_PART);

Dictionary<int, int> items = vizcore3d.Object3D.CopyNodes(selectedItems);

if (items.Count == 0)
{
MessageBox.Show("Node is null.", "VIZCore3D.NET", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

foreach (KeyValuePair<int, int> item in items)
{
VIZCore3D.NET.Data.Node source = vizcore3d.Object3D.FromIndex(item.Key);
VIZCore3D.NET.Data.Node target = vizcore3d.Object3D.FromIndex(item.Value);

MessageBox.Show(
string.Format(
"{0} - {1}, {2} / {3}"
, item.Key
, item.Value
, source.NodeName
, target.NodeName
)
, "VIZCore3D.NET"
, MessageBoxButtons.OK
, MessageBoxIcon.Information
);
}
}

현재 모델의 Max 노드 아이디 값 반환 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
int id = vizcore3d.Structure.GetMaxId();
int parent = vizcore3d.Object3D.FromFilter(VIZCore3D.NET.Data.Object3dFilter.SELECTED_TOP)[0].ID;

List<VIZCore3D.NET.Data.NewNodeItem> items = new List<VIZCore3D.NET.Data.NewNodeItem>();

for (int i = 0; i < 100; i++)
{
VIZCore3D.NET.Data.NewNodeItem item = new VIZCore3D.NET.Data.NewNodeItem();

item.ParentId = parent;
item.ID = ++id;
item.Kind = Data.NodeKind.PART;
item.Name = string.Format("NAME_{0}", item.ID);

items.Add(item);
}

vizcore3d.Structure.CreateNodes(items);
}

Body 유형의 노드를 모델 트리에서 조회 전환 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
vizcore3d.Model.EnableBody = !vizcore3d.Model.EnableBody;
}

뷰 영역에 포함된 개체 선택 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
System.Drawing.Size size = vizcore3d.View.Size;

vizcore3d.Object3D.Select(
0 /* X1 */
, 0 /* Y1 */
, size.Width /* X2 */
, size.Height /* Y2 */
, true /* Full Contain */
);
}

뷰 영역에 포함된 개체 반환 API 예제 코드

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
System.Drawing.Size size = vizcore3d.View.Size;

List<VIZCore3D.NET.Data.Node> nodes
= vizcore3d.Object3D.FromScreen(
0 /* X1 */
, 0 /* Y1 */
, size.Width /* X2 */
, size.Height /* Y2 */
, true /* Full Contain */
, VIZCore3D.NET.Data.LeafNodeKind.PART
);
}

프레임(SHIPGRID) 강제로 다시 그리기 API 예제 코드

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
// ...

vizcore3d.Frame.ReDraw();

// ...
}

UDA (User-Defined Attribute) 특정 키 제거 기능 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
List<string> keys = vizcore3d.Object3D.UDA.Keys;

if (keys.Contains("OWNER") == false) return;

vizcore3d.Object3D.UDA.Remove("OWNER");
}

UDA (User-Defined Attribute) 전체 제거 기능 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
List<string> keys = vizcore3d.Object3D.UDA.Keys;

if (keys.Count == 0) return;

vizcore3d.Object3D.UDA.Clear();

vizcore3d.Model.SaveAsVIZ("C:\\Export\\Model.viz");
}

3D 모델(*.viz)을 OBJ 형식으로 내보내기 내장 다이얼로그 실행 API

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
if (vizcore3d.Model.IsOpen() == false) return;

vizcore3d.Model.ExportObjDialog();
}

Body 노드의 정점 정보 반환 및 변경 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
vizcore3d.BeginUpdate();
List<int> bodies = new List<int>();
bodies.Add(1234);

for( int j = 0; j < bodies.Count; j++)
{
int bodyIndex = bodies[j];
//Get Vertices Info
List<VIZCore3D.NET.Data.BodyVertexData> safeData = vizcore3d.MeshEdit.GetBodyVertices(bodyIndex);

// Vertex Postition Move
for(int i = 0; i < safeData.Count; i++)
{
safeData[i].Vertex.X += 1000;
}

vizcore3d.MeshEdit.SetBodyVertices(
bodyIndex /* body index */
, safeData /* Vertex Info */
, false); /* RebuildData */
}

vizcore3d.Structure.RebuildData();
vizcore3d.EndUpdate();
}

노드의 정점별 색상 반환 및 설정 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
List<VIZCore3D.NET.Data.Node> nodes
= vizcore3d.Object3D.FromFilter(VIZCore3D.NET.Data.Object3dFilter.SELECTED_TOP);

if (nodes.Count == 0) return;

if (nodes[0].Kind != Data.NodeKind.PART) return;

int vertexCount = vizcore3d.View.VertexColor.GetColor(nodes[0].Index).Count;
List<System.Drawing.Color> vertexColor = new List<System.Drawing.Color>();

VIZCore3D.NET.Utility.ColorBrewerPalettesHelper palettes
= new VIZCore3D.NET.Utility.ColorBrewerPalettesHelper();
palettes.SetPalette(VIZCore3D.NET.Utility.ColorBrewerPalettesHelper.Kind.Sequential_BuPu);

for (int i = 0; i < vertexCount; i++)
{
vertexColor.Add(palettes.GetPaletteColor(i));
}

vizcore3d.View.VertexColor.SetColor(nodes[0].Index, vertexColor);
vizcore3d.View.VertexColor.Enable = true;
}

모델트리 보이기/숨기기 API

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
if (vizcore3d.ModelTreeVisible == true)
vizcore3d.ModelTreeVisible = false;
else
vizcore3d.ModelTreeVisible = true;
}

VIZ 파일의 일부 노드를 개별 파일로 내보내기 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
// INPUT
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "VIZ File (*.viz)|*.viz";
if (dlg.ShowDialog() != DialogResult.OK) return;

// OUTPUT DIR.
FolderBrowserDialog output = new FolderBrowserDialog();
output.SelectedPath = System.IO.Path.GetDirectoryName(dlg.FileName);
if (output.ShowDialog() != DialogResult.OK) return;

List<int> id = new List<int>();

// Load Structure
VIZCore3D.NET.ShdCore.StructureManager stru =
new VIZCore3D.NET.ShdCore.StructureManager(dlg.FileName);

// All Node
List<VIZCore3D.NET.ShdCore.ModelTreeNode> nodes = stru.GetStructureNodeList();

// Find Node
foreach (VIZCore3D.NET.ShdCore.ModelTreeNode node in nodes)
{
if (node.NodeName.Contains("PIPE") == false) continue;
id.Add(Convert.ToInt32(node.EntityId));
}

if (id.Count == 0) return;

// Export
vizcore3d.Model.ExportNodes(
dlg.FileName /* INPUT (VIZ) */
, output.SelectedPath /* OUTPUT DIR. */
, id /* NODE ID */
);
}

모델 간소화 기능 내장 다이얼로그 실행 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
vizcore3d.Model.ShowSimplifyModelDialog();
}

Indexed Triangle Set 기반 Body 노드 및 Mesh 생성 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
List<VIZCore3D.NET.Data.Vertex3D> vertex = new List<VIZCore3D.NET.Data.Vertex3D>();
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10038.2,625.271,78.4744", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10747.5,756.496,61.8669", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10760.3,1173.48,95.4053", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10053.5,1041.09,120.353", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10776.2,1589.36,139.724", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10739.2,338.476,43.4698", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11458.6,894.856,54.662", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11468.3,1310.5,77.7027", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11481.7,1725.16,113.435", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10026.7,208.265,49.24", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10071.5,1455.76,171.596", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10794.8,2004.11,192.801", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11497.9,2138.79,158.744", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11454.8,478.525,51.4998", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12172.1,1042.43,61.3912", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12177.6,1453.5,70.0816", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12187.9,1863.81,95.5308", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12201.5,2273.19,131.999", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10091.8,1869.28,230.621", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10814.7,2404.83,251.046", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11515.5,2527.9,209.065", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12216.3,2650.99,173.324", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12174.3,631.647,78.2015", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12889.2,1200.86,87.6251", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12888.9,1603.23,77.2856", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12895.1,2005.58,88.8058", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12905.4,2407.21,114.339", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12917.4,2774.57,146.338", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10113.9,2281.79,295.9", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10836.2,2804.71,314.347", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11534.8,2916.1,265.425", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12233,3027.94,221.182", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12931.4,3141.18,185.339", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12898.1,800.474,127.375", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13609.5,1371.06,137.372", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13602.9,1760.09,105.93", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13603.6,2150.42,99.1407", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13609.6,2540.63,110.399", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13618.1,2899.07,130.799", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13629.1,3256.87,159.586", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10137.2,2693.52,365.472", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10858.7,3203.92,381.421", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11555.5,3303.53,326.428", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12251.3,3404.1,274.378", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12947.1,3507.09,229.887", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13641.9,3614.06,194.596", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13625.7,986.4,201.333", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14331.3,1551.23,208.892", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14318.2,1922.86,155.707", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14313,2297.56,129.368", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14313.9,2673.22,123.582", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14318.6,3024.71,131.266", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14326,3375.83,148.117", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14335.7,3726.45,172.714", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10161.6,3104.58,438.571", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10882.1,3602.59,451.315", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("11577,3690.42,390.45", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12270.9,3779.56,331.923", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("12964.2,3872.33,279.206", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("13656.4,3970.58,235.326", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14347.3,4076.5,203.753", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("14354.7,1186.9,296.893", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15052.5,1737.13,297.751", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15033.4,2088.98,224.861", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15022.4,2445.77,179.06", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15017.8,2804.85,155.099", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15018.1,3151.52,148.05", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15021.7,3498.23,152.145", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15028.1,3844.67,165.523", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15036.4,4190.74,185.632", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15081.4,1394.58,403.978", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15770.2,1922.95,393.072", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15746.5,2255.1,304.961", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15730.5,2593.56,242.862", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15720.9,2935.57,202.418", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15716.5,3279.3,179.318", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15716.1,3623.71,169.899", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15718.7,3968.26,170.533", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("10186.5,3515.33,513.253", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15723.8,4312.66,179.583", ","));
vertex.Add(new VIZCore3D.NET.Data.Vertex3D("15802.6,1600.73,510.322", ","));

List<VIZCore3D.NET.Data.TriangleIndex> triangleIndex = new List<VIZCore3D.NET.Data.TriangleIndex>();
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(0, 1, 2));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(3, 2, 4));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(1, 5, 6));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(1, 2, 7));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(1, 6, 7));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(2, 4, 8));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(2, 7, 8));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(9, 0, 1));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(0, 3, 2));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(9, 1, 5));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(10, 4, 11));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(4, 11, 12));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(4, 8, 12));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(6, 13, 14));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(6, 7, 15));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(6, 14, 15));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(7, 8, 16));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(7, 15, 16));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(8, 12, 17));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(8, 16, 17));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(3, 10, 4));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(5, 6, 13));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(18, 11, 19));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(11, 19, 20));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(11, 12, 20));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(12, 20, 21));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(12, 17, 21));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(14, 22, 23));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(14, 15, 24));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(14, 23, 24));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(15, 16, 25));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(15, 24, 25));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(16, 17, 26));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(16, 25, 26));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(17, 21, 27));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(17, 26, 27));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(10, 18, 11));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(13, 14, 22));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(28, 19, 29));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(19, 29, 30));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(19, 20, 30));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(20, 30, 31));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(20, 21, 31));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(21, 31, 32));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(21, 27, 32));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(23, 33, 34));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(23, 24, 35));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(23, 34, 35));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(24, 25, 36));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(24, 35, 36));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(25, 26, 37));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(25, 36, 37));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(26, 27, 38));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(26, 37, 38));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(27, 32, 39));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(27, 38, 39));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(18, 28, 19));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(22, 23, 33));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(40, 29, 41));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(29, 41, 42));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(29, 30, 42));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(30, 42, 43));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(30, 31, 43));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(31, 43, 44));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(31, 32, 44));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(32, 44, 45));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(32, 39, 45));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(34, 46, 47));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(34, 35, 48));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(34, 47, 48));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(35, 36, 49));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(35, 48, 49));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(36, 37, 50));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(36, 49, 50));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(37, 38, 51));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(37, 50, 51));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(38, 39, 52));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(38, 51, 52));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(39, 45, 53));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(39, 52, 53));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(28, 40, 29));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(33, 34, 46));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(54, 41, 55));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(41, 42, 56));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(42, 43, 57));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(43, 44, 58));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(44, 45, 59));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(45, 53, 60));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(47, 61, 62));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(47, 48, 63));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(47, 62, 63));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(48, 49, 64));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(48, 63, 64));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(49, 50, 65));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(49, 64, 65));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(50, 51, 66));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(50, 65, 66));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(51, 52, 67));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(51, 66, 67));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(52, 53, 68));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(52, 67, 68));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(53, 68, 69));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(40, 54, 41));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(41, 55, 56));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(42, 56, 57));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(43, 57, 58));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(44, 58, 59));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(45, 59, 60));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(46, 47, 61));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(53, 60, 69));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(62, 70, 71));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(62, 63, 72));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(63, 64, 73));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(64, 65, 74));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(65, 66, 75));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(66, 67, 76));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(67, 68, 77));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(54, 78, 55));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(61, 62, 70));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(68, 69, 79));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(62, 71, 72));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(63, 72, 73));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(64, 73, 74));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(65, 74, 75));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(66, 75, 76));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(67, 76, 77));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(68, 77, 79));
triangleIndex.Add(new VIZCore3D.NET.Data.TriangleIndex(70, 71, 80));

vizcore3d.BeginUpdate();

int rootIndex = vizcore3d.Model.NewEmptyModel("MODEL");

string assemblyName = "ASSEMBLY";
VIZCore3D.NET.Data.Node assemblyNode =
vizcore3d.Structure.CreateNode(
rootIndex /* Parent Node Index */
, VIZCore3D.NET.Data.NodeKind.ASSEMBLY /* Node Kind */
, assemblyName /* Node Name */
);

string partName = "PART";
VIZCore3D.NET.Data.Node partNode =
vizcore3d.Structure.CreateNode(
assemblyNode.Index /* Parent Node Index */
, VIZCore3D.NET.Data.NodeKind.PART /* Node Kind */
, partName /* Node Name */
);

vizcore3d.MeshEdit.CreateBodyWithIndexedTriangleSet(
partNode.Index
, "BODY"
, vertex
, triangleIndex
, Color.Yellow
);

vizcore3d.EndUpdate();

vizcore3d.View.ResetView();
}

Vertex3D Constructor Overloading

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
string str = "100,200,300";
VIZCore3D.NET.Data.Vertex3D v = new VIZCore3D.NET.Data.Vertex3D(str, ",");
}

복수개의 노드를 생성하는 API 예제

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
int id = vizcore3d.MeshEdit.GetMaxId();
int parent = vizcore3d.Object3D.FromFilter(VIZCore3D.NET.Data.Object3dFilter.SELECTED_TOP)[0].ID;

List<VIZCore3D.NET.Data.NewNodeItem> items = new List<VIZCore3D.NET.Data.NewNodeItem>();

for (int i = 0; i < 100; i++)
{
VIZCore3D.NET.Data.NewNodeItem item = new VIZCore3D.NET.Data.NewNodeItem();

item.Parent = parent;
item.ID = ++id;
item.Kind = Data.NodeKind.PART;
item.Name = string.Format("NAME_{0}", item.ID);

items.Add(item);
}

vizcore3d.MeshEdit.CreateNodes(items);
}

화면 표시 텍스트 그림자 기능 활성화/비활성화 옵션 API

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
vizcore3d.View.Message.Show(
VIZCore3D.NET.Data.MessageId.ID_01
, "TEXT"
, 10
, 20
, false
);
}

영역으로 개체 선택 시, 카메라에서 가까운 모델만 선택 옵션 API

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
vizcore3d.View.EnableBoxSelectionFrontObjectOnly
= !vizcore3d.View.EnableBoxSelectionFrontObjectOnly;
}

화면에 겹쳐져 표시되는 노트 검색 API

// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;

private void Example()
{
if (vizcore3d.Model.IsOpen() == false) return;
if (vizcore3d.Review.Note.Items.Count == 0) return;

// 겹쳐진 노트 항목 검색
bool result = vizcore3d.Review.Note.FindOverlappingItems(true);

// 겹쳐진 노트 항목이 없음
if (result == false)
{
foreach (VIZCore3D.NET.Data.NoteItem item in vizcore3d.Review.Note.Items)
{
VIZCore3D.NET.Data.NoteStyle style = vizcore3d.Review.Note.GetStyle(item.ID);
style.BackgroundColor = Color.Yellow;
vizcore3d.Review.Note.SetStyle(item.ID, style);
}

return;
}

vizcore3d.BeginUpdate();

foreach (VIZCore3D.NET.Data.NoteItem item in vizcore3d.Review.Note.Items)
{
VIZCore3D.NET.Data.NoteStyle style = vizcore3d.Review.Note.GetStyle(item.ID);

// 현재 노트와 겹쳐진 노트가 없음
if (item.OverlappingItems.Count == 0)
{
style.BackgroundColor = Color.Yellow;
}
// 현재 노트와 겹쳐진 노트가 있음
else
{
// 겹쳐진 노트의 아이디가 현재보다 클 경우,
// 나중에 생성된 노트이고,
// 현재 노트보다 위에 그려짐.
if (item.ID < item.OverlappingItems[0])
{
style.BackgroundColor = Color.Red;
}
else
{
style.BackgroundColor = Color.White;
}
}

vizcore3d.Review.Note.SetStyle(item.ID, style);
}

vizcore3d.EndUpdate();
}