from aifc import Error
|
import os,sys
|
from tkinter import E
|
import numpy as np
|
from tqdm import tqdm
|
|
from .core import merge_ply
|
from ..utils import read_ply,write_ply,file_fliter
|
from ..microwave.deviceTools import udp2bin_tool,bin2ply_tool
|
|
def manual_merge(folder,alpha,beta,gamma,savename):
|
"""
|
merge the ply files according to the sub folder name, like 0, 20, -30 ...
|
"""
|
|
for root, dirs, files in os.walk(folder,topdown=True):
|
break
|
|
dirs.sort(key = lambda x:float(x))
|
dir_List = dirs
|
|
angle = []
|
index = 0
|
for i,degree in enumerate([alpha,beta,gamma]):
|
if degree == "auto":
|
degree = dir_List
|
index = i
|
angle.append(degree)
|
|
data = []
|
|
print("reading ply files ...")
|
# iterate the auto angle degree
|
for an in tqdm(angle[index]):
|
ply_with_mutiangle = []
|
for z in angle:
|
if isinstance(z,list):
|
z = an
|
ply_with_mutiangle.append(-float(z))
|
ply_name_list = file_fliter(os.path.join(folder,an), "ply",lambda x:int(x.split(".")[0]))
|
if len(ply_name_list) == 0:
|
try:
|
udp2bin_tool(os.path.join(folder,an))
|
bin2ply_tool(os.path.join(folder,an))
|
ply_name_list = file_fliter(os.path.join(folder,an), "ply",lambda x:int(x.split(".")[0]))
|
except Exception as e:
|
raise ValueError(f"Can't find any .udp .bin or .ply files in folder {os.path.join(folder,an)}")
|
else:
|
pass
|
|
# select the all ply files
|
for i in range(len(ply_name_list)):
|
ply_with_mutiangle_copy = ply_with_mutiangle.copy()
|
ply = read_ply(os.path.join(folder,an,ply_name_list[i]))
|
ply_with_mutiangle_copy.append(ply)
|
data.append(ply_with_mutiangle_copy)
|
|
# compose muti ply files to one ply file
|
cloudpoint = merge_ply(data)
|
|
# write the file
|
print("Writing the data to disk ...")
|
write_ply(cloudpoint, folder, savename)
|