我想达成的结果是——通过发生器创建四种不同的临时实体,分别是绕x轴旋转180度、绕z轴旋转180度、绕x轴和z轴旋转180度、不旋转这四种临时实体,同时给这四种临时实体赋标签分别为xRotation、zRotation、xzRotation、noRotation。然后从PF里的判断命令中引出4条支线1、2、3、4分别对应上面四种实体,判断里的代码总是识别不了我给临时实体设置的标签,有没有哪位老师可以帮我看一下,是哪里的问题,该怎么办才能解决,十分感谢!
8 }* x8 T& i$ F% k! s% k! Q3 f发生器的代码如下:
- [, N3 Z! ^* b1 E/**Custom Code*/
3 |0 `" |" D3 r# d: g7 E: B7 _; p% Y% O/ J
Object current = ownerobject(c);# G6 l4 P6 s* S7 S, T
Object item = param(1);
7 x/ i# o. A" M' }int port = param(2);7 X( ~ i7 t; @+ n% C$ k4 S' f
7 V* c. d' \8 y: c1 BObject involved = item; K% A5 Y) q! P6 x7 L9 O5 h
double x1 =180; [/ s# i8 d/ m# h
double y1 = 0;
' b: u+ q) f, `double z1 = 0;1 H4 T1 k+ z1 L1 c5 n* J! z1 _+ [
- t* R% |8 |: K- y4 Tdouble x2 = 0;; e) l2 n% h1 Y# y: x0 M
double y2 = 0;, w( @) e2 A) j% c z& A4 w7 a& w j
double z2 = 180;
. G/ J* P; h$ s! T; b) [ Y4 r3 t1 _( ?5 B* A `
double x3 = 180;: c3 H" M: D' i' ?
double y3 = 0;5 k5 t9 K+ ^. J' K1 ~& {
double z3 = 180;: B; W2 |+ w. ]3 r2 B
6 r! \9 H, `7 d) Y! s+ h1 }
double x4 = 0;) o* W7 ?3 L( k( }: \& ^+ q: D
double y4 = 0;
2 Y8 S" q; y. ^9 \; @* zdouble z4 = 0;, B" e) q( }' [( b# G, G1 {. s
0 A9 i. F3 N( b" r
double randomVal = duniform(0, 4);
, G- V% R( J' _' A9 S7 Eif(randomVal < 1); y7 S0 N0 Z# b# y6 s
{
3 t! H, E8 c4 n) g/ j setrot(involved, x1, y1, z1);- _9 ]/ `2 @/ A
setlabel(involved,"Rotation","xRotation");
, h, {/ A7 G- c; ^- t H! M7 Y7 l+ e}. t9 {7 a8 I2 v2 K" }4 Q
else if( randomVal < 2)
" T! u+ s v8 g$ l' U{
( Z: U6 c `% {" N setrot(involved, x2, y2, z2);
) [, o- O( \: X0 M8 E+ X setlabel(involved,"Rotation","zRotation");2 G: f5 [: ?" u# t0 \
}" G9 @3 g2 \* r: ^5 D- W
else if(randomVal < 3 )5 c( |$ T9 p! i. a% R9 K% C
{
2 @, M2 t* o% K$ h* _) U setrot(involved, x3, y3, z3);
0 k& |* ]5 d. Z+ D* P% B; A setlabel(involved,"Rotation","xzRotation");
, n; Q3 S( _- \" Z# J- O0 F' q}. P5 j7 W+ I% C n
else* i# y* _ P$ x" j
{
! t! d7 U: {3 F1 Q+ v# ?: m, `7 E setrot(involved, x4, y4, z4);
Y( \# g. C5 E- v setlabel(involved,"Rotation","noRotation");& b' G0 z5 c; r+ h5 l8 x- I
}
$ z% e; V5 l' t# {' A4 U5 s/ |% ]判断的代码如下:
/ s' {; r' J! Q( n; O D% J/**Custom Code*/6 Z7 M7 F* J1 B! J& z% M7 o
Object current =ownerobject(c);5 [: ~, q8 |. c
Object item = param(1);% ^2 S" H( m) D2 l% Z" j$ S
int port = param(2);, {( `: w& m0 X; r9 p& F( S8 Q
v7 T; c# R" g% g) T* @Object involved = item;
2 B+ T4 m$ P# \9 h; }: M' G3 L, T* J' C' @/ Z5 `' z
string labelVal = getlabelstr(involved, "Rotation");
6 y. F% ?. _" e1 n8 y/ M) B8 S) W3 T; M$ c' M+ X. @9 p; l
if(labelVal == "xRotation")8 G/ u4 }; ]: e5 d
{+ A5 g; Y) O# h* n7 h7 B
return 1; // Divert the item to port 17 J* C" G E1 {9 p$ b( Q3 L2 _+ k9 u! s
}
7 n. }9 Q7 G' ]2 P( ^else if(labelVal == "zRotation")
0 R0 ~. `. e& s$ B3 a{% X; u) ?$ ?* K! U3 g$ d
return 2; // Divert the item to port 25 s! A$ k4 B3 m& ~. O
}% \2 j5 v* C; m5 Z. R& H7 J' N* p
else if(labelVal == "xzRotation")
, b% T. Z/ H! ]0 N4 W{
& V# P8 ]# z2 Z return 3; // Divert the item to port 3
) r8 \6 R2 v. g$ `4 j}) h# r( U6 U) j
else if(labelVal == "noRotation")
* O# [& y) S# r3 {% n{
) g" N( p; j5 ?. r; x- _8 D return 4; // Divert the item to port 4
& X8 @$ n0 i5 D9 a4 w, C+ a}
& E9 \( A3 W9 n- E9 @7 I2 S/ I0 l5 n5 |; P+ Z; y5 A
模型附上:) }; j! F2 u" P9 Z2 d7 a2 U
|