3D 형상을 BOX 형태의 사이즈를 알아보는 프로그램 입니다. CREO에서는 대각선 사이즈는 3D point를 제공 합니다. CREO의 사이즈 계산 기능 문제점은 데이텀 커브, 데이텀 평면, 서피스를 사이즈 계산에 포함 시킵니다.
J-LINK) 사이즈 계산 코드
import com.ptc.cipjava.*;
import java.io.*;
import com.ptc.pfc.pfcGlobal.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcBase.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcGeometry.*;
import java.awt.*;
public class diagonal{
static Session session;
static Solid solid;
static Outline3D outline;
static Transform3D trans3;
static Point3D point1,point2,point3;
static double x, y, z,k,l,m,diagonal,p,q,r,sum;
static CoordSystem cor;
static ModelItems mitems;
static ModelItemType item1 =ModelItemType.ITEM_AXIS;
static ModelItemType item2 =ModelItemType.ITEM_POINT;
static ModelItemType item3 =ModelItemType.ITEM_COORD_SYS;
static ModelItemTypes modtyp;
static String name;
public static void start ()
{
try {
session=pfcGlobal.GetProESession();
solid =(Solid)session.GetCurrentModel();
mitems=solid.ListItems(ModelItemType.ITEM_COORD_SYS);
cor=(CoordSystem)mitems.get(0);
trans3=cor.GetCoordSys();
name=cor.GetName();
System.out.println("The Name of the cordinate-system is "+name);
point1=trans3.GetOrigin();
k=point1.get(0);
l=point1.get(1);
m=point1.get(2);
System.out.println("The Value of x cordinate of origin is "+k);
System.out.println("The Value of y cordinate of the origin is "+l);
System.out.println("The Value of z coordinate of the origin is "+m);
modtyp=ModelItemTypes.create();
modtyp.set(0,item1);
modtyp.set(1,item2);
modtyp.set(2,item3);
outline=solid.EvalOutline(trans3,modtyp);
point2= outline.get(0);
x = point2.get(0);
y = point2.get(1);
z = point2.get(2);
point3=outline.get(1);
p= point3.get(0);
q = point3.get(1);
r = point3.get(2);
sum=Math.pow(p-x,2)+Math.pow(q-y,2)+Math.pow(r-z,2);
diagonal=Math.sqrt(sum);
new SuccessDialog(new Frame(), true, p-x, q-y, r-z,diagonal);
System.out.println("The Value of the diagonal is "+diagonal);
return;
}
catch (jxthrowable x1)
{
System.out.println("Exception caught: "+x1);
x1.printStackTrace();
System.exit(-1);
}
}
public static void stop (){
System.out.println("Stopping J-link ");
}
}
PTC 사이트
IpfcSolid.EvalOutline 기능을 사용 하여, 솔리드 모델 사이즈를 계산 합니다.
- 좌표계를 기준으로 사이즈 계산을 합니다. 모델에서 좌표계의 이름은 "PRT_CSYS_DEF" 으로 정의 되어있어야 합니다
아래 코드는 좌표계 위치에 따라 값이 달라 지고, "1.5" 정도 오류가 있습니다
- EpfcITEM_AXIS, EpfcITEM_COORD_SYS, EpfcITEM_POINT 사이즈 계산에서 제외 할 수 있습니다.
(IpfcSolid.EvalOutline는 기능 제약이 있습니다)
- IpfcTransform3D 매소드는 좌표계를 행렬로 변환해 줍니다
□ VBA) 부품의 외부 치수를 계산하는 방법을 소개합니다.
윤곽 치수 계산은 참조 좌표계와 밀접하게 관련되어 있습니다. IpfcSolid에 있는 VBAPI의 1)GeomOutline 속성은 기본 좌표계에서 윤곽 치수를 얻을 수 있으며 2) EvalOutline 메서드는 선택한 좌표계에서 윤곽 치수를 얻을 수 있습니다. EvalOutline 함수에는 두 개의 매개변수가 있는데, 첫 번째는 기준 좌표계이고, 두 번째는 윤곽선 크기를 계산할 때 무시할 수 있는 모델 아이뎀을 선택 할수 있습니다.
* CREO 모델과 연결 하는 코드 (모듈 : CreoVBAStart)
Option Explicit
Public asynconn As New pfcls.CCpfcAsyncConnection
Public conn As pfcls.IpfcAsyncConnection
Public BaseSession As pfcls.IpfcBaseSession
Public Model As pfcls.IpfcModel
Public Sub CreoConnt01()
'// connect creo model
Set conn = asynconn.Connect(Null, Null, Null, Null)
Set BaseSession = conn.Session
Set Model = BaseSession.CurrentModel
'// creo model connection check
If Model Is Nothing Then
MsgBox "There are No Active Creo Models", vbInformation, "korealionkk@gmail.com"
Exit Sub
End If
End Sub
1. IpfcSolid.GeomOutline
Creo VBA API에서 3D 모델 또는 솔리드의 기하학적 외곽선(경계 박스, Bounding Box) 을 가져오는 데 사용됩니다. 이 외곽선은 모델의 기준 좌표계(Base Coordinate System) 를 기준으로 계산됩니다.
GeomOutline 속성은 모델의 형상(geometry) 자체에 따라 계산되며, 모델이 좌표계와 붙어 있거나 떨어져 있는 위치는 크기에 영향을 미치지 않습니다. 이 속성은 모델의 절대 크기를 계산하기 위한 경계 박스(Bounding Box)를 반환하는 것이며, 모델의 기하학적 형상을 기준으로 합니다. 좌표계와의 위치 관계는 경계 박스 크기에 영향을 주지 않습니다.
복합 모델인 경우 (솔리드 형상이 떨어진 경우):
경계 박스는 모델의 전체 형상을 기준으로 계산됩니다. 만약 여러 형상(파트)이 서로 떨어져 있는 경우, 모든 형상을 포함하는 경계 박스를 계산하기 때문에 크기가 달라질 수 있습니다.
Property GeomOutline as IpfcOutline3D
IpfcOutline3D 클래스
IpfcOutline3D 클래스는 3차원 윤곽선을 저장하는 2x1 배열입니다. 이 배열은 인덱스를 통해 요소에 접근하거나 요소를 수정할 수 있는 메서드를 제공합니다. 배열 객체는 자체적으로 배열의 "차원"을 알지 못하며, 배열의 크기는 2로 고정되어 있습니다. 배열 차원: [2]
IpfcOutline3D는 3D 좌표를 담는 두 개의 포인트(IpfcPoint3D)를 저장하는 데 사용됩니다.
- Index = 0: 3D 윤곽선의 첫 번째 포인트.
- Index = 1: 3D 윤곽선의 두 번째 포인트.
각 포인트는 X, Y, Z 좌표를 포함하며, 이를 활용해 모델의 윤곽선 길이, 크기 등을 계산할 수 있습니다.
이 클래스는 3D 공간에서 시작점과 끝점을 정의하는 데 사용되며, 이를 통해 윤곽선의 크기를 측정할 수 있습니다.
메서드 세부 정보
- Function Item(Index As Long) As IpfcPoint3D
1) 기능: 배열 내 특정 인덱스의 항목(3D 포인트 데이터)에 접근합니다.
2) 매개변수:
Index: 배열의 요소를 지정하는 정수형 인덱스입니다.
3) 반환값:
IpfcPoint3D 객체. 이 객체는 X, Y, Z 좌표를 나타냅니다.
- Sub Set(Index As Long, Item As IpfcPoint3D)
1)기능: 배열의 특정 인덱스에 3차원 포인트 데이터를 할당합니다.
2) 매개변수:
Index: 데이터를 할당할 배열의 요소 인덱스입니다.
Item: 할당할 IpfcPoint3D 객체입니다.
Public Function CurrentOutline() As Variant
Dim Solid As pfcls.IpfcSolid
Dim outline(2) As Double
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double, z1 As Double, z2 As Double
' GeomOutline 값을 계산
x2 = Solid.GeomOutline.Item(1).Item(0)
x1 = Solid.GeomOutline.Item(0).Item(0)
y2 = Solid.GeomOutline.Item(1).Item(1)
y1 = Solid.GeomOutline.Item(0).Item(1)
z2 = Solid.GeomOutline.Item(1).Item(2)
z1 = Solid.GeomOutline.Item(0).Item(2)
outline(0) = Abs(x2 - x1)
outline(1) = Abs(y2 - y1)
outline(2) = Abs(z2 - z1)
' 결과 반환
CurrentOutline = outline
End Function
'VBA, VB.NET For Creo' 카테고리의 다른 글
CREO 파일 타입 알아보기 (0) | 2021.02.18 |
---|---|
Part List 프로그램 (0) | 2021.02.16 |
재질 파일 설정 (0) | 2021.02.15 |
무게와 관련된 매개변수 (0) | 2021.02.15 |
#3 여러개의 drw 파일 → 2D pdf 파일 변환 프로그램 (0) | 2021.02.12 |