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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:32:35

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

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

x
0 O1 l9 x' w) j1 s
NX二次开发源码分享:报告装配加载状态,设置装配加载
7 {- ]5 {+ ]0 T, d3 g
9 U1 u! G; d/ F3 i8 H% Q获取Load Options 并进行处理!
) `* X* I3 |+ @. t; h- L4 Q
( B& ^3 s/ b% I1 o# \2 Q[mw_shl_code=c,true]#include <stdio.h>5 H# G  {# T; o/ a+ ?+ _
#include <string.h>$ h' |. W# W& O2 M3 k2 a- G  z
#include <uf.h>
+ c. N' u, s( ~, @! P. K#include <uf_ui.h>
% @: y2 \" p2 Z# G#include <uf_assem.h>! U0 f+ m7 B6 m) Y

; j6 W* y2 P( j& |$ v; I# M#include <stdarg.h>2 d  \; b# S+ p6 ?
) o" ^+ [% Z3 y' u3 z3 I5 u
static void ECHO(char *format, ...), H9 J) x+ E( m5 I
{
0 J2 [7 c- ]5 j1 m    char msg[UF_UI_MAX_STRING_LEN+1];
( D( ^8 ?# N8 @$ |1 z$ y    va_list args;
- _$ X% W% E& V2 V    va_start(args, format);& R& J7 ?: t( @1 s& j
    vsprintf(msg, format, args);
. x! E& j1 J9 ]    va_end(args);
: _. }8 G+ t. g& G6 Y+ v    UF_UI_open_listing_window();
9 v. ]& Z  x: B4 y    UF_UI_write_listing_window(msg);
/ e/ O5 K- ]* Q  m    UF_print_syslog(msg, FALSE);
' w5 T3 `& y, i! ]% R}
. V! U! \" e9 C# {6 Q( t3 J5 r2 P# l$ D* a& z" |, H
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))/ k! y8 f1 X% j4 v

7 T% R. ]2 B- [% E" c/ xstatic int report_error( char *file, int line, char *call, int irc)
0 N% j$ b& I& Y" Z- R% ~' {{7 E+ o+ J" P- e9 k) C* f
    if (irc)' ]0 Z' U0 M5 P8 i4 B! G% O
    {6 x4 {8 N0 |- e/ b# F+ N
        char err[133];/ o; H# ]1 n  k+ C

) I: F, ]9 K5 V0 U) o9 D; y        UF_get_fail_message(irc, err);
' X5 n6 [7 V2 A# T6 |  r4 u( x( z  y        ECHO("*** ERROR code %d at line %d in %s:\n",+ r$ c( e0 q1 x( K% P5 g6 |
            irc, line, file);) y5 L3 D2 k) ^% T+ C3 j
        ECHO("+++ %s\n", err);
4 q* e* F1 _! N5 \9 t        ECHO("%s;\n", call);  F9 x3 Z8 l; \- Y' j
    }
