본문으로 건너뛰기

V.2.8.23.1227

Major Features

  • 투영 면적 중심점 기능 추가
  • 기준선 단면형상 거리 측정기능 추가
  • Json 파일 읽는 API 추가
  • Json 파일 저장하는 API 추가
  • PrimitiveManager에 Pyramid유형 추가
  • PrimitiveManager에 Cone유형 추가
  • Walkthrough 부분 단축키 변경 가능하도록 설정
  • 그리기 마크업 종료 시, 스냅샷 이미지 저장 API 추가(추가된 스냅샷 이미지는 CVR 파일 저장 시 해당 파일에 포함)
  • 그리기 마크업 라인 유형 그리기 중지 API 추가
  • CVR 파일에 저장되어 있는 스냅샷 이미지 불러오는 API 추가
  • Osnap - NodeIndex 반환하도록 추가
  • MeshEdit - API 지연속도 단축 (50% 향상)
  • View - VertexColor API 지연속도 단축 (50% 향상)
  • Box 유형의 단면 생성 후 기본 단면 추가 시, Box 유형의 단면이 사라지는 현상 보완을 위해 Add 함수 파라미터 추가(visibleOthers)
  • Box유형의 단면 숨기기 후 보이기 실행 시, Box유형의 단면이 보이지 않는 현상 보완하기 위해 Show 함수 파라미터 추가(visibleOthers)
  • 빛 방향 설정하는 API 추가
  • 표면 노트, 2D 노트, 3D 노트 생성하는 API 추가
  • 이동검사 End Position 설정하여 Path 구하는 API 추가
  • 개체 숨김 상태 변경 이벤트 추가
  • 환경설정 - 노트 - 심벌위치 옵션 추가
  • 설정 - 탐색 - 아바타 고급 - 모델 - MAN3 추가
  • 간섭 검사 결과 판단 조건 개선
  • 간섭 검사 진행 중 OnClashProgressEvent 콜백 함수에서 현재까지 검출된 결과 확인할 수 있도록 구현
  • RotateCamera로 모델 회전 시 모델이 사라지는 현상 개선

Full List

Full List of Issues Covering all Changes in this Release

ModuleSummaryCategory
MeasureProjectedArea투영 면적 중심점 기능 추가
GitHub (Example)
New Feature
MeasureManager기준선 단면형상 거리 측정기능 추가
AddGeoISPlaneEdgeHeight()
New Feature
ReviewManagerJson 파일 읽는 API 추가
Open(String)
New Feature
ReviewManagerJson 파일 저장하는 API 추가
Save(String, String) / SaveAs(String, String)
New Feature
PrimitiveManagerPrimitiveManager에 Pyramid유형 추가
PrimitivePyramid
New Feature
PrimitiveManagerPrimitiveManager에 Cone유형 추가
PrimitiveCone
New Feature
DrawingMarkupManager그리기 마크업 종료 시, 스냅샷 이미지 저장 API 추가 (추가된 스냅샷 이미지는 CVR 파일 저장 시 해당 파일에 포함)
ExitDrawMode(Boolean) / ExitDrawMode(Int32, Int32)
New Feature
DrawingMarkupManager그리기 마크업 라인 유형 그리기 중지 API 추가
StopDrawing()
New Feature
UserViewManagerCVR 파일에 저장되어 있는 스냅샷 이미지 불러오기
GetUserViewImage(Int32)
New Feature
GeometryUtilityManagerOsnap - NodeIndex 반환하도록 추가
OnOsnapPickingItem
New Feature
MeshEditManagerMeshEdit - API 지연속도 단축 (50% 향상)
GetBodyVertices(Int32) / SetBodyVertices(Int32, List<BodyVertexData>, Boolean)
Enhancement
VertexColorManagerView - VertexColor API 지연속도 단축 (50% 향상)
GetColor(Int32)
SetColor(List<Color> ) / SetColor(Int32, List<Color> ) / SetColor(Int32, List<VertexColorData>)
Enhancement
SectionManagerBox 유형의 단면 생성 후 기본 단면 추가 시, Box 유형의 단면이 사라지는 현상 보완을 위해 Add 함수 파라미터 추가(visibleOthers)
Add(Boolean, Boolean, Axis)
New Feature
SectionManagerBox유형의 단면 숨기기 후 보이기 실행 시, Box유형의 단면이 보이지 않는 현상 보완하기 위해 Show 함수 파라미터 추가(visibleOthers)
Show(Section, Boolean, Boolean)
New Feature
ViewManager빛 방향 설정하는 API 추가
LightDirection
New Feature
NoteManager표면 노트, 2D 노트, 3D 노트 추가하는 API 추가
AddNoteSurface(String, Boolean, String) / AddNoteSurfacePickModel(Boolean, String, Int32) / AddNote2D(String) / AddNote3D(String)
New Feature
ClashTest이동검사 End Position 설정하여 Path 구하는 API 추가
AddTranslation(Axis, Single, Single, Single)
New Feature
LockedHiddenManager개체 숨김 상태 변경 이벤트 추가
OnObject3DLockedHiddenChangedEvent
New Feature
AvatarModels설정 - 탐색 - 아바타 고급 - 모델 - MAN3 추가New Feature
ClashManager간섭 검사 진행 중 OnClashProgressEvent 콜백 함수에서 현재까지 검출된 결과 확인할 수 있도록 구현
OnClashProgressEvent
GitHub (Example)
New Feature
ViewManagerRotateCamera로 모델 회전 시 모델이 사라지는 현상 개선
RotateCamera
GitHub (Example)
Enhancement

