def _add_user_geometry(self, csv_filename: str, name: str, color: List[float]) -> None: """ helper method for ``on_load_user_geom`` A custom geometry can be the pyNastran custom form or an STL """ if name in self.gui.geometry_actors: msg = 'Name: %s is already in geometry_actors\nChoose a different name.' % name raise ValueError(msg) if len(name) == 0: msg = 'Invalid Name: name=%r' % name raise ValueError(msg) point_name = name + '_point' geom_name = name + '_geom' grid_ids, xyz, bars, tris, quads = load_user_geom(csv_filename, self.gui.log, encoding='latin1') nbars = len(bars) ntris = len(tris) nquads = len(quads) nelements = nbars + ntris + nquads self.gui.create_alternate_vtk_grid(point_name, color=color, opacity=1.0, point_size=5, representation='point') if nelements > 0: nid_map = {} i = 0 for nid in grid_ids: nid_map[nid] = i i += 1 self.gui.create_alternate_vtk_grid(geom_name, color=color, opacity=1.0, line_width=5, representation='toggle') # allocate nnodes = len(grid_ids) #self.alt_grids[point_name].Allocate(npoints, 1000) #if nelements > 0: #self.alt_grids[geom_name].Allocate(npoints, 1000) alt_grid = self.gui.alt_grids[point_name] geom_grid = self.gui.alt_grids[geom_name] add_user_geometry(alt_grid, geom_grid, xyz, nid_map, nnodes, bars, tris, quads, nelements, nbars, ntris, nquads) # create actor/mapper self._add_alt_geometry(alt_grid, point_name) if nelements > 0: self._add_alt_geometry(geom_grid, geom_name)
def test_gui_custom_geom_01(self): """tests custom_geom.csv""" csv_filename = os.path.join(MODEL_PATH, 'custom_geom.csv') load_user_geom(csv_filename)
def _add_user_geometry(self, csv_filename, name, color): """ helper method for ``on_load_user_geom`` A custom geometry can be the pyNastran custom form or an STL """ if name in self.gui.geometry_actors: msg = 'Name: %s is already in geometry_actors\nChoose a different name.' % name raise ValueError(msg) if len(name) == 0: msg = 'Invalid Name: name=%r' % name raise ValueError(msg) point_name = name + '_point' geom_name = name + '_geom' grid_ids, xyz, bars, tris, quads = load_user_geom(csv_filename, self.gui.log, encoding='latin1') nbars = len(bars) ntris = len(tris) nquads = len(quads) nelements = nbars + ntris + nquads self.gui.create_alternate_vtk_grid(point_name, color=color, opacity=1.0, point_size=5, representation='point') if nelements > 0: nid_map = {} i = 0 for nid in grid_ids: nid_map[nid] = i i += 1 self.gui.create_alternate_vtk_grid(geom_name, color=color, opacity=1.0, line_width=5, representation='toggle') # allocate nnodes = len(grid_ids) #self.alt_grids[point_name].Allocate(npoints, 1000) #if nelements > 0: #self.alt_grids[geom_name].Allocate(npoints, 1000) # set points points = numpy_to_vtk_points(xyz, dtype='<f') if nelements > 0: alt_grid = self.gui.alt_grids[point_name] geom_grid = self.gui.alt_grids[geom_name] for i in range(nnodes): elem = vtk.vtkVertex() elem.GetPointIds().SetId(0, i) alt_grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) geom_grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) else: for i in range(nnodes): elem = vtk.vtkVertex() elem.GetPointIds().SetId(0, i) alt_grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) if nbars: for i, bar in enumerate(bars[:, 1:]): g1 = nid_map[bar[0]] g2 = nid_map[bar[1]] elem = vtk.vtkLine() elem.GetPointIds().SetId(0, g1) elem.GetPointIds().SetId(1, g2) geom_grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) if ntris: for i, tri in enumerate(tris[:, 1:]): g1 = nid_map[tri[0]] g2 = nid_map[tri[1]] g3 = nid_map[tri[2]] elem = vtk.vtkTriangle() elem.GetPointIds().SetId(0, g1) elem.GetPointIds().SetId(1, g2) elem.GetPointIds().SetId(2, g3) geom_grid.InsertNextCell(5, elem.GetPointIds()) if nquads: for i, quad in enumerate(quads[:, 1:]): g1 = nid_map[quad[0]] g2 = nid_map[quad[1]] g3 = nid_map[quad[2]] g4 = nid_map[quad[3]] elem = vtk.vtkQuad() point_ids = elem.GetPointIds() point_ids.SetId(0, g1) point_ids.SetId(1, g2) point_ids.SetId(2, g3) point_ids.SetId(3, g4) geom_grid.InsertNextCell(9, elem.GetPointIds()) alt_grid.SetPoints(points) if nelements > 0: self.gui.alt_grids[geom_name].SetPoints(points) # create actor/mapper self._add_alt_geometry(alt_grid, point_name) if nelements > 0: self._add_alt_geometry(geom_grid, geom_name)