1 L# n4 C9 L5 T2 f$ h7 @5 g3 g: u2 [1 u; w3 R
    return(irc);: g) J. A6 {- N: [+ I6 g9 D8 A. c+ w& T
}
; c/ j0 v0 z( c: Y. b+ U% {% o6 r, h# ^
static void report_assem_search_directories(void)
2 V- w9 W5 E: x* b5 R: h{
6 V7 N! V9 G; T    char
; h8 i( I+ Z$ s! b4 G; q7 V        **dir_list;
2 A. v# y! D5 e4 k( M2 n. s    int
5 X3 V! n0 L  M4 x: ~; r- n        ii,. C; ^$ l- m: A$ a9 u! @/ \
        num_dir = 0;
0 \- z9 a  G, q8 [9 ]4 l, n. T3 J: L    logical
7 t: E& s" p9 ]* t3 {) I        *subs;
1 t4 _) H# M7 v& z
' h, L9 n6 u) ~3 [    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));
* V+ a3 p3 g! v2 s: H    for (ii = 0; ii < num_dir; ii++)
: \5 ~! g) Y6 a# l1 l2 p  P    {
' c5 V' |9 m& Q+ p3 o% \5 n- g        ECHO("%s", dir_list[ii]);
2 q7 Y. O3 ]2 l/ ]" Y        if (subs[ii]) ECHO("...");
; D1 E) \4 X" m) G% O4 Y9 `        ECHO("\n");9 D' ^- j8 z1 w! u: W
    }/ X2 {1 H8 D  J; b+ H; u
    UF_free_string_array(num_dir, dir_list);; `3 l( E) C9 _
    UF_free(subs);
5 m3 e7 _! V: q' B& q/ z' H}. l4 Q+ b: ?8 u( [( w  N/ H1 \+ C

) ]2 ~1 T( R0 f2 Kstatic void report_assem_options(void)
) J7 G; \8 B+ m( m4 p$ ~% o& \: U% t{
$ f) Z- r( h/ f4 C    UF_ASSEM_options_t  j7 b6 S- b9 D' z- o7 i( M
        assem_opts;8 P+ d# w7 {" J9 r& S

- R6 m" S, j- N2 J    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));; [# S, u( m$ V4 _
, g- @* a. Q& J% D; \" a
    ECHO("Part Versions\n");
- A( Y7 }1 p$ [  T9 K% b+ I    swiTCh (assem_opts.load_options)% d$ v1 W# h5 N/ ~$ c
    {
$ p3 q$ g7 N8 }3 Y! g( k        case UF_ASSEM_load_from_directory:
$ [3 K0 t4 _0 y            ECHO(" Load = From Folder\n");( g% {7 z/ H8 Y' [& I
            break;) {. O' T2 f+ r
        case UF_ASSEM_load_from_search_dirs:
2 D  o" ]/ J$ _# D  S! S5 }            ECHO(" Load = From Search Folders\n");
5 R" J4 c1 L9 ]+ o            break;
2 A7 S( {0 _1 S+ Q# F, f9 q% r- U$ Q4 m        case UF_ASSEM_load_as_saved:
7 {+ q. r2 N/ m0 f* X9 b            ECHO(" Load = As Saved\n");& T& R: H$ w5 ]/ s- K
            break;# b1 j  |: Z5 i7 Q  T
        default:, q1 W+ C# X! N# g, Y1 i/ |# S
            ECHO(" assem_opts.load_options = unknown value (%d)",
. Y& ]' e; Y  U/ F                assem_opts.load_options);7 _* o) K, V% w/ O- {
            break;, }0 \' w. a; X" m$ V# O
    }
8 w! c% F+ D/ S1 M% h9 ]- _
- ]+ [' m4 F8 p! Q. y    switch (assem_opts.load_latest)
( a3 Y+ ]8 ^6 t' y# O+ k    {* u, s3 V7 q) e3 P2 ]
        case UF_ASSEM_load_exact_version:
6 E: i6 i: R: n* s2 L8 O            ECHO(" Load Latest = Off\n");/ M7 _- ~* p) Q6 z; W
            break;
" e0 F4 H$ z3 Y, b/ x+ z2 z+ G        case UF_ASSEM_load_latest_version:. s' C% H, @) V
            ECHO(" Load Latest = On\n");
* W9 V; j' b' j7 Y8 i            break;
3 Z' F1 J% D$ j        default:( t4 c+ z: q2 p) g) y
            ECHO(" assem_opts.load_latest = unknown value (%d)",
* z* l! g8 [  F                assem_opts.load_latest);
' l7 e+ J  ?0 y3 J7 X1 ~: {# H            break;
9 ~: e6 t6 O$ B( ~    }
* f# }* D2 |) k8 {* m9 x6 a+ }0 Q6 z# d) w" P
    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs)' k9 V8 x* u5 |7 @; K
        report_assem_search_directories();
2 t! ]3 z0 @* D4 `2 y! f1 A& m9 T3 X! G, K' ?
    ECHO("Scope\n");/ \& W3 f4 l. P  H% D
    switch(assem_opts.load_components)
8 g( L3 ?# O3 L5 T' W$ Q5 b    {6 r% m  \, _* U4 f( k
        case UF_ASSEM_dont_load_components:( ?) |  ~8 A2 _( M4 g
            ECHO(" Load = Structure Only\n");8 L! v+ V& G2 ^% O- R' [* c
            break;  L) n3 ^( x: D; V: T
        case UF_ASSEM_do_load_components:7 v* y" x7 T8 U3 E4 j7 E- n
            ECHO(" Load = All Components\n");* Z; K: l, e2 ]! l% Q  @, c
            break;
& f: q, `  g) X3 d. R! f9 D+ I) E        case UF_ASSEM_use_last_component_set:
) j* D: D, z: m. @; E4 J7 W            ECHO(" Load = As Saved\n");
! H8 m1 O% z# ^" l0 |            break;% c' M$ V2 i/ }2 m! s
        case UF_ASSEM_use_last_filter:/ f/ v" c# b9 T7 W! _9 L3 I' m
            ECHO(" Load = Re-evaluate Last Component Group\n");& ]! Q5 Y; [1 |1 O
            break;  M/ q6 h8 z6 {
        case UF_ASSEM_specify_filter:
! o4 u: [" @4 j, T9 @# ^+ A: G            ECHO(" Load = Specify Component Group\n");
+ @& ]  D! d7 U% J# l+ Q$ x) Q            break;# S: y  l7 ~9 m: {: s  x) _
        default:
7 C% W6 M$ e# j0 C5 r: V8 p5 S& \            ECHO(" assem_opts.load_components = unknown value (%d)",
2 x" U  K# M% x# z& X4 ?0 k% }                assem_opts.load_components);
0 I  B$ K3 Y; h) j0 |$ g            break;
( l7 F: @4 E/ L  G( i* |! g% i    }
. @) o/ L1 j2 {; b& H* }9 e2 E* A
& z2 @0 Z) W) S* G0 `    switch(assem_opts.load_fully)
: O" A2 U( P( [  ?4 w8 E/ |    {9 V! U8 C) {- f$ H; r
        case UF_ASSEM_load_components_partially:' X' K' _% d; F/ ?" L  V
            ECHO(" Use Partial Loading = On\n");
& x. u3 R; o5 T; m5 M5 D: l9 L            break;
# A3 o8 t+ m( B: E. N        case UF_ASSEM_load_components_fully:
- }; a% [0 M: }. Y8 j  r+ [* C            ECHO(" Use Partial Loading = Off\n");
+ _3 \) x- B% I% s. n            break;1 [  l; D1 T# \# p
        default:8 @$ O% D. E3 i/ R6 Z
            ECHO(" assem_opts.load_fully = unknown value (%d)",/ L3 @4 l1 ?: C- l
                assem_opts.load_fully);6 |  {6 e. c! Q' g; L$ E% g5 q
            break;
% W/ j+ d! r! d% N    }
0 \4 t( J6 v+ Y& H4 l- F$ l2 J% N# Y3 A$ d( P& R, j. ~
    switch (assem_opts.load_wave_data)# w3 M! m3 O- k. H$ {& k
    {
* N5 d! i1 v! H5 V7 }5 f2 u" f        case UF_ASSEM_load_wave_data:" z4 |7 n$ ~4 g& V) C9 c
            ECHO(" Load Interpart Data = On\n");
( k8 q: r' |' C            break;
( H; q0 e' s- |% n- [        case UF_ASSEM_default_load_behaviour:; K+ Z# r- `- W: G9 a* ]0 c
            ECHO(" Load Interpart Data = Off\n");* @' n3 c1 I. P4 A9 U& F# s) {
            break;* r+ b4 R; F* o# D; Q, T! D+ e' j
        default:
5 U, A! h: R* b, d1 Z! b5 q8 p6 j$ R' l+ x            ECHO(" assem_opts.load_wave_data = unknown value (%d)",2 e  y: `. x: m" D
                assem_opts.load_wave_data);8 B1 w# X0 w& d% J4 L; x3 ^
            break;
* b# H$ y/ ?9 {    }
/ y1 g) e# D. ?. n
( p: X5 `, p% R1 I    switch (assem_opts.load_wave_parents)- n7 ~0 l3 J- E" x% X9 @* e
    {* ^; |& Z3 }- M: }( |1 v- k9 F' m
        case UF_ASSEM_none:
7 S- z/ o. H! _3 i            ECHO(" Load Parents = None\n");" l: \! @# y/ E( _- [7 d# [) X
            break;8 L' h( m4 i: Z6 S- p9 D
        case UF_ASSEM_immediate:7 n0 r% m( g% s/ o7 y
            ECHO(" Load Parents = Immediate Level Only\n");
) e8 M" z/ O5 ^" A+ l/ j8 p            break;8 A- I  p- ?& I8 k/ P
        case UF_ASSEM_all:
  @" _& I9 _: k, f  Q+ s            ECHO(" Load Parents = All Levels\n");" ~; r" `* N3 `+ P$ c
            break;4 m4 H" Y' C0 c# x( A
        default:8 l2 v) ?3 v( y6 v' u
            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",. c  k% W5 ]9 l0 e" }8 f
                assem_opts.load_wave_parents);
" z  k) C! f  P$ T            break;
, \3 s2 B* r* O9 H    }
, C/ }5 R$ s( ]+ d. \
! S! n8 P8 F- _3 s2 ]: F7 B; t    ECHO("Load Behavior\n");
" G8 E$ q( X* U2 j    switch (assem_opts.load_substitution)
. S% i! B" |7 d4 y$ c8 B    {8 ~( t7 f; z2 _) V& I
        case UF_ASSEM_do_allow_substitution:
' f/ t0 Q, I( u* K5 {! J. }            ECHO(" Allow Replacement = On\n");. a. V1 g5 O. z" h4 K
            break;- I  }+ O8 J6 {$ I- J2 O
        case UF_ASSEM_dont_allow_substitution:% V# i  w5 h8 G' t& ]0 M# X
            ECHO(" Allow Replacement = Off\n");
7 q, r4 J" |; p; \7 {9 B: C            break;* b$ {/ I3 h/ o. _1 d
        default:+ o9 l  r3 p: b& g  ?
            ECHO(" assem_opts.load_substitution = unknown value (%d)",
! F7 k" g  Z4 u- j2 W& Y6 a! r, ~                assem_opts.load_substitution);
4 d+ m0 p1 f3 g2 `2 m  J" c5 F( A            break;- z6 L' `5 c6 B! l$ z. f+ n
    }
% j7 I8 I) ^! l9 h( M5 V- O2 T/ E  K- ]. e! [/ t5 Q- u
    switch (assem_opts.auto_regen_pfm_option)
9 J# ?" C0 l9 j, ~7 `    {
" }* k2 E' b$ \        case UF_ASSEM_auto_generate_pfm:3 d* G' g0 t9 t
            ECHO(" Generate Missing Part Family Members = On\n");
* H- d- r! h  ]5 a9 `9 P            break;* z2 q+ @! A; g% n
        case UF_ASSEM_dont_auto_generate_pfm:( e5 f" E% j( v& j; R' c- n( Q" I
            ECHO(" Generate Missing Part Family Members = Off\n");; ?2 Y- B9 z. b6 |6 U
            break;, {  v% K2 R+ x/ D# r  o+ b5 ^
        default:, C4 u2 ]: a8 v
            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",
" J# W3 i  \5 E/ n                assem_opts.auto_regen_pfm_option);
# T! y! S" ]" X8 Q& O; W            break;
3 n# n# v! ~5 d+ x% y    }
9 z9 K. w) x; w  l0 U1 w% Y1 d- w0 y$ E1 p# H
    switch (assem_opts.failure_action)
3 z: R0 |7 k# ~7 K  ~    {2 N- }9 l9 d% x1 z
        case UF_ASSEM_do_abort_on_failure:
3 a( y4 O! c( I& Y  z            ECHO(" Cancel Load on Failure = On\n");
+ @$ T) U5 S3 }2 L. G& G# Z& ~            break;! l4 A( F- C8 ~( P2 g$ y4 \
        case UF_ASSEM_dont_abort_on_failure:
( i5 e( V: t1 c3 B+ f            ECHO(" Cancel Load on Failure = Off\n");
% L# F; C) Y. O" ?) ?+ m& ^# z3 E            break;
8 T' o% b5 v8 _: {) z2 O        default:
/ q4 P2 d1 C5 Y0 J2 q; m) p4 T7 L            ECHO(" assem_opts.failure_action = unknown value (%d)",
& T  ^1 z$ f" W3 H: A& z1 X2 C4 |8 C                assem_opts.failure_action);$ b  R8 y1 Z/ I4 d
            break;% w& d& @- \0 h/ [
    }
6 |1 E' s# _0 k& L) x$ b+ Z3 c1 y  ]3 e; P
    ECHO("Reference Sets\n");4 k6 |2 M) r# O; ?% V' W9 V
    switch (assem_opts.apply_to_all_levels)
0 J" |7 g2 L$ ]8 k. F: p+ d    {& l- X' \! t7 O3 U8 H
        case UF_ASSEM_do_apply_to_all_levels:
! y4 h& Q, |  I, j0 Z; s7 m            ECHO(" Apply to All Assembly Levels = On\n");
; t3 ~. a" s) o            break;
$ ]! I7 `! q: R$ b$ ]: ?' X        case UF_ASSEM_dont_apply_to_all_levels:
  v9 ~& F1 g8 H2 q' _+ b            ECHO(" Apply to All Assembly Levels = Off\n");; T7 X/ {8 S( p& C+ j/ a( |3 ?
            break;8 v( e3 P' f+ B  _/ f& r0 [
        default:# l3 G: }) w! I0 i% [! _
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",
5 F% R1 q7 Q' B, `$ H) z                assem_opts.apply_to_all_levels);9 a6 x- G1 v/ E! z2 ?) j
            break;
8 X9 H# f; y& G7 I: {5 o    }2 e7 H2 K& Y+ B7 B( R: n. T
! B) h, u3 X$ L; X4 o% s2 ?/ y: S; N
    ECHO("Preferences-> Assembly (misc)\n");
