def __init__(self, system, pt, attr): self.pos = pt self.vel = rg.Vector3d(random.uniform(-.5, .5), random.uniform(-.5, .5), -.1) self.acc = rg.Vector3d(0, 0, -1) self.speed = 4 self.vel *= self.speed self.system = system self.size = 3 self.prevPos = None self.union = None self.hit = False self.ids = [] self.age = 0 self.attr = attr plane = rg.Plane(self.pos, geo.RandomVector3d(1)) self.brep = 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.brep = self.brep.ToBrep() closestD = None for particle in self.system.particles: if particle is self: continue pt0, pt1 = BrepProximity(self.brep, particle.brep) d = (pt0 - pt1).Length if d < closestD or closestD is None: closestD = d if closestD < self.speed * 2: self.hit = True
def __init__(self, system, v, i): self.size = 4 self.index = i self.system = system self.vertex = rg.Point3d(v) self.pos = rg.Point3d(v) self.neighbors = self.system.mesh.Vertices.GetConnectedVertices( self.index) self.attr = self.system.attr.Duplicate() self.d = 0 self.vel = geo.RandomVector3d(1) self.vel = rg.Vector3d(0, 0, 0) self.acc = rg.Vector3d(0, 0, 0) self.isAnchor = False meshEdgePointStatus = self.system.mesh.GetNakedEdgePointStatus() if meshEdgePointStatus[self.index] == True: self.isAnchor = True if self.isAnchor == False: val = random.uniform(0, 1) if val < .1: self.isMover = True else: self.isMover = False
def Update(self, time): self.time = time self.p.acc *= 0 self.p.vel *= util.Constrain(self.p.vel.Length, 2) self.p.acc = self.p.pos - rg.Point3d(50, 50, 50) if self.p.acc.Length > 20: self.p.acc.Reverse() self.p.acc.Unitize() self.p.acc *= 1 rand = geo.RandomVector3d(.4) self.p.acc += rand self.p.Update() self.p.UpdateDisplay() for dot in self.dots: dot.Update() #for link in self.links: # link.Resolve() if False: self.links = [] for i in range(len(self.boxes)): for j in range(i + 1, len(self.boxes)): #Could add in a distance max here if (self.boxes[i].pos - self.boxes[j].pos).Length < 30: if self.boxes[i].age > 20 and self.boxes[i].age > 20: self.links.append( Link(self.boxes[i], self.boxes[j]))
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 __init__(self): self.p = Target(rg.Point3d(50, 50, 50), geo.RandomVector3d(2)) self.dots = [] self.time = 0 self.links = [] for i in range(10000): self.dots.append(Dot(self))
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 UpdatePosition(self): self.acc = self.pos - rg.Point3d(50, 50, 50) if self.acc.Length > 10: self.acc.Reverse() self.acc.Unitize() self.acc *= 5 rand = geo.RandomVector3d(1) self.acc += rand self.vel += self.acc self.pos += self.vel self.MoveTriangle()
def __init__(self): self.attr = util.BasicAttr() self.headID = r'941e5133-6d8f-4a2a-853f-f4d3588c3b95' self.mesh = rs.coercemesh(self.headID) self.pn = perlin.SimplexNoise() pt = rg.Point3d(10,60,80) vec = rg.Vector3d(0,-10, 10) plane = rg.Plane(pt, vec) xint = rg.Interval(0, 80) yint = rg.Interval(0, 80) xcount = 10 ycount = 10 #self.mesh = rg.Mesh.CreateFromPlane(plane, xint, yint, xcount, ycount) #self.meshOrig = self.mesh.Duplicate() if False: for i, v in enumerate(self.mesh.Vertices): val = self.pn.noise2(util.Remap(v.X, 10, 90, 0, 3), util.Remap(v.Y, 0, 50, 0, 3)) vec = self.meshOrig.Normals[i] vec = rg.Vector3d(vec) vec *= val * 20 xform = rg.Transform.Translation(vec) v.Transform(xform) self.mesh.Vertices[i] = v for i, v in enumerate(self.mesh.Vertices): val = self.pn.noise3(util.Remap(v.X, 10, 90, 0, 1), util.Remap(v.Y, 0, 50, 0, 1), 0) vec = self.meshOrig.Normals[i] vec = rg.Vector3d(vec) vec *= val * 30 xform = rg.Transform.Translation(vec) v.Transform(xform) self.mesh.Vertices[i] = v for i, v in enumerate(self.mesh.Vertices): rand = geo.RandomVector3d(4) self.mesh.Vertices[i] += rg.Vector3f(rand.X, rand.Y, rand.Z) self.vObjects = [] for i, v in enumerate(self.mesh.Vertices): self.vObjects.append(vObject(self, v, i)) self.meshID = None
def UpdatePosition(self): self.acc = self.pos - rg.Point3d(50, 50, 50) if self.acc.Length > 10: self.acc.Reverse() self.acc.Unitize() self.acc *= 2.5 rand = geo.RandomVector3d(1) self.acc += rand self.vel += self.acc self.pos += self.vel xform = rg.Transform.Translation(self.vel) self.box.Transform(xform) self.boxBrep.Transform(xform)
def Update(self): futurePos = rg.Point3d.Add(self.pos, self.vel) if futurePos.X < 5: self.vel.X *= -1 if futurePos.Y < 5: self.vel.Y *= -1 if futurePos.Z < 5: self.vel.Z *= -1 if futurePos.X > 95: self.vel.X *= -1 if futurePos.Y > 95: self.vel.Y *= -1 if futurePos.Z > 95: self.vel.Z *= -1 mp = self.system.mesh.ClosestMeshPoint(futurePos, 1000) n = self.system.mesh.NormalAt(mp.FaceIndex, mp.T[0], mp.T[1], mp.T[2], mp.T[3]) plane = rg.Plane(mp.Point, n) projPt = rg.Point3d.Add(mp.Point, self.vel) closestPt = plane.ClosestPoint(projPt) self.vel = closestPt - mp.Point self.vel.Unitize() self.vel *= self.speed rand = geo.RandomVector3d(1) self.vel += rand self.pos = mp.Point self.history.append(self.pos) perpVec = rg.Vector3d.CrossProduct(self.vel, n) perpVec.Unitize() outPt = rg.Point3d.Add(self.pos, perpVec) id0 = self.mesh.Vertices.Add(self.pos) id1 = self.mesh.Vertices.Add(outPt) if self.mesh.Vertices.Count > 4: p0 = self.mesh.Vertices.Count - 4 p1 = self.mesh.Vertices.Count - 3 self.mesh.Faces.AddFace(id0, id1, p0) self.mesh.Faces.AddFace(p0, id1, p1)
def __init__(self, system, pt): self.pos = pt self.vel = rg.Vector3d(0, 0, -1) self.speed = 4 self.vel *= self.speed self.system = system self.size = 10 self.prevPos = None self.union = None self.hit = False self.ids = [] self.age = 0 plane = rg.Plane(self.pos, geo.RandomVector3d(1)) self.brep = 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.brep = self.brep.ToBrep()
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 MessUp(self): for i, v in enumerate(self.mesh.Vertices): rand = geo.RandomVector3d(10) self.mesh.Vertices[i] += rg.Vector3f(rand.X, rand.Y, rand.Z)
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])
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 = 'c' 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 #bSystem = BoxSystem() #pSystem = ParticleSystem() #mesh = rg.Mesh() ptObjs = [] vecObjs = [] pts = [] ids = [] for i in range(10): pos = rg.Point3d(random.uniform(0, 100), random.uniform(0, 100), random.uniform(0, 100)) ptObjs.append(PointObj(pos, geo.RandomVector3d(1))) ptObjs[-1].size = 4 pts.append(pos) ################################ for i in range(numFrames): start_time = time.time() print "Frame {}".format(i) if sc.escape_test(False): anim.Cleanup() return ################################ #MAIN LOOP for id in ids: sc.doc.Objects.Delete(id, True) pts = [] for ptObj in ptObjs: ptObj.Update() ptObj.UpdateDisplay() pts.append(ptObj.pos) h = Hull(pts) for edge in h.edges: ids.append(Pipe(pts, edge, 4)) ################################ #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])