import numpy as np # D文件 class DFile: def __init__( self, start_num, end_num, mileage: np.ndarray, center_z, left_z, right_z, tree_height, ): self.start_num = start_num self.end_num = end_num self._mileage = mileage self._center_z = center_z self._left_z = left_z self._right_z = right_z self._tree_height = tree_height pass def save(self, out_dir): start_num = self.start_num end_num = self.end_num mileage = self._mileage center_z = self._center_z left_z = self._left_z right_z = self._right_z mat = np.zeros((mileage.size, 5)) mat[0, 0] = start_num mat[-1, 0] = end_num mat[:, 1] = mileage mat[:, 2] = center_z mat[:, 3] = left_z mat[:, 4] = right_z if self._tree_height > 0: mat = np.concatenate( ( np.array([mat[0, :]]), np.array([[197, 0, 0, 0, self._tree_height]]), mat[1:, :], ) ) # 197 mat = np.concatenate( ( mat[0:-2, :], np.array([[198, mat[-1,1], 0, 0, self._tree_height]]), np.array([mat[-1, :]]), ), ) # 198 with open(f"{out_dir}/D{100+start_num-4000}.txt", "w") as d_file: for foo in mat: d_file.write(f"{foo[0]:.0f}\t") d_file.write(f"{foo[1]:.0f}\t") d_file.write(f"{foo[2]}\t") d_file.write(f"{foo[3]}\t") d_file.write(f"{foo[4]}\t") d_file.write("\n") with open(f"{out_dir}/X{100+start_num-4000}.txt", "w") as x_file: x_file.write("dm\n") x_file.write(f"{mileage.size}\n") x_file.write("0\n") x_file.write(f"{mileage.size*3}\n") x_file.write("1\n") x_file.write("0\n") x_file.write("0\n") pass class ControlFile: def __init__(self, segments, tower_start_number, c_file_template_path, out_dir): self._c_file_template_path = c_file_template_path self._out_dir = out_dir self._segments = segments self._tower_start_number = tower_start_number pass def save(self): c_file_template_path = self._c_file_template_path out_dir = self._out_dir segments = self._segments tower_start_number = self._tower_start_number with open(c_file_template_path) as c_file_template: c_template = c_file_template.read() c_template = c_template.replace("{SEGMENT_N}", str(len(segments))) c_template = c_template.replace( "{TOWER_NUM_START}", f"{tower_start_number}" ) c_template = c_template.replace( "{SEGMENT}", "\n".join([str(seg - 4000 + 100) for seg in segments]) ) c_template = c_template.replace("{SEGMENT_S}", f"{segments[0]-4000+100}") c_template = c_template.replace("{SEGMENT_E}", f"{segments[-1]-4000+100}") c_template = c_template.replace( "{CONTROL_FILE}", f"S{segments[0]-4000+100}" ) # with open(f"{out_dir}/PW{segments[0]-4000+1}.dat", "w") as c_file: with open(f"{out_dir}/PW01.dat", "w") as c_file: c_file.write(c_template)