PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

[二次开发源码] UG二次开发源码分享:UG NX CAM加工开发简单实例

  [复制链接]

2017-12-11 15:49:09 8127 5

admin 发表于 2014-6-7 10:50:25 |阅读模式

admin 楼主

2014-6-7 10:50:25

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x

5 b6 }$ @7 g/ ]. {5 e1 v/ _3 M% N6 K% A+ b1 H

! ^% w3 J, K9 |# t; ?5 S5 I+ I5 n5 `1 W/ m* L# T9 t

#include <stdlib.h>: d- Q- Q, V5 l9 q( T
#include <stdio.h>

#include <uf.h>
2 V  T) t/ J3 F! o" Y( `6 ?#include <uf_object_types.h>
1 j% B. [/ M3 T$ t- o5 n0 o: t#include <uf_ui.h>% u% Y: ~) \" D
#include <uf_disp.h>" I! F0 T" j' w% V. |8 e) f
#include <uf_obj.h>
" A' M0 ~% n+ Q" O. X#include <uf_cam.h>( q! c7 G+ u. _6 b  d; G
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
8 B8 a1 S; c4 F1 D) u. u#define EXIT_SUCCESS 0

/*#define DEBUG*/

static char *title1 = "Select an API routine...";

static int geoption;
+ t6 J6 _/ m$ G. [2 ]static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何% U4 P* U5 p/ Z! u: j: o' W8 b
static char menu3[][38] = { "1) Part Geometry",
( @- A' p2 }+ ]$ N% K6 \"2) Blank Geometry",6 M5 z) {0 d- B. w) Y- V
"3) Drive Geometry",3 x2 [2 `) o9 _+ ?; r$ j) ]
"4) Cut Area Geometry",  U  c0 y+ n/ D% D
"5) Trim Geometry",
0 s# Y% q$ y% U- q6 j3 {$ A+ C# q9 R"6) Selection Complete"};

static int init_proc(UF_UI_selection_p_t select, void *user_data);//初始化程序

static void init_camgeom_app_data(UF_CAMGEOM_app_data_p_t app_data);

int ufd_camgeom_ugroup( tag_t objTag, int obj_count )

{
* g7 d) l' s# N$ H2 n1 MUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
! |1 J# S! @8 Ntag_t *objects, entity_list[MAX_CAMGEOM];5 c9 C4 Y2 X& N1 V/ Z4 u# v
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";- ]  O% N, n% }8 O/ f0 u* h2 P
char *cue = "Identify Geometry - Wait for the Filter!";- |0 k* r. I% b9 C
char errorstrg[133];
7 l1 o  f; a# ]int response, irc;
! H% b0 `5 q9 V# {! K/ Ptag_t eid, view;
: O0 \3 Y; m, s2 `double cursor[3];

#ifdef DEBUG
& z# ]; D: o" N/ a5 M  `printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
9 U4 N/ v0 q( _#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
) D+ c2 N9 E% ^# h{
/ y# m9 ^# y/ e3 ]/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

geoption = uc1603(title3, 1, menu3, 6);

if (geoption == 1 || geoption == 2 || geoption == 10 )6 ?: O' a/ H2 R' o' o& _
{+ q' V0 j7 J3 {/ f. d* h
break;* r" k$ _" e& o! P" U* j5 p- }
}& S& \6 Z5 s; m0 b: G$ k% k  c
#ifdef DEBUG
, o+ D/ m5 o; @printf("\n Geometry option returns %d\n", geoption);
2 ?% w9 P" h- L#endif; W+ L2 ~: @, o& L, h' }
/* Allow the user to select faces or bodies. 选取面和实体*/

/* Pass in this function the object to be assigned geometry 通过函数,对象被分配到几何体 */

if (obj_count > 0 )
6 V  p$ Y2 Q1 ~7 V  d% {{
4 E& R0 i6 b$ S1 r5 j' E4 Z+ q! ~entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,' Y; {6 T5 k; L0 I9 s9 M
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,3 x( X# r, m3 i( u) d' ^+ J+ R( V
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义8 r5 r! S. F2 z* x
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)& D% v8 D# a: ?- k
{% i& r9 |, X# ]
entity_list[entity_count] = eid;1 @- @6 W/ w3 V# B* Q) g
#ifdef DEBUG9 I. q5 z1 T- q) V' z
printf(" EID number returns %d\n", eid );9 r: E- N; ^) W# C
#endif

/* Allocate the memory for the application data of an item. 为当前的应用数据分配内存*/

app_data_list[entity_count] = (UF_CAMGEOM_app_data_p_t)UF_allocate_memory(sizeof(UF_CAMGEOM_app_data_t),' {' r9 f4 s: ?- O: m3 e0 q
&err_code);

/* Initialize the application data.初始化应用数据 */

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;$ Z( \3 A8 A( }9 E. s3 S( R3 l
}+ r1 b0 ^5 ?; C. s$ c0 R
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )# G8 c$ Y' B; K. l  @( n
{
1 A4 n& x5 a/ _1 x% t$ [/* Geometry selection is finished.几何体选取完成 */1 q/ C3 e5 [* s  L4 k. _0 K
break;& Z5 u6 A& \4 m; t
}
. }2 Z* M5 D) h% Y) T}0 A9 M1 f2 O: m3 ~) T
#ifdef DEBUG* ^' l2 y/ R) f1 H
printf(" Entity count this selection is %d\n",entity_count);
; L; s) _& v* p/ A9 ^#endif

if (entity_count > 0), E7 H# w' ]5 o- G: k3 P
{
3 i8 G+ S' |' z3 K6 R7 g/* UF_CAMGEOM_item_t *items;
/ K% H2 [8 w) Q7 K, n* Q4 W. V3 jint item_count;*/

for( i = 0; i < obj_count; i++ ). ]* v) w4 ^( [! a8 _  M9 W
{1 M/ _6 S3 h2 p+ L4 r4 \
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
( I, S0 ^0 S8 h4 f" ?2 h7 jtype == UF_machining_geometry_grp_type)

#ifdef DEBUG3 ^6 a! }, D$ c- B6 `  @0 z& K
printf("\n Current entity count is %d", entity_count);
) `! [6 \0 I8 F% i7 I5 B8 aprintf("\n Current object count is %d", obj_count);
- K1 r. Z/ g1 v9 ~; ^6 r% wprintf("\n Geometry option is %d \n", geoption );
" h7 Q2 e% ^" Y5 [/ p/ i#endif

/* Above prints to help in debugging if "DEBUG" defined. */

{! g4 e) p4 Z% s  B) X1 |2 [$ U
swiTCh (geoption)( c, f; @" B8 b6 I; g3 `
{
) A& X6 G# c; J: A* a% [case 1:
, \) U9 \# O1 G* d1 C* ?4 t& Ecase 2:
6 v/ l" v- K1 a, \: c/ {, B+ Fcase 3:
) S# V' E) j/ v* Y' U1 E% K5 ucase 4:! ^' J/ L/ U, o) T8 _: r# d. F( q! i$ C
case 5: /* Part Geometry 部件几何体*/
- P1 ~7 L7 Z, M8 ^! l! x4 [( ]{3 q: i& K0 l  q  A( K3 b+ K
#ifdef DEBUG
3 D2 g+ s/ x1 ?# Uprintf("\n Type returned is %d", type);7 f; i8 d; }9 E9 ?* Y; R# t
printf("\n Subtype returned is %d", subtype);
. Y0 F( }9 a4 c9 b- b#endif6 N( m: @8 H. w& Q1 O4 y8 D! W* U
{* H' J6 y: {7 R
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
; O9 |6 ^" V9 G9 e" i1 C2 F! Ventity_list, app_data_list );
) F  A% B. T) |5 R$ B//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。2 X( `% `3 ~# I
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
3 |8 w; h2 v6 h% y1 X4 d0 W}
& C8 d( O. U0 A! kif ( irc != 0 )9 Y* P. D5 X# G! Y& [7 K
{7 }# [- r  ^- Z% ^5 Y# x
UF_get_fail_message( irc, errorstrg );
5 r* J* I+ ]% w/ |+ jprintf("\n The return code is %d\n", irc);+ f6 ^9 k; @0 i0 q2 F0 G7 n* O
printf("\n Error code translates to %s\n", errorstrg);9 C) @+ Y4 q" Q1 A* s  [0 h
return objTag;
' `) ~% R4 ]+ K- W}3 _$ P- W" R, a! u' V! K
break;
+ V( ]& o1 H/ K6 q4 U4 D6 _}

