import os from compas_fofin.datastructures import Cablenet from compas_fofin.rhino import CablenetArtist from compas_fofin.equilibrium import cablenet_fd_alglib HERE = os.path.dirname(__file__) DATA = os.path.join(HERE, '..', '..', 'data') FILE = os.path.join(DATA, 'saddle.obj') cablenet = Cablenet.from_obj(FILE) cablenet.set_vertices_attribute('is_anchor', True, keys=cablenet.vertices_where( {'vertex_degree': 1})) cablenet_fd_alglib(cablenet) artist = CablenetArtist(cablenet, layer="FoFin::Cablenet") artist.clear_layer() artist.draw_vertices() artist.draw_edges() artist.draw_forces(scale=0.05) artist.draw_loads() artist.draw_reactions() artist.redraw()
def draw(self, layer=None, clear_layer=True, settings=None): from compas_fofin.rhino import CablenetArtist layer = layer or settings.get('layer') artist = CablenetArtist(self, layer=layer) if clear_layer: artist.clear_layer() if settings.get('show.vertices', True): vertexcolor = {} vertexcolor.update({ key: (0, 255, 0) for key in self.vertices_where_predicate( lambda key, attr: attr['constraint'] is not None) }) vertexcolor.update({ key: (255, 0, 0) for key in self.vertices_where({'is_anchor': True}) }) artist.draw_vertices(color=vertexcolor) if settings.get('show.edges', True): artist.draw_edges() if settings.get('show.faces', True): artist.draw_faces() if settings.get('show.normals', False): artist.draw_normals(scale=settings.get('scale.normals')) if settings.get('show.forces', False): artist.draw_forces(compression=settings.get( 'color.forces:compression', None), tension=settings.get('color.forces:tension', None), scale=settings.get('scale.forces', None)) if settings.get('show.reactions', False): artist.draw_reactions(color=settings.get('color.reactions', None), scale=settings.get('scale.reactions', None)) if settings.get('show.residuals', False): artist.draw_residuals(color=settings.get('color.residuals', None), scale=settings.get('scale.residuals', None), tol=settings.get('tol.residuals', None)) if settings.get('show.loads', False): artist.draw_loads(color=settings.get('color.loads', None), scale=settings.get('scale.loads', None)) if settings.get('show.selfweight', False): artist.draw_selfweight(color=settings.get('color.selfweight', None), scale=settings.get('scale.selfweight', None)) if settings.get('show.stress', False): artist.draw_stress(scale=settings.get('scale.stress', None)) artist.redraw()
def draw(): artist.clear_layer() artist.draw_vertices(color={ key: (255, 0, 0) for key in cablenet.vertices_where({'is_anchor': True}) }) artist.draw_edges() artist.redraw() cablenet = Cablenet.from_obj(compas.get('faces.obj')) for key, attr in cablenet.vertices(True): attr['is_anchor'] = cablenet.vertex_degree(key) == 2 artist = CablenetArtist(cablenet, layer="Mesh::FD") draw() while True: selected = CablenetHelper.select_vertices(cablenet) if not selected: break if CablenetHelper.update_vertex_attributes(cablenet, selected): cablenet_fd(cablenet) draw() while True: selected = CablenetHelper.select_edges(cablenet) if not selected:
def RunCommand(is_interactive): if "FoFin" not in sc.sticky: raise Exception("Initialise the plugin first!") cablenet = sc.sticky["FoFin"]['cablenet'] settings = sc.sticky["FoFin"]['settings'] if not cablenet: return if compas_rhino.update_settings(settings): artist = CablenetArtist(cablenet, layer=settings['layer']) artist.clear_layer() artist.draw_mesh() artist.draw_vertices() artist.draw_edges() artist.redraw()
def RunCommand(is_interactive): if "FoFin" not in sc.sticky: raise Exception("Initialise the plugin first!") settings = sc.sticky["FoFin"]['settings'] filepath = compas_rhino.browse_for_file() if not filepath: return if not filepath.endswith('.json'): return cablenet = Cablenet.from_json(filepath) sc.sticky["FoFin"]["cablenet"] = cablenet artist = CablenetArtist(cablenet, layer=settings['layer']) artist.clear_layer() artist.draw_mesh() artist.draw_vertices() artist.draw_edges() artist.redraw()