PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:32:35

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

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

x
8 h. k  |, a: E8 ~4 T% |
NX二次开发源码分享:报告装配加载状态,设置装配加载. h: u( N! G$ P% H" U, ?- u

) P# C( R9 s- q: K  e( l/ i3 n5 I1 m6 P获取Load Options 并进行处理!
' d; J9 i- m0 C: q# p# I3 w6 N/ p& v4 Q4 O7 W6 e! \
[mw_shl_code=c,true]#include <stdio.h>
1 Q$ U8 Q% R+ H4 E5 q#include <string.h>
) M7 {  j7 {% M( u, f#include <uf.h>  t7 q/ o; P5 K* G3 j. R3 l0 D& L
#include <uf_ui.h>, k: k) W; i2 s5 y
#include <uf_assem.h>% s3 ]; H) F: _) ~) [' a2 u
: I: I. a  Q6 ?  H
#include <stdarg.h>
, Y& M' W5 g$ ^1 i
0 x# g. R+ D3 u$ r' `) h9 ~static void ECHO(char *format, ...)9 N" `+ Y& o# y1 ~& y
{% V; y5 }0 i0 f1 x
    char msg[UF_UI_MAX_STRING_LEN+1];
* u  H5 j9 G1 Z- z    va_list args;
. D9 h0 ~- u/ f0 D: z/ ^    va_start(args, format);# }8 k" L0 ^% D, w& }
    vsprintf(msg, format, args);
* ]+ S2 z% V* n+ n- I! H7 O& L    va_end(args);
& H5 m" c7 C! e: R0 R2 g    UF_UI_open_listing_window();( A* l7 r. h! f9 E( r* @" e
    UF_UI_write_listing_window(msg);9 m: q; [# ]) E% v
    UF_print_syslog(msg, FALSE);
+ M" w% v# \6 s2 w2 s) i}% A# q& U. K$ q% R+ l9 w* H

5 W$ x! L+ U5 e! f( X#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))9 z3 \, v8 [6 d

2 ~* g# H7 C! U; Q! \static int report_error( char *file, int line, char *call, int irc)
* a; h1 H9 h+ ^3 {8 V0 C1 p{
% |1 ^, S  N" Y8 z. v( ]    if (irc)* Q  h& r' [( Q8 L2 q: s9 Z/ e6 c% _
    {
# s$ z5 g5 Y6 W" l- e        char err[133];
  \4 J/ ~4 @; ~" e& S: @" L5 ]8 }/ G" d! D* A) G( D8 f
        UF_get_fail_message(irc, err);" C1 n! t. ~) T) W# V, T8 j  @
        ECHO("*** ERROR code %d at line %d in %s:\n",
0 ?2 P( F: L% o1 o* c6 |$ v            irc, line, file);( m* `* x5 `0 o  i- f0 @
        ECHO("+++ %s\n", err);% G. e4 s. h' Y7 O1 q0 @# C# ]
        ECHO("%s;\n", call);
7 G7 I. z4 M! }! O. L: O    }
* p& T" t+ ?2 ~9 g
( ?1 w0 S+ y5 P) W' T% @3 }6 q+ ^    return(irc);( _# c( t& o' N2 |. q
}4 x/ r* S2 `; q8 x" K% e3 o" q

/ ]. E( x, I' W+ H! D6 g. lstatic void report_assem_search_directories(void)
( {# H/ R/ e4 q0 {1 A' x, \{
% x" C6 s% _) {3 |    char+ W. `6 y5 ~/ ?- z0 ?; U( c& f
        **dir_list;
( Q  p/ ^0 }. m    int( G7 J/ _; V$ C" X' Z5 j: j. z: k
        ii,  _$ z* G3 E; E; k0 b/ D6 d
        num_dir = 0;
4 }; L& N1 {2 \; w4 R! j    logical  Z% ~; S. |- y0 f' T6 d5 e
        *subs;0 O+ x& f, \" n6 Q
2 L0 j  S( ?5 c9 }
    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));
# S# g/ m0 Y+ {5 Z% t$ c    for (ii = 0; ii < num_dir; ii++)
' D! h% V% O/ n9 Y1 n# R# X    {
& w! G5 Y1 q& }% _$ X, r        ECHO("%s", dir_list[ii]);
! N- ~1 s1 `/ W, A        if (subs[ii]) ECHO("...");. s! r# \4 |; J2 o: D
        ECHO("\n");+ p( ?" n; S" p& }: Q5 Z5 W
    }/ y0 M4 h5 }5 D& n# ^0 M4 d. X
    UF_free_string_array(num_dir, dir_list);
, }5 z- i6 x2 Q) x( w3 _" u/ G0 Y    UF_free(subs);  B; N0 W) Q8 ?- C% \" t/ T1 Q
}8 t' A7 Q, M5 F4 r
! k! X  T. s" z) n: G( q
static void report_assem_options(void)3 [+ i9 g$ H7 J, M% _
{( i: A5 N' h' j7 p: q& d' P
    UF_ASSEM_options_t7 D- A9 I4 y1 s
        assem_opts;
. L: k& D' G# W# r
9 i1 z/ b) W* H2 _* [2 \- X5 g, E    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));+ Y4 G8 Q2 P* r# g; k
7 \/ c8 x3 `: C. a
    ECHO("Part Versions\n");  o" n* c( h3 [+ N2 p$ {
    swiTCh (assem_opts.load_options)
0 J2 X( O/ l* |0 C# A    {, |7 z0 u: u2 X" l
        case UF_ASSEM_load_from_directory:
" z% g' \- a( S- }1 `; F            ECHO(" Load = From Folder\n");; `4 W' v5 w5 B9 A+ P3 j
            break;
3 [2 f0 E. i  E: t" ]7 R        case UF_ASSEM_load_from_search_dirs:+ C; z7 R& @! ~  _) T% X
            ECHO(" Load = From Search Folders\n");
7 ^+ Z) [3 K0 u            break;
  d8 R; |7 I; J  a, N7 P( o/ _        case UF_ASSEM_load_as_saved:
% b' G! p/ {# N8 N% ~2 v            ECHO(" Load = As Saved\n");
& b, A) X3 ^; t            break;
& d+ ~2 j; i3 w; K' u        default:
% u( U$ p( f$ |1 R            ECHO(" assem_opts.load_options = unknown value (%d)",
! J6 G- v" O+ a                assem_opts.load_options);) q, k/ t4 v" [/ @6 q% m4 h& S1 G- o
            break;
/ ?$ o, i9 c' B9 L. a( J    }
7 k( u  A5 [( o* H4 K" K1 G( R, F8 S8 `: N; j
    switch (assem_opts.load_latest)6 J1 S5 q% c9 V. B2 \" G! H0 N7 C3 J( R
    {4 D3 _! Q% I& \& g0 o& N; V
        case UF_ASSEM_load_exact_version:
- D  U+ H5 Z' d. f) J  E            ECHO(" Load Latest = Off\n");- o1 h8 K: }& J  `! r1 i4 a0 f% S
            break;
3 z1 j) x" ?- Z% A3 R( c1 J        case UF_ASSEM_load_latest_version:( c# Q; F$ l+ l/ E, i- i
            ECHO(" Load Latest = On\n");/ R. c. M( `( D4 S- v( O/ T
            break;
$ n) L, ?6 [+ T  x$ }; L        default:2 [3 F8 F1 o( @2 y& z
            ECHO(" assem_opts.load_latest = unknown value (%d)",' L( j! u0 c6 ?. q* \2 ~
                assem_opts.load_latest);: m& ^  g9 R; P# m6 a  N
            break;& T  G" Q2 t: K  D
    }0 s) C: P8 ]! W" H
6 \) u4 H% k: B  d
    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs). p) m7 c* h) w3 x+ y
        report_assem_search_directories();
2 _  \2 l; I  j: W7 e
7 J  X0 e$ H0 H" C2 Z    ECHO("Scope\n");
. |' V/ _6 h0 ^2 I3 j9 ~    switch(assem_opts.load_components)
4 v5 e& v! S. H9 I+ [    {
  F* H) t! N/ @8 n( t$ h) E        case UF_ASSEM_dont_load_components:; N* ^% z7 s$ a3 _! ?! o; |- o
            ECHO(" Load = Structure Only\n");6 l5 u, T- C& A5 Z5 W6 ]
            break;
2 q. s6 y) F; l3 O        case UF_ASSEM_do_load_components:0 y; E0 y$ S. [1 ^
            ECHO(" Load = All Components\n");
; a. x5 q  f: b% _. d' v! ]4 H1 K            break;
  }! w8 M0 F8 A- U1 e% K# p/ X        case UF_ASSEM_use_last_component_set:9 i( t8 W+ _8 t5 q
            ECHO(" Load = As Saved\n");1 Y- C" U  i3 t$ L
            break;: z9 @# r# G- O' w- q/ u
        case UF_ASSEM_use_last_filter:7 ]& Y% d- `1 \2 g# r
            ECHO(" Load = Re-evaluate Last Component Group\n");( K; j- x3 W. z1 f8 N
            break;7 ]$ D. n+ O/ j2 \! {' s7 [/ k5 K
        case UF_ASSEM_specify_filter:8 U1 Z- n1 c8 D. r
            ECHO(" Load = Specify Component Group\n");0 I0 H6 j3 S9 V2 l' h, t
            break;1 ~3 Z3 A' g" u% Z5 P- u) E
        default:4 H5 q" ]* n! Y/ ^3 T* @! G" `
            ECHO(" assem_opts.load_components = unknown value (%d)",2 ?" G# w: l/ d8 q
                assem_opts.load_components);
& m5 A0 R/ u- r9 j! X1 I            break;" s/ c& `) j5 b+ e, ~0 a% |
    }, {5 A7 n  S5 x& ^" q9 V& z* t

; m) n$ e7 J' q; M$ M4 M    switch(assem_opts.load_fully)
! k2 ]- {8 P$ V5 i    {
* y6 ^7 \- {) u4 r  H        case UF_ASSEM_load_components_partially:! k- _/ J# ~, [5 N/ v% U0 l
            ECHO(" Use Partial Loading = On\n");  O2 E# ~9 T+ j3 I% Z0 e7 B/ t" W) h
            break;7 ]* S0 ~$ O# ^  ]8 G9 m; P/ X
        case UF_ASSEM_load_components_fully:8 j! I! j$ l. Z/ K7 M
            ECHO(" Use Partial Loading = Off\n");" n0 R) n! M4 }! J
            break;, ?3 N! q. X8 z" K2 \( X
        default:& O8 O' @/ G* ~5 {
            ECHO(" assem_opts.load_fully = unknown value (%d)",5 e. n0 i4 b% ?
                assem_opts.load_fully);& V7 _/ l) q/ q6 `% K
            break;* u: X1 V3 f/ ?8 t  @. _. T
    }6 V) X4 A) \( j

8 T! @6 ~! ~0 k0 G, y    switch (assem_opts.load_wave_data)
' i1 m# p( B' C$ {( ~' |    {
3 g! N0 k3 r; j. X  s% K* a        case UF_ASSEM_load_wave_data:
' |/ _6 x" k; ]9 e8 i% A, B            ECHO(" Load Interpart Data = On\n");
, u+ R) S8 S. G- H) F) c            break;5 y- G4 o* f% `' D' S, g
        case UF_ASSEM_default_load_behaviour:
' X7 q. d" u) l4 u. T! x            ECHO(" Load Interpart Data = Off\n");6 Q0 ?7 j2 C: m% a0 j  m
            break;* S% b; h' l2 g% t  O
        default:
! b2 G7 a/ S4 c9 X! K9 D% d            ECHO(" assem_opts.load_wave_data = unknown value (%d)",) w8 O' [1 \* F: t- m
                assem_opts.load_wave_data);
1 v8 l' E- ]. _+ s) A8 k* R+ w            break;. d# x: v3 j  m7 @. |! [; S6 U8 D2 |
    }
0 \; g0 ?, {; d3 v
3 P2 M& t1 G3 {/ g6 \8 q5 W8 k3 K    switch (assem_opts.load_wave_parents)
/ T8 \7 Q, r/ R. B+ H    {0 Z1 d) o) Y! b
        case UF_ASSEM_none:
3 ~- v6 _, K: Q0 V2 H) U# s            ECHO(" Load Parents = None\n");
# l8 [2 d3 S- q, C# z            break;
- H  ?6 X( Z- l8 Y        case UF_ASSEM_immediate:- W* }) F1 @) T, c. O
            ECHO(" Load Parents = Immediate Level Only\n");1 R; }7 k5 N. p6 m3 ]
            break;" T7 {& ~% j5 G8 O+ f
        case UF_ASSEM_all:
- K$ X- l& B- n            ECHO(" Load Parents = All Levels\n");9 E# Y$ Q4 E; I  ]# t8 [( X
            break;2 M4 a' f/ \8 `4 P. W7 ?
        default:
/ t" E0 t7 A" H! E" O+ \; C            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",
( u& h! {4 Y+ g$ N" I/ l3 w/ y2 }                assem_opts.load_wave_parents);& I7 }  U& k; ?9 _2 ^9 l! ^0 Z. n
            break;
6 i% ^: B& p/ ^& p    }
$ ]' }$ s0 T+ |9 I6 e7 P! j
$ O0 U& J; s0 M. }. P* d    ECHO("Load Behavior\n");- p# @" _& Q4 n; a* ]/ R9 ~" I7 S
    switch (assem_opts.load_substitution)
5 U4 V% f$ z0 |: k    {2 {+ C4 _2 P/ L, u
        case UF_ASSEM_do_allow_substitution:
( e8 E5 [$ M7 N            ECHO(" Allow Replacement = On\n");. m% d' S" }3 r
            break;
/ M/ `( h/ t3 F2 y6 h' H% ~        case UF_ASSEM_dont_allow_substitution:
' G' w  _: r2 U  J; e            ECHO(" Allow Replacement = Off\n");6 f$ N6 t/ V/ v5 E; Z# c1 A3 F
            break;
/ Y1 a7 _6 p6 F& [' A3 t" W+ ^$ y        default:
" d) }) k% d! Q' \* p: T7 Y            ECHO(" assem_opts.load_substitution = unknown value (%d)",
. @1 A* q( _2 O; B* G/ P                assem_opts.load_substitution);
9 P$ ]9 w6 }- r: B            break;
2 L5 S& e* x% F( A8 l0 B    }' G4 v$ ~& j* u! A+ O

2 ~) E/ R: s  s& X) `) K& y    switch (assem_opts.auto_regen_pfm_option)  i, R% y7 ~# W* P$ r7 e
    {
0 K( |+ t! I  F- m        case UF_ASSEM_auto_generate_pfm:
1 ?9 Y$ [2 Q+ n: z/ x+ t7 J1 T: e            ECHO(" Generate Missing Part Family Members = On\n");
' `4 I% U6 F! Q! J9 ?            break;% L+ B5 M: r! ^- E$ t
        case UF_ASSEM_dont_auto_generate_pfm:* R; q& c  Q2 Q% [/ w' e
            ECHO(" Generate Missing Part Family Members = Off\n");
6 A1 R" ^) F$ Z, Y5 Z) D* w/ O            break;2 u, i0 Z2 Z, q! y1 _* Q9 P/ Z
        default:
5 @2 j& e% p5 c0 F4 ~- a1 y            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",
' `9 g' \, J4 g                assem_opts.auto_regen_pfm_option);
! F" A2 o4 _, o1 `            break;
, ^; p, v4 ~+ C& d7 @$ @; W    }% h" [+ ?5 n( D" B" l. w8 c
5 H2 e3 U* J* i8 x1 |! F
    switch (assem_opts.failure_action)
5 e( X7 G* M( n; D' @' l% d    {
& V% o" X# I. F0 H+ E        case UF_ASSEM_do_abort_on_failure:
* H( ^+ F5 j3 t0 M  U% q            ECHO(" Cancel Load on Failure = On\n");# U* U2 B- |) q8 {5 K
            break;
) X' ?1 a9 x" x/ s8 u, h        case UF_ASSEM_dont_abort_on_failure:
; }6 |( z. j+ G( n, q/ E/ g            ECHO(" Cancel Load on Failure = Off\n");+ O3 T# }/ d; F; w- S4 @. _) v) B
            break;8 f; U4 L0 G; {5 L. Q" l$ J
        default:
. f, F3 V* c: Y5 T  e  U$ y            ECHO(" assem_opts.failure_action = unknown value (%d)",% h7 d8 {. |8 _; J! Y* Y
                assem_opts.failure_action);: L7 p, n" b2 g
            break;
, }7 g( B+ Z$ a' p7 k    }
0 l# w; A* }+ j+ L9 k
) i. l( b  r6 G' e* {    ECHO("Reference Sets\n");! v% z/ v2 h$ Z: I# Q
    switch (assem_opts.apply_to_all_levels)
/ R/ V2 K9 V; w    {
" j9 G% [7 e6 c  X( v! l        case UF_ASSEM_do_apply_to_all_levels:
! I5 B  s6 D3 v: J. ~4 M            ECHO(" Apply to All Assembly Levels = On\n");+ ]% X8 ]4 K' [6 D$ p: K; r4 W8 M# r
            break;7 B3 A- Y0 M0 M' F
        case UF_ASSEM_dont_apply_to_all_levels:
% `8 \: [; \- D0 ]  W            ECHO(" Apply to All Assembly Levels = Off\n");
5 M' A3 }9 m' r7 z: u& F- }+ \            break;$ h& @; J$ A0 E
        default:. Y; C( X( c# Y; u
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",
; R  s# E9 @& u) ]# Q% }                assem_opts.apply_to_all_levels);
+ \' o2 Z* W, q6 X! a& B( z2 O            break;
4 d7 x0 h1 `7 e. e% H, j    }
* I( @7 p/ m. N3 m7 w4 L2 C: h
3 d  D9 ?6 L; ?* u+ J    ECHO("Preferences-> Assembly (misc)\n");
6 |9 k  S! ]) i) S    switch(assem_opts.emphasize)
1 S  @: a8 B8 t    {
) o- H5 S) L3 I2 [        case UF_ASSEM_do_not_emphasize_wp:
3 T" O8 l# o. U0 }& R* M            ECHO(" Work Part-> Emphasize = Off\n");2 D* B  }. V- o0 w! n, k
            break;
& m7 Z9 L2 q8 p- s2 S        case UF_ASSEM_emphasize_wp:
% v4 |% [0 Y' O0 H; [9 j            ECHO(" Work Part-> Emphasize = On\n");
5 U5 d2 O, C( ]4 f            break;, N8 e. I2 Z! e+ m
        default:
- k$ ^3 z4 E2 S            ECHO(" assem_opts.emphasize = unknown value (%d)",
$ X, t# v. T2 Y5 W                assem_opts.emphasize);6 X" Q* H( P  D5 Z5 q
            break;" G* B" Q, [8 O# ~) t* ~" h. V
    }
7 r; w) w5 b" {% B8 n
3 R0 Y- S, x" {    switch(assem_opts.maintain_work_part)
# n2 E8 }8 C" E; l    {
: J, J7 T6 a: ]7 j        case UF_ASSEM_do_maintain_work_part:
- V* a* Z" u% a2 ~            ECHO(" Work Part-> Maintain = On\n");
3 b3 O/ s/ A6 O9 `4 @9 `3 Z            break;* x2 g- a8 l  M8 T
        case UF_ASSEM_dont_maintain_work_part:8 x* |% E$ y& j' W0 l! Q
            ECHO(" Work Part-> Maintain = Off\n");
/ {% p$ V/ I$ }$ B4 Y% u' }$ X            break;
; G/ r( z  U) J" `. w        default:( f; @7 W* d9 y* {5 T% K
            ECHO("assem_opts.maintain_work_part = unknown value (%d)",
% v; b& b6 R' W% u' f$ t, \                assem_opts.maintain_work_part);
, [  p+ D0 ~+ G5 b; P3 ?) o            break;7 l* K  z, O7 x7 P/ B: M' ?
    }7 G' }$ S0 }/ Z& D
    switch(assem_opts.update)
8 V0 O. K( m. `, g* `+ `8 X, O! i' u    {8 a* [0 n  y9 o! K6 G" w& s
        case UF_ASSEM_no_update_report:. O. X3 `, |- f9 R2 e" m( M
            ECHO(" Display Update Report = Off\n");
' E! c7 Y/ S( |. Z; i            break;
% t  \4 |, t. M( u' `        case UF_ASSEM_update_report:
9 M; _* [; h7 G            ECHO(" Do Not Display Update Report = On\n");) B8 {' O, N' c* ?" J( [
            break;0 l4 O" }2 V; z5 u: c* M/ H( E3 q
        default:9 P# P$ J5 R! n- N; {: l4 q
            ECHO(" assem_opts.update = unknown value (%d)",
( `- j- [2 x1 t9 h                assem_opts.update);* t$ ?+ L8 M9 K* K
            break;; z2 T# l4 r3 S3 j1 O6 W/ J8 I4 e
    }
9 j8 v5 n$ Q# _( ?}
. m1 I' q. i" X1 D3 K, H) ]3 h1 C0 o: [; q! U, Y; W; d
static void load_specified_load_options_def_file(void)
) T8 N; H1 }1 v# t* q{
" C1 }0 Q; X5 H6 [$ L' A; g    int
0 G. w4 `& v4 v' h0 r! K/ f        resp;
9 L6 E; K0 G' {+ P# d: V    char. @, J  l2 q; Q2 w
        filter[MAX_FSPEC_SIZE+1] = { "*.def" },
" ]$ Z' [# B, M4 b8 k& e, L        fspec[MAX_FSPEC_SIZE+1] = { "" };. p7 a% r; i1 J4 Q4 o

0 o9 Q$ u- l, ^    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",
* h* G1 o+ w$ M5 z) Z        "Restore Load Options File", filter, "", fspec, &resp)) &&
( P: C! ~' c8 H' F$ P" s( A( a8 ?2 i1 }        (resp == UF_UI_OK))
' J0 ?& k8 G5 S/ e$ [3 o% o/ ]/ q        UF_CALL(UF_ASSEM_restore_load_options(fspec));  ^- z) h% j* b0 {* ]; G
}
2 w& T; ^% n1 ^5 C3 g9 T0 q- f- ~, D0 a1 ]) S
static void do_it(void)6 \$ s+ q( h2 G- j, S* v' J8 z' m9 L
{& z6 S7 _. N6 j5 c. ]+ O  T# U! Q
    ECHO("Current load options:\n");) K. u. z, b( u7 A3 c/ S$ L
    report_assem_options();
2 R6 E( b) F- N6 f1 ?' q0 o7 C' H$ N0 P" J7 n
    load_specified_load_options_def_file();
9 Y8 O  `  p, ~& _$ u, Y+ s% g7 d' z* y6 q( f# S2 Z
    ECHO("\nNewly restored load options:\n");( K$ W6 R! R  n' d7 S( o& X1 `! D
    report_assem_options();; o: O8 u0 M; I! D  Q
}* s# @+ j2 f( F7 W, a! j1 F1 {4 ~$ a
) z) w& W/ n3 `: V( A. ^/ E
/*ARGSUSED*/( ?' a, R% `& f' _) _- ^
void ufusr(char *param, int *retcode, int paramLen)
+ E8 |; l; V: T6 B: J7 @{) w+ z1 l# D5 r$ M
    if (UF_CALL(UF_initialize())) return;
& ]8 h! }* ~1 V9 \& `* B& `2 j5 v    do_it();8 k# @& Q# i2 p
    UF_terminate();
7 {3 G5 C* ~% b. `}
" u! S4 |  p& h" R: P" k
. ^7 x, k' Q$ r( v4 t# \int ufusr_ask_unload(void)6 C2 t! _. ~; m" X8 L
{
' u5 W* o, \' @# e  m1 K8 q. ^, B    return (UF_UNLOAD_IMMEDIATELY);
1 E" f9 S! Z3 D5 C}[/mw_shl_code]
3 H9 t/ `* Q! c$ a, Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了