def RunCommand(is_interactive): if '3GS' not in sc.sticky: compas_rhino.display_message('3GS has not been initialised yet.') return scene = sc.sticky['3GS']['scene'] # get ForceVolMeshObject from scene objects = scene.find_by_name('force') if not objects: compas_rhino.display_message("There is no force diagram in the scene.") return force = objects[0] # make FormNetwork form = volmesh_dual_network(force.diagram, cls=FormNetwork) # set dual/primal form.dual = force.diagram force.diagram.primal = form # add FormNetworkObject translation = relocate_formdiagram(force.diagram, form) form.transform(Translation.from_vector(translation)) form.update_angle_deviations() scene.add_formnetwork(form, name='form', layer='3GS::FormDiagram') # form objects = scene.find_by_name('form') form = objects[0] force.check_eq() form.check_eq() # update scene.update() scene.save() print('Primal diagram successfully created.')
layer = 'volmesh' guids = rs.GetObjects("select polysurfaces", filter=rs.filter.polysurface) rs.HideObjects(guids) volmesh = ForceVolMesh() volmesh = volmesh_from_polysurfaces(volmesh, guids) volmesh.layer = layer volmesh.attributes['name'] = layer # ------------------------------------------------------------------------------ # 2. make dual network (form diagram) # ------------------------------------------------------------------------------ dual_layer = 'dual_network' dual_network = volmesh_dual_network(volmesh, cls=FormNetwork) dual_network.layer = dual_layer dual_network.attributes['name'] = dual_layer # move dual_network offset = 3 x_move = dual_network.bounding_box()[0] * offset for vkey in dual_network.vertex: dual_network.vertex[vkey]['x'] += x_move # ------------------------------------------------------------------------------ # 3. visualise diagrams # ------------------------------------------------------------------------------ # draw directed volmesh halffaces and directed dual_volmesh edges uv_c_dict = get_index_colordict(list(dual_network.edges()))
layer = 'force_volmesh' guids = rs.GetObjects("select polysurfaces", filter=rs.filter.polysurface) rs.HideObjects(guids) forcediagram = ForceVolMesh() forcediagram = volmesh_from_polysurfaces(forcediagram, guids) forcediagram.layer = layer forcediagram.attributes['name'] = layer # ------------------------------------------------------------------------------ # 2. make dual network from volmesh (form diagram) # ------------------------------------------------------------------------------ layer = 'form_network' formdiagram = volmesh_dual_network(forcediagram, cls=FormNetwork) formdiagram.layer = layer formdiagram.attributes['name'] = layer x_move = formdiagram.bounding_box()[0] * 2 for vkey in formdiagram.vertex: formdiagram.vertex[vkey]['x'] += x_move # ------------------------------------------------------------------------------ # 3. reciprocate # ------------------------------------------------------------------------------ volmesh_reciprocate(forcediagram, formdiagram, kmax=1000, weight=1, edge_min=0.5,