def __init__(self): self.radius = 2 self.vel = rg.Vector3d(random.uniform(-1,1), random.uniform(-1,1), random.uniform(-1,1)) self.vel.Unitize() self.vel *= 3 self.attr = rc.DocObjects.ObjectAttributes() self.attr.ColorSource = rc.DocObjects.ObjectColorSource.ColorFromObject self.attr.ObjectColor = color.ColorBetweenColors(drawing.Color.Red, drawing.Color.White, random.uniform(0,1)) self.attr.MaterialSource = rc.DocObjects.ObjectMaterialSource.MaterialFromObject index = sc.doc.Materials.Add() self.mat = sc.doc.Materials[index] self.mat.DiffuseColor = self.attr.ObjectColor self.mat.CommitChanges() self.attr.MaterialIndex = index self.pos = geo.RandomPoint(self.radius, 100-self.radius, self.radius, 100-self.radius, self.radius, 100-self.radius) #self.sphere = rg.Sphere(self.pos, self.radius) self.xSize = rg.Interval(-self.radius, self.radius) self.ySize = rg.Interval(-self.radius, self.radius) self.zSize = rg.Interval(-self.radius, self.radius) self.plane = rg.Plane.WorldXY self.plane.Origin = self.pos #self.plane.XAxis = self.vel self.box = rg.Box(self.plane, self.xSize, self.ySize, self.zSize) self.boxID = sc.doc.Objects.AddBox(self.box, self.attr)
def __init__(self): self.numVoxels = 25 self.voxelSize = 4 self.grad = color.GetGradient(10) self.targets = [] for i in range(5): self.targets.append( geo.Particle(geo.RandomPoint(), geo.RandomVector3d(5))) self.targets[-1].radius = 5 self.attr = rc.DocObjects.ObjectAttributes() self.attr.ColorSource = rc.DocObjects.ObjectColorSource.ColorFromObject self.attr.MaterialSource = rc.DocObjects.ObjectMaterialSource.MaterialFromObject #Setup Vertices self.vertices = [] for x in range(self.numVoxels + 1): yRow = [] for y in range(self.numVoxels + 1): zRow = [] for z in range(self.numVoxels + 1): zRow.append( Vertex(self, x * self.voxelSize, y * self.voxelSize, z * self.voxelSize, x, y, z)) yRow.append(zRow) self.vertices.append(yRow) #Setup Voxels self.voxels = [] index = 0 for x in range(self.numVoxels): for y in range(self.numVoxels): for z in range(self.numVoxels): self.voxels.append( Voxel(self, x * self.voxelSize, y * self.voxelSize, z * self.voxelSize, x, y, z))
def Update(self, time): for id in self.ids: if id: sc.doc.Objects.Delete(id, True) self.time = time ################################# attr = self.attr.Duplicate() grad = color.GetGradient(0) col1 = color.GradientOfColors(grad, util.Remap(self.time, 0, 150, 0, 1)) attr.ObjectColor = col1 attr.ObjectColor = col1 index = sc.doc.Materials.Add() self.mat = sc.doc.Materials[index] self.mat.DiffuseColor = attr.ObjectColor self.mat.CommitChanges() attr.MaterialIndex = index safety = 0 while True: safety += 1 if safety > 20: print "Safety" break newParticle = Particle(self, geo.RandomPoint(10, 90, 10, 90, 80, 80), attr) if newParticle.hit == False: self.particles.append(newParticle) break for particle in self.particles: particle.Update()
def __init__(self, system): self.system = system self.pos = geo.RandomPoint() self.vel = geo.RandomVector3d(1) self.id = None self.plineId = None self.history = [] self.speed = 3 self.mesh = rg.Mesh() self.meshID = None
def __init__(self, system): self.system = system self.pos = geo.RandomPoint() self.vel = geo.RandomVector3d(1) self.acc = rg.Vector3d(0,0,0) #self.id = sc.doc.Objects.AddPoint(self.pos) self.plineId = None self.history = [] self.speed = 3 self.mesh = rg.Mesh() self.meshID = None self.neighbors = []
def __init__(self): numVoxels = 20 self.voxelSize = 5 self.targets = [] for i in range(5): self.targets.append(geo.Particle(geo.RandomPoint(), geo.RandomVector3d(5))) self.targets[-1].radius = 5 self.voxels = [] for x in range(numVoxels): for y in range(numVoxels): for z in range(numVoxels): self.voxels.append(Voxel(self, x*self.voxelSize, y*self.voxelSize, z*self.voxelSize)) self.vertices = [] for x in range(numVoxels): for y in range(numVoxels): for z in range(numVoxels): self.vertices.append(Vertex(self, x*self.voxelSize, y*self.voxelSize, z*self.voxelSize))
def __init__(self, system): self.pos = geo.RandomPoint(15, 85, 25, 75, 90, 95) self.vel = rg.Vector3d(0, 0, -1) self.speed = 6 self.vel *= self.speed self.system = system self.id = None self.size = 8 self.prevPos = None self.union = None self.hit = False self.ids = [] self.age = 0 plane = rg.Plane(self.pos, geo.RandomVector3d(1)) self.box = rg.Box(plane, rg.Interval(-self.size / 2, self.size / 2), rg.Interval(-self.size / 2, self.size / 2), rg.Interval(-self.size / 2, self.size / 2)) self.box = self.box.ToBrep()
def __init__(self, system): self.system = system self.radius = 2 self.size = 4 self.vel = rg.Vector3d(random.uniform(-1, 1), random.uniform(-1, 1), random.uniform(-.3, .3)) self.vel.Unitize() self.speed = random.uniform(1, 2) self.vel *= self.speed self.acc = rg.Vector3d(0, 0, 0) self.attr = rc.DocObjects.ObjectAttributes() self.attr.ColorSource = rc.DocObjects.ObjectColorSource.ColorFromObject self.attr.ObjectColor = color.ColorBetweenColors( drawing.Color.DeepSkyBlue, drawing.Color.LimeGreen, random.uniform(0, 1)) self.attr.MaterialSource = rc.DocObjects.ObjectMaterialSource.MaterialFromObject index = sc.doc.Materials.Add() self.mat = sc.doc.Materials[index] self.mat.DiffuseColor = self.attr.ObjectColor self.mat.CommitChanges() self.attr.MaterialIndex = index self.pos = geo.RandomPoint(self.size * 2, 100 - self.size * 2, self.size * 2, 100 - self.size * 2, self.size * 2, 100 - self.size * 2) self.xSize = rg.Interval(-self.size * .25, self.size * .25) self.ySize = rg.Interval(-self.size * .125, self.size * .125) self.zSize = rg.Interval(-self.size, self.size) up = rg.Vector3d(0, 0, 1) xvec = rg.Vector3d.CrossProduct(self.vel, rg.Vector3d(0, 0, 1)) yvec = rg.Vector3d.CrossProduct(self.vel, xvec) self.plane = rg.Plane(self.pos, yvec, xvec) self.box = rg.Box(self.plane, self.xSize, self.ySize, self.zSize) #self.boxID = sc.doc.Objects.AddBox(self.box, self.attr) self.srfIDs = [] self.connectionIDs = []
def main(): skNum = (datetime.date.today() - datetime.date(2020, 03, 29)).days + 201 if int(skNum) > int(os.path.splitext(os.path.basename(__file__))[0]): print "!!!!SAVE THE SKETCH WITH A NEW NAME!!!!" rs.UnselectAllObjects() init_time = time.time() version = 'a' anim = mp4.Animation( os.path.splitext(os.path.basename(__file__))[0] + version) numFrames = 150 numPasses = 100 anim.fps = 30 td = TempDisplay() display = HUD(os.path.splitext(os.path.basename(__file__))[0], numFrames) s = Scene() ################################ #SETUP targets = [] vSystems = [] for i in range(5): targets.append(geo.Particle(geo.RandomPoint(), geo.RandomVector3d(5))) targets[-1].radius = 5 for i in range(5): print(i * .05) + .3 vSystems.append(VoxelSystem(targets, i * .05 + .3)) ################################ for i in range(numFrames): start_time = time.time() print "Frame {}".format(i) if sc.escape_test(False): anim.Cleanup() return ################################ #MAIN LOOP for target in targets: target.Update() for vSystem in vSystems: vSystem.Update() vSystem.UpdateDisplay() ################################ #HUD #display.UpdateParam1('boxes: ' + str(len(bSystem.boxes))) #display.UpdateParam2('links: ' + str(len(bSystem.links))) #display.UpdateParam3('z: ' + str(ball.pos.Z)) display.UpdateScaleBar() ################################ sc.doc.Views.Redraw() display.Update(i) anim.AddFrame(numberOfPasses=numPasses) rs.Sleep(500) ################################ #Framerate frameTime = time.time() - start_time timeLeft = (numFrames - i) * frameTime timeLeftStr = str(datetime.timedelta(seconds=timeLeft)) print "Time remaining: {}".format(timeLeftStr) frameTime = time.time() - init_time timeLeftStr = str(datetime.timedelta(seconds=frameTime)) print "Total Time: {}".format(timeLeftStr) if int(skNum) > int(os.path.splitext(os.path.basename(__file__))[0]): print "!!!!SAVE THE SKETCH WITH A NEW NAME!!!!" if os.path.isdir( r"D:\Files\Work\LIBRARY\06_RHINO\10_Python\300 DAYS\anim"): anim.Create(r"D:\Files\Work\LIBRARY\06_RHINO\10_Python\300 DAYS\anim", frames2Keep=[i / 2, i - 1]) else: anim.Create(r"C:\Tim\300 Days\anim", frames2Keep=[i / 2, i - 1])