s_mostafa_h
Well-Known Member
مثال دیگر :
فرض کنیم چند اشیا در صحنه داریم که بعضی خواصی مانند داشتن " شعاع " یا radius دارند . می خواهیم ،این اشیا را دارای شعاع کمتر از 10 هستند را انتخاب کنیم :
کد:
myvar=for s in geometry where (classof s==sphere or classof s==cylinder or classof s==teapot) and s.radius<10 collect s
[COLOR="Blue"]#($Sphere:Sphere02 @ [138.578674,19.289341,0.000000], $Sphere:Sphere03 @ [91.878174,-76.142136,0.000000], $Sphere:Sphere05 @ [-145.685272,-56.852791,0.000000], $Cylinder:Cylinder03 @ [-49.238579,-15.228426,0.000000], $Cylinder:Cylinder06 @ [-82.741119,-30.456852,0.000000], $Cylinder:Cylinder07 @ [-64.467003,-104.568527,0.000000], $Teapot:Teapot02 @ [61.421318,48.730965,0.000000])[/COLOR]
select myvar
[COLOR="blue"]OK[/COLOR]
myvar.count
[COLOR="blue"]7[/COLOR]
کلیه اشیای نام برده شده ای که دارای شعاعی کمتر از 10 بودند در اینجا لیست شده اند .
کد:
animate on
(
at time 30 (myvar.scale=[15,15,15])
at time 80 (myvar.scale=[2,2,2])
)
[COLOR="blue"][2,2,2][/COLOR]
animate on
(
at time 20 (myvar.pos=[0,0,0])
at time 40 (myvar.pos=[20,20,20])
)
[COLOR="blue"][20,20,20][/COLOR]
دستور hasproperty :
از این دستور برای بررسی اینکه آیا شی مثلا x دارای خاصیت y می باشد :
کد:
hasproperty $box01 "radius"
[COLOR="Blue"]false[/COLOR]
این دستور نشان می دهد که box01 دارای پارامتر یا خاصیت شعاع نمی باشد .
بنابراین دستور بالا را می توانیم به این صورت خلاصه نماییم :
کد:
select(for i in geometry where hasproperty i "radius" and i.radius<10 collect i)
[COLOR="blue"]OK[/COLOR]
دستور try () ….. catch () :
دستور بالا را می توانیم به این صورت هم بنویسیم :
کد:
select (for i in geometry where try(i.radius<10) catch(false) collect i)
[COLOR="Blue"]OK[/COLOR]
select (for i in geometry where try(i.radius>110) catch(false) collect i)
[COLOR="blue"]OK[/COLOR]
در داخل دستور اول ، ابتدا دستور داخل try اجرا شده در صورت درست بودن کل دستور اجرا می شود و در صورت درست نبودن دستور در داخل catch وارد شده و دستور داخل آن اجرا می شود . در صورتی در داخل دستور catch عبارت false باشد ، هیچ پیامی صادر نمی شود و در صورتی که true باشد ، اشیایی که دارای چنین خاصیتی نباشند ، انتخاب می شوند .
به عبارت خیلی عامیانه تر ، اگر دستور داخل try درست بود ، که هیچ و برنامه از حلقه خارج میشود و کل دستور اجرا می شود ، در غیر این صورت برنامه در داخل catch به تله می افتد .