/ b5 O! h! P: M  b+ _* `4 W    switch(assem_opts.emphasize)
2 ]& A& n$ S: J4 e1 I$ \    {& m4 P1 n6 e9 P# z5 Y
        case UF_ASSEM_do_not_emphasize_wp:
- K$ ]- d: \4 [& d+ X: ~            ECHO(" Work Part-> Emphasize = Off\n");
- y) a4 o5 W" A4 C, N0 h3 W            break;
4 w3 j+ s' o" q  |) k        case UF_ASSEM_emphasize_wp:
3 v3 J. L0 n% I" ~# @& V            ECHO(" Work Part-> Emphasize = On\n");
/ G6 ]- Y2 m& G$ f; N. N2 w2 W            break;
" c* w6 Z' A/ C5 T        default:  T& m0 @5 B- s  U$ W' y0 P
            ECHO(" assem_opts.emphasize = unknown value (%d)",
2 g9 l9 l; y+ p& K% `, T                assem_opts.emphasize);8 |- M1 X2 e0 E% a
            break;
. M. K2 |  S; d6 _5 ^4 i, P    }
2 s; b6 r  m, p- K9 `
" ~4 s, H8 B; s    switch(assem_opts.maintain_work_part)+ b0 }& I6 d! N  C# i) e; F
    {
9 H  {' e+ P  J4 E        case UF_ASSEM_do_maintain_work_part:
! z4 N# v1 J/ c3 s8 ^% d( O- M1 U; V            ECHO(" Work Part-> Maintain = On\n");9 I/ p; q! g- t7 j1 ?% G
            break;; v: ?; z0 g: }2 R
        case UF_ASSEM_dont_maintain_work_part:6 o! D# e" J9 {; |; p
            ECHO(" Work Part-> Maintain = Off\n");9 {( K( N6 a) q# r' s
            break;
) D, N7 r4 [) B! j        default:
+ Z: ]# ^, Y6 o' v& @$ }2 k            ECHO("assem_opts.maintain_work_part = unknown value (%d)",' j5 M( N9 b! {
                assem_opts.maintain_work_part);
! `& X5 p* z1 }+ ]8 U            break;
$ D' g( }6 X' S) k' j: X; E6 c    }$ f1 L3 h0 K- _& I( [
    switch(assem_opts.update)
