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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2019-9-15 08:32:35 | 显示全部楼层 |阅读模式

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

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

x
9 F; S8 e; }' V  a+ S
NX二次开发源码分享:报告装配加载状态,设置装配加载
8 y, h- j* u' E$ e
0 A& X' z4 {9 E获取Load Options 并进行处理!7 ~* H; \# M8 Q  v$ E
( u6 f8 t2 A- _# @! }
[mw_shl_code=c,true]#include <stdio.h>6 E5 s6 Q. a4 Q9 f% m' _- F
#include <string.h>
0 V/ i  g6 i, _4 o: Q; E3 y( W; g# ?#include <uf.h>( ]( S, {* m) t% M% j
#include <uf_ui.h>9 m4 S# I/ W, P6 Y# w2 H) ^
#include <uf_assem.h>  k7 h# u) J$ H. v" o  W8 s

  E+ S' X% p/ K/ e#include <stdarg.h>; Y5 Q9 O$ \, Q' q5 e: @
- F( S' L! P$ z" S) `& z3 Z* L3 Y% a
static void ECHO(char *format, ...)& U8 z7 |+ q- k$ C9 o# ]
{
! t! e+ @$ ?! t5 M7 \6 A    char msg[UF_UI_MAX_STRING_LEN+1];/ P& |$ p% e5 t* r+ P' K1 M
    va_list args;
) u5 `+ t: t4 ?, R- A9 G    va_start(args, format);3 U9 G# i6 t4 S, P
    vsprintf(msg, format, args);
  d6 u. |' {& V. m    va_end(args);- ]& j9 {: v; y  P  @0 ]' f" O
    UF_UI_open_listing_window();
& z: Q( c! U' h/ r" p2 V    UF_UI_write_listing_window(msg);
- ?$ l, s; K1 q! a! S, V    UF_print_syslog(msg, FALSE);
+ M0 a9 K$ t8 i2 y  @}
! O3 z; O" _$ _- j) @; y9 U0 O
6 e/ ?. t) Z" P6 H#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
' l# |, y5 ]  q' y5 u/ i
" X7 S: g, q/ H/ q; R1 Z9 m' Gstatic int report_error( char *file, int line, char *call, int irc)
6 b. [0 `: l& P, T5 w. v/ t{- O. X8 m0 |( h
    if (irc)
: @- i- D9 _6 V7 Z# F5 r" }& [    {
# j, K9 f8 L! o3 T) \3 Z        char err[133];
% l4 a7 |3 {8 A* v
' x# l5 g; Q9 i: h, _        UF_get_fail_message(irc, err);
: t$ ^% B. u2 C' p        ECHO("*** ERROR code %d at line %d in %s:\n",  K  U- x+ q0 x1 J( D, C' t7 m
            irc, line, file);
$ N' S4 T. H( R. ]9 a1 b, X        ECHO("+++ %s\n", err);' {$ C: ?' |. a/ E1 r
        ECHO("%s;\n", call);
" T% Y) L$ w/ \' v" @, }4 `9 g# M. E    }
) M3 R8 ?7 `: `$ b  y) C! F' ]2 X0 \: q  q
    return(irc);2 q: e0 t* z  m' ~
}
& L; n6 A( `/ X0 ]) w" C( m; E) p, c9 l) e
static void report_assem_search_directories(void), Z. [# |. c1 q# O
{
% o# \* O# y1 U) {7 t% j    char
) f7 N7 y( V% ?        **dir_list;
, P  j# c2 a# {( I& ^0 h  Q$ T    int; z# t2 \4 I( A/ @# K
        ii,
8 U3 I7 [. n4 [        num_dir = 0;, T3 P2 l' Y8 o. X' r, o) |2 e
    logical3 z" H% \0 F) M6 w4 N' O
        *subs;/ G: h: w$ v. E' p$ A' V! A. T

# G% `  b( ~: J5 B9 D    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));  b# B6 e- c5 n; K/ E; Q
    for (ii = 0; ii < num_dir; ii++)/ Y; Z7 v8 z3 B" M. d6 J
    {
" i- X# y  l# C        ECHO("%s", dir_list[ii]);
0 u! j- u: n2 q& I- y        if (subs[ii]) ECHO("...");, G8 x; Q  x- y& }" J, X
        ECHO("\n");, I& H' y5 C9 o& x* s
    }
! b& ~( X& V! |/ c% \! u7 L+ H" b  |/ \    UF_free_string_array(num_dir, dir_list);
3 w2 d- L. X+ s8 W5 T/ O; A! k    UF_free(subs);
0 l7 ]8 N3 S/ S3 T' O& }" S}
9 p+ ^/ i) I0 x& t9 x" X' h0 y9 m  D& ]7 J6 g. B1 T( x
static void report_assem_options(void)0 S; g" p* K5 r8 |
{# d1 h4 }% M7 [
    UF_ASSEM_options_t
* Z9 _0 o) r8 o8 P$ O        assem_opts;
: G  o9 r& L% W6 E0 l4 y) c' }* |
    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));; h4 t0 c: s- _% t; L# L
$ a6 [' m% p1 A7 \" E9 z9 c8 w
    ECHO("Part Versions\n");
. H" x5 ?/ c# j$ R    swiTCh (assem_opts.load_options)% M% ]: J' ^" ^& i1 P
    {3 y+ \; b1 }8 @% p4 i
        case UF_ASSEM_load_from_directory:
, G8 J( ]- S3 X+ a2 q! Y* k            ECHO(" Load = From Folder\n");
$ J# n& }) o, b7 Z/ f: h" `            break;1 k  X  V6 w/ F% a
        case UF_ASSEM_load_from_search_dirs:6 }9 i5 [* K1 n8 G7 @  |! ?
            ECHO(" Load = From Search Folders\n");
! T) I# }- O* L2 G            break;
" A: H7 m7 ~/ `! p        case UF_ASSEM_load_as_saved:
4 p* _' _$ T7 l6 c) c/ D5 r            ECHO(" Load = As Saved\n");
3 ]5 {1 |0 z! }. Y            break;
/ @+ n8 f; a0 {        default:
, i4 x3 p6 m. B' _6 ?/ ^! F            ECHO(" assem_opts.load_options = unknown value (%d)",$ S& n; {  ~- l9 w* U4 h5 f; S1 K
                assem_opts.load_options);, V0 [1 p* T- e& I* L4 {$ G
            break;- S6 C. j! w, Q6 E# ?" v6 w3 \
    }/ ?( l0 E* c  b. B! ^
$ \. {- Q8 v6 b4 o
    switch (assem_opts.load_latest)- e, [0 H) f# {  d, d$ v- l
    {, n2 R1 E1 l6 \% r4 j5 U' h
        case UF_ASSEM_load_exact_version:
$ v- e/ F: t$ z: @) x! S, w            ECHO(" Load Latest = Off\n");+ e7 d2 I3 O" p+ L! a( X
            break;9 E+ o2 l  @+ ]) f6 s& c8 o% R
        case UF_ASSEM_load_latest_version:, i- @7 s+ ^5 Y8 C+ Y
            ECHO(" Load Latest = On\n");
* A8 G( \2 e/ T8 J6 u            break;) t- \3 s- l* [" ?/ a
        default:
/ v, j+ E( l4 R3 y6 p5 v% {            ECHO(" assem_opts.load_latest = unknown value (%d)",
# I4 t8 \) O8 C% |) a& W; X                assem_opts.load_latest);; I5 [1 H2 b# Q* v
            break;
, X* C$ m3 R$ ]' D    }
0 X; U8 w) Q* N3 U: n
7 S% p  R+ v+ h1 H    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs)
1 O: D9 C, S: r- w" c! e        report_assem_search_directories();, I6 o: T+ S# c

" _3 N7 s; T& e& q1 T6 y$ ]    ECHO("Scope\n");0 Q3 r' E4 ~2 D# o, B1 E
    switch(assem_opts.load_components), |9 M8 x. g5 k; i5 p) a
    {
& ^' q. Z8 o8 F        case UF_ASSEM_dont_load_components:
6 X3 n* x! a8 L0 S/ U            ECHO(" Load = Structure Only\n");% L7 |0 ?0 V# t$ a; S! a
            break;* a! {' f( }; [* ^4 [9 R
        case UF_ASSEM_do_load_components:
6 z# ~% y0 m- [5 k9 Q            ECHO(" Load = All Components\n");
. A. M! K) W3 o+ v6 Y: N            break;5 t& |% V: u. J
        case UF_ASSEM_use_last_component_set:) F: [1 P  I+ S% o+ J1 w2 P, F( m
            ECHO(" Load = As Saved\n");
+ y* k  q: ]3 a! Q7 ^            break;0 D& b+ b( w! h+ W% w. x  N0 F
        case UF_ASSEM_use_last_filter:
& ?# j- J. v1 D: n* g5 w/ X* j" K6 f            ECHO(" Load = Re-evaluate Last Component Group\n");# _1 X( {6 {  D+ t, V; v$ u
            break;. E) y! G! Y. ^& t
        case UF_ASSEM_specify_filter:( s( E6 n1 G$ W: F1 Y
            ECHO(" Load = Specify Component Group\n");
6 r& K& q8 C5 y6 i            break;
, I4 `( K; z9 j" E; ?  M        default:
+ g' ^9 e$ \; v7 t* Y            ECHO(" assem_opts.load_components = unknown value (%d)",; X* P; M8 `* \) ~
                assem_opts.load_components);
) ~1 u5 P: u/ ?9 ^+ ^            break;
1 o6 Q# q$ s( U1 v$ f. o    }$ n3 w3 n7 y0 W$ Z
2 v, e0 _1 D: b$ w, h) _
    switch(assem_opts.load_fully)
