본문으로 건너뛰기

V.2.8.23.212

Major Features

  • Review 항목 제거 후 이벤트 추가
  • Generic 파일 Marking, String, End, Bevel 데이터 개수 및 가시화 기능 추가
  • 카메라 정보 백업 / 복원 시, 백업 시 Zoom 비율이 복원될 수 있도록 개선
  • 백그라운드 이미지 모드에서 이미지 저장 시 파일 이름 형식 수정
  • 단면/상자 클리핑된 개체의 Area/Volume 정보 반환 API 추가
  • UDA(사용자 정의 속성)에 전체 모델의 Area/Volume 정보 생성 기능 추가
  • 이름의 특정 문자열을 지정된 문자열로 변경하는 API 추가
  • 측정 위치 변경 API 추가
  • VIZW 파일 내보내기 시, 압축 기능 추가
  • 파일 열기 시, VIZM/VIZW 지원 추가
  • 아바타를 활용한 충돌 검사 기능 추가
  • 표면노트 기본값 설정 기능 추가
  • 모델 추가 시, 추가된 노드 개체 목록 반환 API 추가
  • 외형검색 결과 내보내기 다이얼로그 추가
  • 단일 부재로 내보내기 API 추가
  • 간소화 품질 설정 가능한 Virtual Screen Size 및 Count 파라미터 추가
  • 좌표계(Frame) 축별 좌표값으로 설정할 수 있는 API 추가
  • 리뷰 항목 HitTest API 추가
  • 선택 개체 표시 유형 추가
  • 동일 부모 하위에 동일 이름 개체 삭제 API 추가
  • 워터마크 API 추가

Full List

Full List of Issues Covering all Changes in this Release

ModuleSummaryCategory
ReviewManagerReview 항목 제거 후 이벤트 추가
OnReviewDeletedEvent
New Feature
GenericDataManagerGeneric 파일 Marking, String, End, Bevel 데이터 개수 및 가시화 기능 추가
GitHub (Example)
Enhancement
ViewManager카메라 정보 백업 / 복원 시, 백업 시 Zoom 비율이 복원될 수 있도록 개선
SetCameraData
Enhancement
SectionManager단면/상자 클리핑된 개체의 Area/Volume 정보 반환 API 추가
GetGeometryProperty
New Feature
GeometryPropertyManagerUDA(사용자 정의 속성)에 전체 모델의 Area/Volume 정보 생성 기능 추가
UpdateSolidVolumeAndArea()
New Feature
Object3DManager이름의 특정 문자열을 지정된 문자열로 변경하는 API 추가
ReplaceName(String, String)
New Feature
ModelManager모델 추가 시, 추가된 노드 개체 목록 반환 API 추가
Add(List<String>, Dictionary<String, Node>)
New Feature
ModelManager단일 부재로 내보내기 API 추가
MergeSingleNode(String, String)
New Feature
ModelManager간소화 품질 설정 가능한 Virtual Screen Size 및 Count 파라미터 추가
ExportSimplifiedModel(String, String, Boolean, Boolean, Single, Single, Single, Single, Single, Single, Boolean, Int32, ModelManager.SimplifiedUnit, Int32, Int32, Boolean)
Enhancement
FrameManager좌표계(Frame) 축별 좌표값으로 설정할 수 있는 API 추가
XAxisLabelAsPosition
YAxisLabelAsPosition
ZAxisLabelAsPosition
New Feature
ReviewManager리뷰 항목 HitTest API 추가
HitTest(Int32, Int32)
HitTest(Int32, Int32, ref Int32)
New Feature
Object3DManager선택 개체 표시 유형 추가
SelectionMode
Enhancement
Object3DManager동일 부모 하위에 동일 이름 개체 삭제 API 추가
RemoveObjectsWithDuplicateNames()
New Feature
ViewManager워터마크 API 추가New Feature

Resource

Figure 1: Generic 파일 Marking, String, End, Bevel 데이터

RELEASE_2.8.001.png

Figure 2: 단면/상자 클리핑된 개체의 Area/Volume 정보

RELEASE_2.8.002.png

Figure 3: UDA(사용자 정의 속성)에 전체 모델의 Area/Volume 정보

RELEASE_2.8.003.png

Figure 4: 아바타를 활용한 충돌 검사 기능 추가

RELEASE_2.8.004.png

Figure 5: 좌표계(Frame) 축별 좌표값 표기 설정

RELEASE_2.8.005.png

