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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:32:35

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

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

x

) J# t) g; f2 x; Q( KNX二次开发源码分享:报告装配加载状态,设置装配加载
+ m5 Z- G& D" q% Y# Y, `$ }+ E/ L
获取Load Options 并进行处理!
! k+ J2 t. A) a. G' }+ H+ S; Z+ a# P& V' h* u+ l0 S& s, x$ A" m
[mw_shl_code=c,true]#include <stdio.h>5 V) j0 I; X! K
#include <string.h>
+ {/ h& Y$ e" a: b% t#include <uf.h>
+ d7 }3 g2 j4 K7 G#include <uf_ui.h>
  C$ p) T5 K8 F# W#include <uf_assem.h>. g$ _7 ~2 c% I& p# o% Q

. u3 J$ p& v# v* V. I' }* p#include <stdarg.h>% T" \) R% z9 R/ M, m% l' q6 `
) n/ v/ L$ {& I
static void ECHO(char *format, ...)
4 ?! L7 X5 x, Z3 P{
; i' i% I% i) X1 @0 \; E# ?    char msg[UF_UI_MAX_STRING_LEN+1];
7 I+ q3 E& M% Y* A    va_list args;
: Q- N$ K3 L5 B7 L' Y+ q    va_start(args, format);# m) r+ P$ P& w" X9 g$ U0 c$ H4 y7 q
    vsprintf(msg, format, args);
0 e' U) s8 J$ L9 E& _  I, ^    va_end(args);
3 _( `. C, {8 Q, B6 a9 V1 G8 a( I    UF_UI_open_listing_window();
4 t5 e: P( C+ y    UF_UI_write_listing_window(msg);3 i3 B, e/ G8 x4 [/ G2 ]" R
    UF_print_syslog(msg, FALSE);
; Z8 l; l/ T) H0 A* v}! @# ~: T: W! A/ y# H

* n! t+ y$ {% _6 V% ~( `#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
4 Q5 r$ ]2 I8 e1 j6 B6 |9 U. Q) \% W- c& {5 L$ a+ B
static int report_error( char *file, int line, char *call, int irc)
  R; l5 N4 S. @' C{
: F' s% o0 L- e6 Z' N9 x    if (irc)
  q* E! s: Z2 ]9 Q# U0 P    {5 e0 G+ s- x3 W$ I, J1 t
        char err[133];
( z7 c9 q( j; h% q8 Y5 I: X$ E' L+ S- q+ G- M1 C* K
        UF_get_fail_message(irc, err);
+ X8 b4 E5 _2 k  r- |. x+ n        ECHO("*** ERROR code %d at line %d in %s:\n",. e; H$ I$ U3 z# p2 r4 M1 U
            irc, line, file);
" f. h- K( `7 J; w/ L4 }        ECHO("+++ %s\n", err);- Y0 i) K6 {4 h$ L2 M0 w9 Y
        ECHO("%s;\n", call);
3 ?( w3 A) l3 q8 g. r6 V. M    }
* V- `* X. C' k. B. ~5 a+ Y1 c) E4 s0 z9 B8 {. ^* p- x
    return(irc);
+ U8 o% Q( r% W$ Q' l}
; C8 {0 R- e3 s$ ?9 ~1 Q! s/ @1 @
static void report_assem_search_directories(void)1 {' ?; N9 V$ |
{
' d1 o- n5 w( B1 b' r& h: o7 v6 w    char
6 N" \. u0 @) a4 I        **dir_list;
( T- s, Y0 A. j, n8 Q! j    int
& z6 F* d% i) F4 ^7 ?  h1 P, ]- L2 w        ii,
! |2 }: Z! I/ k( x. \6 g        num_dir = 0;3 y1 [6 g7 ^4 A( _! h3 l* q0 ~
    logical
1 X0 g4 G0 c# q: g( k0 {* |. P6 q        *subs;" ?' z' o& o8 R8 |& u

0 ]0 F- N1 ]2 Y- y9 b& A, e    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));6 v1 y) Q: R$ b8 x5 h
    for (ii = 0; ii < num_dir; ii++)
+ D' Y5 B& S3 A; c5 F, [/ y    {
& r# Y" y. F3 Y% R" V8 @+ ?        ECHO("%s", dir_list[ii]);
: [* }: f  e% \7 ^0 _6 W' Y4 y        if (subs[ii]) ECHO("...");
. M5 _& w1 _$ r  u- p! F        ECHO("\n");( R! A! W$ b0 z7 Z- f
    }% `3 L' v8 @% z9 y; ?4 t- _9 Y' G
    UF_free_string_array(num_dir, dir_list);
" d+ q0 y+ A+ j6 E2 V, B3 W    UF_free(subs);
# p* n* |4 t5 W2 m}
! `+ H6 ~- g! P+ a, S5 a+ ^
! _1 x2 C) ]4 H3 W' C1 n+ Mstatic void report_assem_options(void)
8 Z+ ?2 c4 K3 L# a) T{5 i3 A6 ?+ x) S+ o6 ~6 ~- l8 t
    UF_ASSEM_options_t
5 v8 A, d" i3 ?        assem_opts;
1 o- b8 ^5 G6 n2 S$ b& a9 ?, B" s
- j$ W& V0 ]& }5 L$ o1 h. I    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));
% Q0 B, p! `% S- q/ Q
# y  Q7 B- C0 C1 {( I4 ?( o    ECHO("Part Versions\n");( v) V$ N5 }( a- ~
    swiTCh (assem_opts.load_options)0 N, b. |! F  x+ d! v# t8 p" `& q; _
    {3 H) w- L5 E2 A# q
        case UF_ASSEM_load_from_directory:# C2 _, a+ t1 ~3 c
            ECHO(" Load = From Folder\n");7 f- `; Q( c: P" a' H5 ^
            break;
: P# T" a, t: u7 U+ P. l, M8 v        case UF_ASSEM_load_from_search_dirs:
* P! Y8 n  }: z6 f% ^- n* j% I- R4 w            ECHO(" Load = From Search Folders\n");* J- h  {# Z0 a6 I7 w
            break;& m$ C' @( R3 k5 ^: x; k: q$ m
        case UF_ASSEM_load_as_saved:
- O/ g+ x& A  z/ R( c            ECHO(" Load = As Saved\n");: p# i/ @  L1 S2 z
            break;( @0 ~2 \* j( A1 B# \! h; v
        default:
! I$ Y  R$ c; m6 W! A            ECHO(" assem_opts.load_options = unknown value (%d)",* c* r; L! J1 ^0 N) e7 Q2 a8 W
                assem_opts.load_options);) W8 C: L! j% C1 u4 [
            break;
' I3 l* Z4 q3 |' D2 m% m3 E    }
+ Z6 b, Y% x, _* B; v; r  z( ]2 ~. n1 w& E( Y
    switch (assem_opts.load_latest)% \- b; J4 L6 o2 j5 p# h
    {' {: z4 K- ~' B, B2 U! q# `& T
        case UF_ASSEM_load_exact_version:4 q5 M( U3 ~. A2 x* _7 D
            ECHO(" Load Latest = Off\n");
& U' t, x( ^3 R+ h8 F, `! B            break;; E5 T* P% W) ?7 }6 \/ n7 \
        case UF_ASSEM_load_latest_version:* L3 t  N& f6 ]/ l& W
            ECHO(" Load Latest = On\n");0 A" ?1 g+ k0 }7 g/ t) ?
            break;
2 ^" C( ~( s3 o3 z        default:1 n0 j. C  {% m+ ^" |+ H  f( p
            ECHO(" assem_opts.load_latest = unknown value (%d)",
9 e9 }8 E; B# v5 O- S( i* ?                assem_opts.load_latest);8 o9 r+ e1 f, b+ s# [
            break;
. ~) l+ I. s- M$ e    }# T/ _2 {: n) ^6 |0 k) W- h5 i
* o- ~  Y4 ?6 r* w
    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs)2 {, D5 ]( a# u2 y
        report_assem_search_directories();
0 i3 d  S% B- W* a+ m  |7 v* j( T& l) v& `3 G: v1 y
    ECHO("Scope\n");
- }- v  N5 n6 c& J( c+ }6 ~    switch(assem_opts.load_components)
0 W* V, ]0 k. T) ~7 ]    {& f7 ]9 W( l! f( u& m
        case UF_ASSEM_dont_load_components:5 u, B- e# G4 a, g8 W
            ECHO(" Load = Structure Only\n");6 T5 c4 a* ~* J# [; H3 Q
            break;
" C' O2 A+ W! ?5 w        case UF_ASSEM_do_load_components:5 o) h2 c' e" R
            ECHO(" Load = All Components\n");
4 u/ G, `0 l2 J% p            break;
9 O  F6 m+ Q1 ~8 |/ l" S7 C        case UF_ASSEM_use_last_component_set:& Y9 N7 W4 `( X7 H4 _- b
            ECHO(" Load = As Saved\n");
8 C7 E. `4 B2 P0 f6 X; p            break;5 R: J7 d" b* N
        case UF_ASSEM_use_last_filter:: }8 e' E8 i' h7 ~" {5 G
            ECHO(" Load = Re-evaluate Last Component Group\n");7 i3 s' ^$ R; u+ L! S5 ?
            break;9 f" a4 Z/ x- f/ E9 P) Q( r  A
        case UF_ASSEM_specify_filter:" d3 h0 U& |( n( q, I4 b
            ECHO(" Load = Specify Component Group\n");( h/ i2 L. ^; X! e: W+ c! E
            break;$ E% I) z' f5 m
        default:+ Z9 Y0 |0 C' p) c  @$ `
            ECHO(" assem_opts.load_components = unknown value (%d)",
# u7 A1 j) i. w, ~  `) Q4 J5 |* J                assem_opts.load_components);
9 K; L- J8 |* K( A) k            break;
' s, w: m' Q. ]$ {! V2 a  k8 m6 a% S    }
: c. W3 X6 V( V" M) C- m' _* I8 Z8 V! a8 T
    switch(assem_opts.load_fully)
" g2 T2 _% ^0 v( q4 Z    {  W# Z" m( G0 [7 G2 J
        case UF_ASSEM_load_components_partially:! M) m" P/ K% h. i$ R2 \) g5 c& E
            ECHO(" Use Partial Loading = On\n");
, f* ?' P4 M/ y6 ?  h1 V            break;
: \7 z) a& z3 c/ }* V  f! |7 F1 K        case UF_ASSEM_load_components_fully:
6 U3 n2 }3 f  N( q* l. w) [' C7 Y  I            ECHO(" Use Partial Loading = Off\n");
! e4 s- x* R, o+ g            break;) I2 u0 c' V  S0 @: J) e6 n- [
        default:
+ G) v# b" K- l5 F# @            ECHO(" assem_opts.load_fully = unknown value (%d)",
8 O, t1 W4 o4 ]0 u7 ~1 x9 v0 _                assem_opts.load_fully);
* p% y0 I* t" W8 ~6 \' @            break;* i* W6 W5 F+ p5 o! r' z( A
    }
