1.考虑中间有耐张塔时画后侧耐张串时没有重新计算张力的问题。

2.完成了考虑中间有耐张塔的情况。
This commit is contained in:
n3040 2023-01-26 03:07:57 +08:00
parent 2109957df1
commit 034ba492c7
1 changed files with 258 additions and 118 deletions

270
PWFile.py
View File

@ -206,26 +206,55 @@ class StringImpactPlate:
_dwg_file_path: str _dwg_file_path: str
_s_file_path: str _s_file_path: str
_draw_start_tower_name: str _draw_start_tower_name: str
_draw_end_tower_name: str
_continouse_tension_excel: str _continouse_tension_excel: str
_string_impact_curve_excel: str _string_impact_curve_excel: str
_cad: None _cad: None
excel_record_list: List = [] # 记录对excel的操作 excel_record_list: List = [] # 记录对excel的操作
def _find_target_tower_index(self, start_tower_name: str, tower_dict): def _find_target_tower_index(
self, start_tower_name: str, end_tower_name, tower_dict
):
# 从 start_tower_name开始寻找一个耐张段 # 从 start_tower_name开始寻找一个耐张段
index = [] index = []
tower_key_list = list(tower_dict.keys()) tower_key_list = list(tower_dict.keys())
index.append(tower_key_list.index(start_tower_name)) try:
can_start_find = False index_of_first_tower = tower_key_list.index(start_tower_name)
for tower_key in tower_key_list: index.append(index_of_first_tower)
tower_info = tower_dict[tower_key] except ValueError: # 没找到第一个塔,就直接返回
if tower_info.tower_name == start_tower_name: return index
can_start_find = True try:
continue index_of_last_tower = tower_key_list.index(end_tower_name)
if can_start_find and tower_info.is_tension_tower == True: # 开始补充第一个和最后一个直接的耐张塔
found_tower_name = tower_info.tower_name for index_of_tension_tower in range(
index.append(tower_key_list.index(found_tower_name)) index_of_first_tower + 1, index_of_last_tower
):
if (
tower_dict[tower_key_list[index_of_tension_tower]].is_tension_tower
== True
):
index.append(index_of_tension_tower)
index.append(index_of_last_tower)
except ValueError: # 没找到最后一个塔,就只画一个耐张段
for index_of_tension_tower in range(
index_of_first_tower + 1, len(tower_key_list)
):
if (
tower_dict[tower_key_list[index_of_tension_tower]].is_tension_tower
== True
):
index.append(index_of_tension_tower)
break break
# can_start_find = False
# for tower_key in tower_key_list:
# tower_info = tower_dict[tower_key]
# if tower_info.tower_name == start_tower_name:
# can_start_find = True
# continue
# if can_start_find and tower_info.is_tension_tower == True:
# found_tower_name = tower_info.tower_name
# index.append(tower_key_list.index(found_tower_name))
# break
return index return index
def _plot(self, cad, plot_x, plot_y): def _plot(self, cad, plot_x, plot_y):
@ -252,8 +281,8 @@ class StringImpactPlate:
s_file.open(self._s_file_path) s_file.open(self._s_file_path)
tower_dict = s_file.tower_dic tower_dict = s_file.tower_dic
tower_key_list = list(tower_dict.keys()) tower_key_list = list(tower_dict.keys())
draw_tower_index = self._find_target_tower_index( draw_tower_indexes = self._find_target_tower_index(
self._draw_start_tower_name, tower_dict self._draw_start_tower_name, self._draw_end_tower_name, tower_dict
) )
fitting_file_path = deduce_fit_db_from_cad_path(self._dwg_file_path) fitting_file_path = deduce_fit_db_from_cad_path(self._dwg_file_path)
fitting = Fitting(fitting_file_path) fitting = Fitting(fitting_file_path)
@ -264,14 +293,16 @@ class StringImpactPlate:
wb_string_impact = excel_app.books.open(self._string_impact_curve_excel) wb_string_impact = excel_app.books.open(self._string_impact_curve_excel)
stringImpactExcel = StringImpactExcel() stringImpactExcel = StringImpactExcel()
sleep(1) sleep(1)
draw_first_tower_key = tower_key_list[draw_tower_index[0]] for draw_tower_index in draw_tower_indexes:
first_tower_info: SEntry = tower_dict[draw_first_tower_key] draw_tower_key = tower_key_list[draw_tower_index]
forth_reprtv_span = first_tower_info.forth_representive_span tower_info: SEntry = tower_dict[draw_tower_key]
if draw_tower_index != draw_tower_indexes[-1]: # 不是最后一个
# 画前侧
forth_reprtv_span = tower_info.forth_representive_span
continouse_sheet.range("B69").value = forth_reprtv_span continouse_sheet.range("B69").value = forth_reprtv_span
high_temperature_tension = continouse_sheet.range("L69").value high_temperature_tension = continouse_sheet.range("L69").value
if first_tower_info.is_tension_tower:
forth_tower_info: SEntry = tower_dict[ forth_tower_info: SEntry = tower_dict[
tower_key_list[draw_tower_index[0] + 1] tower_key_list[draw_tower_index + 1]
] ]
if forth_tower_info.is_tension_tower: if forth_tower_info.is_tension_tower:
forth_tower_fitting_length = 0 forth_tower_fitting_length = 0
@ -279,48 +310,52 @@ class StringImpactPlate:
forth_tower_fitting_length = fitting.fitting_length_dic[ forth_tower_fitting_length = fitting.fitting_length_dic[
forth_tower_info.fitting forth_tower_info.fitting
] ]
gaocha_of_first_tower = ( gaocha_of_tower = (
( (
forth_tower_info.tower_height forth_tower_info.tower_height
- forth_tower_info.foundation_low - forth_tower_info.foundation_low
- forth_tower_fitting_length - forth_tower_fitting_length
) )
- (first_tower_info.tower_height - first_tower_info.foundation_low) - (tower_info.tower_height - tower_info.foundation_low)
+ forth_tower_info.altitude_off + forth_tower_info.altitude_off
) )
span_of_first_tower = ( span_of_tower = forth_tower_info.mileage_in_s - tower_info.mileage_in_s
forth_tower_info.mileage_in_s - first_tower_info.mileage_in_s
)
(x, y) = stringImpactExcel.read( (x, y) = stringImpactExcel.read(
wb_string_impact, wb_string_impact,
gaocha_of_first_tower, gaocha_of_tower,
span_of_first_tower, span_of_tower,
high_temperature_tension, high_temperature_tension,
) )
# TODO: 没有考虑断面中间有耐张塔的情况 plot_x = (
plot_x = (plate_origin[0] + x / 5).reshape(len(x), 1) plate_origin[0]
+ (
tower_dict[tower_key_list[draw_tower_index]].mileage_in_s
- tower_dict[tower_key_list[draw_tower_indexes[0]]].mileage_in_s
)
/ 5
+ x / 5
).reshape(len(x), 1)
accumulate_altitude_off = np.sum(
[
tower_dict[tower_key_list[bar]].altitude_off
for bar in range(
draw_tower_indexes[0] + 1, draw_tower_index + 1
)
]
)
plot_y = ( plot_y = (
plate_origin[1] plate_origin[1]
+ (first_tower_info.tower_height - first_tower_info.foundation_low + y) + accumulate_altitude_off * 2
* 2 + (tower_info.tower_height - tower_info.foundation_low + y) * 2
).reshape(len(x), 1) ).reshape(len(x), 1)
self._plot(cad, plot_x, plot_y) self._plot(cad, plot_x, plot_y)
# 记录 if draw_tower_index != draw_tower_indexes[0]: # 不是第一个
record = StringImpactExcelRecord() # 画后侧
record.from_tower_name = first_tower_info.tower_name back_reprtv_span = tower_info.back_representive_span
record.fo_tower_name = forth_tower_info.tower_name continouse_sheet.range("B69").value = back_reprtv_span
record.span = span_of_first_tower high_temperature_tension = continouse_sheet.range("L69").value
record.representive_span = first_tower_info.forth_representive_span
record.gaocha = gaocha_of_first_tower
record.tension = high_temperature_tension
self.excel_record_list.append(record)
# 画右侧耐张塔的弧垂
draw_last_tower_key = tower_key_list[draw_tower_index[-1]]
last_tower_info: SEntry = tower_dict[draw_last_tower_key] # 最后一个塔位
if last_tower_info.is_tension_tower:
back_reprtv_span = last_tower_info.back_representive_span
back_tower_info: SEntry = tower_dict[ back_tower_info: SEntry = tower_dict[
tower_key_list[draw_tower_index[-1] - 1] tower_key_list[draw_tower_index - 1]
] ]
if back_tower_info.is_tension_tower: if back_tower_info.is_tension_tower:
back_tower_fitting_length = 0 back_tower_fitting_length = 0
@ -328,29 +363,27 @@ class StringImpactPlate:
back_tower_fitting_length = fitting.fitting_length_dic[ back_tower_fitting_length = fitting.fitting_length_dic[
back_tower_info.fitting back_tower_info.fitting
] ]
gaocha_of_last_tower = ( gaocha_of_tower = (
( (
back_tower_info.tower_height back_tower_info.tower_height
- back_tower_info.foundation_low - back_tower_info.foundation_low
- back_tower_fitting_length - back_tower_fitting_length
) )
- (last_tower_info.tower_height - last_tower_info.foundation_low) - (tower_info.tower_height - tower_info.foundation_low)
- last_tower_info.altitude_off - tower_info.altitude_off
)
span_of_last_tower = (
last_tower_info.mileage_in_s - back_tower_info.mileage_in_s
) )
span_of_tower = tower_info.mileage_in_s - back_tower_info.mileage_in_s
(x, y) = stringImpactExcel.read( (x, y) = stringImpactExcel.read(
wb_string_impact, wb_string_impact,
gaocha_of_last_tower, gaocha_of_tower,
span_of_last_tower, span_of_tower,
high_temperature_tension, high_temperature_tension,
) )
plot_last_tower_x = ( plot_tower_x = (
plate_origin[0] plate_origin[0]
+ ( + (
tower_dict[tower_key_list[draw_tower_index[-1]]].mileage_in_s tower_dict[tower_key_list[draw_tower_index]].mileage_in_s
- tower_dict[tower_key_list[draw_tower_index[0]]].mileage_in_s - tower_dict[tower_key_list[draw_tower_indexes[0]]].mileage_in_s
) )
/ 5 / 5
- x / 5 # 从右往左画 - x / 5 # 从右往左画
@ -358,19 +391,125 @@ class StringImpactPlate:
accumulate_altitude_off = np.sum( accumulate_altitude_off = np.sum(
[ [
tower_dict[tower_key_list[bar]].altitude_off tower_dict[tower_key_list[bar]].altitude_off
for bar in range(draw_tower_index[0] + 1, draw_tower_index[-1] + 1) for bar in range(
draw_tower_indexes[0] + 1, draw_tower_index + 1
)
] ]
) )
plot_last_tower_y = ( plot_tower_y = (
plate_origin[1] plate_origin[1]
+ accumulate_altitude_off * 2 + accumulate_altitude_off * 2
+ (last_tower_info.tower_height - last_tower_info.foundation_low + y) + (tower_info.tower_height - tower_info.foundation_low + y) * 2
* 2
).reshape(len(x), 1) ).reshape(len(x), 1)
plot_last_tower_vector = np2d_to_array( self._plot(cad, plot_tower_x, plot_tower_y)
np.hstack((plot_last_tower_x, plot_last_tower_y)) # draw_first_tower_key = tower_key_list[draw_tower_indexes[0]]
) # first_tower_info: SEntry = tower_dict[draw_first_tower_key]
self._plot(cad, plot_last_tower_x, plot_last_tower_y) # forth_reprtv_span = first_tower_info.forth_representive_span
# continouse_sheet.range("B69").value = forth_reprtv_span
# high_temperature_tension = continouse_sheet.range("L69").value
# if first_tower_info.is_tension_tower:
# forth_tower_info: SEntry = tower_dict[
# tower_key_list[draw_tower_indexes[0] + 1]
# ]
# if forth_tower_info.is_tension_tower:
# forth_tower_fitting_length = 0
# else:
# forth_tower_fitting_length = fitting.fitting_length_dic[
# forth_tower_info.fitting
# ]
# gaocha_of_first_tower = (
# (
# forth_tower_info.tower_height
# - forth_tower_info.foundation_low
# - forth_tower_fitting_length
# )
# - (first_tower_info.tower_height - first_tower_info.foundation_low)
# + forth_tower_info.altitude_off
# )
# span_of_first_tower = (
# forth_tower_info.mileage_in_s - first_tower_info.mileage_in_s
# )
# (x, y) = stringImpactExcel.read(
# wb_string_impact,
# gaocha_of_first_tower,
# span_of_first_tower,
# high_temperature_tension,
# )
# # TODO: 没有考虑断面中间有耐张塔的情况
# plot_x = (plate_origin[0] + x / 5).reshape(len(x), 1)
# plot_y = (
# plate_origin[1]
# + (first_tower_info.tower_height - first_tower_info.foundation_low + y)
# * 2
# ).reshape(len(x), 1)
# self._plot(cad, plot_x, plot_y)
# # 记录
# # TODO:记录还没有用
# record = StringImpactExcelRecord()
# record.from_tower_name = first_tower_info.tower_name
# record.fo_tower_name = forth_tower_info.tower_name
# record.span = span_of_first_tower
# record.representive_span = first_tower_info.forth_representive_span
# record.gaocha = gaocha_of_first_tower
# record.tension = high_temperature_tension
# self.excel_record_list.append(record)
# # 画右侧耐张塔的弧垂
# draw_last_tower_key = tower_key_list[draw_tower_indexes[-1]]
# last_tower_info: SEntry = tower_dict[draw_last_tower_key] # 最后一个塔位
# if last_tower_info.is_tension_tower:
# back_reprtv_span = last_tower_info.back_representive_span
# back_tower_info: SEntry = tower_dict[
# tower_key_list[draw_tower_indexes[-1] - 1]
# ]
# if back_tower_info.is_tension_tower:
# back_tower_fitting_length = 0
# else:
# back_tower_fitting_length = fitting.fitting_length_dic[
# back_tower_info.fitting
# ]
# gaocha_of_last_tower = (
# (
# back_tower_info.tower_height
# - back_tower_info.foundation_low
# - back_tower_fitting_length
# )
# - (last_tower_info.tower_height - last_tower_info.foundation_low)
# - last_tower_info.altitude_off
# )
# span_of_last_tower = (
# last_tower_info.mileage_in_s - back_tower_info.mileage_in_s
# )
# (x, y) = stringImpactExcel.read(
# wb_string_impact,
# gaocha_of_last_tower,
# span_of_last_tower,
# high_temperature_tension,
# )
# plot_last_tower_x = (
# plate_origin[0]
# + (
# tower_dict[tower_key_list[draw_tower_indexes[-1]]].mileage_in_s
# - tower_dict[tower_key_list[draw_tower_indexes[0]]].mileage_in_s
# )
# / 5
# - x / 5 # 从右往左画
# ).reshape(len(x), 1)
# accumulate_altitude_off = np.sum(
# [
# tower_dict[tower_key_list[bar]].altitude_off
# for bar in range(draw_tower_indexes[0] + 1, draw_tower_indexes[-1] + 1)
# ]
# )
# plot_last_tower_y = (
# plate_origin[1]
# + accumulate_altitude_off * 2
# + (last_tower_info.tower_height - last_tower_info.foundation_low + y)
# * 2
# ).reshape(len(x), 1)
# plot_last_tower_vector = np2d_to_array(
# np.hstack((plot_last_tower_x, plot_last_tower_y))
# )
# self._plot(cad, plot_last_tower_x, plot_last_tower_y)
def draw(self): def draw(self):
if self._cad: if self._cad:
@ -616,10 +755,10 @@ class ContinuousPlate:
array( array(
"d", "d",
[ [
(accu_mileage ) / 5 + 50, (accu_mileage) / 5 + 50,
5, 5,
0, 0,
(accu_mileage ) / 5 + 50, (accu_mileage) / 5 + 50,
10, 10,
0, 0,
], ],
@ -687,6 +826,7 @@ class ControlFile:
self._dwg_file_path, self._dwg_file_path,
self._s_file_path, self._s_file_path,
self._from_tower_name, self._from_tower_name,
self._end_tower_name,
self._excel_continuous_path, self._excel_continuous_path,
self._excel_string_weight_path, self._excel_string_weight_path,
continuous_plate.cad, continuous_plate.cad,