Resource

Figure 1: 기준선 단면형상 거리 측정기능 추가

RELEASE_2.8.23.1128.001.png

Figure 2: 빛 방향 설정하는 API 추가

RELEASE_2.8.23.1128.002.png

Figure 3: 아바타 (Data.AvatarModels.MAN3 에서만 아래 동작 수행)

ReleaseNote_2.8.23.1218_1.gif ReleaseNote_2.8.23.1218_2.gif

Sample

투영 면적 중심점 기능 추가

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

private void Example()
{
VIZCore3D.NET.Data.MeasureProjectedArea area = vizcore3d.Review.Measure.GetProjectedArea(plane);

txtProjectionArea.Text = area.Projected.ToString();
txtTotalArea.Text = area.Outer.ToString();
txtEmptyArea.Text = area.Inner.ToString();
txtCenter.Text = area.Center.ToString(); //투영 면적 중심점

pbProjection.Image = area.Image;

VIZCore3D.NET.Data.CameraData camera = vizcore3d.View.GetCameraData();

switch (plane)
{
case Data.Planes.YZ:
vizcore3d.View.MoveCamera(VIZCore3D.NET.Data.CameraDirection.X_MINUS);
break;
case Data.Planes.ZX:
vizcore3d.View.MoveCamera(VIZCore3D.NET.Data.CameraDirection.Y_MINUS);
break;
case Data.Planes.XY:
vizcore3d.View.MoveCamera(VIZCore3D.NET.Data.CameraDirection.Z_MINUS);
break;
default:
break;
}

List<VIZCore3D.NET.Data.Line3D> lines = vizcore3d.Projection.GetProjection2DLines();

vizcore3d.View.SetCameraData(camera, false);

StringBuilder sb3D = new StringBuilder();
StringBuilder sb2D = new StringBuilder();

foreach (VIZCore3D.NET.Data.Line3D line in lines)
{
sb3D.AppendLine(line.ToString(VIZCore3D.NET.Data.Dimensions.D3));
sb2D.AppendLine(line.ToString(VIZCore3D.NET.Data.Dimensions.D2));
}

txtPoints3D.Text = sb3D.ToString();
txtPoints2D.Text = sb2D.ToString();

DrawingControl.SetData(lines);
}

기준선 단면형상 거리 측정기능 추가

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

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

vizcore3d.Review.Measure.AddGeoISPlaneEdgeHeight();
}

Json 파일 읽는 API 추가 / Json 파일 저장하는 API 추가

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

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

vizcore3d.Review.SaveAsJson(@"D:\test\test1.json"); //Json 리뷰파일 저장

OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "JSON File (*.json)|*.json";
dlg.Multiselect = false;

if (dlg.ShowDialog() != DialogResult.OK) return;

vizcore3d.Review.Open(dlg.FileName); //Json 리뷰파일 읽기
}

PrimitiveManager에 Pyramid유형 추가 / PrimitiveManager에 Cone유형 추가

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

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

