XC4DC4D6,'VX\0S >L=L=?I>L?ABhHZ,MAXON CINEMA 4D 11.514 Ualias2ABiF:,MAXON CINEMA 4D 11.514  agoal10ҥ$alias2  P ;<  agoal1ӥ$"alias2ҥ$ agoal1ԥ$alias2   ;@ G"Particle Geometryd14???235All678"jkAlBmno xuvwqBHrBHsBHtBH@IA  agoal1p$alias2   ; *Cone ? agoal10C$alias2   ; ????@I..3;.??;.????????????????????????"A ? agoal1C$(By Jan C.-Frischmuthalias2   ; Null Object???????????????"A ? agoal1$*smart-page.net - 2010alias2   ;@ Null Object???????????????"B?DWZXYDz[\DzBcbdf^_ agoal1pĥ$alias2   ;  Camera ,F&f F'alias2$alias2 agoal1$alias2   ; 7^E,O???T`42ݳ?Ֆ\T`9cj?v">B:LB?v?33? 4 ???????"A ? agoal1$ Targetalias2   ; Null Object???????????????"A ? agoal1$Py4DBoidsalias2   ; Null Object ;#Boids for Py4D by smart-page.net import c4d import math import random #environment minx = -2000 maxx = 2000 miny = 1000 maxy = 3000 minz = -2000 maxz = 2000 #boids params boids_number = 100 target_maxspeed = 60 boid_maxspeed = 50 boid_distance = 200 frame = None rand = None target = c4d.Vector() targetvec = c4d.Vector(0) bpos = None bvel = None def main(): global tp global doc global frame global bpos global bvel frame = doc.GetTime().GetFrame(doc.GetFps()) if frame==0: tp.FreeAllParticles() tp.AllocParticles(boids_number) lt = c4d.BaseTime(1000) bpos = [] bvel = [] for i in tp.GetParticles(): tp.SetLife(i, lt) bpos.append(tp.Position(i)) bvel.append(tp.Velocity(i)) moveboids(i) set_target() movetarget() def set_target(): v = c4d.Vector() for x in bpos: v +=x v = v / len(tp.GetParticles()) op[c4d.ID_USERDATA, 1].SetPos(v) def moveboids(c): bvel[c] += rule1(c) + rule2(c) + rule3(c) + rule4(c) bvel[c] = limitspeed(bvel[c], boid_maxspeed) tp.SetVelocity(c, bvel[c]) vel=bvel[c].GetNormalized() side = c4d.Vector(c4d.Vector(0,1,0).Cross(vel)).GetNormalized() up = vel.Cross(side) m = c4d.Matrix(c4d.Vector(0), side, up, vel) tp.SetAlignment(c, m) tp.SetPosition(c, bpos[c] + bvel[c]) def rule1(c): v = c4d.Vector() for i, b_pos in enumerate(bpos): boid_pos = bpos[c] if b_pos == boid_pos: continue v += boid_pos - b_pos v /= len(tp.GetParticles()) return (bvel[c] -v) / 100 def rule2(c): d = 0 k = 0 for i, b_pos in enumerate(bpos): if (b_pos - bpos[c]).GetLength() < boid_distance: k += 1 pos = bpos[c] dif = (pos - b_pos) if dif >= 0: dif = math.sqrt(boid_distance) - dif elif dif < 0: dif = -math.sqrt(boid_distance) - dif d += dif if k == 0: return return bvel[c] - d / 4 def rule3(c): v = c4d.Vector() for i in bpos: v += bvel[c] v /= len(tp.GetParticles()) return bvel[c] + v / 30 def rule4(c): return (target - bpos[c]) / 100 def movetarget(): global target global targetvec rand = random.Random(1) rand.seed(frame) if target.x < minx or target.y < miny or target.z < minz: targetvec.x += rand.random() * target_maxspeed targetvec.y += rand.random() * target_maxspeed targetvec.z += rand.random() * target_maxspeed if target.x > maxx or target.y > maxy or target.z > maxz: targetvec.x -= rand.random() * target_maxspeed targetvec.y -= rand.random() * target_maxspeed targetvec.z -= rand.random() * target_maxspeed targetvec = limitspeed(targetvec, target_maxspeed) target += targetvec def limitspeed(v, speed): if v.GetLength() > speed: v = v*(speed / v.GetLength()) return vF'alias2$hudc 64bit agoal1$DataData g D&alias2   ; Python Tag; agoal1$alias2   ; FXPresso agoal1alias2   ; FGvNodeMasterdalias2 $alias2pK$ ''N N!viwh?fgjBkAlBmBnBoBpAqA@rAsA@tAuA@de agoal1alias2   ; Fde?f?f?fF XGroupalias2ҥ$viwh?fgjBtkAlBtmBnBtoBpAqA@rAsAtAuAdzep agoal1 $alias2   ; Fde?f?f?fd efghGijG P Passdd14???235All678A alias2p$G viwh?fgjBkAlCmBDnBoBpAqA@rAsAtAuAdBe agoal1pK$alias2   ; Fde?f?f?fB@defghGijG PShapeA ????????????A ??? ~CCptBv?rx?CCp????A:o?????L@$@????'&H=?PQ[\RSRUVWXZ?}@ ~C}|ZX@Y@[\]^_`suTF'(a alias2  P ; +  alias2  P ; , ?L?fff?L?>=  ???(?@Bd  "#$%&  )+*=,./0>??L?L?L??+=>L>L>L                           agoal1$alias2  U ; DHDwFB?DWZXYDz[\DzBcbdfDC????I۾alias2pĥ$alias2?L?fff?L?>=  ???(?@Bd  "#$%&  )+*=,./0>??L?L?L??+=>L>L>L                           alias2  U ; DHDwFB?DWZXYDz[\DzBcbdf????I۾alias2alias2?L?fff?L?>=  ???(?@Bd  "#$%&  )+*=,./0>??L?L?L??+=>L>L>L                           alias2  U ; DHDwFB?DWZXYDz[\DzBcbdf????I۾alias2alias2?L?fff?L?>=  ???(?@Bd  "#$%&  )+*=,./0>??L?L?L??+=>L>L>L                           alias2  U ; DHDwFB?DWZXYDz[\DzBcbdf????I۾alias2alias2   -  alias2  Q ; Smart Cursor alias2  Q ; q] TUHOOK alias2  Q ; CDynamics Hook alias2  Q ; "Scene Hook Helper alias2  Q ; \ACMerge Hook alias2  Q ; m&SLA wave scene hook52346 agoal1ե$alias2  Q ; G$Thinking Particles 14???235All678 agoal1ҥ$Allalias2  Q ; GParticle Group'B'?''%?'&Dz'/?'C alias2  Q ;  dMoDynamics alias2  Q ; ug alias2  Q ;  MoGraphSceneHook alias2  Q ;  PLKHUD alias2  P ; (Sound Scrubbing Hook alias2  P ; "BaseSettings Hook  agoal1`T$alias2  P ; SBSettings'''''%'alias2ӥ$''&  C  C')'+u2u0u1u3 alias2  P ; SBSettings'''''%'alias2ӥ$''&')'+u2u0u1u3 alias2  P ; SBSettings'''''%'alias2ӥ$''&')'+u2u0u1u3 alias2  P ; SBSettings'''''%'alias2ӥ$''&')'+u2u0u1u3  alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"ApN#B8ApN(?ApN0=N&,N1N'ZBN*N)?N2N3TN/N.N, alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"ApN#B8ApN(?ApN0=N&,N1N'ZBN*N)?N2N3TN/N.N, alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"ApN#B8ApN(?ApN0=N&,N1N'ZBN*N)?N2N3TN/N.N, alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"ApN#B8ApN(?ApN0=N&,N1N'ZBN*N)?N2N3TN/N.N,# Objectsalias2# Cameraalias2*# Conealias2# Null Objectalias2G# "Particle Geometryalias2> Tagsalias2> Phongalias2> Python Tagalias2,> Targetalias2F> XPressoalias2 Render Settingsalias2 Layersalias2 (Undef. Layer)alias2 Scene Hookalias2F Xpresso Nodesalias2GF P Passalias2GF PShapealias2FF XGroupalias2 alias2  P ; CAManagerHook alias2  P ; IK Hook alias2  P ; "HairHighlightHook alias2  P ; Doodle Hook alias2  P ; m$ViewportExtHookHUD  Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0PDD((w),*+  .O/O,O-O?D& alias2  ,?L?L?L !??+="#$%'FPS : 333.3'8''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&''Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&'' Q0PQ0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&'' A0PA0POO()*+  .O/O,O-O?D& alias2   !"#$%''''%'&'' alias2  P ;  N0ViewportExtHookhighlight alias2  P ;  O MeasureSceneHookokay?,C:\Users\Hal\Documents alias2  P ; G Sniper alias2  P ; F GvHook??B??B??B??B??U(_K)Da_AQ}t[M\hwmwy1PtƑ 1a@2ĥB{F#ltlb˥=ll-,{j,%u} 9ܼ)]BeQ>~":L] * ݃SgdM` g1bvrBdr.82Ԯ>v 3VO?yo^oKì>V@vuyؚdD$]#kYh\c[_̧Y`ܞ;pXPNQbVD3t^D[ȩzҁf5N=mPFSjAs|ES:שT$p_ NބO½)X!P_ltZYxՍc;a"MC?߽UQI(5!+eߢ9M9 *RK>[cE\>Rc닃F)H`9';"%k jv)UEj8ykl|<0KOJwO ǻ‰Y*:4գP<d3D`QKM͈~+%)%ɪExVtmH ؊3/ i}cF y!aQ~~LC$W~e(e҃'!EWmEԦ0ͷ- MV<  H+ۀ]}JcV,d4 +0]_.2qjNAw@GWCV*1npXAǺ$WD5{f-|g<,± RW\Wl%*$OB0ݾ4z-P"<%^:J$,{|s̬'<&+ٯf}~c%q8 x3_h w Yϻ*4#J:EQdvBHy3Z+й)W& 'rr6A#rLS[Kݾ_!М7_gMFt*DyV]rzܬDLY$)]ZozӀϒ%i B7 Nf*vw=X6J2bL]k=1}^| D[4!a j%nys14Pj{${Y:6+\!Ą rC% ? 1''' '"'#'$'C'D'>'2'3'4'5'7?'9''I2q:È3@I54???<# BC?IA @ "?IJH<# NOP @                        A  = = ; ?~EDOŚ??? alias2  9r ?? X S<= LM?ystB??e ?=9?S>c9?(q^>?>9>?8>o?*> 0?Gr=w?c9L?LD2 X