# -*- coding: UTF-8 -*- from pyautocad import Autocad, APoint # 获取点到长方形的最短距离 def getDoorBeginAndModuleUsePointDistince(x0,y0,width,height,x,y): includePoints = [(x,y)] if xy0+height/2: includePoints.append((x0-width/2,y0+height/2)) elif y>y0-height/2: includePoints.append((x0-width/2,y)) else: includePoints.append((x0-width/2,y0-height/2)) elif xy0+height/2: includePoints.append((x,y0+height/2)) elif y>y0-height/2: pass else: includePoints.append((x,y0-height/2)) else: if y>y0+height/2: includePoints.append((x0+width/2,y0+height/2)) elif y>y0-height/2: includePoints.append((x0+width/2,y)) else: includePoints.append((x0+width/2,y0-height/2)) return includePoints # 获取点到长方形指定点的最短距离,默认点在长方形下方 def getMovePath(x0,y0,width,height,x,y,x1,y1): includePoints = [(x,y)] bottom = y0-height/2 right = x0+width/2 top = y0+height/2 left = x0-width/2 # 终点在模块最上边 if y1 == top: if y>=top: includePoints.append((x1,y1)) elif x<=left: includePoints.append((left,top)) includePoints.append((x1,y1)) elif x>=right: includePoints.append((right,top)) includePoints.append((x1,y1)) elif x+x1<=2*x0: includePoints.append((left,bottom)) includePoints.append((left,top)) includePoints.append((x1,y1)) else: includePoints.append((right,bottom)) includePoints.append((right,top)) includePoints.append((x1,y1)) elif y1 == bottom: if y<=bottom: includePoints.append((x1,y1)) elif x<=left: includePoints.append((left,bottom)) includePoints.append((x1,y1)) elif x>=right: includePoints.append((right,bottom)) includePoints.append((x1,y1)) elif x+x1<=2*x0: includePoints.append((left,top)) includePoints.append((left,bottom)) includePoints.append((x1,y1)) else: includePoints.append((right,top)) includePoints.append((right,bottom)) includePoints.append((x1,y1)) elif x1 == left: if x<=left: includePoints.append((x1,y1)) elif y>=top: includePoints.append((left,top)) includePoints.append((x1,y1)) elif y<=bottom: includePoints.append((left,bottom)) includePoints.append((x1,y1)) elif y+y1<=2*y0: includePoints.append((right,bottom)) includePoints.append((left,bottom)) includePoints.append((x1,y1)) else: includePoints.append((right,top)) includePoints.append((left,top)) includePoints.append((x1,y1)) else: if x>=right: includePoints.append((x1,y1)) elif y>=top: includePoints.append((right,top)) includePoints.append((x1,y1)) elif y<=bottom: includePoints.append((right,bottom)) includePoints.append((x1,y1)) elif y+y1<=2*y0: includePoints.append((left,bottom)) includePoints.append((right,bottom)) includePoints.append((x1,y1)) else: includePoints.append((left,top)) includePoints.append((right,top)) includePoints.append((x1,y1)) return includePoints # 获取模块可用点到另一个模块使用点间的距离 def getModuleMovePath(x10,y10,width1,height1,x1,y1,x20,y20,width2,height2,x2,y2): includePoints1 = getMovePath(x10,y10,width1,height1,x2,y2,x1,y1) includePoints2 = getMovePath(x20,y20,width2,height2,x1,y1,x2,y2) includePoints = [] for item in range(len(includePoints1)): if(item>0): includePoints.append(includePoints1[item]) for item in range(len(includePoints2)): if(item>0): includePoints.insert(0,includePoints2[item]) return includePoints