g214/graphics/models.py

168 lines
8.2 KiB
Python
Raw Normal View History

2018-08-20 08:21:25 +00:00
# coding=utf-8
from __future__ import unicode_literals
from bokeh.embed import components
from bokeh.models import Label
from bokeh.plotting import figure
class SectionalPlan:
def __init__(self, title=u"", height=4, shoulder=15, foot=20, box=5, nature=15, left_foot_height=20,
left_shoulder_height=20, center_height=20, right_shoulder_height=20, right_foot_height=20,
nature_height=20):
self.x_center = 0
self.x_left_shoulder = - (shoulder / 2)
self.x_left_foot = - (foot / 2)
self.x_left_foot1 = self.x_left_foot - 5
self.x_right_shoulder = (shoulder / 2)
self.x_right_foot = (foot / 2)
self.x_right_foot1 = self.x_right_foot + 5
self.x_box = self.x_right_foot + box
self.x_nature = self.x_right_foot + box + nature
self.height = height
self.left_foot_height = left_foot_height
self.left_shoulder_height = left_shoulder_height
self.center_height = center_height
self.right_shoulder_height = right_shoulder_height
self.right_foot_height = right_foot_height
self.nature_height = nature_height
self.plot = figure(x_range=[self.x_left_foot1 - 1, self.x_nature + 1],
y_range=[-self.center_height - 5, self.height + 5],
width=950,
height=500)
self.plot.title.text = title
self.plot.title.align = "center"
self.plot.title.text_font_size = "25px"
def road_lines(self):
x = [self.x_left_foot1, self.x_left_foot, self.x_left_shoulder, self.x_center, self.x_right_shoulder,
self.x_right_foot, self.x_right_foot1]
y = [0, 0, self.height, self.height, self.height, 0, 0]
x1 = [self.x_left_foot1, self.x_left_foot + 1, self.x_left_shoulder + 1, self.x_center,
self.x_right_shoulder - 1, self.x_right_foot - 1, self.x_right_foot1]
y1 = [-1, -1, self.height - 1, self.height - 1, self.height - 1, -1, -1]
self.plot.line(x, y, line_width=4)
self.plot.line(x1, y1, line_width=4)
def components(self):
return components(self.plot)
def drilling(self):
self.plot.line([self.x_left_foot, self.x_left_foot],
[0, -self.left_foot_height],
line_dash='dashed', line_width=4, color="gray")
label = Label(x=self.x_left_foot, y=-self.left_foot_height, x_offset=-30, y_offset=-20, text=u"左坡脚孔",
render_mode='css')
self.plot.add_layout(label)
self.plot.line([self.x_left_shoulder, self.x_left_shoulder],
[self.height, -self.left_shoulder_height],
line_dash='dashed', line_width=4, color="gray")
label = Label(x=self.x_left_shoulder, y=-self.left_shoulder_height, x_offset=-30, y_offset=-40, text=u"左路肩孔",
render_mode='css')
self.plot.add_layout(label)
self.plot.line([self.x_center, self.x_center],
[self.height, -self.center_height],
line_dash='dashed', line_width=4, color="gray")
label = Label(x=self.x_center, y=-self.center_height, x_offset=-24, y_offset=-20, text=u"中心孔",
render_mode='css')
self.plot.add_layout(label)
self.plot.line([self.x_right_shoulder, self.x_right_shoulder],
[self.height, -self.right_shoulder_height],
line_dash='dashed', line_width=4, color="gray")
label = Label(x=self.x_right_shoulder, y=-self.right_shoulder_height, x_offset=-30, y_offset=-40, text=u"右路肩孔",
render_mode='css')
self.plot.add_layout(label)
self.plot.line([self.x_right_foot, self.x_right_foot],
[0, -self.right_foot_height],
line_dash='dashed', line_width=4, color="gray")
label = Label(x=self.x_right_foot, y=-self.right_foot_height, x_offset=-30, y_offset=-20, text=u"右坡脚孔",
render_mode='css')
self.plot.add_layout(label)
self.plot.line([self.x_nature, self.x_nature],
[0, -self.nature_height],
line_dash='dashed', line_width=4, color="gray")
label = Label(x=self.x_nature, y=-self.nature_height, x_offset=-40, y_offset=-20, text=u"自然孔",
render_mode='css')
self.plot.add_layout(label)
def line_box(self):
self.plot.rect(self.x_box, 1, 1.5, 2, fill_color='white', line_width=4)
label = Label(x=self.x_box, y=1, x_offset=-20, y_offset=18, text=u"集线箱", render_mode='css')
self.plot.add_layout(label)
class FloorPlan:
def __init__(self, title=u"", width=20, shoulder=15, foot=20, box=5, nature=15):
self.x_left = - (width / 2)
self.x_center = 0
self.x_right = width / 2
self.y_center = 0
self.y_shoulder = shoulder / 2
self.y_foot = foot / 2
self.y_box = -(self.y_foot + box)
self.y_nature = self.y_box - nature
self.plot = figure(x_range=[self.x_left - 1, self.x_right + 1],
y_range=[self.y_nature - 5, self.y_foot + 5],
width=950,
height=500)
self.plot.title.text = title
self.plot.title.align = "center"
self.plot.title.text_font_size = "25px"
def road_lines(self):
x = [
[self.x_left, self.x_center, self.x_right],
[self.x_left, self.x_center, self.x_right],
[self.x_left, self.x_center, self.x_right],
[self.x_left, self.x_center, self.x_right]
]
y = [
[self.y_foot, self.y_foot, self.y_foot],
[self.y_shoulder, self.y_shoulder, self.y_shoulder],
[-self.y_shoulder, -self.y_shoulder, -self.y_shoulder],
[-self.y_foot, -self.y_foot, -self.y_foot]
]
self.plot.multi_line(x, y, line_width=10)
def components(self):
return components(self.plot)
def line_box(self):
self.plot.rect(self.x_center, self.y_box, 2, 2, fill_color='white', line_width=4)
label = Label(x=self.x_center, y=self.y_box, x_offset=40, y_offset=-6, text=u"集线箱", render_mode='css')
self.plot.add_layout(label)
def drilling(self):
self.plot.circle_cross(self.x_center, self.y_foot + 1, size=10, color="#FB8072", fill_alpha=0.2, line_width=2)
label = Label(x=self.x_center, y=self.y_foot + 1, x_offset=10, y_offset=10, text=u"左坡角孔", render_mode='css')
self.plot.add_layout(label)
self.plot.circle_cross(self.x_center, self.y_shoulder, size=10, color="#FB8072", fill_alpha=0.2, line_width=2)
label = Label(x=self.x_center, y=self.y_shoulder, x_offset=10, y_offset=-22, text=u"左路肩孔", render_mode='css')
self.plot.add_layout(label)
self.plot.circle_cross(self.x_center, self.y_center, size=10, color="#FB8072", fill_alpha=0.2, line_width=2)
label = Label(x=self.x_center, y=self.y_center, x_offset=10, y_offset=-22, text=u"中心孔", render_mode='css')
self.plot.add_layout(label)
self.plot.circle_cross(self.x_center, -self.y_shoulder, size=10, color="#FB8072", fill_alpha=0.2, line_width=2)
label = Label(x=self.x_center, y=-self.y_shoulder, x_offset=10, y_offset=6, text=u"右路肩孔", render_mode='css')
self.plot.add_layout(label)
self.plot.circle_cross(self.x_center, -(self.y_foot + 1), size=10, color="#FB8072", fill_alpha=0.2,
line_width=2)
label = Label(x=self.x_center, y=-(self.y_foot + 1), x_offset=10, y_offset=-15, text=u"右坡角孔", render_mode='css')
self.plot.add_layout(label)
self.plot.circle_cross(self.x_center, self.y_nature, size=10, color="#FB8072", fill_alpha=0.2, line_width=2)
label = Label(x=self.x_center, y=self.y_nature, x_offset=10, y_offset=3, text=u"天然孔", render_mode='css')
self.plot.add_layout(label)
def link(self):
self.plot.line([self.x_center, self.x_center, self.x_center, self.x_center, self.x_center],
[self.y_foot + 1, self.y_shoulder, -self.y_shoulder, -self.y_foot, self.y_nature],
line_dash='dashed')