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
| Module | Summary | Category |
|---|---|---|
| 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 |
| MeshEditManager | Body 노드의 형상(Triangle Mesh)을 추가/수정 API 추가 • MeshEditManager.ChangeBodyMesh | New Feature |
| OceanManager | 바다(해양) 표현 개선 - OpenGL V.2.0 이상 환경에서 쉐이더를 활용한 기능 • OceanManager.Enable | Enhancement |
| - | Web Browser 컨트롤을 호스팅한 경우에 상호동작 예제 추가 | New Feature |
Resource
Figure 1: 지정된 두 정점을 중심으로 회전

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

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

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