久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

機械社區

標題: Pro/ENGINEER開發工具Pro/TOOLKIT簡介 [打印本頁]

作者: sunshine1026    時間: 2008-8-6 14:00
標題: Pro/ENGINEER開發工具Pro/TOOLKIT簡介
1 前言    Pro/TOOLKIT是Pro/ENGINEER的一個應用程序接口(API),其的編程語言是C 語言,它可以對Pro/ENGINEER進行功能擴展,滿足PTC客戶的特定需求。而且,Pro/TOOLKIT提供了定制標準Pro/ENGINEER用戶界面的能力,自動執行重復性的程序,通過Pro/ENGINEER集成的內部程序(Dll)或外部應用程序(Exe)可以為造型用戶提供自定義的應用程序、設計規劃和繪圖自動化。
2 M2 x4 k- D( H1 g# X* e) c2 Pro/TOOLKIT編程條件和工具' m2 U3 l; {- K
    知道如何寫C程序,就已經具備了使用Pro/TOOLKIT的條件,應該能夠理解指針,當把數據從一個函數傳到另一函數時,將經常使用到它。Pro/TOOLKIT幫助,包含2000多個函數,并且可以通過例子代碼學習如何使用。除此之外,如果想解決幾何學問題,還需要對失量理論有一定的了解。2 D4 a, k0 e- D5 ^2 S. A! }. D
3 Pro/TOOLKIT程序中的結構體
  \8 K) [0 F% S7 h6 L" l- _    Pro/TOOLKIT都是用C語言編寫的,每個對象都用結構體來描述,因此需要了解對象是如何使用的。為了使用結構體,需要定義它,Pro/TOOLKIT提供許多“typedefs”,這些typedefs只不過是Pro/ENGINEER結構體的偽指令。例如:
2 ]& O1 `9 |+ stypedef struct entity* ProPoint;2 |4 t1 L# K$ J7 p8 L
typedef struct sld_part* ProSolid;
1 D# ]) [5 t4 D& _    這些也叫做OHandles (from Opaque handles),在Pro/ENGINEER中它們直接獲得對象的內存地址。在某些情況下,這樣做可能是危險的,因此PTC提供了另外一種結構體類型,它只包含Pro/ENGINEER的內部數據庫中項目的必要信息。這種結構體(labeled DHandle from data handle)是一種類的結構,它包括對象的類型、ID等。許多函數命令都和下面的結構體相聯系。
4 y: i! E7 h) S# I# \8 Qtypedef struct pro_model_item6 p. n2 g$ o; X; o
{
& ]! W# j* L/ l8 SProType type;
1 v3 I( u5 s# a, e+ jint id;; }3 {4 u+ u1 L; N
ProMdl owner;
2 F) E9 T2 P1 P; S! K& J( @}ProModelitem,ProGeomitem,ProExtobj, ProFeature,ProProcstep,ProSimprep,ProExpldstate,
5 m: [& k9 u8 T7 V4 RProLayer,ProDimension,ProDtlnote,ProDtlsyminst,ProGtol,ProCompdisp   # s/ v/ E5 z0 }% y

; g$ g: S3 I/ c& z( ]1 `  N    如果處理幾何問題,要用到ProModelitem、ProGeomitem 和ProFeature這幾個結構體。7 `" c- E2 O1 T/ N" ?9 {* r
4 Pro/TOOLKIT中的常用函數及使用% ]8 l1 V  B( \, `& @, o4 m
    需要了解的第一個函數是ProMdlCurrentGet()。在Pro/TOOLKIT幫助中其描述如下。  q$ L& ]2 m2 t
Description. T2 ]5 O7 W* M  n  M9 X+ e
Initializes the p_handle with the current Pro/ENGINEER object. 1 T) ^+ R, N0 ]' B' ]  l; i
Synopsis
4 H) K& u8 _! N) M& X# w! k+ {/ i#include <ProMdl.h>  q/ ^5 b0 q9 v' J
ProError ProMdlCurrentGet (
$ M; M; q+ [5 ]/ o, lProMdl *p_handle
5 X0 j) a9 T% E: F9 V/ Z# b: h3 ?/* (Out)
- {7 j  v" B6 o0 }/ N  {- I# PThe model handle
3 U& J  d$ D& f. U" W; s6 M: o*/, Z2 ]9 D7 a" g1 A# }) d
)
& r# z  L4 Y% y( q; P+ M, n這個函數包含一個參數-指針型參數,定義及使用方法如下。
6 l  g- K5 B( N- k9 r+ _2 jProMdl mdlhandle;1 ]; \& E2 @. ^! N, X, |2 E* y
ProMdlCurrentGet(&mdlhandle);
5 G& H1 P: s% q* o% U& Z) ?mdlhandle 是Ohandle型參數 ,能用這個對象做許多事情。例如,能用ProMdlDataGet()做一個調用并且獲得關于這個模型的一些初始信息。& m2 ~- \# W% s5 L( G9 l
ProMdldata mdldata;
3 O; u7 z; ?% i8 p" e- h. J/ I- _; dProMdlDataGet (mdlhandle, &mdldata);* ]8 d1 \# Q: k% U2 W  z1 i; A
    mdldata是一個簡單的結構體,包括名稱、類型、路徑和關于模型的一些其他信息。下面打印這個模型的類型。
