Source code for udaan.utils.vfx

import numpy as np
import vpython as vp

from ..logging import get_logger

_logger = get_logger(__name__)


[docs] class VFXHandler:
[docs] def __init__(self, title="visuals", rate=200): self._title = "udaan::" + title self.scene = vp.canvas( title=self._title, width=1080, # 1920 height=640, # 1080 center=vp.vector(1, 2, 0), background=vp.color.white, isnotebook=8080, ) # self.scene.caption = """To rotate "camera", drag with right button or Ctrl-drag. # To zoom, drag with middle button or Alt/Option depressed, or use scroll wheel. # On a two-button mouse, middle is left + right. # To pan left/right and up/down, Shift-drag. # Touch screen: pinch/extend to zoom, swipe or two-finger rotate.""" self.scene.camera.rotate(angle=np.pi / 2, axis=vp.vector(1, 0, 0)) self._models = {} self.axes = None self.create_env() self._rate = rate
[docs] def create_env(self): self.axes = [] self.axes.append( vp.arrow( pos=vp.vector(0, 0, 0), axis=vp.vector(2, 0, 0), color=vp.vector(1, 0, 0), opacity=0.15, shaftwidth=0.01, ) ) self.axes.append( vp.arrow( pos=vp.vector(0, 0, 0), axis=vp.vector(0, 2, 0), color=vp.vector(0, 1, 0), opacity=0.15, shaftwidth=0.01, ) ) self.axes.append( vp.arrow( pos=vp.vector(0, 0, 0), axis=vp.vector(0, 0, 2), color=vp.vector(0, 0, 1), opacity=0.15, shaftwidth=0.01, ) ) return
[docs] def delete_env(self): self.axes[0].render = False self.axes[1].render = False self.axes[2].render = False # del self.axes # del self.nozzle return
[docs] def reset(self): self.delete_env() self.create_env()
[docs] def add_model(self, name, model): self._models[name] = model return
[docs] def del_model(self, name): self._models[name].render = False del self._models[name] return
[docs] class Model:
[docs] def __init__(self, name): self.name = name
[docs] def update(self): raise NotImplementedError
[docs] def clear(self): pass
[docs] class BoundingBox(Model):
[docs] def __init__( self, name="bounding_box", orig=np.zeros(3), xmin=-1.5, xmax=1.5, ymin=-2.5, ymax=2.5, zmin=0.0, zmax=4.0, color="purple", ): super().__init__(name) self.orig = orig self.bndry = vp.curve(color=getattr(vp.color, color), radius=0.01) self.points = [] self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymin, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymin, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymax, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymax, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymin, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymin, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymin, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymax, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymax, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymin, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymin, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymin, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymax, orig[2] + zmin)) self.points.append(vp.vector(orig[0] + xmax, orig[1] + ymax, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymax, orig[2] + zmax)) self.points.append(vp.vector(orig[0] + xmin, orig[1] + ymax, orig[2] + zmin)) for p in self.points: self.bndry.append(p)
__all__ = [ "VFXHandler", "Model", "BoundingBox", ]