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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:32:35

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

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

x

" R5 @' h% J# |/ F! l. C+ [NX二次开发源码分享:报告装配加载状态,设置装配加载
5 ?3 l' K' K2 s# [# I% o) c
( ~" H# {& }% t" {& B# s获取Load Options 并进行处理!
( M$ d0 K% u& `4 P6 ^- z/ T# C" r5 A6 N
[mw_shl_code=c,true]#include <stdio.h>3 [: ^$ P0 n7 l  U9 [. K) k! \) p; P
#include <string.h>- ]' d1 A5 q4 o/ J/ S; F& ]
#include <uf.h>4 }; f! n4 N8 v+ a  n
#include <uf_ui.h>7 W9 x8 v$ q  p" a5 g/ M3 Q2 T5 v
#include <uf_assem.h>
3 g4 T9 r  p& f; o. q# M- ]$ S% Q* g8 \/ P3 K' u+ `) e& f5 q- ~
#include <stdarg.h>& E: K: G6 ^- b' v
9 r3 m! E# y. K& g' I, h; N
static void ECHO(char *format, ...)
5 S1 J1 j2 M, G3 D, M" e: D{& r  n' n: |7 x2 Q2 S
    char msg[UF_UI_MAX_STRING_LEN+1];$ z& r9 l- _; T* e
    va_list args;% v3 M, c3 i  ?6 @! c
    va_start(args, format);
3 `8 w! ?/ ]$ q& J( I* i' V    vsprintf(msg, format, args);- r) @# e( `# s( A4 R
    va_end(args);8 ^$ r, p; }0 U9 T& G
    UF_UI_open_listing_window();
! v5 s$ {  }( G- K    UF_UI_write_listing_window(msg);
+ h2 B" y% g* G  r, e$ H3 H    UF_print_syslog(msg, FALSE);
1 j% z# q& ^1 k" T" U& ~7 p  v}/ C" q. i) f/ @" s: S

) k3 q" B7 F( X' Y' F#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))4 I  }( j: p$ d6 ^% `8 I0 V

% g/ b. U& T. [8 X" J4 Istatic int report_error( char *file, int line, char *call, int irc)7 E' {' u  Q) }. P0 {& s$ `. ?
{
8 J# R9 n: W' w/ c, O$ y' E    if (irc)' M! t9 D1 z; f1 U3 l" C6 Y
    {
4 Q  _# m( [3 h        char err[133];" n) J" `- X) g1 [! d
: x; E+ W( u; m/ X& g
        UF_get_fail_message(irc, err);( B3 P' t5 d% N+ G. X
        ECHO("*** ERROR code %d at line %d in %s:\n",
& J. F' @8 z$ ~2 ]            irc, line, file);- S7 f; [3 ?0 T* x
        ECHO("+++ %s\n", err);' i3 I& N# Z" c0 [* A: h1 w9 a
        ECHO("%s;\n", call);+ L" T! t- K+ E% |6 Y+ }
    }
% j5 o. @' z1 w, F) F
' O/ R6 w* M+ L5 n2 C' g    return(irc);6 n  r$ E% ]# w) m! h7 g
}
, w9 d( b6 r3 W1 Q6 {
& h7 l& A- M9 Y6 Z2 z5 _" cstatic void report_assem_search_directories(void)3 o( |" x" p# _3 I9 W5 b& ]. t
{
& f3 E2 ^  D1 g: H2 |/ F    char
; h; R: u9 d+ s) k; K        **dir_list;. u- Q0 v8 H2 T& `! l4 K* ^
    int. @+ g" R' C1 j% J5 p
        ii,; Z/ q, b! U$ g
        num_dir = 0;
2 }9 h# g" B  Q    logical$ V1 R/ a) P7 Q
        *subs;* y# D: @4 r1 P9 Q, s
# u- z" C, `  P
    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));
# B+ u" J. F2 \+ S7 q    for (ii = 0; ii < num_dir; ii++)
$ _! Q  B( G" S  g: O% {$ Y: P    {3 l1 H( K- B1 |! `5 S
        ECHO("%s", dir_list[ii]);1 N3 ?2 P$ i, F+ i9 J
        if (subs[ii]) ECHO("...");; a8 h+ W0 D2 a
        ECHO("\n");
0 R8 \& ~5 n5 |: Q* l    }1 d7 K) N9 O& l9 ]4 N6 F: h4 v
    UF_free_string_array(num_dir, dir_list);
4 |9 @- o# v* x2 n    UF_free(subs);! X( \5 H' f  i- u
}
, W2 c1 ?7 u0 h+ b
7 q7 x9 Z/ H8 C  ~- b  tstatic void report_assem_options(void)
  P. w! @" y1 |' i" x. {* Y{2 h  b% k' V2 Q; n0 O
    UF_ASSEM_options_t3 z& X, t' T% O- A
        assem_opts;9 r& b& b3 q2 u6 V1 ^. }) m
$ V2 D/ D) }& u6 n+ H$ a5 K
    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));
