PLM之家PLMHome-工业软件践行者

[二次开发源码] NX二次开发源码分享:报告装配加载状态,设置装配加载

[复制链接]

2019-9-15 08:32:35 1704 0

admin 发表于 2019-9-15 08:32:35 |阅读模式

admin 楼主

2019-9-15 08:32:35

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

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

x

0 G0 D3 C! I4 INX二次开发源码分享:报告装配加载状态,设置装配加载$ V8 W$ O* O3 z1 K. R% ^- C

& X" s! O4 Q6 U3 {; y获取Load Options 并进行处理!6 X( n  `! z# h, p( T
# `$ n  u9 A. u) \; q
[mw_shl_code=c,true]#include <stdio.h>4 B9 {7 U* f3 y. y3 }, c, X5 R
#include <string.h>
2 f3 ~' E  H+ n5 u6 ?. |#include <uf.h>
, e" g# v% {" _! P% d#include <uf_ui.h>- P6 ], P9 l" ?/ \8 n
#include <uf_assem.h>
% ]# N* @- O7 H1 l- f/ h3 L1 s* U7 k* `1 q
#include <stdarg.h>  |- s0 g' t. W* L

" E4 L' S7 \1 c) O8 `( G) Wstatic void ECHO(char *format, ...)' o% [0 J, x0 d5 d8 D
{
% P/ ]/ T- `1 r    char msg[UF_UI_MAX_STRING_LEN+1];
. M+ t3 w  q$ I/ |/ n    va_list args;
6 P' g9 y4 `+ T3 ]    va_start(args, format);
5 {- k5 a' B4 H' T# F    vsprintf(msg, format, args);0 C) I$ n$ I' W3 k( t" J9 Q$ v
    va_end(args);
/ u$ I7 F0 |4 l: ]% ]7 ~    UF_UI_open_listing_window();- k/ s) i3 {" y" G; l4 o
    UF_UI_write_listing_window(msg);
- \# H: r; n, [- e2 p# {    UF_print_syslog(msg, FALSE);+ A5 q2 E- U8 d  L1 g( I; S
}. C0 [  l0 r) j4 K5 ^: O6 z1 l
: w' Z# Q- N& r1 b* @
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))0 g+ j) o) T$ s3 U$ d* U) i( k
& G0 V1 X8 P2 @0 v
static int report_error( char *file, int line, char *call, int irc)  ]4 Z( t6 W3 }9 l/ a
{
4 |9 d+ V# ]- f4 c8 V    if (irc)
2 O0 A. f8 C- b) H1 G* \) ]0 ~    {+ u$ F7 m3 u# K3 p+ Z
        char err[133];
6 f8 ?) z) }, D# q" l5 z4 V1 N1 u3 N
        UF_get_fail_message(irc, err);3 k: U3 _8 a& o& ?
        ECHO("*** ERROR code %d at line %d in %s:\n",
) U7 G1 P3 b6 i( J5 m7 ?            irc, line, file);! b5 }  x$ @! d8 B1 s
        ECHO("+++ %s\n", err);6 L; {" q; a2 E5 ^
        ECHO("%s;\n", call);5 e- w1 V, a, q5 X0 i' Y$ ~
    }
' k9 r" @# [1 L9 }0 q) z! r3 }- D* y1 O, t( M6 I0 w
    return(irc);
9 d. C- J/ B2 f! p1 Q& j2 c}" H! e; j) m. G% i

/ P" W1 N' O0 N! ?static void report_assem_search_directories(void)
8 l6 M- s8 Y* q2 E& s" Q{2 Q" |. Y% n# b8 M# L+ z5 d4 R
    char