, z2 N; @; \+ P; y3 P    {* r3 A( U8 |' {, D3 g$ b- G8 U
        case UF_ASSEM_no_update_report:) F8 P7 l1 z6 M8 y8 Y
            ECHO(" Display Update Report = Off\n");
( E+ G0 K& n+ j/ n            break;
0 u2 a7 e" R: a. u" h        case UF_ASSEM_update_report:
$ c. u- v2 f* C/ k3 r4 ^) g: r$ a0 B            ECHO(" Do Not Display Update Report = On\n");
: _4 ~: G0 C! M& ~5 J9 d0 l# B            break;
$ \) h2 B( d7 u/ u        default:
# m, S0 X5 ^8 J7 [9 ?  L            ECHO(" assem_opts.update = unknown value (%d)",
; y9 o- [: Y; t; K2 e                assem_opts.update);
9 p% q, g* `6 d) ~1 Y2 K) y' S            break;
7 f. o8 z5 G8 }3 F# Q9 u4 S    }7 Z& Y. H( m" B9 w, I
}
* _# ?* `3 {$ d0 L$ _& w$ A4 d  r2 e
7 n4 A9 d+ X( rstatic void load_specified_load_options_def_file(void)& B4 B9 ]7 y2 v5 r" Y9 P
{" _3 }3 D5 ^3 z7 P
    int& I! t+ _* b. A% i& g) \8 x5 r+ c4 ~& [1 h
        resp;9 c8 F1 x! N( O% I+ _3 P
    char
  \( i# [& _) w) X6 h3 W8 ^        filter[MAX_FSPEC_SIZE+1] = { "*.def" },( m* m) @) ]/ R; S5 q& r
        fspec[MAX_FSPEC_SIZE+1] = { "" };9 t) u, S4 G& m/ O. z+ Z

; A1 W2 x! c7 c8 z) ?  T+ U    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",
* u% s. v$ ?3 t! }        "Restore Load Options File", filter, "", fspec, &resp)) &&
' q9 J4 @& q, y" O* G2 G0 ~' S        (resp == UF_UI_OK))
2 K, x" f& V8 I6 G3 m        UF_CALL(UF_ASSEM_restore_load_options(fspec));
5 r( {( |  Q# C+ {8 Z" u}
; g3 F  Q8 P* ]  c9 n
8 w  J- H. B/ h; _static void do_it(void): B9 t/ w: I0 s$ V1 V5 l
{
) G6 M6 S, e6 b% R& g( c( V* v7 W# l1 C    ECHO("Current load options:\n");
  b: I7 ^. G7 E5 C- t1 c! v    report_assem_options();/ t# W. \4 I! c1 p- j  G1 ^& d9 k

$ D- L8 ^$ N3 }6 z0 F1 P    load_specified_load_options_def_file();: D5 m2 y/ |: E0 W
% g( Z3 P5 A$ [! x- e3 p
    ECHO("\nNewly restored load options:\n");
+ X3 H; h2 F8 S" u1 S: c% z    report_assem_options();
% b- Q# M7 X& ?( l}
% ~8 Z  L- \5 t. j/ i, H8 D( C- g+ _
8 {" i. t2 O+ j0 W% Q* `/*ARGSUSED*/. |( t+ S# o8 d8 p: v5 D! f5 `
void ufusr(char *param, int *retcode, int paramLen)0 r0 `5 R  Q4 z. {
{
" V% Y% S* q  Z) F3 H    if (UF_CALL(UF_initialize())) return;3 n8 \& d( p8 \2 f0 w% \
    do_it();
* X) ~. g, C; w0 t0 Y( x    UF_terminate();* ]" p6 ^0 v. J' F3 ~
}
+ u6 y+ U' O; P( y+ V& P
* Z8 a7 h8 v' {! U$ h  u( bint ufusr_ask_unload(void)' J# V+ `( v' \' v
{
1 v' @1 k7 M: y! e/ I- s  q  p    return (UF_UNLOAD_IMMEDIATELY);
. S7 M' O' n* V3 x}[/mw_shl_code]
# u8 q! m3 n4 ?) m* [9 |/ i
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了