def rotation(self, angle, v): self.translate(ut.Vect3().init_vect3(-self.look_at.x, -self.look_at.y, -self.look_at.z)) self.position.rotate(angle, v) self.translate(ut.Vect3().init_vect3(self.look_at.x, self.look_at.y, self.look_at.z)) self.set_angle_x()
def motion(self, x, y): if self.translate: trans_x = (x - self.startx) / 30.0 trans_y = (y - self.starty) / 30.0 left = self.camera.get_left() up = self.camera.get_up() self.camera.translate_all(ut.Vect3().init_vect3( left.x * trans_x, left.y * trans_x, left.z * trans_x)) self.camera.translate_all(ut.Vect3().init_vect3( up.x * (-trans_y), up.y * (-trans_y), up.z * (-trans_y))) self.startx = x self.starty = y if self.zoom: self.camera.zoom((y - self.starty) / 10.0) self.starty = y if self.rotate: sensitivity = 30.0 rot = y - self.starty tmp = self.camera.get_position_from_look_at() tmp.y = tmp.x tmp.x = -tmp.z tmp.z = tmp.y tmp.y = 0.0 tmp.normalise() self.camera.rotate(rot * sensitivity, tmp) glutPostRedisplay()
def set_angle_x(self): self.angle_x = ut.Vect3().get_angle( ut.Vect3().init_vect3(self.position.x, self.position.y + 1, self.position.z), ut.Vect3().init_vect3(self.position.x, self.position.y, self.position.z), ut.Vect3().init_vect3(self.look_at.x, self.look_at.y, self.look_at.z))
def zoom(self, z): dist = ut.Vect3().init_vect3(self.position.x - self.look_at.x, self.position.y - self.look_at.y, self.position.z - self.look_at.z) dist = dist.length(dist) if dist - z > z: self.translate(ut.Vect3().init_vect3(self.forward.x * z, self.forward.y * z, self.forward.z * z))
def key(self, bkey, x, y): key = bkey.decode("utf-8") if key == 'o': self.camera.set_position(ut.Vect3().init_vect3(2.56, 1.2, 0.6)) self.camera.set_look_at(ut.Vect3().init_vect3(0.79, 0.02, -1.53)) elif key == 'q' or key == 'Q' or key == 27: self.current_instance.run = False glutLeaveMainLoop() glutPostRedisplay()
def rotate(self, speed, v): angle = speed / 360.0 if v.x != 0.0: tmp_a = self.angle_x - 90.0 + angle else: tmp_a = self.angle_x - 90.0 if -89.5 < tmp_a < 89.5: self.translate(ut.Vect3().init_vect3(-self.look_at.x, -self.look_at.y, -self.look_at.z)) self.position.rotate(angle, v) self.translate(ut.Vect3().init_vect3(self.look_at.x, self.look_at.y, self.look_at.z)) self.set_angle_x()
def apply_transformations(self): self.forward.init_vect3(self.look_at.x - self.position.x, self.look_at.y - self.position.y, self.look_at.z - self.position.z) self.left = ut.Vect3().init_vect3(self.forward.z, 0, -self.forward.x) self.up = ut.Vect3().init_vect3( self.left.y * self.forward.z - self.left.z * self.forward.y, self.left.z * self.forward.x - self.left.x * self.forward.z, self.left.x * self.forward.y - self.left.y * self.forward.x) self.forward.normalise() self.left.normalise() self.up.normalise()
def __init__(self): self.is_init = False self.run = False self.current_instance = self self.camera = TrackBallCamera(ut.Vect3().init_vect3(2.56, 1.2, 0.6), ut.Vect3().init_vect3(0.79, 0.02, -1.53)) self.translate = False self.rotate = False self.zoom = False self.zed_path = [] self.path_locker = threading.Lock() self.zed3d = zm.Zed3D() self.txt = "" self.humans = [] self.edges = [] self.startx = 0 self.starty = 0
def special_key(self, key, x, y): sensitivity = 150.0 tmp = self.camera.get_position_from_look_at() tmp.y = tmp.x tmp.x = -tmp.z tmp.z = tmp.y tmp.y = 0.0 tmp.normalise() if key == GLUT_KEY_UP: self.camera.rotate(-sensitivity, tmp) elif key == GLUT_KEY_DOWN: self.camera.rotate(sensitivity, tmp) elif key == GLUT_KEY_LEFT: self.camera.rotate(sensitivity, ut.Vect3().init_vect3(0.0, 1.0, 0.0)) elif key == GLUT_KEY_RIGHT: self.camera.rotate(-sensitivity, ut.Vect3().init_vect3(0.0, 1.0, 0.0))
def __init__(self, p=ut.Vect3(), la=ut.Vect3()): self.position = ut.Vect3() self.look_at = ut.Vect3() self.forward = ut.Vect3() self.up = ut.Vect3() self.left = ut.Vect3() self.position.x = p.x self.position.y = p.y self.position.z = p.z self.look_at.x = la.x self.look_at.t = la.y self.look_at.z = la.z self.angle_x = 0.0 self.apply_transformations()
def get_left(self): return ut.Vect3().init_vect3(self.left.x, self.left.y, self.left.z)
def get_up(self): return ut.Vect3().init_vect3(self.up.x, self.up.y, self.up.z)
def get_forward(self): return ut.Vect3().init_vect3(self.forward.x, self.forward.y, self.forward.z)
def get_look_at(self): return ut.Vect3().init_vect3(self.look_at.x, self.look_at.y, self.look_at.z)
def get_position_from_look_at(self): return ut.Vect3().init_vect3(self.position.x - self.look_at.x, self.position.y - self.look_at.y, self.position.z - self.look_at.z)
def get_position(self): return ut.Vect3().init_vect3(self.position.x, self.position.y, self.position.z)