4 `0 X" _1 X9 |1 G  C' [/ B        **dir_list;# ?7 s) f0 a8 U+ f5 C
    int' R1 t5 F8 K( }/ V3 T
        ii,% h# c- N- N' o' H
        num_dir = 0;/ P  j+ u8 R  w4 U$ C7 i- ^
    logical; s* B1 R! l; r; y# G# e  l7 L
        *subs;
5 W, w3 y, w6 U$ C: j+ c( B. L
3 J) z  Q! p4 R4 V2 z) g* M, y/ I    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));5 z5 ^, t+ S& H. U* l$ R8 ^
    for (ii = 0; ii < num_dir; ii++)
' Y5 l+ f7 p: H1 i    {
1 Q1 p  V/ h# ]! R: u/ e, m- W        ECHO("%s", dir_list[ii]);
1 s$ |+ c$ K5 D- z) [, t/ q        if (subs[ii]) ECHO("...");+ N( J, }' ^7 b- i1 [6 _5 t
        ECHO("\n");
7 n4 L" M$ J3 l/ c# g    }3 U9 T) @1 D1 a) O' D/ g
    UF_free_string_array(num_dir, dir_list);- V0 Q6 w. Z& I
    UF_free(subs);
4 c8 z' y& q$ |9 @/ F}
' {, M) J8 h7 K7 b" Q5 K3 N  c6 P* ^5 j  ~2 I
static void report_assem_options(void)
+ s3 R$ |) c) ]5 E  q{* }2 c, h3 e/ A, V7 E0 f, b
    UF_ASSEM_options_t+ M& O. Y6 K8 L& v
        assem_opts;. ?" n5 L$ B: _+ r* w  |$ u* y  \) ?7 j

7 U4 u2 F% x& c7 K- e3 a    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));1 X" N+ z  W" a5 m
* [! l' J; ^1 m+ s* y8 e$ l% e
    ECHO("Part Versions\n");( v8 @3 \% u# s, P, a( A2 e# \
    swiTCh (assem_opts.load_options)% g* u* C: t: F9 a
    {1 k; X2 F  D! g1 Q9 J% m+ a# M( A
        case UF_ASSEM_load_from_directory:- K4 t+ v9 ^) l' @0 J( T
            ECHO(" Load = From Folder\n");. Z. N6 F0 @) x1 Q; r# {: n
            break;
$ l/ m1 ?+ M5 x: C/ L        case UF_ASSEM_load_from_search_dirs:
* f( {8 [; d7 N0 J# F/ [            ECHO(" Load = From Search Folders\n");
/ _/ J/ ~0 c6 _2 n  W( H7 ^            break;6 e( i( }6 c+ l! p
        case UF_ASSEM_load_as_saved:. u8 t; O1 M2 N0 }2 l! a" R4 o
            ECHO(" Load = As Saved\n");/ T  |7 c2 M/ z- |- E
            break;, }. Q, z' d( C3 Y
        default:! x5 y/ `) H+ j" {. X* e
            ECHO(" assem_opts.load_options = unknown value (%d)",8 p# j; [+ u& A$ }1 a9 q$ A
                assem_opts.load_options);
