CAD利用python自动绘图——自动阵列绘制两排间距不一致的圆,避免重合

一.程序解决的问题

实现间距不同的两排阵列孔,不重叠;

二.实现步骤

1.设定两排阵列孔各自间距;
2.确定两排阵列孔最小间距,避免重叠并保持适当距离;
3.先画好第一排孔,在画第二排孔,画第二排孔时,每次都判断一次距离最近的第二排孔是否已经画好,或者间距是否超出了间距,而跳出此次循环,进行下一次循环;
4.画孔时,先画间距较大的孔

三.代码

Distance3 = 300             #第一排孔距300mm,此圆直径10mm
Distance10=120              #第二排孔距120mm,此圆直径4mm
Distance11=23               #两排孔距离23mm
height1 =15
height2 =15
BendsAllowance1 =1.8
Distance9=59 
Distance2 = 10 
point_x =150
lenth =1560
width=587
#上述常量可自己定义,或根据需要取消

# 计算指定长度长度需要打多少第一排孔,round实现四舍五入
    num1 = round((lenth - Distance9 * 2) / Distance3)
    # 当长度小于lenth - Distance9 * 2时,中间不加螺钉孔
    if num1==0 or num1==1:
        lenth1= (lenth - Distance9 * 2)
        num1=1
    else:
        lenth1 = (lenth - Distance9 * 2) / num1
    # 计算指定长度长度需要打多少第二排孔
    num2 = int((lenth - Distance9 * 2) / (Distance10))
    if num2 ==0 or num2==1:
        distan2 = (lenth - Distance9 * 2)
        num2=1
    else:
        distan2 = (lenth - Distance9 * 2) / num2

#画第一排第一个圆
	distance4 =  height1 + height2 - BendsAllowance1 * 2 + Distance9
	center1, radius1 = vtpnt(distance4, point_x +width / 2 - Distance2 - BendsAllowance1 / 2, 0), 5
    circleObj_5 = msp.AddCircle(center1, radius1)

# 画第一排第一个圆并阵列第一排圆
	numberOfRows = 2
	numberOfColumns = num1+1
	numberOfLevels = 1
	# 螺钉过孔行间距
	distanceBwtnRows_1 = -(width / 2 - Distance2 - BendsAllowance1 / 2) * 2
	distanceBwtnColumns = lenth1
	distanceBwtnLevels = 1
	
	retObj_1 = circleObj_5.ArrayRectangular(numberOfRows, numberOfColumns, numberOfLevels,
	                                        distanceBwtnRows_1, distanceBwtnColumns, distanceBwtnLevels)

 # 画第二排第一个圆
 	numberOfRows = 2
    numberOfColumns = num2+1
    numberOfColumns_1=1
    numberOfColumns_2 = 2
    numberOfLevels = 1
    distanceBwtnRows = -(width / 2 + height1 + Distance2 - BendsAllowance1 * 2) * 2
    # 第一个铆钉孔行间距
    distanceBwtnRows_1 = -(width / 2 + height1 + Distance2 - BendsAllowance1 * 2-Distance4) * 2
 #循环判断第二排圆与第一排圆的距离,避免相互干涉
    for i in range(1,num2):
        for j in range(1,num1+1):
            print(abs((j*lenth1)-(i*distan2+Distance11)))
            if abs((j*lenth1)-(i*distan2+Distance11))>Distance5:
                print(abs(j*lenth1-(i*distan2+Distance11)))
                # 当第一排圆距离小于第二排圆距离时及间距大于lenth1时说明满足需求的孔已经画了,开始画下一个孔
                if j*lenth1-(i*distan2)<0 or abs(j*lenth1-(i*distan2+Distance11))>lenth1:
                    continue
                # 第二排孔间距
                distanceBwtnColumns = distan2*i
                # 画第二排第一个圆
                center3_1, radius3_1 = vtpnt(distance4 + Distance11,
                                             point_x + width / 2 + height1 + Distance2 - BendsAllowance1 * 2,
                                             0), 2
                circleObj_8 = msp.AddCircle(center3_1, radius3_1)
                # 阵列第二排圆
                retObj_2 = circleObj_8.ArrayRectangular(numberOfRows, numberOfColumns_2, numberOfLevels,
                                                        distanceBwtnRows, distanceBwtnColumns, distanceBwtnLevels)

            else:
                # 当第一排圆与第二排圆间距小于8mm时候,把第二排圆增加16mm
                distanceBwtnColumns = distan2 * i+16
                #画第二排第一个圆
                center3_1, radius3_1 = vtpnt(distance4 + Distance11,
                                             point_x + width / 2 + height1 + Distance2 - BendsAllowance1 * 2,
                                             0), 2
                circleObj_8 = msp.AddCircle(center3_1, radius3_1)
                # 阵列第二排圆
                retObj_2 = circleObj_8.ArrayRectangular(numberOfRows, numberOfColumns_2, numberOfLevels,
                                                        distanceBwtnRows, distanceBwtnColumns, distanceBwtnLevels)
                break

四.结果

两排圆的起点距离不一致
重新结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值