// Color Index : rev2bst.config.rev 파일 참고
VIZCore3D.NET.Manager.PrimitiveObject root = vizcore3d.Primitive.AddNode("Root", 4 /* Yellow Color*/);

VIZCore3D.NET.Manager.PrimitiveObject child1 = root.AddNode("CHILD1", 7 /* Blue Color */);
{
VIZCore3D.NET.Manager.PrimitiveBox box1 = new VIZCore3D.NET.Manager.PrimitiveBox();
box1.Set2Point( new float[] { 0, 0, 0 },
new float[] { 100, 100, 100 },
50.0f
);

child1.AddPrimitive(box1);

VIZCore3D.NET.Manager.PrimitiveBox box2 = new VIZCore3D.NET.Manager.PrimitiveBox();

VIZCore3D.NET.Data.BoundBox3D boundBox1 = new VIZCore3D.NET.Data.BoundBox3D(
new VIZCore3D.NET.Data.Vertex3D( 200, 200, 200 ),
new VIZCore3D.NET.Data.Vertex3D( 300, 300, 300 ));

box2.SetMinMaxPoints(boundBox1);
child1.AddPrimitive(box2);
}

VIZCore3D.NET.Manager.PrimitiveObject child2 = root.AddNode("CHILD2", 11 /* Pink Color */);
{
VIZCore3D.NET.Manager.PrimitiveCylinder cylinder1 = new VIZCore3D.NET.Manager.PrimitiveCylinder();
cylinder1.Set2Point( new float[] { 400, 400, 400 },
new float[] { 600, 600, 600 },
50.0f
);

child2.AddPrimitive(cylinder1);
}

VIZCore3D.NET.Manager.PrimitiveObject child3 = root.AddNode("CHILD3", 11 /* Pink Color */);
{
VIZCore3D.NET.Manager.PrimitivePyramid pyramid1 = new VIZCore3D.NET.Manager.PrimitivePyramid();
float[] matrix = new float[]
{
1.0f, 0.0f, 0.0f, 12550.0f
, 0.0f, 1.0f, 0.0f, 31857.0f
, 0.0f, 0.0f, 1.0f, 1300.0f
};
pyramid1.Matrix = matrix;

float[] parameter = new float[]
{
10f /* X Top */
, 20f /* Y Top */
, 30f /* X Bottom */
, 40f /* Y Bottom */
, 2.5f /* X Offset */
, 4.5f /* Y Offset */
, 50f /* Height */
};

pyramid1.Parameter = parameter;
child3.AddPrimitive(pyramid1);
}

VIZCore3D.NET.Manager.PrimitiveObject child4 = root.AddNode("CHILD4", 11 /* Pink Color */);
{
VIZCore3D.NET.Manager.PrimitiveCone cone1 = new VIZCore3D.NET.Manager.PrimitiveCone();
float[] matrix = new float[]
{
1.0f, 0.0f, 0.0f, 6572.2214f
, 0.0f, 1.0f, 0.0f, 25308.0577f
, 0.0f, 0.0f, 1.0f, 3587.6716f
};
cone1.Matrix = matrix;

float[] parameter1 = new float[]
{
100.0f /* Bottom Radius */
, 0.0f /* Top Radius */
, 200.0f /* Height */
, 0.0f /* X Offset */
, 0.0f /* Y Offset */
, 0.0f /* Bottom X Shear */
, 0.0f /* Bottom Y Shear */
, 0.0f /* Top X Shear */
, 0.0f /* Top Y Shear */
};

float[] parameter2 = new float[]
{
100.0f /* Bottom Radius */
, 30.0f /* Top Radius */
, 200.0f /* Height */
, 0.0f /* X Offset */
, 0.0f /* Y Offset */
, 0.0f /* Bottom X Shear */
, 0.0f /* Bottom Y Shear */
, 0.0f /* Top X Shear */
, 0.0f /* Top Y Shear */
};

float[] parameter3 = new float[]
{
100.0f /* Bottom Radius */
, 30.0f /* Top Radius */
, 200.0f /* Height */
, 50.0f /* X Offset */
, 50.0f /* Y Offset */
, 0.0f /* Bottom X Shear */
, 0.0f /* Bottom Y Shear */
, 0.0f /* Top X Shear */
, 0.0f /* Top Y Shear */
};

cone1.Parameter = parameter3;
child4.AddPrimitive(cone1);
}