" C4 Z1 J! M5 R  S3 i1 O, C8 |; @$ S* s            break;2 X: j: p8 n$ u
    }( \$ j; w- Z6 U6 V0 T( K1 X
( j' F+ D' u, A% e/ V$ e
    switch (assem_opts.load_latest)
9 d% b' e, _. _7 m; }" i  v    {
* j" J$ d# p: J2 O9 p5 v        case UF_ASSEM_load_exact_version:
: E2 O6 R1 m7 S' t9 A            ECHO(" Load Latest = Off\n");# L5 g& o# }- H3 j  d- r' M5 J9 q( H, Q
            break;
' l3 B5 e1 X* k- B        case UF_ASSEM_load_latest_version:
; w: P- ?2 r3 [( p: R7 C6 t            ECHO(" Load Latest = On\n");* |" J) T& @; q5 a
            break;
2 l/ n2 ]$ z" W# k0 [( v% b% }        default:
* [9 Y  q6 T. B$ D            ECHO(" assem_opts.load_latest = unknown value (%d)",
! s. ^6 w- x( X1 x9 Q$ \4 f                assem_opts.load_latest);- R1 t3 A& U5 w( E1 R
            break;
6 E7 R* s& L* C. N# s# N! a    }  t2 J( X0 ]1 i% _
3 k- Z$ s# @! ?- M9 p
    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs); H: A6 h9 q  V
        report_assem_search_directories();0 i7 v3 {3 A( h  I, ?  F3 a4 [* j( z1 s
2 }* g  n8 k5 R& n/ |# R2 T0 z
    ECHO("Scope\n");
- n; J5 V# t$ q4 R    switch(assem_opts.load_components)
2 w6 m4 }3 v8 F8 t9 Z    {
2 l# p) \( v7 h# ~2 r( v% N        case UF_ASSEM_dont_load_components:/ n) C0 A; @5 V+ ~' p
            ECHO(" Load = Structure Only\n");5 d0 Q% G( t7 q
            break;
6 R/ D; ?! D, \* S) p5 P9 [        case UF_ASSEM_do_load_components:" Z4 E' n; }; h3 v( h- s
            ECHO(" Load = All Components\n");
% n8 v% }5 ~0 B# O; \7 L            break;
1 u$ z" d* c+ ]5 l7 u        case UF_ASSEM_use_last_component_set:8 g: F( x8 b# H7 ?8 w
            ECHO(" Load = As Saved\n");; d$ \1 d$ [, {
            break;
2 Y4 y7 s: k& K+ K% G/ s7 [8 m        case UF_ASSEM_use_last_filter:0 K/ H# e$ h4 C* T! z) o+ |
            ECHO(" Load = Re-evaluate Last Component Group\n");
$ P- Q+ M) N/ h! T5 Q            break;
$ P! L3 @# r4 C        case UF_ASSEM_specify_filter:
# V& F+ G& C7 T. H& X            ECHO(" Load = Specify Component Group\n");: w( x. K: X) Z8 N
            break;
0 k+ t2 M/ e) t; [; i0 o; w2 P( G9 ~        default:4 ]1 j) Q: e" l& a( R3 k
            ECHO(" assem_opts.load_components = unknown value (%d)",
, z5 A6 j" ^7 g. D0 Q3 w                assem_opts.load_components);
% o. F6 c3 F+ \            break;5 a8 c+ X7 R2 i( [5 l! N( \
    }
8 ]3 N! l/ `0 A# |  ]5 U. l) z3 {% Q. q3 G: [! ~
    switch(assem_opts.load_fully)
) Y0 D+ Y( \/ `9 o# ?$ u. R    {
' \  ]) K8 i; L, N8 ]$ b        case UF_ASSEM_load_components_partially:
# G0 s0 F) v% V' h2 K  l            ECHO(" Use Partial Loading = On\n");
/ U: e2 b3 b/ `+ k            break;
' l; [) _$ j& e# C6 Z        case UF_ASSEM_load_components_fully:
6 u. s4 N! a) {: @4 M- e- z            ECHO(" Use Partial Loading = Off\n");
9 K$ c, I; W; G% T9 Q% ?0 c! X4 y            break;
9 `! g. p- v5 D5 \' z: F        default:+ G0 D5 x( _; S6 p% U! ]  m7 C
            ECHO(" assem_opts.load_fully = unknown value (%d)",
. b$ B! s" y' V5 V  m                assem_opts.load_fully);, S+ t. _* T4 I9 r% {
            break;9 u8 s3 s* P7 H9 o% d$ G
    }
7 L- ]8 F9 R" e) A1 ]
% V. n* q* e; i    switch (assem_opts.load_wave_data)% p$ Z4 N; X0 K" B) x! X; ^
    {' T/ l; _; E7 \- R4 c' F
        case UF_ASSEM_load_wave_data:1 s& B' p$ |  Q7 u! V
            ECHO(" Load Interpart Data = On\n");/ _$ {4 C1 r- a2 h) h
            break;
) x- |$ l3 M3 ]9 }5 a        case UF_ASSEM_default_load_behaviour:! w  V( u! O* L
            ECHO(" Load Interpart Data = Off\n");
* }& V+ t8 N" d6 A            break;3 X! y3 O/ X2 m6 F# v# V. z) \) v
        default:
+ ]  Q  g/ x1 ^- {" S            ECHO(" assem_opts.load_wave_data = unknown value (%d)",3 s- V3 `4 [2 q6 |3 V' c
                assem_opts.load_wave_data);
% \( j/ r) d1 w/ V: t            break;
! P0 _; ?% |: G* n: B    }
9 m& B' c/ f0 J$ L  @  t
; l' q; p  c; S1 f! G    switch (assem_opts.load_wave_parents), m' T) L0 s- ~( b2 j
    {
" w) k" G! V. F" N1 X9 ?        case UF_ASSEM_none:( z: w+ i' L) n$ M6 ~! c/ t" n
            ECHO(" Load Parents = None\n");! b: z+ N0 T6 @! w0 M* B
            break;+ K! R1 ~8 O" t6 \
        case UF_ASSEM_immediate:
  j$ B  s" h& |4 U- g            ECHO(" Load Parents = Immediate Level Only\n");9 a( X$ m, m! T# ]# a6 Y
            break;. T6 G0 u8 y0 w: e" q$ l9 v
        case UF_ASSEM_all:
* _7 `' t6 c2 D! a' z            ECHO(" Load Parents = All Levels\n");* Y/ V) O; k  }
            break;
2 V% g. K7 C& R/ n        default:4 y+ ?1 x  B( p$ j  J: T
            ECHO(" assem_opts.load_wave_parents = unknown value (%d)"," {! a4 D4 c7 m' Z7 m
                assem_opts.load_wave_parents);/ I$ R, s7 @, `. }  F2 t) q: K
            break;9 G" T* `  h: H
    }
3 G, U# C: j, p" H3 s7 s7 P! c3 E7 A* r
    ECHO("Load Behavior\n");
6 m0 n8 G" v+ t8 E9 V    switch (assem_opts.load_substitution)
' c; Y$ M1 ~! ]- A, y* c    {! M/ U5 r; i; M) x6 c# D* J
        case UF_ASSEM_do_allow_substitution:" v5 d/ H5 Z; _9 f8 y. {  l
            ECHO(" Allow Replacement = On\n");5 X! o# Y2 U  u& U9 ~
            break;
0 i& L" Q1 |4 g0 d2 k        case UF_ASSEM_dont_allow_substitution:
, R8 A* y* O! ~7 V1 O            ECHO(" Allow Replacement = Off\n");; u1 W6 V7 F0 g- r& j
            break;8 u. g* r. t1 s* I/ F
        default:% W$ `0 V. [2 R! y; I! R
            ECHO(" assem_opts.load_substitution = unknown value (%d)",- _* L/ ^% t! J% c
                assem_opts.load_substitution);
* K$ [+ l" d, N; l( ^            break;
! b6 z$ ~6 w: L6 b- f* N    }+ ]/ i  d; D8 v! b# |" j
2 K$ d- d6 o( M5 G
    switch (assem_opts.auto_regen_pfm_option)+ ]2 [/ Q: p. A
    {8 P: }' o$ [9 l2 S  |5 X. V
        case UF_ASSEM_auto_generate_pfm:8 Z# N6 L% ]6 \+ I
            ECHO(" Generate Missing Part Family Members = On\n");
  L  W( m( q  X2 k            break;' _8 ^0 [8 M  H3 c
        case UF_ASSEM_dont_auto_generate_pfm:6 s8 ?* e! P4 I" n& d( C
            ECHO(" Generate Missing Part Family Members = Off\n");
: W* o7 L# c& n( m1 u2 d            break;
2 f# [$ f" u% D8 E        default:
4 i! K% V8 K( Y/ M* f; C            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",+ O' a3 \! g% h4 m
                assem_opts.auto_regen_pfm_option);4 e; ^2 S& W$ M% D  J
            break;3 g6 h  T7 {) ~" Q9 Q
    }
. [% h2 l+ ^) O- \, M9 ?5 y2 Y; p
2 @3 G$ [" P% _' h    switch (assem_opts.failure_action)
) ~. V, L2 h6 l5 L: a" w    {6 X9 h# }& n% n+ F
        case UF_ASSEM_do_abort_on_failure:
5 N, o# t" K3 G+ d4 u4 q            ECHO(" Cancel Load on Failure = On\n");% M% ?% C# u: c0 [$ ~
            break;; X0 P: n0 c" C, X
        case UF_ASSEM_dont_abort_on_failure:
- e3 W7 I& h+ K+ v1 ~            ECHO(" Cancel Load on Failure = Off\n");
, ~* D4 N: J% A2 {* d            break;
) }7 y% ^* ?2 @, G& Q/ t# A        default:
0 t5 K( N# ^7 M+ D/ D  F+ f            ECHO(" assem_opts.failure_action = unknown value (%d)",
2 P% l' E0 B! i5 ?                assem_opts.failure_action);: B; ^, G/ V! f9 n$ }/ K4 y
            break;
& |0 ?' p; X/ R" {. {9 p    }
' q- ?- K- T' j' V5 y3 n/ Z! v, F! ~& s% L, v" J
    ECHO("Reference Sets\n");  I8 F  q3 w' R1 G
    switch (assem_opts.apply_to_all_levels)
! w  [4 b; {9 ]+ i# A    {
. S3 |: M+ Z0 A, j        case UF_ASSEM_do_apply_to_all_levels:$ ]" |4 E# w! |/ ]  {
            ECHO(" Apply to All Assembly Levels = On\n");  Y) x+ H$ f# b; Y& _
            break;5 q+ C% c* c0 M" r: }/ V# @1 W
        case UF_ASSEM_dont_apply_to_all_levels:
/ V- e8 }, A0 C! H1 R4 ?9 d* j            ECHO(" Apply to All Assembly Levels = Off\n");
5 _, X, t/ M) `/ P            break;+ `& @5 ]! K' k" {" c# |
        default:5 D9 I( S6 j: I. `9 U
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",1 n! ]0 {* u! \4 ^- t4 @. {
                assem_opts.apply_to_all_levels);
8 I; B5 L" J7 p! t2 M" R# u            break;2 Z& |0 @) a6 |+ f5 G- F
    }
1 [3 v# l7 f: q6 I' E1 l" E, y0 t" G8 B6 v
    ECHO("Preferences-> Assembly (misc)\n");8 H$ a$ d' X4 o2 A' d; f1 n
    switch(assem_opts.emphasize)5 f% \4 y$ m5 h8 `
    {
* {' `' q7 H9 g        case UF_ASSEM_do_not_emphasize_wp:0 ?' b  A, B; A
            ECHO(" Work Part-> Emphasize = Off\n");
+ F8 x3 y2 c9 k  k            break;/ s1 }1 @+ n; R# p% i( z5 R
        case UF_ASSEM_emphasize_wp:
/ t5 C/ e' X) }" J! O0 \/ d- j            ECHO(" Work Part-> Emphasize = On\n");
% @% _7 R9 C, I: y* Z            break;
/ s/ f. r6 U: L! T8 H        default:# x5 d/ T8 a, ^, l/ B8 ]9 ?/ E
            ECHO(" assem_opts.emphasize = unknown value (%d)",. d$ }  I3 x6 q, u& b
                assem_opts.emphasize);5 I5 j& v1 `4 Y! r0 ?6 d
            break;/ S* V$ u! t' l9 Y3 R
    }( ]; b. T3 O4 q' F
* d( ^% b5 X5 P  [( d: |2 B+ j
    switch(assem_opts.maintain_work_part)
8 |/ W/ [4 O8 T1 ]0 O" X. t/ o' B, A    {5 A0 ^- `; t- W& I
        case UF_ASSEM_do_maintain_work_part:
! R+ r! p: v4 b            ECHO(" Work Part-> Maintain = On\n");, \# G  m3 i6 P! O0 I% U
            break;4 N$ X0 r8 ?* F6 r* {9 y. ~) y2 f
        case UF_ASSEM_dont_maintain_work_part:
- @+ ^5 |0 N2 X2 ]) u' V            ECHO(" Work Part-> Maintain = Off\n");' c4 W) K0 T% i+ B  b, _' F
            break;+ N6 \2 O' V2 }3 \1 Z
        default:. M  I5 F9 G2 U! k4 Z
            ECHO("assem_opts.maintain_work_part = unknown value (%d)",# {+ G: d" H7 r
                assem_opts.maintain_work_part);