8 {' W+ E( w4 l9 v; m
6 S5 |6 w& f, A    switch (assem_opts.load_wave_data)
: S# b6 }* f) n    {# u2 j  c0 h; h5 K* J( x
        case UF_ASSEM_load_wave_data:+ d$ A, g/ w0 [6 O
            ECHO(" Load Interpart Data = On\n");1 p, d0 o" Y" e% h
            break;
* J: q# x5 F/ n! D$ U( V# |+ M. q        case UF_ASSEM_default_load_behaviour:
: ?8 E4 g8 f7 I* ]) d# I! i" p! C            ECHO(" Load Interpart Data = Off\n");% B; K( ]- P9 t+ E) g; g9 B( i% X
            break;" E3 S% n( N% M* z
        default:
- H- g# h- o0 C* s" i0 o            ECHO(" assem_opts.load_wave_data = unknown value (%d)",
( l, v! G- ~% y! |- w2 R0 q- S                assem_opts.load_wave_data);
5 B- f# O) G  O: x' i            break;1 u- [$ ~% w" M9 P7 |- h0 D
    }" X" F( w  v# x+ l; o$ `

: ^& L9 i9 z! z8 U  z$ f1 ^; U    switch (assem_opts.load_wave_parents)
& J4 ]9 U* x6 u$ Z; H' l; h6 b    {
% z, m8 ]* X0 z        case UF_ASSEM_none:
8 A! v7 \2 C: F            ECHO(" Load Parents = None\n");) u( b0 C. G( _& p) K/ D' ]/ B
            break;
; R3 c% U- v9 d- ]" n        case UF_ASSEM_immediate:
: n+ h2 ?( s0 G" u$ e' f8 L, C            ECHO(" Load Parents = Immediate Level Only\n");
! Y; P' a+ [8 c$ |- j- J# n            break;2 f9 W9 D: {* \5 z5 i0 s6 i7 L0 ]
        case UF_ASSEM_all:
9 @4 _' q) e2 n' o& B5 U            ECHO(" Load Parents = All Levels\n");0 H* v( K2 |- C1 w3 q5 @
            break;
! K3 c- |5 y* F8 T5 @        default:
9 p: I  {! A, B            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",2 l* a; @  Y4 ^
                assem_opts.load_wave_parents);- e5 p* V0 V) m1 b4 E- m3 M
            break;' l* r3 {! I* s, w3 q9 D. b
    }