4 A5 T# _- A# g$ b
( }1 V7 w5 U7 ?    ECHO("Part Versions\n");
& B+ V+ U7 J& T, ?' i! n' [7 Y    swiTCh (assem_opts.load_options)2 B# }" J% o" [
    {4 h# s+ t0 j9 M" c+ |5 V! }
        case UF_ASSEM_load_from_directory:
# p- i! L. B9 E' w+ k            ECHO(" Load = From Folder\n");
6 t6 U2 ?. B) q, B4 t            break;' n+ [: [% o% y3 c
        case UF_ASSEM_load_from_search_dirs:9 v2 t% i$ l6 e. A0 T. z9 q; c  H
            ECHO(" Load = From Search Folders\n");$ B" U, p  D) t; t- d
            break;
! O4 {5 B' V5 p# w: T2 J( y! S6 y5 B        case UF_ASSEM_load_as_saved:
$ P! z5 E0 w  f            ECHO(" Load = As Saved\n");
- m" Z, y- ~- [" k+ ^, K* ^8 _            break;- E- s* x3 A& H% A! _9 o$ [# w/ l6 k
        default:
& B% l% K6 O* d0 V9 U            ECHO(" assem_opts.load_options = unknown value (%d)",
, E) i, E- o0 Y, e                assem_opts.load_options);7 t/ H, e, ^! v+ d& V3 l- Z
            break;* h# s4 Q5 P2 P( k2 ^0 N
    }, F$ w6 n! D: N: |
4 g# h* S4 w. d8 h6 m4 g
    switch (assem_opts.load_latest)* m* B) u% r, e' w) z0 ]
    {
1 M% }2 s* U4 B+ R2 Q( O+ g        case UF_ASSEM_load_exact_version:
/ d* `% ]* i, q$ C, Y2 l            ECHO(" Load Latest = Off\n");
% ^9 s- y9 N) g8 K  D1 c            break;
& [4 x; H/ e8 G' N        case UF_ASSEM_load_latest_version:7 i0 C, \- G+ @( B" D# n) g2 s
            ECHO(" Load Latest = On\n");
- D. N$ b& H  z. }5 I6 }            break;& x* Z! w3 d1 d. U. Q" A3 Y% I
        default:
3 o; x; p$ U. y5 C* l9 W" {            ECHO(" assem_opts.load_latest = unknown value (%d)",
! F0 |/ t4 A3 T! o2 ^                assem_opts.load_latest);
# J7 h1 Z! T1 M7 `- _8 N            break;
( t, v5 L( `$ n4 c% C; g    }# b& {$ f6 Q% e5 f0 I

5 T) _6 A: T) r+ }7 m    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs)1 B3 v* _/ n. V$ z' }2 p
        report_assem_search_directories();
: {0 ^" z6 u) o* _8 s/ c, k4 |1 H$ p
    ECHO("Scope\n");2 U- \6 y+ X7 A, h) O3 c
    switch(assem_opts.load_components)
0 G- g% Y3 v1 ?7 }2 N    {+ f* Q, X6 U( y. _, O+ E
        case UF_ASSEM_dont_load_components:
, ~3 X% w/ B; \9 c4 R  }            ECHO(" Load = Structure Only\n");: y/ k/ N2 T  J. E: W# b* `$ y
            break;! e+ x! L3 G9 S' K$ A/ D8 {1 y. `
        case UF_ASSEM_do_load_components:# U3 i/ k/ i# \, Y( w, o4 E
            ECHO(" Load = All Components\n");
! b  R  m; R6 o3 g2 M- J, h0 F/ X& Q            break;8 X+ i( T1 _( _7 t2 s0 X
        case UF_ASSEM_use_last_component_set:0 Q' Y5 @( n* {4 i' t
            ECHO(" Load = As Saved\n");  r; q1 c; Z( r; C! ?2 L
            break;. }9 R' O/ F4 Z
        case UF_ASSEM_use_last_filter:" y9 A! p& P1 O6 S$ m
            ECHO(" Load = Re-evaluate Last Component Group\n");
0 V7 ]* ^% b, L' A5 I8 r2 ^9 `            break;
  i9 H  ^0 J4 Q4 i* H7 |0 G        case UF_ASSEM_specify_filter:
0 |% N: O5 O1 @' {6 c, ]5 _  k            ECHO(" Load = Specify Component Group\n");. h& C0 i6 B& q0 C6 z# ?
            break;3 v+ l8 F* o0 P/ Y# }/ L4 s9 w  N9 j
        default:
8 P2 v1 l. _0 u7 @2 t3 s            ECHO(" assem_opts.load_components = unknown value (%d)",( Q5 F  O- C; l/ T, F
                assem_opts.load_components);
/ r  J& T7 h  Y# s; F' g+ }. x. Z            break;
+ R' x9 _4 V' p  G    }8 x1 `; J# o" i5 z! U# g
) B8 O0 x# G6 `- J
    switch(assem_opts.load_fully)8 z# h6 S8 m' {, ]# y- _6 I+ N
    {5 i- s. u, t" r: O
        case UF_ASSEM_load_components_partially:+ y2 i) a* W$ y  t
            ECHO(" Use Partial Loading = On\n");
8 n* h7 E* P3 H            break;; p9 Q% M; h1 R  B) J5 S7 n
        case UF_ASSEM_load_components_fully:* X9 J5 N5 k' t% X0 [
            ECHO(" Use Partial Loading = Off\n");+ j5 V6 `( X* p' R+ ?) I
            break;7 {) E! Q5 _/ T- `% {, i! B0 ]8 T# E
        default:
. u/ h% R7 S. x  n5 C            ECHO(" assem_opts.load_fully = unknown value (%d)",
/ F9 H! Q, f6 O' [9 L; B! B                assem_opts.load_fully);
: z3 B& B8 U3 e- S7 {            break;
: k  o7 T; @0 y0 ~& N    }3 o9 p7 ?( Z$ U' y
$ ]' e, Q2 m0 C& k
    switch (assem_opts.load_wave_data)( c" f" t. L: `5 V  k! k5 |9 x
    {
6 \& A! E9 J6 U        case UF_ASSEM_load_wave_data:* y+ @6 W1 T  Q, A; X1 V$ @
            ECHO(" Load Interpart Data = On\n");6 v7 e+ u+ A. o; r0 L; O5 l+ h& E' X
            break;" {! {  }4 _% r9 x8 J
        case UF_ASSEM_default_load_behaviour:
  S# S6 p7 Z3 t, e6 o3 y: X0 h            ECHO(" Load Interpart Data = Off\n");
+ a1 \. Q5 L/ w! ?            break;
4 p( k" w+ Z$ w. s: \        default:: g* a. h; Y6 U' ~( B% J% ]+ m
            ECHO(" assem_opts.load_wave_data = unknown value (%d)",# m1 Y; ^$ i& B7 o3 f0 [
                assem_opts.load_wave_data);: \3 Y* ~; L& V" f
            break;
) c0 `( Q' w0 b$ B- H0 h* t2 i    }3 n$ x0 Q" i% h
( y8 v9 y1 u' u* X3 ]9 x
    switch (assem_opts.load_wave_parents)4 c8 n8 z6 A" E
    {
/ b5 N; x2 c! X5 R" C7 T        case UF_ASSEM_none:
: F! ]+ [7 W6 ^( o  F& f+ `            ECHO(" Load Parents = None\n");3 C* F( G+ o# }* T# F
            break;
3 e* u' x  L% b& M5 Q3 c; |1 j7 ?        case UF_ASSEM_immediate:
2 q6 h; A" w7 H1 O6 U            ECHO(" Load Parents = Immediate Level Only\n");( C1 e% P8 m) Q* Z- l4 X6 m
            break;
0 ~* [* q7 E& K% R% d        case UF_ASSEM_all:
3 X4 y/ p( r  [1 I1 v2 B5 q            ECHO(" Load Parents = All Levels\n");0 g0 |) }- E, I+ K( L
            break;! a8 ]! x$ r0 X8 z% X8 |5 X: B
        default:
5 s; |1 X4 X. F/ M4 I% _( a            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",
9 l  ?; T! P8 j8 ~3 }                assem_opts.load_wave_parents);
1 J% b1 G% n6 n4 M            break;
0 ?/ o( I0 b* c' l# k0 e  ]    }) R; \7 G% T* w

6 F$ c5 p& Z* j1 |7 z    ECHO("Load Behavior\n");3 l1 O, x' s$ n; p/ V1 l& e
    switch (assem_opts.load_substitution)
: `: Q1 m, R1 {3 t' H    {
* J# [: H1 d' M$ o5 e# D" s# L        case UF_ASSEM_do_allow_substitution:4 o" P- c/ b1 e7 s2 p# k5 v
            ECHO(" Allow Replacement = On\n");6 U8 J! ]/ x! F9 [6 r+ P5 `" v% Q
            break;1 X+ ^' M  x3 a' \6 E8 E0 A! N4 S
        case UF_ASSEM_dont_allow_substitution:7 ~+ Z+ W, g/ s. G
            ECHO(" Allow Replacement = Off\n");
" W1 W, E, g$ X( c            break;
# V1 x& @2 a4 f& R7 I8 z: y        default:  ^! o$ J5 p; |+ E5 ?
            ECHO(" assem_opts.load_substitution = unknown value (%d)",
( ?5 p; z$ @9 Z  C1 ^* |                assem_opts.load_substitution);4 T2 \) V3 q& G1 `! T
            break;
) Y: |* s9 X  ^4 [; p3 J3 w    }! B; s' _) q" Y1 x& K* B

, s! s, M; j$ F4 U5 d- N    switch (assem_opts.auto_regen_pfm_option)/ L$ B. ~: H1 t9 R/ ^/ ~' k
    {5 x* t+ D& E; b% x* b
        case UF_ASSEM_auto_generate_pfm:$ a) T1 f  \0 W1 s9 J
            ECHO(" Generate Missing Part Family Members = On\n");
2 y% k6 Q9 i5 }1 w9 g- W! }$ X            break;- i0 S1 \& G  F# H5 ^
        case UF_ASSEM_dont_auto_generate_pfm:
! p  ], n8 a6 Y) C+ y* E            ECHO(" Generate Missing Part Family Members = Off\n");( m$ T0 G( p3 Z9 Z% d
            break;
8 [' C4 e/ W0 G! c; U        default:
. f. h, l3 s+ \/ \2 i            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",/ N  q5 E- o" W9 J' Z1 \
                assem_opts.auto_regen_pfm_option);
7 Y7 o* B+ r( E; S4 W4 w            break;* `- T$ D: {! P$ s. B
    }
- O% [, ~9 U/ S8 A; C0 d
  J- t1 T% B6 ^  _$ e' ^; j    switch (assem_opts.failure_action)
, e4 }6 s. j6 e$ D7 |( p    {7 A8 t; t. X0 m" d  K
        case UF_ASSEM_do_abort_on_failure:- {# t, d# u) h* h2 s: q
            ECHO(" Cancel Load on Failure = On\n");: l. M& _# y  u) [
            break;
' h/ ~% Q; d7 S0 v# h1 L% [        case UF_ASSEM_dont_abort_on_failure:
* }8 }# I, C# N7 _" Y7 t            ECHO(" Cancel Load on Failure = Off\n");, _( g. R% o3 J  B8 ]
            break;
- F( C5 V6 k9 L1 D9 z        default:
1 b, `9 U6 j1 C2 I$ Z            ECHO(" assem_opts.failure_action = unknown value (%d)",
* g4 e9 W! B  O6 v1 f                assem_opts.failure_action);; J1 U% l7 k- u4 b& A# u8 `
            break;  f/ O* w; T+ U9 n, F' @6 G4 y
    }9 Y/ `' r/ K* ]2 m: |

$ ^, t+ O7 s' d" g9 w$ a+ S    ECHO("Reference Sets\n");
# T3 f/ n; U* i/ Z2 D8 Q" t4 D4 {1 P) f    switch (assem_opts.apply_to_all_levels)
4 f9 r/ f; }6 O: L$ A3 [3 Y1 E6 \    {4 T) N+ K5 R/ n9 J3 C2 n9 d
        case UF_ASSEM_do_apply_to_all_levels:
( I  ]) P( r" `& k$ C            ECHO(" Apply to All Assembly Levels = On\n");
) E" L% f) P) W$ L6 p8 H3 T8 _            break;+ Q! g, Q. B/ f1 a+ C
        case UF_ASSEM_dont_apply_to_all_levels:2 X$ s6 r" [. A2 X. e6 F" W
            ECHO(" Apply to All Assembly Levels = Off\n");
& \* R4 s# y' r: P+ x8 d            break;0 a$ K9 t2 K9 u7 P1 t8 Z
        default:% l1 \$ a/ w7 y/ X" x
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",
( D8 P0 B- D: X6 F$ h                assem_opts.apply_to_all_levels);- j  w3 i" ~0 `. p* Q. x/ j# n
            break;% n5 ]3 G* S3 K; p
    }# Z  G8 g9 S9 @; P8 S  P
& G' V" y+ _4 F9 _' L
    ECHO("Preferences-> Assembly (misc)\n");. ~) }* k4 l* ]
    switch(assem_opts.emphasize)
- ^: X. L- E; C) A    {2 L+ }9 Z) G, u% Q
        case UF_ASSEM_do_not_emphasize_wp:5 Z4 @. D% Y' ]/ Z& ^/ c
            ECHO(" Work Part-> Emphasize = Off\n");1 [  S" @7 c3 c6 t
            break;
5 r! {2 N1 X( C) @0 c( s9 T        case UF_ASSEM_emphasize_wp:
# F9 u9 x! b! g7 l1 r            ECHO(" Work Part-> Emphasize = On\n");
9 P2 e- P! O8 o; f1 v& s* \            break;
+ m9 R& s3 R5 a        default:' g. \* ?0 q9 w3 U, ~% l8 ]3 \  I  G
            ECHO(" assem_opts.emphasize = unknown value (%d)",. R) u- U; ]; P( }
                assem_opts.emphasize);9 k: \$ m6 R  z+ V( n8 L% y
            break;
0 \6 g3 y2 r$ _    }
4 [/ I9 k7 G$ d7 G4 h5 d$ l3 r+ z/ y' H& m
    switch(assem_opts.maintain_work_part)- U: o, w( s, a
    {
3 l( t/ _& D* z" g- F. h- V; I        case UF_ASSEM_do_maintain_work_part:
+ ^4 {  ~& J+ @# G6 D5 c" \9 P. u            ECHO(" Work Part-> Maintain = On\n");
$ x7 u1 t8 Z( j( O8 d  g            break;0 D6 V0 P8 V- ^
        case UF_ASSEM_dont_maintain_work_part:3 r1 e  L. y2 m" k* {8 v
            ECHO(" Work Part-> Maintain = Off\n");
% f7 Q3 N0 z# h, q7 ^            break;
+ _4 ]; L+ ^* p& p$ x6 d. F        default:
4 H2 J2 G; I) c. e: G            ECHO("assem_opts.maintain_work_part = unknown value (%d)",
9 j' b! h* y6 u9 N# b5 ]3 `                assem_opts.maintain_work_part);. h6 h3 c; A) d  \8 Q
            break;0 a/ c3 N5 A! v( `% J2 \# @
    }
* o3 o1 V# S* ^    switch(assem_opts.update)
- o5 r2 |+ a2 s. }) F0 n    {
1 F$ t, J) l4 k7 u8 z8 U$ W        case UF_ASSEM_no_update_report:
. v6 H0 i  D7 A& }1 s$ f& X! D            ECHO(" Display Update Report = Off\n");
* F; h( z% w& j3 o( m            break;
  E9 N* r) x* V, A8 v8 M        case UF_ASSEM_update_report:  V( Z/ C$ S% B+ T+ b: ]! N
            ECHO(" Do Not Display Update Report = On\n");
) j' q# }& Z0 D( s% r! C9 M! v            break;/ V( ^4 u/ }$ F2 `
        default:
3 Y' F& S  n( A( r# R! G) i% ~            ECHO(" assem_opts.update = unknown value (%d)",) d. L& U$ {% T6 \/ n
                assem_opts.update);
- w" \% y' g4 w" [$ v) e            break;
: r( i5 t1 O: c% L$ C    }" H. ^; v+ Z, R
}
! d( m5 R+ z) |# H! D, k! G3 j9 n# z
static void load_specified_load_options_def_file(void)2 g' c# Q  X: k% h" U
{4 ]- D! `( Z+ |' V
    int/ q1 O; o4 E" q  M6 d" K! l6 D
        resp;
* u! V! p9 o( f8 s" M' s  e4 _, y9 @* [    char
& [/ j6 _9 h: q7 D- u/ A        filter[MAX_FSPEC_SIZE+1] = { "*.def" },; o- Q+ [. d* J
        fspec[MAX_FSPEC_SIZE+1] = { "" };6 [+ q$ K( h8 y9 Y6 a0 n& Y
3 ?* b$ i. b4 F& ?
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",
* i: t+ U4 A! X. y7 T: e- M8 w        "Restore Load Options File", filter, "", fspec, &resp)) &&
# Z8 q4 M5 s6 x  T+ c) T" `        (resp == UF_UI_OK))
& J( F9 K( X* ~5 G        UF_CALL(UF_ASSEM_restore_load_options(fspec));
. O7 p: J( @0 o8 _/ v9 ~}
. |8 q% V  W" q; a& M4 B% X7 d: @0 |
! Y6 g$ x+ Q3 p* }0 M$ G& Fstatic void do_it(void)
; z% |& `+ t2 L, a+ W: s4 j; R{* P; x0 g7 g+ K% S  Z
    ECHO("Current load options:\n");
" Q- B3 @5 B$ m( f* ]  Q) }    report_assem_options();+ T- p* T) H  C! v# N0 y

2 z* B$ E/ ?' \& ~% B    load_specified_load_options_def_file();4 e+ Y  ]* ~, J
. n/ g" O. W. v' r4 m1 o
    ECHO("\nNewly restored load options:\n");
2 S4 I& U/ R- l    report_assem_options();; g4 _, a5 ^0 X
}
( f! H) B/ v1 b/ L) H  {! K
7 v7 N* n4 M0 ]; d& D. w5 F/*ARGSUSED*/# C: I2 ~' R  K
void ufusr(char *param, int *retcode, int paramLen). U9 n* W% q* I; z; u
{
" A1 R7 n. A7 @0 i8 l3 x    if (UF_CALL(UF_initialize())) return;% F& N3 f# q# b3 X* c. r
    do_it();
" W9 y' X: d/ m. W" f" m$ S" s5 K" N    UF_terminate();
' X/ o" t5 h; j' |- `}
! J8 G* n% r1 H+ E. h8 \' P& D* Z# R) i7 Y
int ufusr_ask_unload(void)0 B& ~2 V/ U; @- `
{1 z0 B. ]+ V# ?- V
    return (UF_UNLOAD_IMMEDIATELY);
, L6 M( O& X2 K0 K  t. S/ z}[/mw_shl_code]4 ~0 q( d! R2 j& N5 L- m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了