VIZCore3D.NET Document Help

V.1.7.20.921

Major Features

  • 360도 파노라마 이미지 지원 기능 추가

  • 라이선스 서버 사용 시, 인증된 제품 목록, 사용자 인원현황, 사용자 정보 조회 API 추가

  • 특정 개체의 INDEX가 지정된 부모 INDEX의 하위 여부 판단 API 추가

  • 개체 목록 중에서 특정 UDA 정보를 포함(미포함)한 개체 목록 조회 API 추가

  • 로딩된 모델에 UDA 정보 등록 API 2EA 추가

  • VIZ 파일에 UDA 정보 등록 API 추가

  • UDA 검색 결과 내 재검색 API 추가

  • 선택된 리뷰 (노트, 측정) 항목의 텍스트 복사(클립보드) 기능 추가

  • 지정(선택)된 위치로부터 축방향 최단거리 부재 검색 시 Offset 값 추가

  • 노드의 최소 정보(이름, 인덱스, 유형) 만 반환하는 API 추가 - 노드 이름 기반으로 검색/필터링 시, 반환 속도 향상

  • Geometry Property 조회 다이얼로그 및 컨트롤 추가

  • 선택된 개체의 UDA 정보 조회 다이얼로그 및 컨트롤 추가

  • 모델의 UDA 전체 Tree 구조 조회 다이얼로그 및 컨트롤 추가

  • Generic File Import 기능 추가

  • 리뷰 (노트, 측정) 항목을 1,000EA 이상 생성 시, 화면 렌더링 속도 개선

  • Frame (SHIPGRID) 로딩 여부 (HasFrame) 반환 API 상태 체크 로직 개선

  • [#1783] 아바타를 활용한 Walk-Through 시, 개체 선택 이벤트 발생하지 않는 문제 수정

Full List

Full List of Issues Covering all Changes in this Release

Key

Module

Summary

Category

#1804

PanoramaManager

360도 파노라마 이미지 열기 기능 추가 : 360º Panorama 이미지 열기, 부가정보 표시 기능

New Feature

#1805

LicenseManager

라이선스 서버 사용 시, 인증된 제품 목록 및 사용자 인원 현황 / 제품별 사용자 접속현황 조회 API 추가

New Feature

#1806

Object3DManager

특정 개체의 INDEX가 지정된 부모 INDEX의 하위 여부 판단 API 추가

New Feature

#1807

UDAManager

개체 목록 중에서 특정 UDA 정보를 포함(미포함)한 개체 목록 조회 API 추가

New Feature

#1808

UDAManager

로딩된 모델에 UDA 정보 등록 API 2EA 추가

New Feature

#1808

UDAManager

VIZ 파일에 UDA 정보 등록 API 추가

New Feature

#1809

UDAManager

UDA 검색 결과 내 재검색 API 추가

New Feature

#1802

MeasureManager

선택된 측정 항목의 텍스트 복사(클립보드) 기능 추가

New Feature

#1802

NoteManager

선택된 노트 항목의 텍스트 복사(클립보드) 기능 추가

New Feature

#1811

GeometryUtilityManager

지정(선택)된 위치로부터 축방향 최단거리 부재 검색 시 Offset Parameter 추가

New Feature

#1812

Object3DManager

노드의 최소 정보(이름, 인덱스, 유형) 만 반환하는 API 추가 - 노드 이름 기반으로 검색/필터링 시, 반환 속도 향상

New Feature

#1814

GeometryPropertyManager

Geometry Property 조회 다이얼로그 및 컨트롤 추가

New Feature

#1815

UDAManager

선택된 개체의 UDA 정보 조회 다이얼로그 및 컨트롤 추가

New Feature

#1816

UDAManager

모델의 UDA 전체 Tree 구조 조회 다이얼로그 및 컨트롤 추가

New Feature

#1817

GenericDataManager

Generic File Import 및 데이터 분석 기능 추가

New Feature

#1795

ReviewManager


NoteManager


MeasureManager

리뷰 (노트, 측정) 항목을 1,000EA 이상 생성 시, 화면 렌더링 속도 개선

Enhancement

#1813

FrameManager

Frame (SHIPGRID) 로딩 여부 (HasFrame) 반환 API 상태 체크 로직 개선

Enhancement

Resource

Figure 1 : 360º Panorama Image

VIZCore3D.NET.Panorama.png

    Figure 2 : Information Window

    VIZCore3D.NET.Window_001.png

      Figure 3 : Geometry Property Dialog

      VIZCore3D.NET.GeometryProperty_001.png

        Figure 4 : UDA Dialog

        VIZCore3D.NET.UDA_001.png

          Figure 5 : UDA Tree Dialog

          VIZCore3D.NET.UDATree_001.png

            Figure 6 : Generic File (GitHub)

            VIZCore3D.NET.Generic_001.png

              Sample

              Panorama - Add Custom Object (Poly Line)

              // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example1() { List<Data.Vertex3D> position1 = new List<Data.Vertex3D>(); for (int i = 0; i <= 360; i += 10) { float fAngleX = i; float fAngleY = 0; position1.Add(new Data.Vertex3D(fAngleX, fAngleY, 0.0f)); } vizcore3d.Panorama.CustomObject.AddPolyLine(position1, Color.Red, 1.0f); } private void Example2() { List<Data.Vertex3D> position1 = new List<Data.Vertex3D> (); for (int i = -90; i <= 90; i++) { float fAngleX = 0; float fAngleY = i; position1.Add(new Data.Vertex3D(fAngleX, fAngleY, 0.0f)); } Color color = Color.FromArgb(255, 255, 128, 0); vizcore3d.Panorama.CustomObject.AddPolyLine(position1, color, 1.0f); }

                Panorama - Add Custom Object (Text)

                // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example1() { vizcore3d.BeginUpdate(); for (int i = 0; i < 360; i += 10) { float fAngleX = i; float fAngleY = 2.0f; string text = string.Format("{0}", i); Color color = Color.FromArgb(255, 0, 255, 0); vizcore3d.Panorama.CustomObject.AddText(text, Data.FontSizeKind.SIZE12, color, fAngleX, fAngleY); } vizcore3d.EndUpdate(); } private void Example2() { vizcore3d.BeginUpdate(); for (int i = -80; i < 80; i += 10) { float fAngleX = 2.0f; float fAngleY = i; string text = string.Format("{0}", i); Color color = Color.FromArgb(255, 0, 0, 255); vizcore3d.Panorama.CustomObject.AddText(text, Data.FontSizeKind.SIZE12, color, fAngleX, fAngleY); } vizcore3d.EndUpdate(); }

                  Object3DManager.IsChildObject3d

                  // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { int parentIndex = 4; int childIndex = 100; bool result = vizcore3d.Object3D.IsChildObject3d(parentIndex, childIndex); if (result == true) System.Console.WriteLine("Index is a child."); else System.Console.WriteLine("Index is not a child."); }

                    UDAManager.ContainsNode

                    // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { string key = "TYPE"; string val = "PIPE"; List<int> node = new List<int>() { 1, 4, 5, 7, 9, 100, 200 }; Dictionary<int, bool> result = vizcore3d.Object3D.UDA.ContainsNode( key /* UDA::KEY */ , val /* UDA::VALUE */ , node /* Node List */ , true /* True(Bottom Up), False(Current Node Index) */ ); foreach (KeyValuePair<int, bool> item in result) { if(item.Value == true) { System.Console.WriteLine("Contain"); } else { System.Console.WriteLine("Does Not Contain"); } } }

                      UDAManager.Add

                      // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { int nodeIndex = 5; Dictionary<string, string> property = new Dictionary<string, string>(); property.Add("TYPE", "PIPE"); property.Add("SYSTEM", "GENERAL SERVICE LINE"); property.Add("SERVICE", "GENERAL SERVICE LINE"); property.Add("PRESS", "3.00"); property.Add("TEMP", "32.00"); vizcore3d.Object3D.UDA.Add( nodeIndex /* NODE INDEX */ , property /* UDA */ , false /* RECURSIVE */ ); }

                        UDAManager.Add

                        // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { List<int> node = new List<int>() { 4, 10, 20, 30 }; Dictionary<string, string> property = new Dictionary<string, string>(); property.Add("TYPE", "PIPE"); property.Add("SYSTEM", "GENERAL SERVICE LINE"); property.Add("SERVICE", "GENERAL SERVICE LINE"); property.Add("PRESS", "3.00"); property.Add("TEMP", "32.00"); vizcore3d.Object3D.UDA.Add( node /* NODE INDEX */ , property /* UDA */ , false /* RECURSIVE */ ); }

                          UDAManager.Add

                          // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { if (vizcore3d.Model.IsOpen() == false) return; StringBuilder sb = new StringBuilder(); string path = vizcore3d.Model.Files[0]; sb.AppendLine(string.Format("File : {0}", path)); List<VIZCore3D.NET.Data.Node> nodes = vizcore3d.Object3D.FromFilter(Data.Object3dFilter.ALL); sb.AppendLine(string.Format("Count : {0}", nodes.Count)); VIZCore3D.NET.Data.UserDefineAttributeCollection udac = new Data.UserDefineAttributeCollection(); foreach (VIZCore3D.NET.Data.Node node in nodes) { if (node.Index == 0) continue; VIZCore3D.NET.Data.UserDefineAttributeItem uda = new Data.UserDefineAttributeItem(); uda.NodeId.Add(node.ID); for (int i = 0; i < 10; i++) { string key = String.Empty; string val = String.Empty; switch (i) { case 0: { key = "NAME"; val = node.NodeName; } break; case 1: { key = "ID"; val = node.ID.ToString(); } break; case 2: { key = "INDEX"; val = node.Index.ToString(); } break; case 3: { key = "PARENT"; val = node.ParentIndex.ToString(); } break; case 4: { key = "TYPE"; val = node.Kind.ToString(); } break; case 5: { key = "CHILD"; val = node.ChildCount.ToString(); } break; case 6: { key = "DEPTH"; val = node.Depth.ToString(); } break; case 7: { key = "UDA#1"; val = string.Format("{0}-{1}", node.ID, node.NodeName); } break; case 8: { key = "UDA#2"; val = string.Format("{0}-{1}", node.Index, node.NodeName); } break; case 9: { key = "UDA#3"; val = string.Format("{0}-{1}", node.ParentIndex, node.NodeName); } break; default: break; } if (uda.Property.ContainsKey(key) == false) uda.Property.Add(key, val); } udac.Items.Add(uda); } string output = string.Format( "{0}\\{1}_Attribute.viz" , System.IO.Path.GetDirectoryName(path) , System.IO.Path.GetFileNameWithoutExtension(path) ); System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); vizcore3d.Object3D.UDA.Add( path /* INPUT VIZ */ , output /* OUTPUT VIZ */ , udac /* UDA Collection */ ); sw.Stop(); sb.AppendLine( string.Format( "ElapsedMilliseconds : {0:#,0}" , sw.ElapsedMilliseconds ) ); MessageBox.Show(sb.ToString(), "VIZCore3D.NET", MessageBoxButtons.OK, MessageBoxIcon.Information); }

                            UDAManager.GetNodes

                            // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { if (vizcore3d.Model.IsOpen() == false) return; // 대분류 - TYPE : PIPE List<VIZCore3D.NET.Data.Node> pipe = vizcore3d.Object3D.UDA.GetNodes( "TYPE" /* KEY */ , "PIPE" /* VALUE */ ); // 상세분류 - SERVICE : BILGE & GENERAL SERVICE LINE List<VIZCore3D.NET.Data.Node> service = vizcore3d.Object3D.UDA.GetNodes( "SERVICE" /* KEY */ , "BILGE & GENERAL SERVICE LINE" /* VALUE */ , pipe /* 검색 대상 노드 */ , true /* 포함(미포함) */ ); }

                              Object3DManager.GetPartialNode / Object3DManager.FillNodeData

                              // VIZCore3D.NET Control private VIZCore3D.NET.VIZCore3DControl vizcore3d; private void Example() { // 어셈블리 노드 목록 List<VIZCore3D.NET.Data.Node> items = vizcore3d.Object3D.GetPartialNode(true, false, false); List<VIZCore3D.NET.Data.Node> result = new List<VIZCore3D.NET.Data.Node>(); // 필터링 foreach (VIZCore3D.NET.Data.Node item in items) { string[] vals = item.SplitNodeName("/"); if (vals.Length != 4) continue; result.Add(item); } // 노드의 부가정보 채우기 : Index 및 Node Name만 필요한 경우, 호출 불필요. result = vizcore3d.Object3D.FillNodeData(result); }
                                Last modified: 13 1월 2025