7 A( M% M; w8 J: J* |& t% [* r% `, m) e2 f7 |0 k
    ECHO("Load Behavior\n");
4 `# z% F& k' h# ?' K    switch (assem_opts.load_substitution)
8 g, L9 U% I2 Z- }    {
) T# t* A: _: Q- g        case UF_ASSEM_do_allow_substitution:
2 Y; v' O& ?7 U1 g* d" _" f9 U% l            ECHO(" Allow Replacement = On\n");- d6 ^  ^% B  ^( V, X1 _1 ]# d- G
            break;
' M( Z6 |9 R' N        case UF_ASSEM_dont_allow_substitution:
, k! L1 Y; {' T' Q+ P/ t            ECHO(" Allow Replacement = Off\n");
3 n0 }- y; r5 U+ _            break;
4 p* B1 [7 ?' V! @/ H' X2 e/ c        default:
3 g1 ~8 D+ b( z6 m            ECHO(" assem_opts.load_substitution = unknown value (%d)",
! K- k6 f% B- l# D" Q. G4 L                assem_opts.load_substitution);8 \5 Q3 H. `' M# ]
            break;
/ l* ?, b' I2 e7 j0 @* H' L. i3 c* h    }. f, N/ f3 R. }

# M' x7 ^8 ~1 x8 f! n    switch (assem_opts.auto_regen_pfm_option)
1 }. w7 ]$ H1 A* O+ \    {
  H' e' J' C! b8 \; j, X8 \        case UF_ASSEM_auto_generate_pfm:
3 {" u9 B9 `+ C/ K2 r! T3 T+ S            ECHO(" Generate Missing Part Family Members = On\n");
  s- B7 ]4 L4 E) G& B            break;7 x! i0 t, [) T" I. ~9 ^. @
        case UF_ASSEM_dont_auto_generate_pfm:
1 P" d4 y, \3 T5 L* q            ECHO(" Generate Missing Part Family Members = Off\n");
2 @, P2 {8 O% s; @: y6 X1 K            break;" `; f* M* F$ c
        default:' X) w% s. Z7 e( `5 L
            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",
: E! g2 `3 ~- L2 f4 i0 W& C- x: }$ k                assem_opts.auto_regen_pfm_option);3 z) x* p6 b; Z7 b" D
            break;
5 v# |; t( K' E1 }1 L* H% t    }
( l8 ~5 Z5 E# T3 W+ R3 X$ M
' g8 f3 U4 b2 h4 I: G    switch (assem_opts.failure_action), ?; p9 o5 }9 M  N( ~7 n
    {
, Z/ |" s8 i+ ]: ?        case UF_ASSEM_do_abort_on_failure:. c9 H" K1 _$ h1 e
            ECHO(" Cancel Load on Failure = On\n");
+ Y% r3 @5 E# A. B& k; v% j            break;6 e( s2 B! q8 |
        case UF_ASSEM_dont_abort_on_failure:
- b1 O; e. _& _" m% D            ECHO(" Cancel Load on Failure = Off\n");+ O5 _) L# k1 W: W) k% |
            break;2 }, x  p/ N9 T0 C) I3 P- A- ?2 ^% o
        default:7 V9 L5 ~& H: a1 ]8 l
            ECHO(" assem_opts.failure_action = unknown value (%d)",$ [' U; h6 N  ?* ?
                assem_opts.failure_action);( [! B7 A0 ~- O
            break;' y, I4 |% Y, [; }9 ^# W, z
    }
7 u  ~2 X- O8 f/ a2 H: e- ?( ?4 y/ }5 B2 P6 a& f
    ECHO("Reference Sets\n");
9 f+ M! c# p" Q) z/ D1 O& c0 u    switch (assem_opts.apply_to_all_levels)4 @) Z+ P. r( ^0 N9 w
    {# K4 }# |& ], T
        case UF_ASSEM_do_apply_to_all_levels:) r" G! o8 F4 [) ]
            ECHO(" Apply to All Assembly Levels = On\n");
& I) L" s9 G, m% Q2 q            break;& F0 e- A/ J  G$ @8 H
        case UF_ASSEM_dont_apply_to_all_levels:+ L7 e' ~4 v$ O, G
            ECHO(" Apply to All Assembly Levels = Off\n");
7 F4 f7 y3 ^  J            break;
2 y& F7 v( a2 W: L* x6 }6 j$ O        default:% m! U: |" G: t& R2 R+ r
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",
9 q& I) ]6 ^; c# c! O5 g                assem_opts.apply_to_all_levels);
" R/ J5 y' S8 f- O& h            break;
  U6 T& J( i; h/ b    }
. ~  j. z5 X% v) D+ x- q1 A3 t, u* u- y: _9 E  S: G
    ECHO("Preferences-> Assembly (misc)\n");
+ k+ X8 G3 T& T" j" ?) C    switch(assem_opts.emphasize)/ K" `0 t, |; V; R' z
    {
& ~$ {3 ~' p% f7 a        case UF_ASSEM_do_not_emphasize_wp:0 }; W: w7 ~! g
            ECHO(" Work Part-> Emphasize = Off\n");
9 l$ z& J+ _& Z9 I: w; L            break;: u5 O( R3 q5 J* i: X) Y  s
        case UF_ASSEM_emphasize_wp:- C# @# s+ B8 Y4 E3 Q) u$ U# t
            ECHO(" Work Part-> Emphasize = On\n");, o5 b  ~9 [/ C$ W( p
            break;& {, {: B, p5 ^2 M
        default:& T" E, Z# O$ r- I, o; Y
            ECHO(" assem_opts.emphasize = unknown value (%d)",( u7 T- m  H/ t; V1 K6 i" f. A1 H
                assem_opts.emphasize);
! a+ i2 k. U- ~; o+ j1 C; p            break;
, b2 M$ p1 C" v) F7 B3 X' e0 Q    }
' O5 v# W& m6 ~! A+ y
6 v3 ^& ~5 ^! ^    switch(assem_opts.maintain_work_part)3 l+ |! W) d6 a+ v
    {
" ?; L* L/ A# e/ W        case UF_ASSEM_do_maintain_work_part:0 b% h" F% ?7 A- B
            ECHO(" Work Part-> Maintain = On\n");
7 i! ~  j2 Z5 y. q' R7 {            break;! y' Z2 ~: ?+ c
        case UF_ASSEM_dont_maintain_work_part:
! p+ _6 \# V) A+ O) ~6 O            ECHO(" Work Part-> Maintain = Off\n");
* l( g7 K3 Z$ _2 H* d0 O1 Q+ h  ~            break;5 E4 b& \- ]! D
        default:, \# s4 D. f4 E
            ECHO("assem_opts.maintain_work_part = unknown value (%d)",1 S" M6 `; ^' ^
                assem_opts.maintain_work_part);0 O9 i8 ?' w( [! P6 z
            break;
6 c0 F+ g; c; N/ H    }7 h& {9 `3 F* B) {
    switch(assem_opts.update)3 n! k5 e! M( ~- {
    {1 [5 l% e- o( w
        case UF_ASSEM_no_update_report:' E0 O* K9 N+ F! j2 k5 V! Z
            ECHO(" Display Update Report = Off\n");
" e0 W! x: X2 j' u$ r, t; Y4 J            break;- q# i; X2 S3 f* e, _* a
        case UF_ASSEM_update_report:. k% y; t9 o. F! z
            ECHO(" Do Not Display Update Report = On\n");
6 R, N# e' B3 T            break;0 i* W$ G) y0 i3 {( V
        default:
) ]1 A, X8 f1 @' M            ECHO(" assem_opts.update = unknown value (%d)",7 {0 ^9 f2 Q- R" z& j4 n
                assem_opts.update);
3 v6 `- V* f% X2 z9 C            break;  n9 g( K- A% b8 c+ m
    }7 E( X9 X, n0 o3 ^, h
}2 T0 Q( [" E1 o. v: _1 }3 O
; P6 G! H. _. P
static void load_specified_load_options_def_file(void)
* E9 q8 N* h, J* }# r{5 G7 `+ |+ J# O. x2 E
    int, V2 s8 u* j# S  e: C
        resp;
  F! ?$ c' u$ x5 c    char
0 F: w# k6 f# W( w( b- q3 v! l# ]0 Z        filter[MAX_FSPEC_SIZE+1] = { "*.def" },4 ^5 b2 o1 i. r9 X
        fspec[MAX_FSPEC_SIZE+1] = { "" };6 v: k4 e( e" U
5 `2 @5 S' T: H* o  a" N% U( j/ X
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",4 ~2 k5 S. j% w4 V& T+ k, N" @
        "Restore Load Options File", filter, "", fspec, &resp)) &&
& x. p% a; W/ D0 R        (resp == UF_UI_OK))
7 [3 r9 W( E# a$ W5 @0 l        UF_CALL(UF_ASSEM_restore_load_options(fspec));
. p% E* y3 ?* U% P0 u' P}' V% Y: Y1 M( F
/ }; l! k; z8 k) Y9 j2 S7 o
static void do_it(void)
6 p1 S5 e5 \- V3 ]3 p" b  ]{+ E' p/ {9 ~) F9 s* L
    ECHO("Current load options:\n");, v) f! K1 u8 ^; _7 F3 k& W
    report_assem_options();
- e$ Y$ B9 X2 k( j/ g
. e/ f& S+ ]! J8 t- j* g! {. p4 F    load_specified_load_options_def_file();
" e/ ~; J1 z# ?- {' A) w" r! G- ?0 J6 Z( x
    ECHO("\nNewly restored load options:\n");! u! f. n/ _0 L4 v2 {" C+ ?
    report_assem_options();7 y2 Q: k4 }( k8 V- D6 ~6 s
}% ^5 c- C$ ^. B5 k
# `5 N# D* ~1 Q  `4 A
/*ARGSUSED*/1 {$ S; e, C( t& t
void ufusr(char *param, int *retcode, int paramLen)  x7 D% k. V, E/ n8 k; O
{" P8 N4 U, ^- u! Q! {% b; z# U  _
    if (UF_CALL(UF_initialize())) return;% v; Y% A$ ~% V  \* x5 B4 W: o
    do_it();2 [# Z7 L* E" b- Q, m
    UF_terminate();1 V. ^/ u. Y, |% V4 z/ e  w- E
}: q/ M  ^- `9 e7 u/ k# `7 |) P

- F6 v. @% ^+ ?4 @3 M5 z. ^int ufusr_ask_unload(void)
: I3 q$ D+ k1 ?+ _" S0 @7 j{7 C# i9 }  |1 u7 f& n, O
    return (UF_UNLOAD_IMMEDIATELY);
) y3 h4 [! a. \% S, P( [}[/mw_shl_code]; V8 o" Y/ {  a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了