|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
在NX二次开发中,默认的开发模版,使得开发NX非常方便,实际上主要是在Visual Studio 的环境下,加入了库的路径,以及一些预处理相关的设置。
, J6 I& n' ]8 k7 |7 ?% c6 K7 x* _. H关于ITK开发中的模版,我制作了一个,大家可以在这里下载:
" s' S1 _" H' M2 P
0 Z1 L5 R. K. S2 j5 P此处是给一个报告ITK函数执行错误的函数,方便使用,大家可以替换上面下载的模版template.c里面的代码,直接使用这个。当每次返回的status进行错误获取的时候,直接可以ITK_CALL去捕获错误。这点和我们在ufun中使用 UF_CALL类似!
2 q; _- R4 Z) o) R/ b0 ~
1 B& I( G$ O. {5 {# A) D) i这种方法省去了大量的调用EMH_ask_errors(&n_errors, &severities, &statuses, &messages)的重复代码!!
# r! s2 `5 y9 w$ n8 ^1 O# W) z5 E9 _# s& z+ M; d+ M
/ C& z4 G' h0 Z* u
- #include <TCcore/aom.h>
4 \$ n. a4 c/ I+ a4 i* I c* T - #include <sa/user.h>" }' }2 G- h0 i9 v% X# t# X
- #include <sa/person.h>
8 E" w+ h$ n6 U3 V0 d Y7 m - #include <tc/emh.h>
7 f/ B' Y' \4 d/ c4 z - #include <tc/tc.h>
& K4 p! k6 [% g4 o8 h) Z0 f' w - #include <stdarg.h> K* M O6 @6 K* c6 j
4 a2 l9 Z N" @; u' t% R- static void ECHO(char *format, ...)
$ z4 y" L1 I( v2 m ` - {/ _- G$ i( D. y/ c: \* c+ h' M
- char msg[1000];- _4 o. `. L9 S) _% K
- va_list args;
* N3 D, i3 s5 t) v( A& z5 m - va_start(args, format);
f9 v# {0 U2 l8 ` - vsprintf(msg, format, args);" M$ b/ l7 A0 \! x# m% O. [. u
- va_end(args);0 h0 ~* u/ u) W5 g7 G" \$ J
- printf(msg);6 n. P0 V- e% J5 l/ Q
- TC_write_syslog(msg);
1 @/ W6 a: _% j2 Z( a7 w - }
. e# E: H7 P' s0 E4 N( z7 V
5 {! J! Y+ l U- #define ITK_CALL(X) (report_error( __FILE__, __LINE__, #X, X, FALSE))
5 ]: R- I7 d* }) q& @" h3 w; c" x
2 `0 N+ I$ T+ s( a6 G5 \( j( z- static int report_error(char *file, int line, char *call, int status,
, Z; z b \) } - logical exit_on_error)
5 Z+ R/ E) U! ~5 I Y - {
9 {) ]9 G( N/ n - if (status != ITK_ok)
9 |# x. c9 I- {3 l0 z - {5 r" Q& ]' c8 H! d/ i: P7 G4 ~; ^
- int" ]& f J2 u) `2 t6 L8 V# m; s
- n_errors = 0,# V3 S3 h& v( m; x1 c" [
- *severities = NULL,
a' n) o A' K L1 B* l- t1 Y - *statuses = NULL;
9 Z! m& f5 R; {: A! o$ Q - char
4 I3 M# L' g- G) T% N3 _! v - **messages;; B* J9 b; s4 `0 J9 e, B/ ^: }
- " x: B* D8 ~$ ~& P
- EMH_ask_errors(&n_errors, &severities, &statuses, &messages);
# P, H3 j5 h' n& ?% |6 u - if (n_errors > 0)/ }( z2 d6 ^, R/ }
- {
. w) \2 Z, X* _$ n2 A - ECHO("\n%s\n", messages[n_errors-1]);
, C& I+ v) r# g - EMH_clear_errors();) r# ]$ l9 m4 |- q7 ?; ]
- }
6 n( V9 F/ d% I& f T1 a - else
& U$ j. @; F! O$ k8 j3 @ - {: I5 `: C4 d4 O2 E3 B z7 i$ E
- char *error_message_string;
4 a+ b/ Q/ n5 M5 a; W2 R - EMH_get_error_string (NULLTAG, status, &error_message_string);* V/ n |1 a1 m2 c. w
- ECHO("\n%s\n", error_message_string);
6 C8 w, }. F$ y) k0 l7 t - }1 N: c% q( E6 t0 z: F' X$ I
- ! R$ |- T; x7 O" R, F
- ECHO("error %d at line %d in %s\n", status, line, file);6 P' ~! Z' z" x/ @. \
- ECHO("%s\n", call);
/ @: R# z* d6 a, ^- x Q2 c ~
$ V2 O/ [& d+ I# e. X, C) p( h- if (exit_on_error)
; y8 ~1 N3 X4 X! j - {% V$ z. F1 q, s$ Y5 M' ], X/ v
- ECHO("%s", "Exiting program!\n");5 \& X1 x; r$ D5 ~/ q/ q
- exit (status);
' P p( R' V) F - }& G$ T, b* q. y8 N( L
- }
& R9 f9 e$ b3 N+ I5 c W2 U) P
2 v# r% N5 z0 A* z* n4 J n- return status;: P' Y! y5 [! ?- z: L" y
- }
2 W4 h. l4 H+ i9 W, p( B, o8 h6 J - 0 c# J; {! A9 u! C B+ ^1 b% M
- 5 Y, h( P1 f$ o- H
- static void do_it(void)/ ^& y! m ^* O6 Q2 h/ l
- {
# i) |& n5 e2 w& ^6 G - // write your code here1 R! d% Z( x K6 f1 r3 D H' M
-
?( E/ N. f6 a& \; @ - }
# Z; c6 Q! S6 d" A6 [
! j/ _8 J0 \. o+ ^7 k' r- int ITK_user_main(int argc, char* argv[])
( s, E7 b3 J. _ - {
' C! n2 s3 K n4 j3 D; i - ITK_CALL(ITK_initialize_text_services(ITK_BATCH_TEXT_MODE));
* S8 Y& A V; E, h) X - ITK_CALL(ITK_auto_login());( P. Q& @( [1 u. v& Z3 D9 X' R5 f# M( p
- ITK_CALL(ITK_set_journalling(TRUE));$ Q9 O% p0 C% ]! M& c1 _: I% w
- 9 Y4 U! N: w# ]6 p
- do_it();
* I7 D: ]: b, ~! P/ W - / O6 `0 s5 [- D+ \3 _& f
- ITK_CALL(ITK_exit_module(FALSE));
( U$ y3 C# v& J& U - + z9 U& S5 @( g s* z5 \4 k
- return ITK_ok;
0 f, ^, G& t" A9 K - }
6 \- e$ h s7 ?
复制代码
( [4 ?) A5 M$ l7 _) [$ C* d) q" a8 L1 f) |4 E0 J5 _1 h+ U
|
|