在Pro/TOOLKIT中,类型ProEdge表示边。ProEdge和ProGeomitem之间可以相互转换:
- ProEdge -> ProGeomitem:ProEdgeToGeomitem
- ProGeomitem -> ProEdge:ProGeomitemToEdge
ProEdgeTypeGet用于获取边的类型,边的类型有以下几种
- PRO_ENT_LINE:直边。
- PRO_ENT_ARC:圆弧边。
- PRO_ENT_ELLIPSE:椭圆边。
- PRO_ENT_SPLINE:样条曲线边。
- PRO_ENT_B_SPLINE:B样条曲线边。
函数ProGeomitemdataGet用于获取边的数据,注意在用完之后要调用ProGeomitemdataFree来释放数据。
ProGeomitemdata下的ProCurvedata用于存储边的数据。对于不同类型的边,其数据分别用ProCurvedata类型下的不同变量来表示。
typedef struct geom_item_data_struct
{
ProType obj_type;
union
{
ProCurvedata *p_curve_data;
ProSurfacedata *p_surface_data;
ProCsysdata *p_csys_data;
}data;
} ProGeomitemdata;
typedef union ptc_curve
{
ProLinedata line; // 直边数据
ProArrowdata arrow;
ProArcdata arc; // 圆弧边数据
ProSplinedata spline; // 样条曲线边数据
ProBsplinedata b_spline; // B样条曲线边数据
ProCircledata circle;
ProEllipsedata ellipse; // 椭圆边数据
ProPointdata point;
ProPolygondata polygon;
ProTextdata text;
ProCompositeCurvedata comp_curve;
ProSurfcurvedata surf_curve;
} ProCurvedata;
示例代码:
// 获取边的数据
int TestGetEdgeData(uiCmdCmdId command,
uiCmdValue *p_value,
void *p_push_command_data)
{
ProError err;
// 选择边
ProSelection *sels;
int nSel = 0;
err = ProSelect("edge", 1, NULL, NULL, NULL, NULL, &sels, &nSel);
if (PRO_TK_NO_ERROR != err || 1 != nSel)
{
return -1;
}
// 获取选择的边
ProGeomitem geomEdge;
err = ProSelectionModelitemGet(sels[0], &geomEdge);
ProEdge edge;
err = ProGeomitemToEdge(&geomEdge, &edge);
ProEnttype edgeType;
err = ProEdgeTypeGet(edge, &edgeType);
// 获取边的数据
ProGeomitemdata* geomdata;
err = ProGeomitemdataGet(&geomEdge, &geomdata);
// 根据边的类型输出数据
CStringW cstrInfo;
switch (edgeType)
{
// 直边
case PRO_ENT_LINE:
{
CStringW cstrEdgeType = L"边的类型: 直边\n";
CStringW cstrEndInfo;
cstrEndInfo.Format(L"端点1: (%.2f, %.2f, %.2f) \n端点2: (%.2f, %.2f, %.2f)",
geomdata->data.p_curve_data->line.end1[0],
geomdata->data.p_curve_data->line.end1[1],
geomdata->data.p_curve_data->line.end1[2],
geomdata->data.p_curve_data->line.end2[0],
geomdata->data.p_curve_data->line.end2[1],
geomdata->data.p_curve_data->line.end2[2]);
cstrInfo = cstrEdgeType + cstrEndInfo;
}
break;
// 圆弧边
case PRO_ENT_ARC:
{
CStringW cstrEdgeType = L"边的类型: 圆弧边\n";
CStringW cstrVector1;
cstrVector1.Format(L"vector1 = (%.2f, %.2f, %.2f)\n",
geomdata->data.p_curve_data->arc.vector1[0],
geomdata->data.p_curve_data->arc.vector1[1],
geomdata->data.p_curve_data->arc.vector1[2]);
CStringW cstrVector2;
cstrVector2.Format(L"vector2 = (%.2f, %.2f, %.2f)\n",
geomdata->data.p_curve_data->arc.vector2[0],
geomdata->data.p_curve_data->arc.vector2[1],
geomdata->data.p_curve_data->arc.vector2[2]);
CStringW cstrArcCenter;
cstrArcCenter.Format(L"圆心: (%.2f, %.2f, %.2f)\n",
geomdata->data.p_curve_data->arc.origin[0],
geomdata->data.p_curve_data->arc.origin[1],
geomdata->data.p_curve_data->arc.origin[2]);
CStringW cstrRadius;
cstrRadius.Format(L"半径: %.2f\n", geomdata->data.p_curve_data->arc.radius);
CStringW cstrStartEndAngle;
cstrStartEndAngle.Format(L"起始角度: %.2f \n终止角度: %.2f",
geomdata->data.p_curve_data->arc.start_angle * 180.0 / 3.1415926,
geomdata->data.p_curve_data->arc.end_angle * 180.0 / 3.1415926);
cstrInfo = cstrEdgeType + cstrVector1 + cstrVector2 + cstrArcCenter + cstrRadius + cstrStartEndAngle;
}
break;
// 椭圆边
case PRO_ENT_ELLIPSE:
cstrInfo = L"边的类型: 椭圆边\n";
break;
// 样条曲线边
case PRO_ENT_SPLINE:
cstrInfo = L"边的类型: 样条曲线边\n";
break;
// B样条曲线边
case PRO_ENT_B_SPLINE:
cstrInfo = L"边的类型: B样条曲线边\n";
break;
default:
return -1;
break;
}
MessageBoxW(NULL, cstrInfo, L"icaxdev: Sample004", MB_OK);
// 释放数据
err = ProGeomitemdataFree(&geomdata);
return 0;
}