Figure 6: 선택 개체 표시 유형

RELEASE_2.8.006.png

Figure 7: 워터마크

RELEASE_2.8.007.png

Sample

Review 항목 제거 후 이벤트 추가

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

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

vizcore3d.Review.OnReviewDeletedEvent += Review_OnReviewDeletedEvent;
}

private void Review_OnReviewDeletedEvent(object sender, Event.EventManager.ReviewDeletedEventArgs e)
{
int reviewId = e.ReviewID;
}

Generic 파일 Marking, String, End, Bevel 데이터 개수 및 가시화 기능 추가

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

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

int countString = vizcore3d.GenericData.GetStringDataCount();
int countMarking = vizcore3d.GenericData.GetMarkingDataCount();
int countBevel = vizcore3d.GenericData.GetBevelSymbolDataCount();
int countEnd = vizcore3d.GenericData.GetLeftRightEndDataCount();
}

단면/상자 클리핑된 개체의 Area/Volume 정보 반환 API 추가

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

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

VIZCore3D.NET.Data.Section section = vizcore3d.Section.SelectedItem;
if (section == null) return;

// 1. Geometry Property
VIZCore3D.NET.Data.SectionGeometryProperty prop =
vizcore3d.Section.GetGeometryProperty();

float area = prop.Area / 1000.0f / 1000.0f;
string areaDisplayStr = string.Format("{0} ㎡", area);

float volume = prop.Volume / 1000.0f / 1000.0f / 1000.0f;
string volumeDisplayStr = string.Format("{0} ㎥", volume);

// 2. Error Node Index
foreach (int errorNodeIndex in prop.ErrorIndex)
{
Console.WriteLine(string.Format("Error Node Index : {0}", errorNodeIndex));
}

// 3. Clipped Parts
List<VIZCore3D.NET.Data.Node> nodes = new List<VIZCore3D.NET.Data.Node>();

if (section.SectionType == VIZCore3D.NET.Manager.SectionManager.SectionTypes.SECTION)
{
nodes.AddRange(vizcore3d.Section.GetSectionNode(section.ID, -1));
}
else if (section.SectionType == VIZCore3D.NET.Manager.SectionManager.SectionTypes.SECTION_BOX)
{
for (int i = 0; i < 6; i++)
{
nodes.AddRange(vizcore3d.Section.GetSectionNode(section.ID, i));
}
}

foreach (VIZCore3D.NET.Data.Node node in nodes)
{
VIZCore3D.NET.Data.SectionGeometryPartProperty partGeometry = null;

if (prop.PartData.ContainsKey(node.Index) == true)
{
partGeometry = prop.PartData[node.Index];
}
else if (prop.PartData.ContainsKey(node.Index + 1) == true)
{
partGeometry = prop.PartData[node.Index + 1];
}

float orgArea = 0.0f;
float orgVolume = 0.0f;
float resultArea = 0.0f;
float resultVolume = 0.0f;

if (partGeometry != null)
{
orgArea = partGeometry.OriginalArea / 1000.0f / 1000.0f;
orgVolume = partGeometry.OriginalVolume / 1000.0f / 1000.0f / 1000.0f;

resultArea = partGeometry.ResultArea / 1000.0f / 1000.0f;
resultVolume = partGeometry.ResultVolume / 1000.0f / 1000.0f / 1000.0f;
}

Console.WriteLine(
string.Format(
"{0}, {1}, {2}, {3}, {4}, {5}, {6}"
, node.Index.ToString()
, node.NodeName
, node.GetParentName()
, partGeometry == null ? "N/A" : orgArea.ToString()
, partGeometry == null ? "N/A" : orgVolume.ToString()
, partGeometry == null ? "N/A" : resultArea.ToString()
, partGeometry == null ? "N/A" : resultVolume.ToString()
)
);
}
}

이름의 특정 문자열을 지정된 문자열로 변경하는 API 추가

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

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

string oldName = "HULL";
string newName = "선체";

vizcore3d.Object3D.ReplaceName(oldName, newName);
}

표면노트 기본값 설정 기능 추가

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

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

// 기본 데이터 생성
VIZCore3D.NET.Data.SurfaceNoteDefaultData item = new VIZCore3D.NET.Data.SurfaceNoteDefaultData();
item.UseSymbol = true;
item.SymbolText = "1";
item.ModelNameLevel = 1;

// 기본 데이터 설정
vizcore3d.Review.Note.SurfaceNoteDefaultValue = item;

