金属加工论坛
贸易平台·行业报道·技术社区
论坛名称:中国金属加工论坛    网址:http://www.mw1950.com/forum/
 提醒您:如果本页图片或flash动画无法正常显示,请点击这里访问原帖。
pro/engineer开发工具pro/toolkit简介 作者:ctlove 时间:2007-5-31 14:04:00
1


  • pro/toolkit可以开发定制、扩展pro/engineer的功能,介绍其常用函数的功能和使用方法,及其基本操作步骤。 1 前言   pro/toolkit是pro/engineer的一个应用程序接口(api),其的编程语言是c 语言,它可以对pro/engineer进行功能扩展,满足ptc客户的特定需求。而且,pro/toolkit提供了定制标准pro/engineer用户界面的能力,自动执行重复性的程序,通过pro/engineer集成的内部程序(dll)或外部应用程序(exe)可以为造型用户提供自定义的应用程序、设计规划和绘图自动化。 2 pro/toolkit编程条件和工具   知道如何写c程序,就已经具备了使用pro/toolkit的条件,应该能够理解指针,当把数据从一个函数传到另一函数时,将经常使用到它。pro/toolkit帮助,包含2000多个函数,并且可以通过例子代码学习如何使用。除此之外,如果想解决几何学问题,还需要对失量理论有一定的了解。 3 pro/toolkit程序中的结构体   pro/toolkit都是用c语言编写的,每个对象都用结构体来描述,因此需要了解对象是如何使用的。为了使用结构体,需要定义它,pro/toolkit提供许多“typedefs”,这些typedefs只不过是pro/engineer结构体的伪指令。例如: typedef struct entity* propoint; typedef struct sld_part* prosolid;   这些也叫做ohandles (from opaque handles),在pro/engineer中它们直接获得对象的内存地址。在某些情况下,这样做可能是危险的,因此ptc提供了另外一种结构体类型,它只包含pro/engineer的内部数据库中项目的必要信息。这种结构体(labeled dhandle from data handle)是一种类的结构,它包括对象的类型、id等。许多函数命令都和下面的结构体相联系。 typedef struct pro_model_item { protype type; int id; promdl owner; }promodelitem,progeomitem,proextobj, profeature,proprocstep,prosimprep,proexpldstate, prolayer,prodimension,prodtlnote,prodtlsyminst,progtol,procompdisp    如果处理几何问题,要用到promodelitem、progeomitem 和profeature这几个结构体。 4 pro/toolkit中的常用函数及使用   需要了解的第一个函数是promdlcurrentget()。在pro/toolkit帮助中其描述如下。 description initializes the p_handle with the current pro/engineer object. synopsis #include proerror promdlcurrentget ( promdl *p_handle /* (out) the model handle */ ) 这个函数包含一个参数-指针型参数,定义及使用方法如下。 promdl mdlhandle; promdlcurrentget(&mdlhandle); mdlhandle 是ohandle型参数 ,能用这个对象做许多事情。例如,能用promdldataget()做一个调用并且获得关于这个模型的一些初始信息。 promdldata mdldata; promdldataget (mdlhandle, &mdldata);   mdldata是一个简单的结构体,包括名称、类型、路径和关于模型的一些其他信息。下面打印这个模型的类型。   不能直接执行printf("%s\n",mdldata.type),需要采用下面的方式,用prowstringtostring()把这种类型转成一种规定的字符序列: char type_in_c[pro_type_size]; /* uses predefined pro/t constants like pro_type_size */ prowstringtostring (type_in_c, mdldata.type); printf("%s\n",type_in_c);   现在打印模型的名字,就能象上面一样,从mdldata结构中取出名字,也可以用另一种的方法。 proname current_name; char current_name_in_c[pro_name_size]; promdlnameget(mdlhandle, current_name); prowstringtostring(current_name_in_c,current_name); printf("%s\n", current_name_in_c);   接着,我们看一下访问函数。模型可能有大量包含许多子对象的对象。由于不知道这些对象的数量,需要能够以某种方式收集要寻找的对象。对于这种类型的问题,需要用到ptc提供的访问函数。   假设想访问包含在一个模型中的所有特征并收集它们的ids。执行这个指令的函数是prosolidfeatvisit()。其包括4个参数: prosolid句柄、访问函数指针、过滤函数指针和应用数据的结构体指针。过滤函数的目的是能够过滤特定的对象,请看下面的例子: static proerror user_action_get_feat_ids( profeature *feature, proerror status, proappdata appdata) { proboolean visible; vector *fids = (vector *)appdata; profeaturevisibilityget(feature,&visible); /* only work with visible features */ if(visible == pro_b_true){ // and collect their ids fids->push_back(feature->id); } return(pro_tk_no_error); } vector feat_ids; // the main pro/toolkit call prosolidfeatvisit((prosolid) mdlhandle,(profeaturevisitaction)user_action_get_feat_ids,null,(proappdata)&feat_ids) ;注意前面提到的mdlhandle的使用,在函数调用中promdl 和 prosolid能相互变换。还要注意,对于不想使用的过滤函数,赋该参数值为null。 现在在feat_ids中获得一系列ids,这样就能使用它们执行一些任务,例如把它们打印出来: for(unsigned int i=0; i

  • 所属版面:CAD交流区 本帖第1页
    共有回复: 0 共有页数: 1 显示帖数:50


    欢迎光临中国金属加工论坛 网址:http://www.mw1950.com/forum/