" b* n2 C. _$ E# }- u    {
. K% w8 Q  q$ K! n, b        case UF_ASSEM_load_components_partially:
! q  Z# M7 p  D2 K: q$ s            ECHO(" Use Partial Loading = On\n");7 a+ V, u. T3 g, D+ M( G
            break;
- a) _! ]2 V+ N/ C. k1 \8 b        case UF_ASSEM_load_components_fully:
, r0 F* J1 H/ u7 L: ]; R            ECHO(" Use Partial Loading = Off\n");
2 g7 v! v/ u: j3 ~& k6 _5 O            break;2 n1 p, L9 X. p0 O
        default:% Q  `8 }7 a$ a1 Z2 z0 a/ I
            ECHO(" assem_opts.load_fully = unknown value (%d)",
! h! A' c2 R8 H7 b9 \+ E# z' U                assem_opts.load_fully);
% U; t  y, L; D# c  n7 E5 L            break;, }6 K5 P. [. }3 w6 E
    }. g/ d& ]  P0 e/ f

* `! l- ]0 I; v' G    switch (assem_opts.load_wave_data): ^3 s+ i/ y9 v, e- a- o
    {
; H( ?6 h3 R( F! K9 W        case UF_ASSEM_load_wave_data:
+ S; X3 k& _3 m/ ^& `            ECHO(" Load Interpart Data = On\n");" w7 Z; c% ^9 a# x* C+ \# a0 f
            break;
) A3 P# Y3 y0 d  q        case UF_ASSEM_default_load_behaviour:
2 z7 D, k, I1 M            ECHO(" Load Interpart Data = Off\n");  E# ~5 R* V. f6 G  C
            break;8 h! W& ?* N7 p+ B- x, i6 o* q+ h# Q
        default:4 Q. h5 t) a4 p6 m& Y: Q' d3 w0 u3 x# d
            ECHO(" assem_opts.load_wave_data = unknown value (%d)",5 l0 \% G) e& B$ I; E
                assem_opts.load_wave_data);
- n5 ?$ x& c; b2 i, U2 W            break;
/ o+ \7 `( B9 t3 _  i    }& A3 t7 a  g7 z2 H5 w% e* f

/ y  X! {# l* n+ K( `$ a! x    switch (assem_opts.load_wave_parents)
* w4 Y( V, ]. J    {) u4 o# ~% V. o* Z  L" I
        case UF_ASSEM_none:& u* N/ ~9 A9 ?
            ECHO(" Load Parents = None\n");
3 R. r  v$ F% k3 X            break;" l( e3 W) e4 ^$ _  i: S
        case UF_ASSEM_immediate:
. t! m' M' c/ ]1 t; P4 w: U& k            ECHO(" Load Parents = Immediate Level Only\n");
: T4 M! m8 |, z( }            break;
7 }: U3 r* S- o5 ~' ~        case UF_ASSEM_all:% X' D; B6 e$ ?/ T; r# M; R
            ECHO(" Load Parents = All Levels\n");5 S& }% r5 [: m0 \
            break;
$ S4 _$ x3 r" N- Q        default:
! \0 w& b' Q: |            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",' F( y& X  ?$ l: K/ W
                assem_opts.load_wave_parents);7 {- V- i! Z& ?
            break;9 t' K- {5 @+ X) u
    }
% V0 h: v6 `$ R& j0 g. P& O3 o; o5 |4 s0 M( o
    ECHO("Load Behavior\n");3 ?4 w3 e; N8 _* I
    switch (assem_opts.load_substitution)
4 {7 b: N) n8 Z4 }8 S, K    {
" U) s. g6 Y5 R: G$ t$ a# \        case UF_ASSEM_do_allow_substitution:
) l, \. Y9 B% _* Z2 o3 B            ECHO(" Allow Replacement = On\n");
, P1 d" l; B& F* O5 ]9 ~            break;
$ O+ J. n  t9 {( w: h        case UF_ASSEM_dont_allow_substitution:8 R! q+ T# s# |; ~% F" D- O: f
            ECHO(" Allow Replacement = Off\n");! n' Z2 |1 C) `0 F" o
            break;+ [$ A8 R5 M& O' s2 n! d
        default:
) n1 k/ j3 c% P' ]5 O+ P            ECHO(" assem_opts.load_substitution = unknown value (%d)",
" [2 p# ]" c# R7 n: I                assem_opts.load_substitution);3 M/ r% x* {% E! E! _4 k5 `
            break;4 a7 Z, S& u# G$ i9 D
    }" Z% L' E! k/ l8 B$ b
/ t1 L1 z7 e" D6 Y
    switch (assem_opts.auto_regen_pfm_option)
- W$ _5 w* A- U1 a* f    {9 }6 s: I' b. Z# y' a0 \
        case UF_ASSEM_auto_generate_pfm:- ~. l' c4 W0 r, M. r, N3 ^
            ECHO(" Generate Missing Part Family Members = On\n");1 t" l+ x' A5 Z5 H- m
            break;. s% T: [+ ~+ y' c8 c) Y/ O
        case UF_ASSEM_dont_auto_generate_pfm:" _0 K/ o: ]: P
            ECHO(" Generate Missing Part Family Members = Off\n");  g  O% ]( ?8 e
            break;
( s, N7 [4 E0 T        default:% x: u6 \$ k% L3 W
            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",  f8 @+ v8 g- n# x- {3 A
                assem_opts.auto_regen_pfm_option);
, k! A$ w. r* L, \            break;
3 u: O$ o2 @0 E" x/ r5 V$ s    }
5 @' C% z6 I7 P$ g8 |
$ T, F4 n% c1 k: `6 A+ A    switch (assem_opts.failure_action)( A8 r' J/ J6 a# j
    {- c: m. q4 {* y1 G
        case UF_ASSEM_do_abort_on_failure:
& r' ~" t* A* V4 Z            ECHO(" Cancel Load on Failure = On\n");' Z# J, o# A; @3 c
            break;. W. k* {, Q/ t' x# X( Q1 _% I! U
        case UF_ASSEM_dont_abort_on_failure:
/ o7 B: T* T3 |- A0 \            ECHO(" Cancel Load on Failure = Off\n");
6 E7 B9 o3 W# B! J5 _/ ]4 T$ @            break;+ I3 I& s3 [! x& Z& j) ^; @1 Z
        default:- o" L$ I( G% s( ]( q6 ~
            ECHO(" assem_opts.failure_action = unknown value (%d)",/ H2 ?( L, Y6 H; s
                assem_opts.failure_action);
' i- P' d7 Q, O            break;
5 l8 B3 V, e+ g1 |% N8 {3 M) h    }0 y' @4 @, R- |3 Y6 p: n* U

" i. }2 v; Z+ u; B& t+ N8 f! O    ECHO("Reference Sets\n");4 t7 E& ^9 O; T  t
    switch (assem_opts.apply_to_all_levels)
( A0 q& M4 w; a) U3 I6 @  h  ?    {
! o* R2 l( u# \        case UF_ASSEM_do_apply_to_all_levels:
& k5 C% l6 ]; z' ^7 m( o, G. h( R, j            ECHO(" Apply to All Assembly Levels = On\n");
4 {7 M9 H& F- i$ r0 n            break;
% E4 i  ~6 o* ?        case UF_ASSEM_dont_apply_to_all_levels:" D6 ~( I. I1 {! D2 O0 M# k1 L8 \/ @
            ECHO(" Apply to All Assembly Levels = Off\n");5 S2 ]9 z+ ~4 M! Z
            break;, @6 S  _' W2 p5 }% ?# C
        default:
+ \6 T9 E% D, C8 E/ d0 k5 B, l            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",& o: m$ c$ j& t- e. l  e
                assem_opts.apply_to_all_levels);
) p2 K6 ?7 p- D3 W            break;) h. f9 ]1 {4 y8 `$ |& H
    }
/ q! C$ `2 R% a; O- {* n
2 I2 V6 z3 Z0 z* D/ f    ECHO("Preferences-> Assembly (misc)\n");
0 j* Q5 q0 n7 \& z2 u    switch(assem_opts.emphasize)
6 K$ Q. F( m, Q    {
  K: M( P  i+ K0 C5 _6 v8 j9 w( ~        case UF_ASSEM_do_not_emphasize_wp:/ j0 k3 H9 W! C2 H4 M* I& v6 \
            ECHO(" Work Part-> Emphasize = Off\n");
: f1 p' a4 R, s0 G            break;0 P3 [  H) L' `! _; @6 s
        case UF_ASSEM_emphasize_wp:# ^/ i% }# Y1 u6 j5 g
            ECHO(" Work Part-> Emphasize = On\n");
7 m; O* ]2 H' S4 ~1 Z  A            break;
/ q: A: S1 E2 N, U8 v( a6 ]        default:
( n. j3 N  A- q  B# I3 J$ \            ECHO(" assem_opts.emphasize = unknown value (%d)",
+ A" B; _( F5 P1 O% M1 {- ?; p3 r/ j                assem_opts.emphasize);. V% ?- M  E( Q; Y
            break;7 c5 a" U( K3 x) K# e8 S8 v
    }( k3 ], I& H+ Y+ D+ M' _
6 A$ D. @: O1 u3 l) @+ ~5 q/ A+ @% l% E
    switch(assem_opts.maintain_work_part). k% M+ ?( R9 U0 P  _- a
    {! `  S6 ?; _" B# _2 z0 ~
        case UF_ASSEM_do_maintain_work_part:
: g' w% f5 t; a! U, O/ g            ECHO(" Work Part-> Maintain = On\n");
6 F, R# ]/ m2 r+ r            break;* ^& {* S. v. Z4 ~
        case UF_ASSEM_dont_maintain_work_part:- l6 A7 G8 H" M0 V3 l- g" u
            ECHO(" Work Part-> Maintain = Off\n");- t5 s3 p4 {! S6 E3 v1 n* P
            break;: }, w6 V- c5 B9 D5 ^: H6 W
        default:
2 f5 G: a( ~5 W0 M) B* P0 ]            ECHO("assem_opts.maintain_work_part = unknown value (%d)",, s. P3 I. ]. {4 o
                assem_opts.maintain_work_part);
0 z6 d2 m6 t3 X& B- B            break;% U3 x* ~& [$ B& T/ d7 y; ]5 h# R
    }% b. ?" e! |8 x
    switch(assem_opts.update)
$ U7 o: \' U7 \! i    {
1 b( e; h: T% Y5 y. C: q        case UF_ASSEM_no_update_report:
2 P: Z, x% M* J: o            ECHO(" Display Update Report = Off\n");# V3 [+ o; G5 |' o. D
            break;
  G. d+ o+ x7 Z0 V        case UF_ASSEM_update_report:0 l5 F# h, D6 |* U) F/ w5 t9 K  b
            ECHO(" Do Not Display Update Report = On\n");+ I* A, ^0 I/ U2 K
            break;
$ k: I8 h7 b6 s2 N! g9 s# b        default:
; [: `1 e& Y8 ^- }9 v: l            ECHO(" assem_opts.update = unknown value (%d)",
+ F+ t* u7 M: \7 L# F5 \& s                assem_opts.update);
8 ]/ t2 g# @7 k2 Z3 `( F            break;
1 v0 @; [( b2 |' a    }
3 v* [& Y- |$ O) _. M+ h5 u/ H}( i/ |4 z* t; L7 ?' Q& j% R
, _/ m# k, d6 u( S3 M
static void load_specified_load_options_def_file(void)5 p  H$ H* o. `( r
{
) k$ V; D9 Z8 C7 n6 F    int
/ k! h: P' g& g  @& Z& Y- {+ S        resp;
- V- C, M! o7 ]6 }+ @0 ?    char0 r& ~  x0 {7 ~! y
        filter[MAX_FSPEC_SIZE+1] = { "*.def" },( l( X2 v$ m$ H7 ?# H
        fspec[MAX_FSPEC_SIZE+1] = { "" };5 D, |  C# v8 I2 D. |
) Q1 n; s  \5 C! E( b5 Q
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",& e7 b, w6 O# I' ?! S  h; W
        "Restore Load Options File", filter, "", fspec, &resp)) &&
6 f. N- X% a+ z/ Z        (resp == UF_UI_OK))
' c+ ]/ h9 e0 W: G1 R        UF_CALL(UF_ASSEM_restore_load_options(fspec));. o7 W+ d* C+ q+ R' G
}
- U6 j6 }* S% o+ F' c% g* f8 O9 N8 N+ i4 R, c0 u' H+ o
static void do_it(void)
* v( O9 Q4 z$ D1 Q! o+ p{) B6 W$ Z; m3 D" n) w+ t6 Q4 @2 q
    ECHO("Current load options:\n");2 U/ ~% u: f4 F. I; T/ q
    report_assem_options();
' s7 K8 \8 Y) a# l! i
- p& K3 c  j8 p1 x    load_specified_load_options_def_file();
. J& ~7 ^# l# ^+ G* q0 i! Q" i& p1 H/ s# ?8 y. \
    ECHO("\nNewly restored load options:\n");
( a( i2 Q) k( w( |/ U    report_assem_options();
3 Z0 x6 X5 b: }' i$ I- U$ j8 C7 y}
9 Q5 v. L! X& G, o& g
. Z9 v# Z* Z% R; e' `/*ARGSUSED*/
% R9 u# L  \5 Z0 A6 Qvoid ufusr(char *param, int *retcode, int paramLen)# L' E5 }8 Q& S
{
  b* o4 E6 U( Q1 N  x# A" n( T    if (UF_CALL(UF_initialize())) return;
" o' s, Q* g. p+ S9 r% J  Y# G    do_it();& g: \, T; _1 T7 j# C* g' D
    UF_terminate();" R2 T: ~0 w( ^
}0 X& |5 R1 }' E1 n0 D+ s- E: E
/ s" u5 Q: g. r3 d; x" X: ^
int ufusr_ask_unload(void). a9 T+ v) @+ C( V2 {) X/ r9 q
{4 _; S3 s% @5 Z1 N! v; X" v; P
    return (UF_UNLOAD_IMMEDIATELY);6 k$ ]  L( {* H# n; l& F3 g
}[/mw_shl_code], v/ g+ ]6 A8 I: v& m7 e
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了