En posts anteriores se mencionó la necesidad de representar las vías que conforman la ciudad dibujada por Blender, además de los edificios, en CittaVR.
El plugin io_import_scene_osm.py de Vladimir Elistratov importaba en la escena de Blender tanto edificios como calles, pero estas últimas formadas únicamente por vértices y aristas (sin caras) haciendo que no se renderizasen al ejecutar el simulador o generar la imagen de la ciudad. Para solucionar este problema se ha hecho que las calles estén compuestas por planos de un grosor determinado por medio de otro plugin:
Este complemento intenta introducir en Blender una herramienta típica de aplicaciones de tipo CAD que crea nuevos bordes a una distancia uniforme respecto a otros seleccionados previamente. Aunque da la posibilidad de realizar diferentes acciones (que se pueden consultar AQUÍ) en función de si se han seleccionado caras o bordes, para la representación de las vías de nuestra ciudad solamente se ha utilizado la opción ‘Extrude’ que genera una copia de los vértices y bordes elegidos a una distancia X, además de caras entre la copia original y la nueva (ver figuras 1 y 2).
La extrusión que realiza el complemento genera la copia de los bordes a una distancia determinada pero no reubica el plano, por lo que el nuevo objeto no queda exactamente en el mismo lugar. Así, a la hora de representar las vías de la ciudad, las calles quedarán desplazadas hacia el lado en el que se haya realizado dicha extrusión. Para que las calles queden centradas con respecto a los bordes originales se juega con la posición del origen del objeto. Las acciones realizadas son las siguientes:
En Blender los objetos pueden estar ordenados en jerarquías permitiendo, así, trabajar con varios objetos de forma conjunta. Este es el caso de las calles generadas por nuestro programa, por lo que recorreremos los elementos que conforman la jerarquía para editar todas calles de la escena.
for highway in highways_hierarchy.children:
highway.select = True
bpy.context.scene.objects.active = highway
Para cada una de esas calles, en primer lugar, cambiaremos el origen hasta el centro del objeto:
bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY')
Y, en modo edición, seleccionaremos uno a uno los vértices que conforman dicho objeto:
Realizamos la extrusión utilizando el plugin y cambiamos esta vez la posición del objeto hasta donde se encuentra el origen, dejando el plano que representa la calle ubicado en lo que antes era el centro de la vía representada únicamente por una línea. Por último, pasamos a modo objeto para poder seguir iterando sobre las vías y deseleccionamos la calle que acabamos de editar.