3 M' b( k9 ?# B. {            break;
) G& f) G* [- E    }& D$ y  B+ {3 |  o9 g3 P
    switch(assem_opts.update)- E2 ^5 G' ~' z  c
    {
  A- Q% Y; w8 b6 q  R2 M        case UF_ASSEM_no_update_report:8 o3 o8 K% I: Y1 y
            ECHO(" Display Update Report = Off\n");
, c5 W' L1 w5 N            break;  s' f; P! w5 a+ S) u
        case UF_ASSEM_update_report:
6 B1 M  E" a3 ^# U            ECHO(" Do Not Display Update Report = On\n");
: K* }, n" ?& Q% U$ b6 _            break;2 K' `( k! i7 T9 J' W
        default:
% {/ J% T# T- T! N" B! {            ECHO(" assem_opts.update = unknown value (%d)",* J8 `# I+ h2 V
                assem_opts.update);
' X' v) {, V& f# n# [, |$ T5 M; e            break;# f& o/ f; t) K
    }1 V6 W. x' {$ ~) F" y2 r
}
+ p) k' [) w+ t% ?" t2 X) Q2 C
9 P4 I  O. d& M% I7 m  R; X7 pstatic void load_specified_load_options_def_file(void)6 F2 o8 X5 I% Q* L1 `% R8 `. T
{4 y4 I9 R$ {- c) w$ z; \1 n2 d
    int
# _- Q1 s+ u! w! h" g. o% X        resp;! Y; ]7 o& {2 s; M: b5 x
    char0 k) h* X  h5 U' p
        filter[MAX_FSPEC_SIZE+1] = { "*.def" },/ R. F4 O1 ?. k( V! ~
        fspec[MAX_FSPEC_SIZE+1] = { "" };  Y. x9 ^% H9 r7 {3 I
" P- Y4 d2 k4 E  b( r- I1 e
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",
! k: q/ ?$ Y1 M  b! _5 y# \        "Restore Load Options File", filter, "", fspec, &resp)) &&" }( Q- O7 r  _
        (resp == UF_UI_OK))8 _4 N$ [; n7 k7 t
        UF_CALL(UF_ASSEM_restore_load_options(fspec));0 s5 t. r) V! h- z' N
}+ T. Q7 X5 C* e( H) a* ?

