MovePath.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # -*- coding: UTF-8 -*-
  2. from pyautocad import Autocad, APoint
  3. # 获取点到长方形的最短距离
  4. def getDoorBeginAndModuleUsePointDistince(x0,y0,width,height,x,y):
  5. points = [(x,y),(x0-width/2,y0-height/2),(x0-width/2,y0+height/2),(x0+width/2,y0-height/2),(x0+width/2,y0+height/2),(x0,y0)]
  6. # drawPoints(points)
  7. includePoints = [(x,y)]
  8. if x<x0-width/2:
  9. if y>y0+height/2:
  10. includePoints.append((x0-width/2,y0+height/2))
  11. elif y>y0-height/2:
  12. includePoints.append((x0-width/2,y))
  13. else:
  14. includePoints.append((x0-width/2,y0-height/2))
  15. elif x<x0+width/2:
  16. if y>y0+height/2:
  17. includePoints.append((x,y0+height/2))
  18. elif y>y0-height/2:
  19. pass
  20. else:
  21. includePoints.append((x,y0-height/2))
  22. else:
  23. if y>y0+height/2:
  24. includePoints.append((x0+width/2,y0+height/2))
  25. elif y>y0-height/2:
  26. includePoints.append((x0+width/2,y))
  27. else:
  28. includePoints.append((x0+width/2,y0-height/2))
  29. return includePoints
  30. # 获取点到长方形指定点的最短距离,默认点在长方形下方
  31. def getMovePath(x0,y0,width,height,x,y,x1,y1):
  32. points = [(x,y),(x0-width/2,y0-height/2),(x0-width/2,y0+height/2),(x0+width/2,y0-height/2),(x0+width/2,y0+height/2),(x0,y0),(x1,y1)]
  33. # drawPoints(points)
  34. includePoints = [(x,y)]
  35. # 指定点在第0边;按下右上左方向
  36. if y1 == y0-height/2:
  37. includePoints.append((x1,y1))
  38. # 指定点在第1边;按下右上左方向
  39. elif x1 == x0+width/2:
  40. if x>x0+width/2:
  41. includePoints.append((x1,y1))
  42. else:
  43. includePoints.append((x0+width/2,y0-height/2))
  44. includePoints.append((x1,y1))
  45. # 指定点在第2边,暂只考虑从左边开始接近
  46. elif y1 == y0+height/2:
  47. if x<x0-width/2:
  48. includePoints.append((x0-width/2,y0+height/2))
  49. includePoints.append((x1,y1))
  50. else:
  51. includePoints.append((x0-width/2,y0-height/2))
  52. includePoints.append((x0-width/2,y0+height/2))
  53. includePoints.append((x1,y1))
  54. # 指定点在第3边
  55. else:
  56. if x<x0-width/2:
  57. includePoints.append((x1,y1))
  58. else:
  59. includePoints.append((x0-width/2,y0-height/2))
  60. includePoints.append((x1,y1))
  61. return includePoints
  62. # getDoorBeginAndModuleUsePointDistince(3300,1500,900,600,10,3000)
  63. # getDoorBeginAndModuleUsePointDistince(3300,2800,900,600,1000,3000)
  64. # getDoorBeginAndModuleUsePointDistince(3300,2800,900,600,3100,3800)
  65. # getDoorBeginAndModuleUsePointDistince(3300,2800,900,600,4000,900)
  66. # getMovePath(3300,2800,900,600,0,0,3500,2500)
  67. # getMovePath(3300,2800,900,600,0,0,2850,2700)
  68. # getMovePath(3300,2800,900,600,3000,0,2850,2700)
  69. # getMovePath(3300,2800,900,600,3300,0,3500,3100)