示例#1
0
    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
示例#2
0
    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
示例#3
0
    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]))
示例#4
0
    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))
示例#5
0
 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))
示例#6
0
 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
示例#7
0
 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 = []
示例#8
0
    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()
示例#9
0
 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
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
    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()
示例#13
0
 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))
示例#14
0
    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()
示例#15
0
 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)
示例#16
0
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])
示例#17
0
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])