Module mola.module_compas
Expand source code
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from compas.datastructures import Mesh as CMesh
import mola
__author__ = ['Benjamin Dillenburger', 'Demetris Shammas', 'Mathias Bernhard']
__copyright__ = 'Copyright 2019 / Digital Building Technologies DBT / ETH Zurich'
__license__ = 'MIT License'
__email__ = ['<dbt@arch.ethz.ch>']
def mesh_from_compas_mesh(cmesh):
"""Convert a compas mesh to a mola mesh."""
mesh = mola.Mesh()
face_attrs = ["color", "groups"]
vertex_attrs = ["fix, generation"]
v_dict = {}
for vkey in cmesh.vertices():
x, y, z = cmesh.vertex_coordinates(vkey)
# get mola compatible attributes if set
v_attrs = {}
for attr in vertex_attrs:
try:
v_attrs.update({attr: cmesh.vertex_attribute(vkey, attr)})
except KeyError:
pass
vert = mola.Vertex(x, y, z)
# set mola compatible attributes if set
for key in v_attrs:
if v_attrs[key]:
setattr(vert, key, v_attrs[key])
mesh.vertices.append(vert)
v_dict.update({vkey: vert})
for fkey in cmesh.faces():
vkeys = cmesh.face_vertices(fkey)
# get mola compatible attributes if set
f_attrs = {}
for attr in face_attrs:
try:
f_attrs.update({attr: cmesh.face_attribute(fkey, attr)})
except KeyError:
pass
face_verts = []
for vkey in vkeys:
face_verts.append(v_dict[vkey])
face = mola.Face(vertices=face_verts)
# set mola compatible attributes if set
for key in f_attrs:
if f_attrs[key]:
setattr(face, key, f_attrs[key])
mesh.faces.append(face)
for u, v in cmesh.edges():
mesh.edges.append(mola.Edge(v_dict[u], v_dict[v]))
return mesh
def mesh_to_compas_mesh(mesh):
"""Convert a mola mesh to a compas mesh."""
cmesh = CMesh()
for face in mesh.faces:
idx = []
dict_ = face.__dict__
vertices = dict_.pop("vertices")
for vertex in vertices:
dict_ = vertex.__dict__
x, y, z = dict_.pop("x"), dict_.pop("y"), dict_.pop("z")
# store v attributes in attr dict
i = cmesh.add_vertex(x=x, y=y, z=z, attr_dict=dict_)
idx.append(i)
# store f attributes in attr dict
cmesh.add_face(idx, attr_dict=dict_)
return cmesh
Functions
def mesh_from_compas_mesh(cmesh)
-
Convert a compas mesh to a mola mesh.
Expand source code
def mesh_from_compas_mesh(cmesh): """Convert a compas mesh to a mola mesh.""" mesh = mola.Mesh() face_attrs = ["color", "groups"] vertex_attrs = ["fix, generation"] v_dict = {} for vkey in cmesh.vertices(): x, y, z = cmesh.vertex_coordinates(vkey) # get mola compatible attributes if set v_attrs = {} for attr in vertex_attrs: try: v_attrs.update({attr: cmesh.vertex_attribute(vkey, attr)}) except KeyError: pass vert = mola.Vertex(x, y, z) # set mola compatible attributes if set for key in v_attrs: if v_attrs[key]: setattr(vert, key, v_attrs[key]) mesh.vertices.append(vert) v_dict.update({vkey: vert}) for fkey in cmesh.faces(): vkeys = cmesh.face_vertices(fkey) # get mola compatible attributes if set f_attrs = {} for attr in face_attrs: try: f_attrs.update({attr: cmesh.face_attribute(fkey, attr)}) except KeyError: pass face_verts = [] for vkey in vkeys: face_verts.append(v_dict[vkey]) face = mola.Face(vertices=face_verts) # set mola compatible attributes if set for key in f_attrs: if f_attrs[key]: setattr(face, key, f_attrs[key]) mesh.faces.append(face) for u, v in cmesh.edges(): mesh.edges.append(mola.Edge(v_dict[u], v_dict[v])) return mesh
def mesh_to_compas_mesh(mesh)
-
Convert a mola mesh to a compas mesh.
Expand source code
def mesh_to_compas_mesh(mesh): """Convert a mola mesh to a compas mesh.""" cmesh = CMesh() for face in mesh.faces: idx = [] dict_ = face.__dict__ vertices = dict_.pop("vertices") for vertex in vertices: dict_ = vertex.__dict__ x, y, z = dict_.pop("x"), dict_.pop("y"), dict_.pop("z") # store v attributes in attr dict i = cmesh.add_vertex(x=x, y=y, z=z, attr_dict=dict_) idx.append(i) # store f attributes in attr dict cmesh.add_face(idx, attr_dict=dict_) return cmesh