본문으로 건너뛰기

V.2.5.21.906

Major Features

  • 지정된 두 정점을 중심으로 회전 API 추가
  • 노트 텍스트 수정 UI 추가
  • 복수개의 노드를 빠르게 생성하는 API 추가
  • 복수개의 노드 위치를 일괄 변경하는 API 추가
  • Body 노드의 형상(Triangle Mesh)을 추가/수정 API 추가
  • Walk Through (보행탐색) 모드에서 측정 기능 개선 - 측정 종료 후, W/T 모드로 복귀
  • Walk Through (보행탐색 / 비행탐색) 모드에서 마우스 Focus가 다른 응용프로그램으로 이동 하였을 경우에 단축키 적용되지 않도록 개선
  • 선택 상자(Selection Box) 사이즈 변경 시, Label 항상 가운데 정렬 되도록 개선
  • 바다(해양) 표현 개선 - OpenGL V.2.0 이상 환경에서 쉐이더를 활용한 기능
  • 분해된 개체가 선택되지 않는 문제 수정
  • FRAME(SHIPGRID) 파일(.dmp)의 형식이 올바르지 않은 경우에 발생되는 문제 수정
  • Web Browser 컨트롤을 호스팅한 경우에 상호동작 예제 추가

Full List

Full List of Issues Covering all Changes in this Release

ModuleSummaryCategory
TransformManager지정된 두 정점을 중심으로 회전 API 추가
TransformManager.Rotate
New Feature
NoteManager노트 텍스트 수정 UI 추가
NoteManager.EditNoteTextDialog(NoteItem)
New Feature
StructureManager복수개의 노드를 빠르게 생성하는 API 추가
StructureManager.CreateNodes
New Feature
StructureManager복수개의 노드 위치를 일괄 변경하는 API 추가
StructureManager.MoveNodes
New Feature
MeshEditManagerBody 노드의 형상(Triangle Mesh)을 추가/수정 API 추가
MeshEditManager.ChangeBodyMesh
New Feature
OceanManager바다(해양) 표현 개선 - OpenGL V.2.0 이상 환경에서 쉐이더를 활용한 기능
OceanManager.Enable
Enhancement
-Web Browser 컨트롤을 호스팅한 경우에 상호동작 예제 추가New Feature

Resource

Figure 1: 지정된 두 정점을 중심으로 회전

RELEASE_2.5.001.png

Figure 2: 노트 텍스트 수정 UI 추가

RELEASE_2.5.002.png

Figure 3: Web Browser 컨트롤을 호스팅한 경우에 상호동작 예제

RELEASE_2.5.003.png

Sample

지정된 두 정점을 중심으로 회전 API

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

private System.Timers.Timer timerScrew;

private void Example()
{
timerScrew = new System.Timers.Timer();
timerScrew.Interval = 100;
timerScrew.Elapsed += TimerScrew_Elapsed;

AnimationScrew(true);
}

private List<VIZCore3D.NET.Data.Node> NODES_SCREW1 { get; set; }
private List<VIZCore3D.NET.Data.Node> NODES_SCREW2 { get; set; }
private float Screw_Rotate_Angle = 0;

private void AnimationScrew(bool enable)
{
if (enable == true)
{
NODES_SCREW1 = vizcore3d.Object3D.Find.QuickSearch("SHIP_SCREW#1", true);
NODES_SCREW2 = vizcore3d.Object3D.Find.QuickSearch("SHIP_SCREW#2", true);

timerScrew.Enabled = true;
}
else
{
timerScrew.Enabled = false;
}
}

private void TimerScrew_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timerScrew.Enabled = false;

this.Invoke(new EventHandler(delegate
{
RotateScrew();
}));

timerScrew.Enabled = true;
}

private void RotateScrew()
{
vizcore3d.BeginUpdate();

vizcore3d.Object3D.Transform.Rotate(
NODES_SCREW1
, new VIZCore3D.NET.Data.Vertex3D(-40144.21, 2159.66, -15277.70)
, new VIZCore3D.NET.Data.Vertex3D(-38685.59, 2170.91, -15204.43)
, Screw_Rotate_Angle % 360
, VIZCore3D.NET.Data.AngleFormat.DEGREE
);

vizcore3d.Object3D.Transform.Rotate(
NODES_SCREW2
, new VIZCore3D.NET.Data.Vertex3D(-40110.58, -2575.70, -15209.66)
, new VIZCore3D.NET.Data.Vertex3D(-38651.92, -2564.30, -15135.98)
, Screw_Rotate_Angle % 360
, VIZCore3D.NET.Data.AngleFormat.DEGREE
);

Screw_Rotate_Angle += 30;

vizcore3d.EndUpdate();
}

노트 텍스트 수정 API

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

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

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

