Get2DViewPosBy3DPosition
Overloads
| Name | Description |
|---|---|
| Get2DViewPosBy3DPosition(int objID, Vertex3D position) | 지정한 3D 뷰 개체의 투영 정보를 기준으로, 3D 월드 좌표를 2D 캔버스 좌표로 변환하여 반환합니다. |
| Get2DViewPosBy3DPosition(int objID, Vertex3D position, Vertex3D offset) | 지정한 3D 뷰 개체의 투영 정보를 기준으로, 위치의 3D 월드 좌표를 2D 캔버스 좌표로 변환하여 반환합니다. |
Get2DViewPosBy3DPosition(int objID, Vertex3D position)
public Vertex3D Get2DViewPosBy3DPosition(int objID, Vertex3D position)
지정한 3D 뷰 개체의 투영 정보를 기준으로,
3D 월드 좌표를 2D 캔버스 좌표로 변환하여 반환합니다.
Remarks
캔버스에 배치된 Object2D 중 3D 모델을 투영한 유형 개체의 ID 여야 합니다.
그 외 유형(예: TEXT, IMAGE 등) 의 ID 를 넘기면 변환이 실패하여 null 을 반환합니다.
Parameters
| Name | Type | Description |
|---|---|---|
| objID | int | 2D 캔버스 상 3D 뷰 개체의 ID |
| position | Vertex3D | 변환할 3D 월드 좌표. |
Returns
| Type | Description |
|---|---|
| Vertex3D | 2D 캔버스 좌표 (X, Y : 캔버스 mm, Z : 0). 실패 시 null. |
Examples
// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;
private void Example()
{
// 모델 개체 ID 획득 (2D 캔버스에 투영된 3D 모델의 첫 번째 개체)
int modelObjID = vizcore3d.Drawing2D.Object2D.GetObjectAllinfoBy2DView()[0].ID;
// 선택된 파트에서 홀 검출 -> 첫 번째 홀 사용
List<VIZCore3D.NET.Data.Node> selParts =
vizcore3d.Object3D.FromFilter(VIZCore3D.NET.Data.Object3dFilter.SELECTED_PART);
List<VIZCore3D.NET.Data.NodeHoleItem> holes =
vizcore3d.GeometryUtility.GetNodeHoleInfo(selParts[0].Index);
VIZCore3D.NET.Data.NodeHoleItem hole = holes[0];
// 홀 중심 3D 좌표 + 반경 (NodeHoleItem 은 Vector3D 로 반환됨)
VIZCore3D.NET.Data.Vertex3D holeCenter3D = new VIZCore3D.NET.Data.Vertex3D(
hole.Center.X, hole.Center.Y, hole.Center.Z);
float holeRadius3D = hole.Radius;
// 반경 방향 3D 오프셋 : 판 평면 내 축인 hole.AxisX 방향으로 hole.Radius 만큼
VIZCore3D.NET.Data.Vertex3D radiusOffset3D = new VIZCore3D.NET.Data.Vertex3D(
hole.AxisX.X * holeRadius3D,
hole.AxisX.Y * holeRadius3D,
hole.AxisX.Z * holeRadius3D);
// 라벨을 홀 중심에서 우상단으로 반경 * 4 만큼 3D 오프셋 지점에 배치
VIZCore3D.NET.Data.Vertex3D labelOffset3D =
new VIZCore3D.NET.Data.Vertex3D(holeRadius3D * 400, holeRadius3D * 400, 0);
// (1) offset 없음 오버로드 : 심볼 중심의 2D 좌표
VIZCore3D.NET.Data.Vertex3D center2D = vizcore3d.Drawing2D.Object2D
.Get2DViewPosBy3DPosition(modelObjID, holeCenter3D);
// (2) offset 적용 오버로드 (반경 방향) : 홀 외곽의 2D 좌표
// -> center2D 와의 2D 거리 = 캔버스 상의 실제 홀 반경
VIZCore3D.NET.Data.Vertex3D edge2D = vizcore3d.Drawing2D.Object2D
.Get2DViewPosBy3DPosition(modelObjID, holeCenter3D, radiusOffset3D);
float rdx = edge2D.X - center2D.X;
float rdy = edge2D.Y - center2D.Y;
float radius2D = (float)System.Math.Sqrt(rdx * rdx + rdy * rdy);
// (3) offset 적용 오버로드 (라벨 방향) : 라벨 배치 위치의 2D 좌표
VIZCore3D.NET.Data.Vertex3D label2D = vizcore3d.Drawing2D.Object2D
.Get2DViewPosBy3DPosition(modelObjID, holeCenter3D, labelOffset3D);
// (4) 계산된 2D 위치에 지름 표시 심볼 등록
int noteId = vizcore3d.Drawing2D.Measure.Add2DCircleDiameterMeasurement(
string.Format("ø{0:0.#}", holeRadius3D * 2.0f)
, new VIZCore3D.NET.Data.Vector3D(center2D) // 심볼 중심 (2D 좌표)
, new VIZCore3D.NET.Data.Vector3D(label2D) // 라벨 위치 (2D 좌표)
, radius2D
, 0.0f);
vizcore3d.Drawing2D.Render();
}
See also
Get2DViewPosBy3DPosition(int objID, Vertex3D position, Vertex3D offset)
public Vertex3D Get2DViewPosBy3DPosition(int objID, Vertex3D position, Vertex3D offset)
지정한 3D 뷰 개체의 투영 정보를 기준으로,
위치의 3D 월드 좌표를 2D 캔버스 좌표로 변환하여 반환합니다.
Remarks
objID 요건 및 실패 조건 은 Get2DViewPosBy3DPosition 와 동일합니다.
Parameters
| Name | Type | Description |
|---|---|---|
| objID | int | 2D 캔버스 상 3D 뷰 개체의 ID |
| position | Vertex3D | 기준 3D 월드 좌표. |
| offset | Vertex3D | 기준 좌표에서 더해질 3D 방향 오프셋. null 이면 (0,0,0) 로 처리. |
Returns
| Type | Description |
|---|---|
| Vertex3D | (position + offset) 위치를 변환한 2D 캔버스 좌표 (X, Y : 캔버스 mm, Z : 0). 실패 시 null. |
Examples
// VIZCore3D.NET Control
private VIZCore3D.NET.VIZCore3DControl vizcore3d;
private void Example()
{
// 모델 개체 ID 획득 (2D 캔버스에 투영된 3D 모델의 첫 번째 개체)
int modelObjID = vizcore3d.Drawing2D.Object2D.GetObjectAllinfoBy2DView()[0].ID;
// 선택된 파트에서 홀 검출 -> 첫 번째 홀 사용
List<VIZCore3D.NET.Data.Node> selParts =
vizcore3d.Object3D.FromFilter(VIZCore3D.NET.Data.Object3dFilter.SELECTED_PART);
List<VIZCore3D.NET.Data.NodeHoleItem> holes =
vizcore3d.GeometryUtility.GetNodeHoleInfo(selParts[0].Index);
VIZCore3D.NET.Data.NodeHoleItem hole = holes[0];
// 홀 중심 3D 좌표 + 반경 (NodeHoleItem 은 Vector3D 로 반환됨)
VIZCore3D.NET.Data.Vertex3D holeCenter3D = new VIZCore3D.NET.Data.Vertex3D(
hole.Center.X, hole.Center.Y, hole.Center.Z);
float holeRadius3D = hole.Radius;
// 반경 방향 3D 오프셋 : 판 평면 내 축인 hole.AxisX 방향으로 hole.Radius 만큼
VIZCore3D.NET.Data.Vertex3D radiusOffset3D = new VIZCore3D.NET.Data.Vertex3D(
hole.AxisX.X * holeRadius3D,
hole.AxisX.Y * holeRadius3D,
hole.AxisX.Z * holeRadius3D);
// 라벨을 홀 중심에서 우상단으로 반경 * 4 만큼 3D 오프셋 지점에 배치
VIZCore3D.NET.Data.Vertex3D labelOffset3D =
new VIZCore3D.NET.Data.Vertex3D(holeRadius3D * 400, holeRadius3D * 400, 0);
// (1) offset 없음 오버로드 : 심볼 중심의 2D 좌표
VIZCore3D.NET.Data.Vertex3D center2D = vizcore3d.Drawing2D.Object2D
.Get2DViewPosBy3DPosition(modelObjID, holeCenter3D);
// (2) offset 적용 오버로드 (반경 방향) : 홀 외곽의 2D 좌표
// -> center2D 와의 2D 거리 = 캔버스 상의 실제 홀 반경
VIZCore3D.NET.Data.Vertex3D edge2D = vizcore3d.Drawing2D.Object2D
.Get2DViewPosBy3DPosition(modelObjID, holeCenter3D, radiusOffset3D);
float rdx = edge2D.X - center2D.X;
float rdy = edge2D.Y - center2D.Y;
float radius2D = (float)System.Math.Sqrt(rdx * rdx + rdy * rdy);
// (3) offset 적용 오버로드 (라벨 방향) : 라벨 배치 위치의 2D 좌표
VIZCore3D.NET.Data.Vertex3D label2D = vizcore3d.Drawing2D.Object2D
.Get2DViewPosBy3DPosition(modelObjID, holeCenter3D, labelOffset3D);
// (4) 계산된 2D 위치에 지름 표시 심볼 등록
int noteId = vizcore3d.Drawing2D.Measure.Add2DCircleDiameterMeasurement(
string.Format("ø{0:0.#}", holeRadius3D * 2.0f)
, new VIZCore3D.NET.Data.Vector3D(center2D) // 심볼 중심 (2D 좌표)
, new VIZCore3D.NET.Data.Vector3D(label2D) // 라벨 위치 (2D 좌표)
, radius2D
, 0.0f);
vizcore3d.Drawing2D.Render();
}