import verse as v import vGeometry # vManager members _type = v.GEOMETRY # this handler's node type _node_list = {} # list of geometry nodes: {node_id -> vGeometry} # callbacks def _cb_g_layer_create(node_id, layer_id, name, type, def_uint, def_real): global _node_list if node_id in _node_list: geom = _node_list[node_id] if layer_id == v.G_LAYER_VERTEX_XYZ: geom.layers["vertex"] = layer_id elif layer_id == 1: # is a constant available? geom.layers["polygon"] = layer_id elif type == v.G_LAYER_POLYGON_CORNER_REAL: if name == "map_u": geom.layers["map_u"] = layer_id elif name == "map_v": geom.layers["map_v"] = layer_id else: return v.send_g_layer_subscribe(node_id, layer_id, v.FORMAT_REAL32) def _cb_g_vertex_set(node_id, layer_id, vertex_id, x, y, z): global _node_list if node_id in _node_list: geom = _node_list[node_id] if layer_id == geom.layers["vertex"]: geom.setVertex(vertex_id, (x, y, z)) def _cb_g_polygon_set(node_id, layer_id, polygon_id, v0, v1, v2, v3): global _node_list if node_id in _node_list: geom = _node_list[node_id] if layer_id == geom.layers["polygon"]: if v3 == -1: geom.setTriangle(polygon_id, (v0, v1, v2)) else: geom.setQuad(polygon_id, (v0, v1, v2, v3)) def _cb_g_vertex_delete(node_id, vertex_id): global _node_list if node_id in _node_list: geom = _node_list[node_id] geom.delVertex(vertex_id) def _cb_g_polygon_set_real(node_id, layer_id, polygon_id, v0, v1, v2, v3): global _node_list if node_id in _node_list: geom = _node_list[node_id] if layer_id == geom.layers["map_u"] or layer_id == geom.layers["map_v"]: if not (polygon_id in geom.f): geom.setQuad(polygon_id) face = geom.f[polygon_id] uvs = [v0, v1, v2, v3] if layer_id == geom.layers["map_u"]: for i in range(0, face.corners): face.uv[i][0] = uvs[i] else: for i in range(0, face.corners): face.uv[i][1] = uvs[i] def _cb_g_polygon_delete(node_id, polygon_id): global _node_list if node_id in _node_list: geom = _node_list[node_id] geom.delFace(polygon_id) #vManager functions def _callbacks_set(): v.callback_set(v.SEND_G_LAYER_CREATE, _cb_g_layer_create) v.callback_set(v.SEND_G_VERTEX_SET_REAL32_XYZ, _cb_g_vertex_set) v.callback_set(v.SEND_G_VERTEX_DELETE_REAL32, _cb_g_vertex_delete) v.callback_set(v.SEND_G_POLYGON_SET_CORNER_UINT32, _cb_g_polygon_set) v.callback_set(v.SEND_G_POLYGON_DELETE, _cb_g_polygon_delete) v.callback_set(v.SEND_G_POLYGON_SET_CORNER_REAL32, _cb_g_polygon_set_real) def _node_create(node_id, i_am_owner): global _node_list geom = vGeometry.vGeometry() _node_list[node_id] = geom geom.layers = {} geom.layers["vertex"] = None geom.layers["polygon"] = None geom.layers["map_u"] = None geom.layers["map_v"] = None v.send_node_subscribe(node_id) def _node_destroy(node_id): global _node_list if node_id in _node_list: del _node_list[node_id]