def _update_projection(self): proj = project_points(self._xyzs, self._current_rot, self.view) for i in range(len(self._polys)): p = proj[self._npts[i]:self._npts[i + 1]] self._polys[i].set_xy(p[:, :2]) self._polys[i].set_zorder(-p[:-1, 2].mean()) self.figure.canvas.draw()
def rotate(self, v, theta): new_rot = Quaternion.from_v_theta(v, theta) self.current_rotation = self.current_rotation * new_rot faces_proj = project_points(self._faces, self.current_rotation, self.view) xy = faces_proj[:, :, :2] zorder = -faces_proj[:, :4, 2].mean(-1) for i in range(6): self.polys[i].set_xy(xy[i]) self.polys[i].set_zorder(zorder[i])
def _project(self, pts): return project_points(pts, self._current_rot, self._view, [0, 1, 0])
import pattern import ply import projection res = (800,600) # screen upper-left phy coords, in. s1 = (-0.2,-0.15) # screen lower-righ phy coords, in. s2 = (0.2, 0.15) # screen distance ds = 0.4 p=pattern.make_depths(res[0],res[1],1.0,3.0) ply.write_ply('out.ply',p) p=projection.map_to_screen(p,(0,0),res,s1,s2) ply.write_ply('outm.ply',p) p=projection.project_points(p,ds) ply.write_ply('outp.ply',p)