Quantcast
Channel: Scripting - McNeel Forum
Viewing all articles
Browse latest Browse all 5823

Very simple mover script pretty laggy in Rhino 6?

$
0
0

@p1r4t3b0y wrote:

Hi,

This script produces a very simple mover/agent/particle that randomly travels within two-dimensional bounds.
I think that it used to work great back in Rhino 5, but seems very laggy in version 6. The mover seems to slow down when approaching the scene centre (?) and the other GH components start to recompute like crazy. There is nothing particular evaluated in this region though.

Here’s the GHPython script:

import Rhino.Geometry as rg
import Grasshopper as gh
import random
import math


class Mover:
    def __init__(self, pos, vel):
        """Inits this mover."""
        self.pos = pos
        self.vel = self.contruct_random_vector3d()
        
    def update(self):
        """Updates this mover."""
        self.check_bounds()
        self.pos += self.vel
        
    def contruct_random_vector3d(self):
        """Returns a random three-dimensional unit vector."""
        vec = rg.Vector3d.YAxis
        angles = [math.radians(a) for a in range(15, 345+1, 30)]
        angle = random.choice(angles)
        vec.Rotate(angle, rg.Vector3d.ZAxis)
        return vec
    
    def check_bounds(self):
        next_pos = self.pos + self.vel
        if next_pos.X > 100 or next_pos.X < -100:
            self.vel *= -1
        if next_pos.Y > 100 or next_pos.Y < -100:
            self.vel *= -1
    
###############################################################################    

def update_component():
    """Updates this component, similar to using a Grasshopper timer."""
    def call_back(e):
        ghenv.Component.ExpireSolution(False)
    # Get this Grasshopper document
    gh_doc = ghenv.Component.OnPingDocument()
    # Schedule this component to expire
    gh_doc.ScheduleSolution(1, gh.Kernel.GH_Document.GH_ScheduleDelegate(call_back))

###############################################################################

if Run:
    mv.update()
    a = mv.pos
    b = mv.vel
    update_component()
else:
    mv = Mover(Position, Velocity)

Is there any issue with the update_component function in Grasshopper 1.x?
Or am I simply overlooking something?

simple_mover.gh (8.0 KB)

Edit:
Changed the category to Scripting. Might be more appropirate for this question.

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 5823

Trending Articles