forked from s_ranjbar/city_retrofit
storey division working, code needs to be cleaned
This commit is contained in:
parent
2702c77a33
commit
e5e6b19ed9
|
@ -110,19 +110,22 @@ class GeometryHelper:
|
|||
return points
|
||||
|
||||
@staticmethod
|
||||
def _segment_list_to_point_cloud(segment_list):
|
||||
point_list = np.asarray(segment_list[0])
|
||||
for segment in segment_list:
|
||||
for new_point in segment:
|
||||
found = False
|
||||
for point in point_list:
|
||||
same_point = np.allclose(new_point, point)
|
||||
if same_point:
|
||||
found = True
|
||||
def segment_list_to_point_cloud(lines):
|
||||
line_points = [lines[0][0], lines[0][1]]
|
||||
lines.remove(lines[0])
|
||||
while len(lines) > 1:
|
||||
i = 0
|
||||
for line in lines:
|
||||
i += 1
|
||||
if GeometryHelper.distance_between_points(line[0], line_points[len(line_points) - 1]) < 1e-8:
|
||||
line_points.append(line[1])
|
||||
lines.pop(i - 1)
|
||||
break
|
||||
if not found:
|
||||
point_list = np.concatenate((point_list, [new_point]))
|
||||
return point_list
|
||||
elif GeometryHelper.distance_between_points(line[1], line_points[len(line_points) - 1]) < 1e-8:
|
||||
line_points.append(line[0])
|
||||
lines.pop(i - 1)
|
||||
break
|
||||
return line_points
|
||||
|
||||
@staticmethod
|
||||
def _point_cloud_to_mesh(point_list, normal_list):
|
||||
|
@ -187,7 +190,7 @@ class GeometryHelper:
|
|||
mesh_final.append(mesh)
|
||||
break
|
||||
else:
|
||||
points = GeometryHelper._segment_list_to_point_cloud(mesh_1_segments)
|
||||
points = GeometryHelper.segment_list_to_point_cloud(mesh_1_segments)
|
||||
points_normals = [[None] * 3] * len(points)
|
||||
for j in range(0, len(points_normals)):
|
||||
points_normals[j] = normal_opp[i]
|
||||
|
@ -256,6 +259,11 @@ class GeometryHelper:
|
|||
if np.linalg.norm(vec_1) == 0 or np.linalg.norm(vec_2) == 0:
|
||||
sys.stderr.write("Warning: impossible to calculate angle between planes' normal. Return 0\n")
|
||||
return 0
|
||||
alpha = math.acos(np.dot(vec_1, vec_2) / np.linalg.norm(vec_1) / np.linalg.norm(vec_2))
|
||||
cosine = np.dot(vec_1, vec_2) / np.linalg.norm(vec_1) / np.linalg.norm(vec_2)
|
||||
if cosine > 1 and cosine-1 < 1e-5:
|
||||
cosine = 1
|
||||
elif cosine < -1 and cosine+1 > -1e-5:
|
||||
cosine = -1
|
||||
alpha = math.acos(cosine)
|
||||
return alpha
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user