case 6: /* Blank Geometry 空白几何体*/
! ?! G  h% t* j3 g9 V! y6 I, Z{
- W3 ^1 o. q# C% k2 N# m#ifdef DEBUG9 ?4 k/ t; p' M3 s3 A
printf("\n Type returned is %d", type);! A! ?7 }" E( {% S" }4 [/ ]. s
printf("\n Subtype returned is %d", subtype);
' z, @( {* a: @) M#endif+ f# c! F, v* r
{
; y$ F' w3 T+ ]& N7 @: oirc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
. E$ x+ J+ m5 M3 Z3 |( Jentity_list, app_data_list );& a3 V4 z  X; s) d$ t$ r
}/ d; y: \& N. z4 X, ^5 O
if ( irc != 0 )
  f3 l: }7 d- R1 s- F+ K{6 T+ q9 u3 S" w7 t" f# Y
UF_get_fail_message( irc, errorstrg );) E  Y7 w3 m) l- e! L; v
printf("\n The return code is %d\n", irc);
2 K( ?: p- \( o' H, A- _6 kprintf("\n Error code translates to %s\n", errorstrg);
# I7 E7 s) a: \0 N; Greturn objTag;
" K3 @. x4 j" \  @( B$ `}% h" k- p: N. S
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/
& U6 Q, H# S0 Z/ e6 z* W+ W{
5 D- D2 C& j0 N6 }. J/ n5 {#ifdef DEBUG; k$ ]1 K% n. `! M3 x: b
printf("\n Type returned is %d", type);
0 s1 Q% ]$ m- u, A: q6 b- ~+ N) mprintf("\n Subtype returned is %d", subtype);
, r  a( W  P- t+ u4 A8 P8 w#endif  C: ~$ ~" B: E, W
{) f: X+ B# M& t# X9 o" l: t
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,& x8 w" [7 Q1 w7 f6 R
entity_list,app_data_list);
/ n* R4 V, G/ D0 r- ?! p}
5 c; M- {! |( b$ sif ( irc != 0 )
$ h+ `: h% }) d3 e{. t8 f1 G2 E- R$ V
UF_get_fail_message( irc, errorstrg );/ E; \8 h' t0 Q/ }& G* x1 c5 x& _
printf("\n The return code is %d\n", irc);
  p1 O. \  x* ?! ^5 Q, H2 F) Y' N( Rprintf("\n Error code translates to %s\n", errorstrg);
& j& S6 r6 t* g0 D- y9 T* @! qreturn objTag;
! ^5 L8 [5 U! V3 S+ u}( B+ ^$ S1 Z9 @  \1 F0 D
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/- _8 w1 _/ B* [: ^) P
{7 I: }) o3 V6 a% O# }7 W* D
#ifdef DEBUG, v7 a% t  l3 Z- |, J5 q
printf("\n Type returned is %d", type);
0 E$ e* I, v* L' Q+ w* oprintf("\n Subtype returned is %d", subtype);
! {8 O# R/ F+ G( e) @7 s; Y8 v#endif
& P& p$ o6 w" Q8 y$ k+ f{
' k2 a' m: p. G4 a5 `% ~irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
5 i+ j- B' z! r' c+ r6 pentity_list, app_data_list );- m; ^' r) u( x
}
0 b7 Q6 E6 G8 R8 `' s, S) G- Vif ( irc != 0 )5 G/ u$ L: {8 F! Q/ I
{
4 I2 g/ k" B1 L) MUF_get_fail_message( irc, errorstrg );
, D0 q1 y9 K$ M6 l/ N: yprintf("\n The return code is %d\n", irc);
2 j# L4 h& B8 m0 x8 s( Q( h( nprintf("\n Error code translates to %s\n", errorstrg);
9 C" M# r( Y4 i4 d. W* \5 breturn objTag;
" Y" N. M8 e( f; V+ X  A}
: l3 O" r' V" I* Y7 Y5 ^" c2 }- |* Nbreak;" {0 Z8 a3 j! {; H* v  M4 _9 F3 A
}7 l" Z4 l: c$ G7 I' g( c% N7 _: o
case 9: /* Trim Geometry 修剪几何体 */
. U  ?8 d& I7 V1 v. G9 F{! i: b$ q/ H0 d, }7 A0 B
printf("This case not implemented.\n");) n% X7 p# a7 d, ~  r
break;& F0 n: z* [8 j0 T# B  ~
}
" @4 F/ B( @( Y. K5 i2 {/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
9 q6 ?' y- d$ J. }% e! |% z{
0 v% b+ ^  L" b$ Sbreak;
- {; i+ G: K& ]}) l5 b8 Y% O; A* n' x* R$ L
}- m8 J* t, Y6 G. T! {. A
}
$ Y3 y3 }& C1 ~  c& `6 Z0 L}  I. ]9 W' f" B  Y+ v" Q
}6 A; y7 V7 m! Q6 @% a, D
}) j2 P0 i5 W" _' G
}1 S; w$ d9 y0 C  ?8 w5 t$ H9 T
/* Free the Allocated Memory. 释放内存*/! r9 Q) @7 j. L4 @+ p7 v  R1 d
for (i=0; i<entity_count; i++)
  p3 R, }( Z# ^$ j0 t{' e9 U1 q. l/ U: i$ u
UF_free (app_data_list);
5 T" M8 D' S3 k: k( y1 Y; l7 b* ?( L}

/* UF_free (objects);*/

return(0);: c% x! I4 z4 g- g& c# m) R, v( K
}' ?% }" k' r! S1 E
/* Selection initialization procedure 选择初始化程序*/3 S' l# u2 q/ {/ D- _. |
static int init_proc
) c2 M; n, a$ U5 s  \(
& b! g; I$ l+ m8 ^/ ?- H5 ]UF_UI_selection_p_t select,//指针 pointer
* a- P! h' N) l2 H7 M* x4 R2 Xvoid* user_data
2 P0 a( w: ]0 E)
  Q( u. Z) k7 X4 J, m{8 H9 B( @) Z1 H* l9 n: \
int num_triples = 3;
4 z6 L" B7 L' Q( c" z5 K//最终指定的特征类型. l; k* N2 V, `9 G* `( F
UF_UI_mask_t mask_triples[] = {
+ @$ m) E7 a  R1 B0 oUF_line_type, 0, 0,
& D$ h: o/ Z# R& C# g0 M( F: i" \UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,9 u9 \7 N2 r7 Z- M
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

/* Enable Faces and Solid Bodies允许选取面和实体 */

if((UF_UI_set_sel_mask(select,' n7 l9 _+ Z1 g; P) l+ S$ @$ G
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
# a0 m" V8 _# c/ P, d5 d. Cnum_triples, mask_triples)) == 0)//3倍 3*3=9

{: O' ]- P  ]1 O; h' O: F5 N
return (UF_UI_SEL_SUCCESS);
! o+ R" P+ N4 n6 Q- s! K4 h}
' T1 R( s6 L8 Jelse
5 Y' ~: s, x( x! N1 ~2 A' `1 q{
) G% M4 g) d0 ^8 z6 v1 i* |return (UF_UI_SEL_FAILURE);
5 n( V& J% |# j, u7 Z$ U) e6 Y- R}
/ v& l( |; c+ m" G5 w* n1 C9 d}
- y* ]6 T. y( i3 Z$ d, q5 Kstatic void init_camgeom_app_data& y3 e' ~5 t8 i8 v% I$ M  r9 I3 K6 h
(" ?; \: }- Y* I. z0 d' K, `, j
UF_CAMGEOM_app_data_p_t app_data
8 B, a5 U8 \2 Q3 R$ n5 c; P)* a1 k+ a; X' P6 \4 _6 |) b6 H' K
{
3 |5 C* A' a& k6 F9 O: s& Hif (app_data)
' Y. w: A3 l8 o{
2 ]# p( ^/ w" P/ I/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
9 \$ ~, Y# ]# e% d4 ^app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
7 o" }" t8 Q5 K$ a# U) X0 {( xapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 *// |4 C5 D, `  c4 x, L- r; ?
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */6 G: I, c" X# B
app_data->has_offset = 0; /* Used 1 - Else 0 */
3 i7 W0 j, G( j7 fapp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
1 _9 f% X( x7 a% l% J7 h! H% Rapp_data->stock = 0.033 ;: z8 w! L1 P+ O
app_data->cut_stock[0] = 0.2 ;
! x# {# R/ V5 G$ w/ X( oapp_data->cut_stock[1] = 0.1 ;3 i, J# m/ Q! D7 S" q( x/ c
app_data->cut_stock[2] = 0.5 ;9 m' R: e  @9 f  E* ~
app_data->tolerances[0] = 0.003 ;
! I, u# n+ ]4 R1 K! }5 Tapp_data->tolerances[1] = 0.003 ;2 B  h  d2 p7 U0 E8 c; d1 v! n
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;1 @9 w" U6 r) d+ |' I
app_data->feedrate_value = 33.0 ;
6 @, T2 f. T0 x1 a9 u9 capp_data->offset = 0.055 ;
; ~& p( f( g( p2 U0 f3 {2 s6 x. iapp_data->avoidance_type = UF_CAM_avoidance_type_warning;: u' `( ]! K$ {6 U9 _
}2 u7 K9 v0 }$ A% y6 v9 `
}

% {5 G1 O+ v& P! E4 F; |
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复5

wskgumnm 发表于 2014-8-5 00:57:44 PLM之家手机频道

wskgumnm 沙发

2014-8-5 00:57:44

很好好好学习
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

Jocelyn 发表于 2017-7-18 21:43:08

Jocelyn 板凳

2017-7-18 21:43:08

UF_CAMGEOM_append_items
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

Jocelyn 发表于 2017-7-18 21:44:34

Jocelyn 地板

2017-7-18 21:44:34

UF_CAMGEOM_append_items我是用C#写的,用这个函数总是报‘Method not found’错误。
6 P( X+ D1 w! c1 p% G, [3 X5 P有了解可能的原因的吗?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

至简天成 发表于 2017-12-11 15:36:10

至简天成 5#

2017-12-11 15:36:10

不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

至简天成 发表于 2017-12-11 15:49:09

至简天成 6#

2017-12-11 15:49:09


3 e, A4 m6 G' i3 r6 P. J3 X/ J不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了