// Open Model
vizcore3d.Primitive.OpenModel("Primitive", false);
}

그리기 마크업 종료 시, 스냅샷 이미지 저장 API 추가

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

private void Example1()
{
//스냅샷 이미지 320 x 240 자동 추가
vizcore3d.Review.DrawingMarkup.ExitDrawMode(true);

vizcore3d.Review.Save("D:\\TEST\\Test.cvr");
}

private void Example2()
{
//스냅샷 이미지 추가하지 않음
vizcore3d.Review.DrawingMarkup.ExitDrawMode(false);

vizcore3d.Review.Save("D:\\TEST\\Test.cvr");
}

private void Example3()
{
//스냅샷 이미지 1024 x 768 크기로 추가
vizcore3d.Review.DrawingMarkup.ExitDrawMode(1024, 768);

vizcore3d.Review.Save("D:\\TEST\\Test.cvr");
}

CVR 파일에 저장되어 있는 스냅샷 이미지 불러오기

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

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

VIZCore3D.NET.Data.ReviewItem item = items[items.Count - 1];

if (item.Kind != VIZCore3D.NET.Manager.ReviewManager.ReviewKind.RK_USER_VIEW) return;

int id = item.ID;

System.Drawing.Image img = vizcore3d.Review.UserView.GetUserViewImage(id); //스냅샷 이미지 불러오기
if (img == null) return;

SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Image (*.jpg)|*.jpg";
if (dlg.ShowDialog() != DialogResult.OK) return;

img.Save(dlg.FileName);
}

Osnap - NodeIndex 반환하도록 추가

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

private void Example()
{
List<VIZCore3D.NET.Data.Node> items = vizcore3d.Object3D.FromFilter( VIZCore3D.NET.Data.Object3dFilter.SELECTED_TOP );

if (items.Count == 0) return;

vizcore3d.GeometryUtility.OnOsnapPickingItem += GeometryUtility_OnOsnapPickingItem;

vizcore3d.GeometryUtility.ShowOsnap(
items[0].Index /* Node Index */
, false /* Item : Surface */
, true /* Item : Vertex */
, true /* Item : Line */
, true /* Item : Circle */
);
}

private void GeometryUtility_OnOsnapPickingItem(object sender, VIZCore3D.NET.Event.EventManager.OsnapPickingItemEventArgs e)
{
int nodeIndex = e.NodeIndex; // 선택한 부재의 인덱스

VIZCore3D.NET.Data.OsnapKind kind = e.Kind;
VIZCore3D.NET.Data.Vertex3D point = e.Point;
VIZCore3D.NET.Data.Vertex3D start = e.Start;
VIZCore3D.NET.Data.Vertex3D end = e.End;
VIZCore3D.NET.Data.Vertex3D normal = e.Normal;
}

빛 방향 설정하는 API 추가

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

private void Example()
{
//X = 카메라 좌우
//Y = 카메라 상하
//Z = 카메라 앞뒤

//범위 설정: X, Y, Z축마다 -1 ~ +1
//Z축: -1에 가까울 수록 모델의 앞이 어두어짐

// 빛 방향 설정
// 카메라 우측
vizcore3d.View.LightDirection = new Data.Vector3D(-1, 0, 1);
}

설정 - 탐색 - 아바타 고급 - 모델 - MAN3 추가

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

private void Example()
{
vizcore3d.Walkthrough.AvatarModel = (int)Data.AvatarModels.MAN3;

vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.HANDS_UP); // 양손 위로

/*
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.KNEEL_IDLE); // 엎드리기
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.SIT1_IDLE); // 앉기1
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.SIT2_IDLE); // 앉기2
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.SIT3_IDLE); // 앉기3
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.CLIMBING_DOWN); // 내려감
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.CLIMBING); // 올라감
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.HANDS_HALF_UP_IDLE); // 한 손 위로
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.HANDS_HALF_UP_READY); // 한 손 위로 올림
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.LAY_DOWN_IDLE); // 눕기
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.LAY_DOWN_READY); // 눕기 준비자세
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.SEEING90_IDLE); // 많이 굽힘
vizcore3d.Walkthrough.SetAvatarPose(Data.AvatarPose.SEEING90_READY); // 많이 굽힘 준비자세
*/
}