본문으로 건너뛰기

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;
}