private void Example(int noteId, string newText)
{
vizcore3d.Review.Note.EditNoteText(noteId, newText);
}

복수개의 노드를 빠르게 생성하는 API

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

private void Example1()
{
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.Parent = parent;
item.ID = ++id;
item.Kind = Data.NodeKind.PART;
item.Name = string.Format("NAME_{0}", item.ID);

items.Add(item);
}

vizcore3d.Structure.CreateNodes(items);
}

private void Example2()
{
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 assy = new VIZCore3D.NET.Data.NewNodeItem();

int assyId = ++id;

assy.Parent = parent;
assy.ID = assyId;
assy.Kind = Data.NodeKind.ASSEMBLY;
assy.Name = string.Format("NAME_ASSY_{0}", assy.ID);

items.Add(assy);

{
VIZCore3D.NET.Data.NewNodeItem part = new VIZCore3D.NET.Data.NewNodeItem();

int partId = ++id;

part.Parent = assyId;
part.ID = partId;
part.Kind = Data.NodeKind.PART;
part.Name = string.Format("NAME_PART_{0}", part.ID);

items.Add(part);

{
VIZCore3D.NET.Data.NewNodeItem body = new VIZCore3D.NET.Data.NewNodeItem();

int bodyId = ++id;

body.Parent = partId;
body.ID = bodyId;
body.Kind = Data.NodeKind.BODY;
body.Name = string.Format("NAME_BODY_{0}", body.ID);

items.Add(body);
}
}
}

vizcore3d.Structure.CreateNodes(items);
}

Body 노드의 형상(Triangle Mesh)을 추가/수정 API

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

private void Example()
{
List<int> bodies = new List<int>();
List<int> coordListNum = new List<int>();
List<VIZCore3D.NET.Data.Vertex3D> v = new List<VIZCore3D.NET.Data.Vertex3D>();
List<VIZCore3D.NET.Data.Vector3D> n = new List<VIZCore3D.NET.Data.Vector3D>();
List<float> color = new List<float>();

// 면 #1
bodies.Add(2296); // Body Index
coordListNum.Add(18); // Vertex Float 총 개수

// Vertex 좌표 => Triangle Mesh 를 기반
v.Add(new VIZCore3D.NET.Data.Vertex3D(80180.00, 10600.00, 35572.12));
v.Add(new VIZCore3D.NET.Data.Vertex3D(71890.00, 10600.00, 35572.12));
v.Add(new VIZCore3D.NET.Data.Vertex3D(72324.89, 7170.00, 35645.86));
v.Add(new VIZCore3D.NET.Data.Vertex3D(72324.89, 7170.00, 35645.86));
v.Add(new VIZCore3D.NET.Data.Vertex3D(80180.00, 7170.00, 35645.86));
v.Add(new VIZCore3D.NET.Data.Vertex3D(80180.00, 10600.00, 35572.12));

// Normal 좌표
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));

// 면의 색상 설정
color.Add(1.000f); // R
color.Add(1.000f); // G
color.Add(0.000f); // B
color.Add(1); // A

// 면 #2
bodies.Add(2293); // Body Index
coordListNum.Add(18); // Vertex Float 총 개수

v.Add(new VIZCore3D.NET.Data.Vertex3D(80180.00, 7170.00, 35645.86));
v.Add(new VIZCore3D.NET.Data.Vertex3D(72324.89, 7170.00, 35645.86));
v.Add(new VIZCore3D.NET.Data.Vertex3D(71890.00, 3740.00, 35719.60));
v.Add(new VIZCore3D.NET.Data.Vertex3D(71890.00, 3740.00, 35719.60));
v.Add(new VIZCore3D.NET.Data.Vertex3D(80180.00, 3740.00, 35719.60));
v.Add(new VIZCore3D.NET.Data.Vertex3D(80180.00, 7170.00, 35645.86));

n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));
n.Add(new VIZCore3D.NET.Data.Vector3D(0.00, 0.00, -1.00));

color.Add(0.043f); // R
color.Add(0.043f); // G
color.Add(0.043f); // B
color.Add(1); // A

vizcore3d.MeshEdit.ChangeBodyMesh(
bodies /* BODY INDEX LIST */
, v /* VERTEX LIST */
, n /* NORMAL LIST */
, color /* COLOR */
, coordListNum /* VERTEX COUNT LIST */
);
}

바다(해양) 표현 API

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

private void ExampleAuto()
{
vizcore3d.View.Ocean.Enable = true;
vizcore3d.View.Ocean.AutoHeight = true;
}

private void Example()
{
vizcore3d.View.Ocean.Enable = true;
vizcore3d.View.Ocean.AutoHeight = false;

VIZCore3D.NET.Data.BoundBox3D boundBox = vizcore3d.Model.BoundBox;

vizcore3d.View.Ocean.Height = boundBox.MinZ + 10000.0f;
}