' C: G- e1 [$ `( K( V, ^    不能直接執行printf("%s\n",mdldata.type),需要采用下面的方式,用ProWstringToString()把這種類型轉成一種規定的字符序列:3 f; ?8 P- K* V" u7 O
char type_in_c[PRO_TYPE_SIZE]; /* uses predefined Pro/T constants like PRO_TYPE_SIZE */
. X2 L' Z0 M9 V; `, e4 x  fProWstringToString (type_in_c, mdldata.type);# P; D7 f0 y5 t2 o1 C0 L% k+ ~
printf("%s\n",type_in_c);9 n$ y" d9 m6 y6 M
    現在打印模型的名字,就能象上面一樣,從mdldata結構中取出名字,也可以用另一種的方法。
& ^) r; \4 @0 w* l3 ?3 LProName current_name;
( y7 i* N8 N. C; e5 m1 Zchar current_name_in_c[PRO_NAME_SIZE];
, U* }; H) H5 ^, [' x9 QProMdlNameGet(mdlhandle, current_name);( }8 e! H( M, X" j0 j8 _! B4 \) F
ProWstringToString(current_name_in_c,current_name);
$ r; K6 N4 d* V) @% Q8 k) D! xprintf("%s\n", current_name_in_c);
4 ^4 [* Z5 Y  h" `% E    接著,我們看一下訪問函數。模型可能有大量包含許多子對象的對象。由于不知道這些對象的數量,需要能夠以某種方式收集要尋找的對象。對于這種類型的問題,需要用到PTC提供的訪問函數。
6 v! n5 W. \4 l! t7 x( ^- q    假設想訪問包含在一個模型中的所有特征并收集它們的ids。執行這個指令的函數是ProSolidFeatVisit()。其包括4個參數: ProSolid句柄、訪問函數指針、過濾函數指針和應用數據的結構體指針。過濾函數的目的是能夠過濾特定的對象,請看下面的例子:1 R/ {  I! m4 V1 Q. r
static ProError user_action_get_feat_ids(
- ~" D: q  j5 c, p+ I% gProFeature *feature,' t8 L4 i9 o' i; X% L+ A
ProError status,8 q( |. k% ]. Q- ?+ F
ProAppData appdata)
( t; k2 ]- |# @{
( S1 Y8 V$ f. ]+ C6 v. ^ProBoolean visible;: X+ V0 ]  W3 c+ K
vector<int> *fids = (vector<int> *)appdata;. t7 p4 l3 U7 t
ProFeatureVisibilityGet(feature,&visible); /*  only work with visible features */! J( M6 O" `) C! @* c5 U0 z6 Y9 i
if(visible == PRO_B_TRUE){ // and collect their ids 4 H+ d" D9 ]% L$ T) K0 B1 w
fids->push_back(feature->id);
( y3 G8 J6 v2 O% ?7 J0 Y}7 Y3 \$ F' `* r% z. Q; d& N( p
return(PRO_TK_NO_ERROR);- g; U9 [8 g0 F6 ]  r) v! G- T% e
}
9 R! B  H* x1 H2 T/ H, Q! gvector<int> feat_ids;
' T2 H' D+ e6 y; V4 x2 w6 b// the main Pro/TOOLKIT call
  \: g/ l: p9 SProSolidFeatVisit((ProSolid) mdlhandle,(ProFeatureVisitAction)user_action_get_feat_ids,NULL,(ProAppData)&feat_ids) ;注意前面提到的mdlhandle的使用,在函數調用中ProMdl 和 ProSolid能相互變換。還要注意,對于不想使用的過濾函數,賦該參數值為NULL。
, R& E! d- i- _( Y! G7 O& _1 v現在在feat_ids中獲得一系列ids,這樣就能使用它們執行一些任務,例如把它們打印出來:4 {" w1 g8 f/ p% o
for(unsigned int i=0; i<feat_ids.size(); i++){
& i1 ~" N& n, F# Dcout<<feat_ids<<endl;- \/ Z9 m8 ?& N! |1 A
}! R* F& b. |! O! w! \$ J, q6 P
5 結束語8 S' `$ m" E- u. t, v1 g
    以上提到的是需要學習Pro/TOOLKIT最基本、最常用的概念。建議學習這些例子時,可以不斷變化的進行實驗。另外,通過學習Pro/TOOLKIT幫助中的實例,不斷深入理解大量的函數,學會其使用方法,逐步開發出用戶需要的Pro/ENGINEER外掛模塊,以滿足特殊用戶的需求
作者: hdxpxp    時間: 2009-9-24 11:22
樓主對proe二次開發頗有見地,野火2.0以后,proe是不是只能用vc.net做開發了?不能用VC了。據說proe4.0引進了vb的接口,是不是也是.net而不是以前常說的VB?樓主用什么工具?很想在proe的基礎上作些工具,就是不知道怎么下手.




歡迎光臨 機械社區 (http://www.ytsybjq.com/) Powered by Discuz! X3.5