68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
|
|
# 计算中桩设计高程
|
||
|
|
|
||
|
|
import color
|
||
|
|
|
||
|
|
#纵断面表
|
||
|
|
sheet_longitudinal = sheet("longitudinal_profile")
|
||
|
|
|
||
|
|
#坐标计算表
|
||
|
|
sheet_coord = sheet("coord_calc")
|
||
|
|
|
||
|
|
def sgn(x):
|
||
|
|
if x > 0:
|
||
|
|
return 1
|
||
|
|
if x < 0:
|
||
|
|
return -1
|
||
|
|
return 0
|
||
|
|
|
||
|
|
def calc_elevation():
|
||
|
|
with sheet_longitudinal:
|
||
|
|
row = 0
|
||
|
|
while not cell(row, 0).empty():
|
||
|
|
row += 1
|
||
|
|
if row < 2:
|
||
|
|
print(f"{color.red}错误{color.nc}:纵断面表缺少高程设计数据")
|
||
|
|
return
|
||
|
|
max_row = row
|
||
|
|
|
||
|
|
min_chainage = cell(0, 0).value
|
||
|
|
max_chainage = cell(max_row - 1, 0).value
|
||
|
|
|
||
|
|
row = 2
|
||
|
|
d = 0
|
||
|
|
while not sheet_coord[row, 1].empty():
|
||
|
|
chainage = sheet_coord[row, 1].value
|
||
|
|
if min_chainage <= chainage <= max_chainage:
|
||
|
|
row2 = 1
|
||
|
|
while not cell(row2, 0).empty():
|
||
|
|
if chainage < cell(row2, 0).value:
|
||
|
|
break
|
||
|
|
row2 = row2 + 1
|
||
|
|
start_chainage = cell(row2 - 1, 0).value #起始里程
|
||
|
|
end_chainage = cell(row2, 0).value #终止里程
|
||
|
|
if cell(row2 - 1, 2).empty():
|
||
|
|
start_radius = None
|
||
|
|
else:
|
||
|
|
start_radius = cell(row2 - 1, 2).value * sgn(cell(row2, 4).value - cell(row2 - 1, 4).value) #起始半径
|
||
|
|
end_radius = cell(row2, 2).value * sgn(cell(row2 + 1, 4).value - cell(row2, 4).value) #终止半径
|
||
|
|
start_t = cell(row2 - 1, 6).value or 0 #起始切线长
|
||
|
|
end_t = cell(row2, 6).value #终止切线长
|
||
|
|
start_h = cell(row2 - 1, 1).value #起始高程
|
||
|
|
ratio = cell(row2, 4).value / 100 #坡度
|
||
|
|
|
||
|
|
elevation = start_h + (chainage - start_chainage) * ratio
|
||
|
|
|
||
|
|
if chainage < start_chainage + start_t:
|
||
|
|
d = (start_chainage + start_t - chainage) ** 2 / 2 / start_radius
|
||
|
|
elif chainage > end_chainage - end_t:
|
||
|
|
if end_t < 0.000001:
|
||
|
|
d = 0
|
||
|
|
else:
|
||
|
|
d = (chainage - end_chainage + end_t) ** 2 / 2 / end_radius
|
||
|
|
elevation += d
|
||
|
|
sheet_coord[row, 5].value = elevation
|
||
|
|
|
||
|
|
row += 1
|
||
|
|
|
||
|
|
calc_elevation()
|