def __init__(self): self.rotation = AffineTransform() # Generate some data to work with x,y,z,d = radar_example_data() print x.shape, y.shape, z.shape print d.shape, d.min(), d.max() verts, faces = mesh_from_quads(x,y,z) face_colors = np.empty((faces.shape[0], 4)) face_colors[0::2,0] = d.flat face_colors[0::2,1] = d.flat face_colors[0::2,2] = d.flat face_colors[1::2,0] = d.flat face_colors[1::2,1] = d.flat face_colors[1::2,2] = d.flat face_colors[:,3] = 1.0 # transparency mdata = MeshData(vertices=verts, faces=faces, face_colors=face_colors) mesh = Mesh(meshdata=mdata) mesh.transform = vispy.scene.transforms.AffineTransform() mesh.transform.scale([1./10, 1./10, 1./10]) vispy.scene.SceneCanvas.__init__(self, keys='interactive') self.size = (800, 800) self.show() view = self.central_widget.add_view() # view.set_camera('turntable', mode='ortho', up='z', distance=2) view.camera='turntable' view.camera.mode='ortho' view.camera.up='z' view.camera.distance=20 view.add(mesh)
def add_mesh_data_to_view(mdata, view, want_faces=True, want_points=True, want_lines=True, transform=transforms.MatrixTransform()): color = mdata.get('color', 'g') if isinstance(color, str) and color == 'random': color = np.random.random(3).tolist() else: color = Color(color).rgb.tolist() res = Attributize() res.lines = [] res.objs = [] if want_lines and 'lines' in mdata: for polyline in mdata.lines: if isinstance(polyline, Attributize): width = polyline.get('width', 1) method = 'gl' if width > 1: method = 'gl' l = Line( pos=np.array(np.array(polyline.polyline)), antialias=True, method=method, color=np.array(polyline.colors), width=width,) else: l = Line(pos=np.array(np.array(polyline)), antialias=False, method='gl', color=color) l.transform = transform view.add(l) res.lines.append(l) res.objs.append(l) if want_points and mdata.get('points', None) is not None: scatter = Markers() #mdata.points = np.array(( # (10.928140, -51.417831, -213.253723), # (0.000000, -46.719570, -205.607208), # (0.000000, -53.499737, -215.031876), # (0.000000, -69.314308, -223.780746), # (0.000000, -89.549263, -170.910568),)) #mdata.points = np.array(((-12.138942,-55.812309,-217.007050),(10.928140,-51.417831,-213.253723),(-7.289741,-43.585541,-200.506531))) points_color = mdata.get('points_color', color) points_size = mdata.get('points_size', 10) points = np.array(mdata.points) #print('PLOTTING ', points, points_size) if len(points) == 0: return scatter.set_data(points, edge_color=None, face_color=points_color, size=points_size) scatter.transform = transform view.add(scatter) res.objs.append(scatter) res.points = scatter if want_faces and 'mesh' in mdata: mesh = Mesh(meshdata=mdata.mesh, color=color + [0.7]) mesh.transform = transform view.add(mesh) res.mesh = mesh res.objs.append(mesh) return res
def __init__(self): self.meshes = [] self.rotation = AffineTransform() # Generate some data to work with global mdata mdata = create_sphere(20, 40, 1.0) # Mesh with pre-indexed vertices, uniform color self.meshes.append(Mesh(meshdata=mdata, color='r')) #mesh.transform = STTransform(scale=(1, 1, .001), translate=(400, 400)) ## Mesh with pre-indexed vertices, per-face color ## Because vertices are pre-indexed, we get a different color ## every time a vertex is visited, resulting in sharp color ## differences between edges. verts = mdata.vertices(indexed='faces') nf = verts.size//9 fcolor = np.ones((nf, 3, 4), dtype=np.float32) fcolor[..., 0] = np.linspace(1, 0, nf)[:, np.newaxis] fcolor[..., 1] = np.random.normal(size=nf)[:, np.newaxis] fcolor[..., 2] = np.linspace(0, 1, nf)[:, np.newaxis] mesh = Mesh(vertices=verts, face_colors=fcolor) self.meshes.append(mesh) ## Mesh with unindexed vertices, per-vertex color ## Because vertices are unindexed, we get the same color ## every time a vertex is visited, resulting in no color differences ## between edges. verts = mdata.vertices() faces = mdata.faces() nv = verts.size//3 vcolor = np.ones((nv, 4), dtype=np.float32) vcolor[:, 0] = np.linspace(1, 0, nv) vcolor[:, 1] = np.random.normal(size=nv) vcolor[:, 2] = np.linspace(0, 1, nv) self.meshes.append(Mesh(verts, faces, vcolor)) self.meshes.append(Mesh(verts, faces, vcolor, shading='flat')) self.meshes.append(Mesh(verts, faces, vcolor, shading='smooth')) # Lay out meshes in a grid grid = (3, 3) s = 300. / max(grid) for i, mesh in enumerate(self.meshes): x = 800. * (i % grid[0]) / grid[0] + 400. / grid[0] - 2 y = 800. * (i // grid[1]) / grid[1] + 400. / grid[1] + 2 mesh.transform = ChainTransform([STTransform(translate=(x, y), scale=(s, s, 1)), self.rotation]) vispy.scene.SceneCanvas.__init__(self, keys='interactive') self.size = (800, 800) self.show() self.timer = vispy.app.Timer(connect=self.rotate) self.timer.start(0.016)
def __init__(self): self.meshes = [] self.rotation = AffineTransform() # Generate some data to work with global mdata mdata = create_sphere(20, 40, 1.0) # Mesh with pre-indexed vertices, uniform color self.meshes.append(Mesh(meshdata=mdata, color='r')) #mesh.transform = STTransform(scale=(1, 1, .001), translate=(400, 400)) ## Mesh with pre-indexed vertices, per-face color ## Because vertices are pre-indexed, we get a different color ## every time a vertex is visited, resulting in sharp color ## differences between edges. verts = mdata.vertices(indexed='faces') nf = verts.size // 9 fcolor = np.ones((nf, 3, 4), dtype=np.float32) fcolor[..., 0] = np.linspace(1, 0, nf)[:, np.newaxis] fcolor[..., 1] = np.random.normal(size=nf)[:, np.newaxis] fcolor[..., 2] = np.linspace(0, 1, nf)[:, np.newaxis] mesh = Mesh(vertices=verts, face_colors=fcolor) self.meshes.append(mesh) ## Mesh with unindexed vertices, per-vertex color ## Because vertices are unindexed, we get the same color ## every time a vertex is visited, resulting in no color differences ## between edges. verts = mdata.vertices() faces = mdata.faces() nv = verts.size // 3 vcolor = np.ones((nv, 4), dtype=np.float32) vcolor[:, 0] = np.linspace(1, 0, nv) vcolor[:, 1] = np.random.normal(size=nv) vcolor[:, 2] = np.linspace(0, 1, nv) self.meshes.append(Mesh(verts, faces, vcolor)) self.meshes.append(Mesh(verts, faces, vcolor, shading='flat')) self.meshes.append(Mesh(verts, faces, vcolor, shading='smooth')) # Lay out meshes in a grid grid = (3, 3) s = 300. / max(grid) for i, mesh in enumerate(self.meshes): x = 800. * (i % grid[0]) / grid[0] + 400. / grid[0] - 2 y = 800. * (i // grid[1]) / grid[1] + 400. / grid[1] + 2 mesh.transform = ChainTransform([ STTransform(translate=(x, y), scale=(s, s, 1)), self.rotation ]) vispy.scene.SceneCanvas.__init__(self, keys='interactive') self.size = (800, 800) self.show() self.timer = vispy.app.Timer(connect=self.rotate) self.timer.start(0.016)
def _init_mesh(self, x,y,z,d): verts, faces = mesh_from_quads(x,y,z) face_colors = np.empty((faces.shape[0], 4)) face_colors[0::2,0] = d.flat face_colors[0::2,1] = d.flat face_colors[0::2,2] = d.flat face_colors[1::2,0] = d.flat face_colors[1::2,1] = d.flat face_colors[1::2,2] = d.flat face_colors[:,3] = 1.0 # transparency mdata = MeshData(vertices=verts, faces=faces, face_colors=face_colors) mesh = Mesh(meshdata=mdata) # mesh.transform = ChainTransform([STTransform(translate=(0, 0, 0), # scale=(1.0e-3, 1.0e-3, 1.0e-3) )]) mesh.transform = vispy.scene.transforms.MatrixTransform() mesh.transform.scale([1./1000, 1./1000, 1./1000]) # mesh.transform.shift([-.2, -.2, -.2]) return mesh
parser.add_argument('--mesh', default=default_mesh) parser.add_argument('--shininess', default=100) parser.add_argument('--wireframe-width', default=1) args, _ = parser.parse_known_args() vertices, faces, normals, texcoords = read_mesh(args.mesh) canvas = scene.SceneCanvas(keys='interactive', bgcolor='white') view = canvas.central_widget.add_view() view.camera = 'arcball' view.camera.depth_value = 1e3 # Create a colored `MeshVisual`. mesh = Mesh(vertices, faces, color=(.5, .7, .5, 1)) mesh.transform = transforms.MatrixTransform() mesh.transform.rotate(90, (1, 0, 0)) mesh.transform.rotate(-45, (0, 0, 1)) view.add(mesh) # Use filters to affect the rendering of the mesh. wireframe_filter = WireframeFilter(width=args.wireframe_width) # Note: For convenience, this `ShadingFilter` would be created automatically by # the `MeshVisual with, e.g. `mesh = MeshVisual(..., shading='smooth')`. It is # created manually here for demonstration purposes. shading_filter = ShadingFilter(shininess=args.shininess) # The wireframe filter is attached before the shading filter otherwise the # wireframe is not shaded. mesh.attach(wireframe_filter) mesh.attach(shading_filter)