forked from s_ranjbar/city_retrofit
storey division working, code needs to be cleaned
This commit is contained in:
parent
e5e6b19ed9
commit
809dc1b3b6
|
@ -18,7 +18,10 @@ from helpers.geometry_helper import GeometryHelper as gh
|
||||||
from helpers.configuration_helper import ConfigurationHelper
|
from helpers.configuration_helper import ConfigurationHelper
|
||||||
import math
|
import math
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from trimesh import intersections
|
||||||
|
from trimesh import Trimesh
|
||||||
|
from city_model_structure.attributes.polygon import Polygon
|
||||||
|
from city_model_structure.attributes.polyhedron import Polyhedron
|
||||||
|
|
||||||
class Building(CityObject):
|
class Building(CityObject):
|
||||||
"""
|
"""
|
||||||
|
@ -376,11 +379,10 @@ class Building(CityObject):
|
||||||
print('number_of_storeys', number_of_storeys)
|
print('number_of_storeys', number_of_storeys)
|
||||||
last_storey_height = float(self.max_height) - height*(number_of_storeys-1)
|
last_storey_height = float(self.max_height) - height*(number_of_storeys-1)
|
||||||
print('last_storey_height', last_storey_height)
|
print('last_storey_height', last_storey_height)
|
||||||
if last_storey_height < height/2:
|
if last_storey_height < 0.9*height:
|
||||||
number_of_storeys -= 1
|
number_of_storeys -= 1
|
||||||
print('number storeys', number_of_storeys)
|
print('number storeys', number_of_storeys)
|
||||||
trimesh = self.simplified_polyhedron.trimesh
|
trimesh = self.simplified_polyhedron.trimesh
|
||||||
normal_plane = [0, 0, -1]
|
|
||||||
rest_trimesh = trimesh
|
rest_trimesh = trimesh
|
||||||
for n in range(0, number_of_storeys - 1):
|
for n in range(0, number_of_storeys - 1):
|
||||||
print(n)
|
print(n)
|
||||||
|
@ -388,14 +390,38 @@ class Building(CityObject):
|
||||||
self.building_lower_corner[2] + height*(n+1)]
|
self.building_lower_corner[2] + height*(n+1)]
|
||||||
print('point plane', point_plane)
|
print('point plane', point_plane)
|
||||||
print('rest trimesh', rest_trimesh.volume)
|
print('rest trimesh', rest_trimesh.volume)
|
||||||
trimeshes = gh.divide_mesh_by_plane(rest_trimesh, normal_plane, point_plane)
|
vertices, faces = intersections.slice_faces_plane(rest_trimesh.vertices, rest_trimesh.faces, [0, 0, -1],
|
||||||
print('number meshes', len(trimeshes))
|
point_plane)
|
||||||
storey = trimeshes[0]
|
lines = list(intersections.mesh_plane(rest_trimesh, [0, 0, -1], point_plane))
|
||||||
|
line_points = gh.segment_list_to_point_cloud(lines)
|
||||||
|
polyhedron = Polyhedron(Polygon(line_points).triangulate())
|
||||||
|
tri = Trimesh(polyhedron.vertices, polyhedron.faces)
|
||||||
|
new_faces = []
|
||||||
|
for face in tri.faces:
|
||||||
|
new_face = []
|
||||||
|
for point in face:
|
||||||
|
point += len(vertices)
|
||||||
|
new_face.append(point)
|
||||||
|
new_faces.append(new_face)
|
||||||
|
vertices = np.append(vertices, tri.vertices, axis=0)
|
||||||
|
faces = np.append(faces, new_faces, axis=0)
|
||||||
|
storey = Trimesh(vertices, faces)
|
||||||
file_name = 'storey_' + str(n) + '.obj'
|
file_name = 'storey_' + str(n) + '.obj'
|
||||||
path_name = (Path(__file__).parent.parent / 'tests' / 'tests_outputs' / file_name).resolve()
|
path_name = (Path(__file__).parent.parent / 'tests' / 'tests_outputs' / file_name).resolve()
|
||||||
with open(path_name, 'w') as file:
|
with open(path_name, 'w') as file:
|
||||||
file.write(storey.export(file_type='obj'))
|
file.write(storey.export(file_type='obj'))
|
||||||
rest_trimesh = trimeshes[1]
|
vertices, faces = intersections.slice_faces_plane(rest_trimesh.vertices, rest_trimesh.faces, [0, 0, 1],
|
||||||
|
point_plane)
|
||||||
|
new_faces = []
|
||||||
|
for face in tri.faces:
|
||||||
|
new_face = []
|
||||||
|
for point in face:
|
||||||
|
point += len(vertices)
|
||||||
|
new_face.append(point)
|
||||||
|
new_faces.append(new_face)
|
||||||
|
vertices = np.append(vertices, tri.vertices, axis=0)
|
||||||
|
faces = np.append(faces, new_faces, axis=0)
|
||||||
|
rest_trimesh = Trimesh(vertices, faces)
|
||||||
file_name = 'rest_trimesh_' + str(n) + '.obj'
|
file_name = 'rest_trimesh_' + str(n) + '.obj'
|
||||||
path_name = (Path(__file__).parent.parent / 'tests' / 'tests_outputs' / file_name).resolve()
|
path_name = (Path(__file__).parent.parent / 'tests' / 'tests_outputs' / file_name).resolve()
|
||||||
with open(path_name, 'w') as file:
|
with open(path_name, 'w') as file:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user