// 리뷰 변경 : 표면노트 추가 이벤트
vizcore3d.Review.OnReviewChangedEvent += Review_OnReviewChangedEvent;

// 표면노트 추가
vizcore3d.Review.Note.AddNoteSurfaceDialog();
}

private void Review_OnReviewChangedEvent(object sender, Event.EventManager.ReviewEventArgs e)
{
if (e.EventKind != Manager.ReviewManager.ReviewEventKind.ADDED_SURFACE_NOTE) return;

VIZCore3D.NET.Data.SurfaceNoteDefaultData item = vizcore3d.Review.Note.SurfaceNoteDefaultValue;

item.SymbolText = "2";
}

모델 추가 시, 추가된 노드 개체 목록 반환 API 추가

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

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

List<string> models = new List<string>();
models.Add("C:\\Model\\BLOCK1.viz");
models.Add("C:\\Model\\BLOCK2.viz");
models.Add("C:\\Model\\BLOCK3.viz");

Dictionary<string, VIZCore3D.NET.Data.Node> nodes =
new Dictionary<string, VIZCore3D.NET.Data.Node>();

bool result = vizcore3d.Model.Add(models, out nodes);

if (result == false) return;

foreach (KeyValuePair<string, VIZCore3D.NET.Data.Node> node in nodes)
{
string file = node.Key;

int index = node.Value.Index;
string name = node.Value.NodeName;
}
}

단일 부재로 내보내기 API 추가

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

private void Example()
{
string input = "C:\\Model\\Input.viz";
string output = "C:\\Model\\Output.viz";

bool result = vizcore3d.Model.MergeSingleNode(input, output);
}

간소화 품질 설정 가능한 Virtual Screen Size 및 Count 파라미터 추가

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

private void Example()
{
string input = "C:\\Model\\Input.viz";
string output = "C:\\Model\\Output.viz";

vizcore3d.Model.ExportSimplifiedModel(
input /* INPUT FILE */
, output /* OUTPUT FILE */
, false /* KEEP Structure */
, false /* Limit BoundBox */
, 0 /* BoundBox - Min. X */
, 0 /* BoundBox - Min. Y */
, 0 /* BoundBox - Min. Z */
, 0 /* BoundBox - Max. X */
, 0 /* BoundBox - Max. Y */
, 0 /* BoundBox - Max. Z */
, false /* Limit Mesh Count */
, 0 /* Mesh Count */
, VIZCore3D.NET.Manager.ModelManager.SimplifiedUnit.TRIANGLE_MESH /* Unit */
, 1024 /* Virtual Screen Size */
, 1 /* Virtual Screen Count */
);
}

좌표계(Frame) 축별 좌표값으로 설정할 수 있는 API 추가

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

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

vizcore3d.Frame.XAxisLabelAsPosition = false; // X-Axis. Frame
vizcore3d.Frame.YAxisLabelAsPosition = false; // Y-Axis. Frame
vizcore3d.Frame.ZAxisLabelAsPosition = true; // Z-Axis. Position
}

리뷰 항목 HitTest API 추가

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

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

vizcore3d.View.OnViewDefaultMouseUpEvent += View_OnViewDefaultMouseUpEvent;
}

private void View_OnViewDefaultMouseUpEvent(object sender, MouseEventArgs e)
{
// Case 1)
bool existReview1 = vizcore3d.Review.HitTest(e.X, e.Y);

// Case 2)
int reviewId = -1;
bool existReview2 = vizcore3d.Review.HitTest(e.X, e.Y, ref reviewId);
}

동일 부모 하위에 동일 이름 개체 삭제 API 추가

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

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

int oldCount = vizcore3d.Model.GetModelInformation().NodeCount;

vizcore3d.Object3D.RemoveObjectsWithDuplicateNames();

int newCount = vizcore3d.Model.GetModelInformation().NodeCount;
}

워터마크 API 추가

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

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

vizcore3d.BeginUpdate();

vizcore3d.View.Watermark.Color = Color.Black;
vizcore3d.View.Watermark.FontSize = VIZCore3D.NET.Data.FontSize.Size_26_Bold;
vizcore3d.View.Watermark.Rotate = 45.0f;
vizcore3d.View.Watermark.Spacing = new VIZCore3D.NET.Data.Vector3D(100, 200, 0);
vizcore3d.View.Watermark.Text = "VIZCore3D.NET\nWatermark";

vizcore3d.EndUpdate();

//vizcore3d.View.Watermark.Clear();
}