, B" s0 L+ i- Q# S0 P' m% Gstatic void do_it(void)
; t2 e# h# J# `) d9 d' B{1 L! `! u6 s5 m. u3 C; r9 K7 [
    ECHO("Current load options:\n");! B6 C% V0 c: }7 p: s) h, {# C$ i
    report_assem_options();* Z) ?# p" i+ b+ U1 k
4 N" q% g) S1 z& b
    load_specified_load_options_def_file();) \& T) i+ J6 U9 R+ Q% {
) d# w$ d, T, B( ~
    ECHO("\nNewly restored load options:\n");: L6 @6 |+ T8 M
    report_assem_options();/ x5 s0 @/ X) ~. I9 A- ?
}$ \$ g6 V+ k, I+ D: a
1 D7 k8 S# L/ O2 ^1 t3 F+ W
/*ARGSUSED*/
# @" @8 i# P2 l6 s. Q( |& j; Svoid ufusr(char *param, int *retcode, int paramLen)
2 K$ `" f- q6 v; j0 S{, m. u+ A( I# e/ r) U$ F6 ]
    if (UF_CALL(UF_initialize())) return;
: ?- u* }- u8 S& B% P    do_it();
7 e1 K; N6 \% G7 O% V    UF_terminate();
9 A% ]! i( B' e" l* D# T}
6 b6 a- J' p) {( x, j: i% l
/ S0 r$ `) r$ p# jint ufusr_ask_unload(void)
9 ?, r0 ]  x6 L. v* h, `2 T$ h{
+ F5 d6 Q# X5 ?& B' h- [    return (UF_UNLOAD_IMMEDIATELY);
: S) E7 Q: W. d# L  W3 I2 C}[/mw_shl_code]
# r- u9 {1 a+ _6 G% x
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了