| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | # -*- coding: UTF-8 -*-from pyautocad import Autocad, APoint# 获取点到长方形的最短距离def getDoorBeginAndModuleUsePointDistince(x0,y0,width,height,x,y):    includePoints = [(x,y)]    if x<x0-width/2:        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))    elif x<x0+width/2:        if y>y0+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
 |