📄 listfeat.c
字号:
/*load head file*/
#include<ProToolkit.h>#include<Pro2dEntdef.h>#include<ProANSI.h>#include<ProAnimate.h>#include<ProArray.h>#include<ProAsmcomp.h>#include<ProAsmcomppath.h>#include<ProAssembly.h>#include<ProAxis.h>#include<ProChamfer.h>#include<ProClCmd.h>#include<ProColor.h>#include<ProComm.h>#include<ProConst.h>#include<ProContour.h>#include<ProContourdata.h>#include<ProCore.h>#include<ProCsys.h>#include<ProCsysdata.h>#include<ProCurve.h>#include<ProCurvedata.h>#include<ProDatumdata.h>#include<ProDisplist.h>#include<ProDtmAxis.h>#include<ProDtmCrv.h>#include<ProDtmCrvSketch.h>#include<ProDtmCsys.h>#include<ProDtmPln.h>#include<ProEdge.h>#include<ProEdgedata.h>#include<ProElemId.h>#include<ProElement.h>#include<ProElempath.h>#include<ProExpldstate.h>#include<ProExtdata.h>#include<ProExtobj.h>#include<ProExtobjCB.h>#include<ProExtobjDisp.h>#include<ProExtobjRef.h>#include<ProExtobjSel.h>#include<ProExtrude.h>#include<ProFaminstance.h>#include<ProFamtable.h>#include<ProFeatForm.h>#include<ProFeatType.h>#include<ProFeature.h>#include<ProFixture.h>#include<ProFlatSrf.h>#include<ProForeignCurve.h>#include<ProGeomitem.h>#include<ProGeomitemdata.h>#include<ProGraphic.h>#include<ProGroup.h>#include<ProHardware.h>#include<ProImportfeat.h>#include<ProIntfData.h>#include<ProItemerr.h>#include<ProLayer.h>#include<ProLayerR19.h>#include<ProMaterial.h>#include<ProMdl.h>#include<ProMenu.h>#include<ProMenuBar.h>#include<ProMessage.h>#include<ProMfg.h>#include<ProMfgoper.h>#include<ProModFeat.h>#include<ProMode.h>#include<ProModelitem.h>#include<ProNcseq.h>#include<ProNcseqElem.h>#include<ProNote.h>#include<ProNotify.h>#include<ProObjects.h>#include<ProParameter.h>#include<ProParamval.h>#include<ProPart.h>#include<ProPattern.h>#include<ProPecktable.h>#include<ProPoint.h>#include<ProProcstep.h>#include<ProQuilt.h>#include<ProQuiltdata.h>#include<ProRelSet.h>#include<ProReplace.h>#include<ProRevolve.h>#include<ProRmdt.h>#include<ProRule.h>#include<ProSecConstr.h>#include<ProSecdim.h>#include<ProSecdimType.h>#include<ProSecerror.h>#include<ProSection.h>#include<ProSelection.h>#include<ProSheetmetal.h>#include<ProSimprep.h>#include<ProSimprepdata.h>#include<ProSizeConst.h>#include<ProSolid.h>#include<ProStdSection.h>#include<ProSurface.h>#include<ProSurfacedata.h>#include<ProSweep.h>#include<ProTool.h>#include<ProToolElem.h>#include<ProToolinput.h>#include<ProUICmd.h>#include<ProUtil.h>#include<ProValue.h>#include<ProVerstamp.h>#include<ProView.h>#include<ProWcell.h>#include<ProWchar.h>#include<ProWindows.h>#include<ProWorkspace.h>#include<ProWstring.h>
/*--------------------------------------------------------------------*\Application global data\*--------------------------------------------------------------------*/static wchar_t MSGFIL[] = {'u','s','e','r','m','s','g','.','t','x','t','\0'};static uiCmdAccessState TestAccessDefault(uiCmdAccessMode access_mode){ return (ACCESS_AVAILABLE);}
/*---------------------- Application Includes ------------------------*/
#include "TestError.h"
/*---------------------- Global Data ------------------------*/
typedef struct surface_visit_data
{
FILE *fp;
ProSolid part;
} AxisVisitData_t;
/*---------------------- Function Prototypes -------------------------*/
int UsrFeatList();
ProError UsrFeatAction();
int UsrFeaturesCollect();
/*===========================================================================*\ Function : main Purpose : Test the ProToolkitMain() function. main is optional function.\*===========================================================================*/main(argc, argv)int argc;char **argv;{ ProToolkitMain(argc, argv); return(0);}/*====================================================================*\FUNCTION : user_initialize()PURPOSE : Pro/DEVELOP standard initialize - define menu button\*====================================================================*/int user_initialize( int argc, char *argv[], wchar_t errbuf[80]){ /* Declare function */ int ProTestInstallationCheck(); int i, menu_id; ProError status; uiCmdCmdId cmd_id;/*---------------------------------------------------------------------*\ Add new button to the menu bar\*---------------------------------------------------------------------*/ status = ProCmdActionAdd("MyCmd",
(uiCmdCmdActFn)UsrFeatList,
uiProe2ndImmediate, TestAccessDefault,
PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
status = ProMenubarmenuPushbuttonAdd(
"File", "MyCmd", "FeatList", "list feature of model",
"File.psh_exit", PRO_B_TRUE, cmd_id, MSGFIL);
return (0);
}/*====================================================================*\FUNCTION : user_terminate()PURPOSE : To handle any termination actions\*====================================================================*/void user_terminate(){
}/*====================================================================*\
函数 : UsrFeatList()
功能 : 列出特征
\*====================================================================*/
int UsrFeatList()
{
ProMdl model;
ProFeature *features;
int f, n_features, num;
ProFeattype ftype;
ProName name;
FILE *fp;
/*--------------------------------------------------------------------*\
取得当前的零件
\*--------------------------------------------------------------------*/
ProMdlCurrentGet(&model);
/*--------------------------------------------------------------------*\
使用UsrFeaturesCollect函数将特征存入一个可扩展数组中
\*--------------------------------------------------------------------*/
if(!UsrFeaturesCollect(model, &features))
return(0);
fp = fopen("featlist.txt","w");
/*--------------------------------------------------------------------*\
取得特征的数量
\*--------------------------------------------------------------------*/
ProArraySizeGet(features, &n_features);
/*--------------------------------------------------------------------*\
将特征id及其类型写入文件中并显示
\*--------------------------------------------------------------------*/
for(f=0;f<n_features;f++)
{
ProFeatureTypeGet(&features[f], &ftype);
fprintf(fp, "Feature number %2d, id %2d, type %d\n", f+1,
features[f].id, ftype);
}
fclose(fp);
ProStringToWstring(name, "featlist.txt");
ProInfoWindowDisplay(name, NULL, NULL);
return(1);
}
/*====================================================================*\
函数 : UsrFeatAction()
功能 : 访问特征时调用的动作函数
\*====================================================================*/
ProError UsrFeatAction(
ProFeature *feature,
ProError filter_status,
ProAppData data)
{
int n_feats, max;
ProBoolean visible;
ProFeatStatus status;
/*--------------------------------------------------------------------*\
如果特征是内部的则跳过
\*--------------------------------------------------------------------*/
ProFeatureVisibilityGet(feature, &visible);
if(!visible)
return(PRO_TK_NO_ERROR);
/*--------------------------------------------------------------------*\
如果特征不是当前活动的则跳过
\*--------------------------------------------------------------------*/
ProFeatureStatusGet(feature, &status);
if(status != PRO_FEAT_ACTIVE)
return(PRO_TK_NO_ERROR);
/*--------------------------------------------------------------------*\
检查是否数量对于一个可扩展数组是否太大
\*--------------------------------------------------------------------*/
ProArraySizeGet(*(ProArray*)data, &n_feats);
ProArrayMaxCountGet(sizeof(ProFeature), &max);
if(n_feats == max)
return(PRO_TK_OUT_OF_MEMORY);
/*--------------------------------------------------------------------*\
将特征加入至数组
\*--------------------------------------------------------------------*/
ProArrayObjectAdd((ProArray*)data, -1, 1, feature);
return(PRO_TK_NO_ERROR);
}
/*====================================================================*\
函数 : UsrFeaturesCollect()
功能 : 创建一个储存活动特征的可扩展数组
\*====================================================================*/
int UsrFeaturesCollect(ProSolid solid, ProFeature **features)
{
/*--------------------------------------------------------------------*\
分配空数组
\*--------------------------------------------------------------------*/
ProArrayAlloc(0, sizeof(ProFeature), 1, (ProArray*)features);
/*--------------------------------------------------------------------*\
访问给定实体中的所有特征
\*--------------------------------------------------------------------*/
if(ProSolidFeatVisit(solid, UsrFeatAction, NULL, features) !=
PRO_TK_NO_ERROR)
{
ProArrayFree((ProArray*)features);
return(0);
}
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -