PlgTunDrawer.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import math
  2. from ezdxf.enums import TextEntityAlignment
  3. import core
  4. class PlgTunDrawer:
  5. def __init__(self,msp,vec_b,vec_r,vec_l,text,layer,color,from_point,to_point,width):
  6. self.msp = msp
  7. self.vec_b = vec_b
  8. self.vec_r = vec_r
  9. self.vec_l = vec_l
  10. self.text = text
  11. self.layer = layer
  12. self.color = color
  13. self.from_point = from_point
  14. self.to_point = to_point
  15. self.width = width
  16. def draw_plg_tun(self):
  17. self.draw_plg(self.vec_b,(0,0,0))
  18. self.draw_plg(self.vec_l,self.color)
  19. self.draw_plg(self.vec_r,self.color)
  20. def draw_plg(self,points,color):
  21. hatch = self.msp.add_hatch(dxfattribs={"layer":f"图层{self.layer}"})
  22. hatch.rgb = color
  23. edge_path = hatch.paths.add_edge_path()
  24. for i in range(3):
  25. edge_path.add_line(points[i], points[i+1])
  26. edge_path.add_line(points[-1], points[0])
  27. def draw_tun_text(self):
  28. length = core.distance(self.from_point, self.to_point)
  29. text_len = len(self.text) * 0.6
  30. if length * 0.8 > text_len:
  31. if self.to_point[0]>self.from_point[0]:
  32. route = core.calculate_angle_with_x_axis(self.from_point, self.to_point)
  33. else:
  34. route = core.calculate_angle_with_x_axis(self.to_point, self.from_point)
  35. angle = math.degrees(route)
  36. # if angle < -90: angle = angle+180
  37. from_point, to_point = core.parallel_line(self.from_point, self.to_point, 3.5 *self.width)
  38. tun_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  39. dxfattribs = {
  40. 'insert': tun_center, 'style': 'msyh', 'color': core.get_color_by_layer(self.layer), "layer": f"图层{self.layer}"}
  41. self.msp.add_text(text=self.text, rotation=angle, dxfattribs=dxfattribs,height=1).set_placement(tun_center, align=TextEntityAlignment.CENTER)
  42. def draw_middle_line(self):
  43. self.msp.add_line(self.from_point, self.to_point, dxfattribs={
  44. 'color': '1',
  45. 'layer': f'图层{self.layer}'
  46. })