首先感谢大佬Hulunbuir的pyautocad教程。

教程链接:https://blog.csdn.net/Hulunbuir/article/details/97395152

说一下配置吧,pycharm+anaconda3.5.1+Python3.7 AutoCAD2007。
把所有设计用到的信息先放到一个表格里,怕忘。

导包

import math
import win32com.client
import xlrd
from pyautocad import Autocad, APoint 

读取数据,命名什么的就算了吧

ww = xlrd.open_workbook(u"c:/users/default/documents/foracad1812060107.xls")
she1 = ww.sheet_by_index(0)
cells = she1.col_values(1)mna = str(cells[1])  # *********姓名*****
fit1 = str(cells[2])  # *******专业*****
class1 = str(cells[3])  # ******班级*****
num1 = str(cells[4])  # *******学号*****
kn = int(cells[5])  # ***********换热器类型*****
knn = int(cells[5])  # **********换热器类型*****
kind1 = int(cells[5])  # *********换热器类型*****
sww = str(int(cells[6]))  # *************换热管外径**********
smm = str(cells[7])  # ******************换热管厚度**********
po1 = int(cells[8])  # ********************比例控制**********
po11 = int(cells[8])  # *******************比例控制**********jij = int(cells[9])  # *****************************管程数************
jij1 = int(cells[9])  # ****************************管程数************
long_all = str((cells[10]))  # *************************管长**************
pip_num = str(int(cells[11]))  # **********************管子根数***********
pip_line = str((cells[12]))  # *************************换热管排列方式******
pip_rotate = str((cells[13]))  # *************************换热管排列类型******
pip_cent = str((cells[14]))  # *************************中心距控制*********
sdo1 = str((cells[15]))  # *************************外壳直径***********
shell_thick = str(cells[16])  # ***************************外壳厚度***********ha_h = str((cells[17]))  # ******************************左侧封头高度*****************
ra_h = str((cells[18]))  # ******************************右侧封头高度*****************
xxd1 = str((cells[19]))  # ******************************管程流体进出口内径************
xxd2 = str((cells[20]))  # ******************************壳程流体进出口内径************link_h = str((cells[21]))  # ******************************流体进出口接头高度************
flange1 = str((cells[22]))  # ******************************法兰宽度********************
xxg = str(int(cells[23]))  # ****************************折流挡板数*******************
xgg = str(int(cells[24]))  # ****************************折流挡板间距*****************cold1 = str(cells[25])  # ******冷流名称***********
hot1 = str(cells[26])  # *******热流名称***********
Wc = str((cells[27]))  # *******冷流的质量流量******
Wh = str(cells[28])  # *********热流的质量流量******PP = str(cells[29])  # ***********************公称压力********************
SN = str(cells[30])  # ********************公称换热面积*****************
time2 = str(cells[31])  # ********************出图日期********************po0 = float(po1)  # **************************比例控制*******************XD1 = float(xxd1) / po0  # **************管程流体进出口直径****************
XD2 = float(xxd2) / po0  # **************壳程流体进出口直径****************XEH = float(flange1) / po0  # *******************************法兰高度*********************
pip_thick = float(smm)  # *************************************换热管厚度*******************
DO1 = float(sdo1)  # *************************************壳径控制*********************
b_ke = float(shell_thick)  # ************************************外壳壁厚*********************
distance_baffle = float(xgg)  # **************************************折流挡板间距******************
pip_center = float(pip_cent)
XZH = float(ra_h)  # *********************************************外壳封头圆柱高度***************
XDH = float(link_h) / po0  # ***************************************壳程流体进出口高度**************
pip_round = float(sww)  # *********************************************换热管外径********************
XAH = float(ha_h)  # *********************************************左侧封头圆柱高度***************break_1 = 220  # ********************************打断线左端点横坐标***************
zo = 5  # ************************************打断线左端点横坐标***************
thin_bar = 1  # **********************************法兰等连接处缝隙宽度*************
amm = 50 / po0  # ****************************勾圈与封头外壳间距***************

选择尺寸基准,不然图放哪。我们要求的是A1图纸横版高度420mm,就基于300mm处作轴线画吧,下面还有截面图。

# 尺寸基准
cen1 = 300
cen2 = 150
XC2 = 380  # ****************************************外壳法兰横坐标*******************
XC1 = 90  # *****************************************管程流体进出口中心线横坐标**********
XK1 = XC2 - 2 * XD1  # ******************************壳程流体出口中心线横坐标************
XB2 = XC2 + XZH / po0  # ****************************封头椭圆弧圆心横坐标***************
XB1 = XC1 - XAH * 0.5 / po0 - 0.5 * XD1  # **********封头椭圆弧圆心横坐标***************
XE1 = XC1 + XAH * 0.5 / po0 + 0.5 * XD1  # **********左侧管箱右端点横坐标***************
XF1 = XE1 + 2 * XD1  # ******************************壳程流体进口中心线横坐标************
#图纸比例
dis_baffle = distance_baffle / po0
R10 = DO1 * 0.5 / po0
bb_ke = b_ke / po0
downO = cen1 - R10
upO = cen1 + R10
downs = cen1 - R10
ups = cen1 + R10
XC3 = XC2 + 1.5 * XZH / po0 + R10 + XEH + 5 * bb_ke
XD11 = XD1 / 2
XD21 = XD2 / 2
XYH = XEH - 1.5 * bb_ke
XM1 = XC3 + 3 * R10
up9 = upO + XEH - XYH
down9 = downO - XEH + XYH
R11 = up9 - cen1
R12 = up9 - 2 * bb_ke - thin_bar - cen1
St1 = XF1 + XD21 + bb_ke
St2 = XK1 - XD21 - bb_ke
bas3 = XC2 - thin_bar

连接CAD

# 连接AutoCAD参数配置wd = win32com.client.Dispatch("AutoCAD.Application")
a_cad = Autocad(create_if_not_exists=True)
raw_Obj = a_cad.ActiveDocument.Application.Documents.Add("")

设置上图层,总不能一遍一遍设置线条粗细吧

#  图层1
LayerObj = a_cad.ActiveDocument.Layers.Add("1_Layer")
a_cad.ActiveDocument.ActiveLayer = LayerObj
ClrNum = 7
LayerObj.color = ClrNum
LayerObj. Lineweight = 15
#  图层2
LayerObj2 = a_cad.ActiveDocument.Layers.Add("2_Layer")
a_cad.ActiveDocument.ActiveLayer = LayerObj2
ClrNum = 7
LayerObj2.color = ClrNum
LayerObj2.Lineweight = 40
#  图层3
LayerObj3 = a_cad.ActiveDocument.Layers.Add("center_l")
a_cad.ActiveDocument.ActiveLayer = LayerObj3
ClrNum = 7
LayerObj3.color = ClrNum
a_cad.ActiveDocument.Linetypes.Load("CENTER2", "acadiso.lin")
LayerObj3.Linetype = "CENTER2"
LayerObj3.Lineweight = 15# 画图时记得调回所用图层。
# 方法:a_cad.ActiveDocument.ActiveLayer = LayerObj/LayerObj2/LayerObj3

自建一些用到的块

def sqk(lx, ly, rx, ry):  # 矩形绘制s1 = APoint(lx, ly)s2 = APoint(lx, ry)s3 = APoint(rx, ry)s4 = APoint(rx, ly)a_cad.model.AddLine(s1, s2)a_cad.model.AddLine(s2, s3)a_cad.model.AddLine(s3, s4)a_cad.model.AddLine(s4, s1)def liy(x, c, d):  # 竖线bp = APoint(x, c)ep = APoint(x, d)lm = a_cad.model.AddLine(bp, ep)return lmdef lix(a, b, h):  # 横线bp = APoint(a, h)ep = APoint(b, h)lm = a_cad.model.AddLine(bp, ep)return lmdef cyc(x, y, r):center = APoint(x, y)  # 圆心c = a_cad.model.AddCircle(center, r)return cdef ell(x, y, add_x, add_y, a, b, from1, to1):  # 椭圆弧center = APoint(x, y)  # 椭圆中心majAxis = APoint(add_x, add_y)  # majAxis为主轴(长轴)端点相对于椭圆中心的坐标增量。ellObj = a_cad.model.AddEllipse(center, majAxis, b / a)ellObj.startAngle = (from1 - 90) * (3.14 / 180)ellObj.endAngle = (to1 - 90) * (3.14 / 180)return ellObjdef a_cyc(x, y, r, bd, ed):center = APoint(x, y)  # 圆心startAngle = math.radians(bd)  # 始边角度(弧度制)endAngle = math.radians(ed)  # 终边角度(弧度制)rearObj = a_cad.model.AddArc(center, r, startAngle, endAngle)return rearObj# 正方形错列管距
def sqq(x):qw = pow(x, 2)mkk = pow(qw * 0.5, 0.5)return mkk

开始画图框技术参数表

# 页边框
a_cad.ActiveDocument.ActiveLayer = LayerObj
sqk(0, 0, 594, 420)
# 标题栏边框
sqk(454, 10, 519, 66)
lix(519, 584, 66)
list_u = [18, 26, 34, 42, 50]
for i in list_u:lix(454, 584, i)lix(170, 450, i)
list_i = [210, 250, 290, 330, 370, 410]
for i in list_i:liy(i, 10, 50)
liy(470, 10, 50)
liy(544, 10, 50)
# 换热器指标栏
sqk(170, 10, 450, 66)
liy(287, 10, 50)# 打断线
liy(break_1, upO + 2 * XEH, downO - 2 * XEH)
liy(break_1 + zo, upO + 2 * XEH, downO - 2 * XEH)# 标题栏文字
list1 = ['设计', '制图', '专业', '班级', '学号']
list2 = [mna, mna, fit1, class1, num1]
list3 = ['课程名称', '比例', '图幅', '第1张', '日期']
list4 = ['化工原理课程设计', '1:' + str(po1), 'A2', '共1张', time2]list5 = ['', '流体名称', '流体流量kG/h', '进口温度/ C', '出口温度/ C']
list6 = ['管程', cold1, '%.2f' % float(Wc), '20', '45']
list7 = ['壳程', hot1, '%.2f' % float(Wh), '115', '70']list8 = ['外壳直径', '公称压力', '公称面积/mxm', '管程数', '折流挡板数']
list9 = [sdo1, PP, SN, jij, xxg]
list10 = ['列管尺寸/mm', '管长/mm', '根数', '排列方式', '正列/错列']
list11 = [sww + 'x' + smm, long_all, pip_num, pip_line, pip_rotate]
axa = [43, 35, 27, 19, 11]def txt_in_line_y(x, B):for _ in B:a_cad.iter_objects('Text')a_cad.model.AddText("%s" % B[0], APoint(x, 43), 5)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % B[1], APoint(x, 35), 5)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % B[2], APoint(x, 27), 5)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % B[3], APoint(x, 19), 5)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % B[4], APoint(x, 11), 5)mk = sqq(pip_center)
mkd = (2 * mk) / po0txt_in_line_y(459, list1)
txt_in_line_y(472, list2)
txt_in_line_y(520, list3)
txt_in_line_y(545, list4)
txt_in_line_y(171, list5)
txt_in_line_y(211, list6)
txt_in_line_y(251, list7)
txt_in_line_y(291, list8)
txt_in_line_y(331, list9)
txt_in_line_y(371, list10)
txt_in_line_y(411, list11)tb = '换  热  器  技  术  特  性  表'
a_cad.iter_objects('Text')
a_cad.model.AddText("%s" % tb, APoint(210, 53), 9)
tc = 'o'
a_cad.iter_objects('Text')
a_cad.model.AddText("%s" % tc, APoint(192, 15), 2)
a_cad.model.AddText("%s" % tc, APoint(192, 23), 2)
ssj = '浮头式'
ssen = 'F'a_cad.iter_objects('Text')
a_cad.model.AddText("1:1", APoint(XC2 + mk - 15, cen2 - 3 * mk), 15)ssj1 = '固定管板'
ssen1 = 'G'swwa1 = 'IV'
swwa2 = 'II'
t3 = ssj + '换热器装配图'  # ******************************************图名*****************
t4 = ssen + '-' + sdo1 + swwa1 + '-' + sww + '-' + SN  # **********型号*****************
t5 = ssj1 + '换热器装配图'  # ******************************************图名*****************
t6 = ssen1 + '-' + sdo1 + swwa2 + '-' + sww + '-' + SN  # **********型号*****************
t7 = ssen + '-' + sdo1 + swwa2 + '-' + sww + '-' + SN  # **********型号*****************
t8 = ssen1 + '-' + sdo1 + swwa1 + '-' + sww + '-' + SN  # **********型号*****************if kn == 1:if jij1 == 2:a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t3, APoint(460, 53), 8)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t7, APoint(521, 53), 5)
if kn == 0:if jij1 == 2:a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t5, APoint(460, 53), 8)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t6, APoint(521, 53), 5)
if kn == 1:if jij1 == 4:a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t3, APoint(460, 53), 8)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t4, APoint(521, 53), 5)
if kn == 0:if jij1 == 4:a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t5, APoint(460, 53), 8)a_cad.iter_objects('Text')a_cad.model.AddText("%s" % t8, APoint(521, 53), 5)#  图层2
LayerObj2 = a_cad.ActiveDocument.Layers.Add("2_Layer")
a_cad.ActiveDocument.ActiveLayer = LayerObj2
ClrNum = 7
LayerObj2.color = ClrNum
LayerObj2.Lineweight = 40
sqk(10, 10, 584, 410)

建好的尺寸基准画出来。

#  图层3
LayerObj3 = a_cad.ActiveDocument.Layers.Add("center_l")
a_cad.ActiveDocument.ActiveLayer = LayerObj3
ClrNum = 7
LayerObj3.color = ClrNum
a_cad.ActiveDocument.Linetypes.Load("CENTER2", "acadiso.lin")
LayerObj3.Linetype = "CENTER2"
LayerObj3.Lineweight = 15lix(XB1 - 2 * XAH / po0, break_1, cen1)
lix(break_1 + zo, XM1, cen1)
liy(XC1, cen1 + R10 + XDH + 10, cen1 - R10 - XDH - 10)
liy(XF1, upO - bb_ke, upO + XDH + 10)
liy(XK1, downO + bb_ke, downO - XDH - 10)
liy(XC3, cen1 + R10 + XDH + 10, cen1 - R10 - XDH - 10)

开始画图

LayerObj4 = a_cad.ActiveDocument.Layers.Add("4_Layer")
a_cad.ActiveDocument.ActiveLayer = LayerObj4
ClrNum = 7
LayerObj4.color = ClrNum
LayerObj4.Lineweight = pip_thick * 10q1 = lix(XC1 + XD11 + bb_ke, XE1 - bb_ke, downO)  # 左侧封头右下部分
q2 = lix(XC1 + XD11, XE1, downO + bb_ke)
liy(XE1 - bb_ke, downO, downO - XEH)
liy(XE1, downO + bb_ke, downO - XEH)
lix(XE1 - bb_ke, XE1, downO - XEH)q3 = lix(XC1 + XD11 + bb_ke, XE1 - bb_ke, upO)  # 右上部分
q4 = lix(XC1 + XD11, XE1, upO - bb_ke)
liy(XE1 - bb_ke, upO, upO + XEH)
liy(XE1, upO - bb_ke, upO + XEH)
lix(XE1 - bb_ke, XE1, upO + XEH)lix(XB1, XC1 - XD11 - bb_ke, downO)  # 左下部分
lix(XB1, XC1 - XD11, downO + bb_ke)lix(XB1, XC1 - XD11 - bb_ke, upO)  # 左上部分
lix(XB1, XC1 - XD11, upO - bb_ke)liy(XC1 - XD11, upO - bb_ke, upO + XDH)  # 左上
liy(XC1 - XD11 - bb_ke, upO, upO + XDH - bb_ke)lix(XC1 - XD11, XC1 - XD11 - 2 * bb_ke, upO + XDH)
liy(XC1 - XD11 - 2 * bb_ke, upO + XDH, upO + XDH - bb_ke)
lix(XC1 - XD11 - bb_ke, XC1 - XD11 - 2 * bb_ke, upO + XDH - bb_ke)liy(XC1 - XD11, downO + bb_ke, downO - XDH)  # left down
liy(XC1 - XD11 - bb_ke, downO, downO - XDH + bb_ke)lix(XC1 - XD11, XC1 - XD11 - 2 * bb_ke, downO - XDH)
liy(XC1 - XD11 - 2 * bb_ke, downO - XDH, downO - XDH + bb_ke)
lix(XC1 - XD11 - bb_ke, XC1 - XD11 - 2 * bb_ke, downO - XDH + bb_ke)
lix(XC1 - XD11, XC1 + XD11, upO + XDH)
lix(XC1 - XD11, XC1 + XD11, downO - XDH)# 外壳 右半边
liy(XC1 + XD11, upO - bb_ke, upO + XDH)
liy(XC1 + XD11 + bb_ke, upO, upO + XDH - bb_ke)lix(XC1 + XD11, XC1 + XD11 + 2 * bb_ke, upO + XDH)
liy(XC1 + XD11 + 2 * bb_ke, upO + XDH, upO + XDH - bb_ke)
lix(XC1 + XD11 + bb_ke, XC1 + XD11 + 2 * bb_ke, upO + XDH - bb_ke)liy(XC1 + XD11, downO + bb_ke, downO - XDH)
liy(XC1 + XD11 + bb_ke, downO, downO - XDH + bb_ke)lix(XC1 + XD11, XC1 + XD11 + 2 * bb_ke, downO - XDH)
liy(XC1 + XD11 + 2 * bb_ke, downO - XDH, downO - XDH + bb_ke)
lix(XC1 + XD11 + bb_ke, XC1 + XD11 + 2 * bb_ke, downO - XDH + bb_ke)ell1 = ell(XB1, cen1, 0, R10, R10, 0.5 * R10, 89, 271)  # 封头顶
ell(XB1, cen1, 0, R10 - bb_ke, R10 - bb_ke, 0.5 * R10 - bb_ke, 89, 271)# 法兰接口bas = XE1 + thin_bar
liy(bas, upO, downO)
lix(bas, bas + bb_ke, downO - XEH)
lix(bas, bas + bb_ke, upO + XEH)
liy(bas, downO + bb_ke, downO - XEH)
liy(bas + bb_ke, downO + bb_ke, downO - XEH)
liy(bas, upO - bb_ke, upO + XEH)
liy(bas + bb_ke, upO - bb_ke, upO + XEH)
# 左半壳
bas2 = XE1 + 2 * thin_bar + bb_ke
liy(bas2, upO - bb_ke, upO + XEH)
liy(bas2 + bb_ke, upO, upO + XEH)
liy(bas2, downO + bb_ke, downO - XEH)
liy(bas2 + bb_ke, downO, downO - XEH)
lix(bas2, bas2 + bb_ke, upO + XEH)
lix(bas2, bas2 + bb_ke, downO - XEH)lix(bas2, XF1 - XD21, upO - bb_ke)
lix(bas2, break_1, downO + bb_ke)
lix(bas2 + bb_ke, XF1 - XD21 - bb_ke, upO)
lix(bas2 + bb_ke, break_1, downO)liy(XF1 - XD21, upO - bb_ke, upO + XDH)  # 左上
liy(XF1 - XD21 - bb_ke, upO, upO + XDH - bb_ke)
lix(XF1 - XD21, XF1 - XD21 - 2 * bb_ke, upO + XDH)
liy(XF1 - XD21 - 2 * bb_ke, upO + XDH, upO + XDH - bb_ke)
lix(XF1 - XD21 - bb_ke, XF1 - XD21 - 2 * bb_ke, upO + XDH - bb_ke)
lix(XF1 - XD21, XF1 + XD21, upO + XDH)
liy(XF1 + XD21, upO - bb_ke, upO + XDH)  # 右上
liy(XF1 + XD21 + bb_ke, upO, upO + XDH - bb_ke)
lix(XF1 + XD21, XF1 + XD21 + 2 * bb_ke, upO + XDH)
liy(XF1 + XD21 + 2 * bb_ke, upO + XDH, upO + XDH - bb_ke)
lix(XF1 + XD21 + bb_ke, XF1 + XD21 + 2 * bb_ke, upO + XDH - bb_ke)lix(XF1 + XD21, break_1, upO - bb_ke)
lix(XF1 + XD21 + bb_ke, break_1, upO)# 外壳
if knn == 1:lix(XC2, XC2 + bb_ke, up9 + XYH)  # 上半部分liy(XC2, up9 + XYH, up9 - bb_ke)liy(XC2 + bb_ke, up9 + XYH, up9)lix(XC2, XB2, up9 - bb_ke)lix(XC2 + bb_ke, XB2, up9)lix(XC2, XC2 + bb_ke, down9 - XYH)  # 下半部分liy(XC2, down9 - XYH, down9 + bb_ke)liy(XC2 + bb_ke, down9 - XYH, down9)lix(XC2, XB2, down9 + bb_ke)lix(XC2 + bb_ke, XB2, down9)ell(XB2, cen1, 0, R11, R11, 0.5 * R11, -90.25, 90.25)  # 穹顶封头 外壳ell(XB2, cen1, 0, R11 - bb_ke, R11 - bb_ke, 0.5 * R11 - bb_ke, -90.25, 90.25)# 挡板lix(XC2, XC2 + bb_ke, up9 - bb_ke - thin_bar)lix(XC2, XC2 + bb_ke, down9 + bb_ke + thin_bar)liy(XC2 + bb_ke, up9 - bb_ke - thin_bar, down9 + bb_ke + thin_bar)# 勾圈lix(XC2 + bb_ke + thin_bar, XC2 + bb_ke + thin_bar + bb_ke, up9 - bb_ke - thin_bar)  # 上半部分liy(XC2 + bb_ke + thin_bar, up9 - bb_ke - thin_bar, up9 - bb_ke - thin_bar - 2 * bb_ke)liy(XC2 + bb_ke + thin_bar + bb_ke, up9 - bb_ke - thin_bar, up9 - bb_ke - thin_bar - 2 * bb_ke)lix(XC2 + bb_ke + thin_bar, XC2 + bb_ke + thin_bar + bb_ke, down9 + bb_ke + thin_bar)  # 下半部分liy(XC2 + bb_ke + thin_bar, down9 + bb_ke + thin_bar, down9 + bb_ke + thin_bar + 2 * bb_ke)liy(XC2 + bb_ke + thin_bar + bb_ke, down9 + bb_ke + thin_bar, down9 + bb_ke + thin_bar + 2 * bb_ke)ell(XC2 + bb_ke + thin_bar, cen1, 0, R12, R12, 0.5 * R12, -90.25, 90.25)  # 穹顶封头 勾圈ell(XC2 + bb_ke + thin_bar, cen1, 0, R12 - bb_ke, R12 - bb_ke, 0.5 * R12 - bb_ke, -90.25, 90.25)lix(XC2 + bb_ke, XC2 + bb_ke + 0.5 * R12, cen1 + 0.5 * bb_ke)lix(XC2 + bb_ke, XC2 + bb_ke + 0.5 * R12, cen1 - 0.5 * bb_ke)
if knn == 0:lix(XC2, XC2 + bb_ke, upO + XEH)  # 上半部分liy(XC2, upO + XEH, upO - bb_ke)liy(XC2 + bb_ke, upO + XEH, upO)lix(XC2, XB2, upO - bb_ke)lix(XC2 + bb_ke, XB2, upO)lix(XC2, XC2 + bb_ke, downO - XEH)  # 下半部分liy(XC2, downO - XEH, downO + bb_ke)liy(XC2 + bb_ke, downO - XEH, downO)lix(XC2, XB2, downO + bb_ke)lix(XC2 + bb_ke, XB2, downO)liy(XC2 + bb_ke, upO, downO)ell(XB2, cen1, 0, R10, R10, 0.5 * R10, -90.25, 90.25)  # 穹顶封头 外壳ell(XB2, cen1, 0, R10 - bb_ke, R10 - bb_ke, 0.5 * R10 - bb_ke, -90.25, 90.25)# 打断线往右if kind1 == 1:lix(bas3, bas3 - bb_ke, upO + XEH)  # 上半部分liy(bas3, upO + XEH, upO - bb_ke)liy(bas3 - bb_ke, upO, upO + XEH)lix(bas3, break_1 + zo, upO - bb_ke)lix(bas3 - bb_ke, break_1 + zo, upO)lix(bas3, bas3 - bb_ke, downO - XEH)  # 下半部分liy(bas3, downO - XEH, downO + bb_ke)liy(bas3 - bb_ke, downO, downO - XEH)lix(bas3, XK1 + XD21, downO + bb_ke)lix(XK1 - XD21, break_1 + zo, downO + bb_ke)lix(bas3 - bb_ke, XK1 + XD21 + bb_ke, downO)lix(XK1 - XD21 - bb_ke, break_1 + zo, downO)liy(XK1 - XD21, downO + bb_ke, downO - XDH)  # 左下liy(XK1 - XD21 - bb_ke, downO, downO - XDH + bb_ke)lix(XK1 - XD21, XK1 - XD21 - 2 * bb_ke, downO - XDH)liy(XK1 - XD21 - 2 * bb_ke, downO - XDH, downO - XDH + bb_ke)lix(XK1 - XD21 - bb_ke, XK1 - XD21 - 2 * bb_ke, downO - XDH + bb_ke)lix(XK1 - XD21, XK1 + XD21, downO - XDH)liy(XK1 + XD21, downO + bb_ke, downO - XDH)  # 右下liy(XK1 + XD21 + bb_ke, downO, downO - XDH + bb_ke)lix(XK1 + XD21, XK1 + XD21 + 2 * bb_ke, downO - XDH)liy(XK1 + XD21 + 2 * bb_ke, downO - XDH, downO - XDH + bb_ke)lix(XK1 + XD21 + bb_ke, XK1 + XD21 + 2 * bb_ke, downO - XDH + bb_ke)if kind1 == 0:XL1 = XK1 - 6 * mkd - 2 * bb_keXD211 = 0.8 * XD21lix(bas3, bas3 - bb_ke, upO + XEH)  # 上半部分liy(bas3, upO + XEH, upO - bb_ke)liy(bas3 - bb_ke, upO, upO + XEH)lix(bas3, XL1, upO - bb_ke)lix(bas3 - bb_ke, XL1, upO)lix(break_1 + zo, XL1 - XD2, upO)  # 补偿圈上半部分lix(break_1 + zo, XL1 - XD2, upO - bb_ke)ell(XL1 - XD21, upO - bb_ke, XD211, 0, XD211, 0.5 * XD211, 90, 270)ell(XL1 - XD21, upO - bb_ke, XD211 + bb_ke, 0, XD211 + bb_ke, 0.5 * XD211 + bb_ke, 90, 270)lix(bas3, bas3 - bb_ke, downO - XEH)  # 下半部分liy(bas3, downO - XEH, downO + bb_ke)liy(bas3 - bb_ke, downO, downO - XEH)lix(bas3, XK1 + XD21, downO + bb_ke)lix(bas3 - bb_ke, XK1 + XD21 + bb_ke, downO)lix(XK1 - XD21 - bb_ke, XL1, downO)lix(XK1 - XD21, XL1, downO + bb_ke)lix(break_1 + zo, XL1 - XD2, downO)  # 补偿圈下半部分lix(break_1 + zo, XL1 - XD2, downO + bb_ke)ell(XL1 - XD21, downO + bb_ke, XD211, 0, XD211, 0.5 * XD211, -90, 90)ell(XL1 - XD21, downO + bb_ke, XD211 + bb_ke, 0, XD211 + bb_ke, 0.5 * XD211 + bb_ke, -90, 90)liy(XK1 - XD21, downO + bb_ke, downO - XDH)  # 左下liy(XK1 - XD21 - bb_ke, downO, downO - XDH + bb_ke)lix(XK1 - XD21, XK1 - XD21 - 2 * bb_ke, downO - XDH)liy(XK1 - XD21 - 2 * bb_ke, downO - XDH, downO - XDH + bb_ke)lix(XK1 - XD21 - bb_ke, XK1 - XD21 - 2 * bb_ke, downO - XDH + bb_ke)lix(XK1 - XD21, XK1 + XD21, downO - XDH)liy(XK1 + XD21, downO + bb_ke, downO - XDH)  # 右下liy(XK1 + XD21 + bb_ke, downO, downO - XDH + bb_ke)lix(XK1 + XD21, XK1 + XD21 + 2 * bb_ke, downO - XDH)liy(XK1 + XD21 + 2 * bb_ke, downO - XDH, downO - XDH + bb_ke)lix(XK1 + XD21 + bb_ke, XK1 + XD21 + 2 * bb_ke, downO - XDH + bb_ke)# 底座
liy(XF1 + 2 * XD21 + bb_ke, downO, downO - 1.5 * XDH)
liy(XF1 + 2 * XD21 + 2 * bb_ke, downO, downO - 1.5 * XDH)
sqk(XF1 + XD21 + bb_ke, downO - 1.5 * XDH - bb_ke, XF1 + 3 * XD21 + bb_ke, downO - 1.5 * XDH)
liy(XK1 - 2 * XD21 - bb_ke, downO, downO - 1.5 * XDH)
liy(XK1 - 2 * XD21 - 2 * bb_ke, downO, downO - 1.5 * XDH)
sqk(XK1 - 3 * XD21 - bb_ke, downO - 1.5 * XDH - bb_ke, XK1 - XD21 - bb_ke, downO - 1.5 * XDH)def asin(x, y):c46 = x / yc45 = math.asin(c46)c44 = math.degrees(c45)return c44# 换热管list_n = [cen1, cen1 + mkd, cen1 + 2 * mkd, cen1 + 3 * mkd, cen1 + 4 * mkd, cen1 + 5 * mkd, cen1 + 6 * mkd,cen1 + 7 * mkd, cen1 + 8 * mkd]
list_d = [cen1, cen1 - mkd, cen1 - 2 * mkd, cen1 - 3 * mkd, cen1 - 4 * mkd, cen1 - 5 * mkd, cen1 - 6 * mkd,cen1 - 7 * mkd, cen1 - 8 * mkd, cen1 - 9 * mkd, cen1 - 10 * mkd, cen1 - 11 * mkd]
for i in list_n:if i + bb_ke + pip_round / po0 < up9 - amm - bb_ke:lix(XC2 + bb_ke, break_1 + zo, i + bb_ke)lix(XE1 + thin_bar, break_1, i + bb_ke)liy(XC2, i + bb_ke, i + bb_ke - mkd + pip_round / po0)liy(XC2 - thin_bar, i + bb_ke, i + bb_ke - mkd + pip_round / po0)liy(XE1 + thin_bar + bb_ke, i + bb_ke, i + bb_ke - mkd + pip_round / po0)for i in list_n:if i + bb_ke + pip_round / po0 < up9 - amm - bb_ke:lix(XC2 + bb_ke, break_1 + zo, i + bb_ke + pip_round / po0)lix(XE1 + thin_bar, break_1, i + bb_ke + pip_round / po0)for i in list_d:if i - bb_ke - pip_round / po0 > down9 + amm + bb_ke:lix(XC2 + bb_ke, break_1 + zo, i - bb_ke)lix(XE1 + thin_bar, break_1, i - bb_ke)liy(XC2, i - bb_ke, i - bb_ke + mkd - pip_round / po0)liy(XC2 - thin_bar, i - bb_ke, i - bb_ke + mkd - pip_round / po0)liy(XE1 + thin_bar + bb_ke, i - bb_ke, i - bb_ke + mkd - pip_round / po0)for i in list_d:if i - bb_ke - pip_round / po0 > down9 + amm + bb_ke:lix(XC2 + bb_ke, break_1 + zo, i - bb_ke - pip_round / po0)lix(XE1 + thin_bar, break_1, i - bb_ke - pip_round / po0)a_cad.ActiveDocument.ActiveLayer = LayerObj2
# 折流挡板
list_r = [St2, St2 - dis_baffle, St2 - 2 * dis_baffle, St2 - 3 * dis_baffle,St2 - 4 * dis_baffle, St2 - 5 * dis_baffle, St2 - 6 * dis_baffle,St2 - 7 * dis_baffle, St2 - 8 * dis_baffle, St2 - 9 * dis_baffle, St2 - 10 * dis_baffle]
for j in list_r:if j > break_1 + zo:for i in list_n:if i + bb_ke + pip_round / po0 < up9 - amm - bb_ke:liy(j, i + bb_ke, i + bb_ke - mkd + pip_round / po0)liy(j + 0.5 * bb_ke, i + bb_ke, i + bb_ke - mkd + pip_round / po0)for i in list_d:if i - bb_ke - pip_round / po0 > down9 + amm + bb_ke:liy(j, i - bb_ke, i - bb_ke + mkd - pip_round / po0)liy(j + 0.5 * bb_ke, i - bb_ke, i - bb_ke + mkd - pip_round / po0)list_l = [St1, St1 + dis_baffle, St1 + 2 * dis_baffle, St1 + 3 * dis_baffle, St1 + 4 * dis_baffle, St1 + 5 * dis_baffle,St1 + 6 * dis_baffle,St1 + 7 * dis_baffle, St1 + 8 * dis_baffle, St1 + 9 * dis_baffle, St1 + 10 * dis_baffle]
for j in list_l:if j < break_1:for i in list_n:if i + bb_ke + pip_round / po0 < up9 - amm - bb_ke:liy(j, i + bb_ke, i + bb_ke - mkd + pip_round / po0)liy(j + 0.5 * bb_ke, i + bb_ke, i + bb_ke - mkd + pip_round / po0)for i in list_d:if i - bb_ke - pip_round / po0 > down9 + amm + bb_ke:liy(j, i - bb_ke, i - bb_ke + mkd - pip_round / po0)liy(j + 0.5 * bb_ke, i - bb_ke, i - bb_ke + mkd - pip_round / po0)# 侧视图
c42 = asin(XD11 + bb_ke, R10 + XEH)
c43 = asin(XD11 + bb_ke, R10 + 3 * XEH / 5)
upk = R10 * math.cos(math.radians(c42)) + cen1
downk = cen1 - R10 * math.cos(math.radians(c42))
upj = R10 * math.cos(math.radians(c43)) + cen1
downj = cen1 - R10 * math.cos(math.radians(c43))
folx = XC3 - R10 * math.cos(math.radians(30))
forx = XC3 + R10 * math.cos(math.radians(30))
dacy = R10 * math.sin(math.radians(30))
c41 = asin(dacy, R10 + bb_ke + XEH)
foly = cen1 - (R10 + XEH) * math.cos(math.radians(c41))liy(XC3 + XD11 + bb_ke, upj, ups + XDH - bb_ke)lix(XC3 + XD11, XC3 + XD11 + 2 * bb_ke, ups + XDH)
liy(XC3 + XD11 + 2 * bb_ke, ups + XDH, ups + XDH - bb_ke)
lix(XC3 + XD11 + bb_ke, XC3 + XD11 + 2 * bb_ke, ups + XDH - bb_ke)liy(XC3 + XD11 + bb_ke, downj, downs - XDH + bb_ke)lix(XC3 + XD11, XC3 + XD11 + 2 * bb_ke, downs - XDH)
liy(XC3 + XD11 + 2 * bb_ke, downs - XDH, downs - XDH + bb_ke)
lix(XC3 + XD11 + bb_ke, XC3 + XD11 + 2 * bb_ke, downs - XDH + bb_ke)liy(XC3 - XD11 - bb_ke, upj, ups + XDH - bb_ke)lix(XC3 - XD11, XC3 - XD11 - 2 * bb_ke, ups + XDH)
liy(XC3 - XD11 - 2 * bb_ke, ups + XDH, ups + XDH - bb_ke)
lix(XC3 + XD11 + bb_ke, XC3 - XD11 - 2 * bb_ke, ups + XDH - bb_ke)liy(XC3 - XD11 - bb_ke, downj, downs - XDH + bb_ke)lix(XC3 - XD11, XC3 - XD11 - 2 * bb_ke, downs - XDH)
liy(XC3 - XD11 - 2 * bb_ke, downs - XDH, downs - XDH + bb_ke)
lix(XC3 + XD11 + bb_ke, XC3 - XD11 - 2 * bb_ke, downs - XDH + bb_ke)
lix(XC3 - XD11, XC3 + XD11, ups + XDH)
lix(XC3 - XD11, XC3 + XD11, downs - XDH)cyc(XC3, cen1, R10)
a_cyc(XC3, cen1, R10 + XEH, c42 + 90, 270 - c42)
a_cyc(XC3, cen1, R10 + XEH, c42 - 90, 90 - c42)
cxz1 = cyc(XC3 - R10 - 3 * XEH / 5, cen1, XEH / 8)
cxz2 = cyc(XC3 + R10 + 3 * XEH / 5, cen1, XEH / 8)bas_p1 = APoint(XC3, cen1)
nkk = math.acos(0.5 * (XD1 + bb_ke) / R10)
deg_r1 = math.radians(15)
deg_r2 = math.radians(30)
deg_r3 = math.radians(45)
deg_r4 = math.radians(60)
deg_r5 = math.radians(75)
ldeg = [deg_r1, deg_r2, deg_r3, deg_r4, deg_r5]
for i in ldeg:if i < nkk:cvc = cxz1.copy()bvc = cxz2.copy()cvv = cxz1.copy()bvv = cxz2.copy()cvc.Rotate(bas_p1, i)bvc.Rotate(bas_p1, i)cvv.Rotate(bas_p1, -i)bvv.Rotate(bas_p1, -i)else:breakliy(folx, foly, downs - 1.5 * XDH - bb_ke)
liy(forx, foly, downs - 1.5 * XDH - bb_ke)
lix(folx, forx, downs - 1.5 * XDH - bb_ke)
lix(folx, forx, downs - 1.5 * XDH)# 管箱挡板分布
if jij == 4:cyc(XC2 - 2 * R10 - 2 * R10 - amm, cen2, R10)lix(XC2 - 2 * R10 - R10 - amm, XC2 - 2 * R10 - 3 * R10 - amm, cen2 + 0.5 * R10)lix(XC2 - 2 * R10 - R10 - amm, XC2 - 2 * R10 - 3 * R10 - amm, cen2 - 0.5 * R10)lix(XC2, XC2 + 1.5 * XZH / po0, cen1 + 0.5 * bb_ke)lix(XC2, XC2 + 1.5 * XZH / po0, cen1 - 0.5 * bb_ke)lix(XE1 + thin_bar, XB1, cen1 - 0.5 * R10 + 2 * bb_ke)lix(XE1 + thin_bar, XB1, cen1 + 0.5 * R10 - 2 * bb_ke)lix(XE1 + thin_bar, XB1, cen1 - 0.5 * R10 + bb_ke)lix(XE1 + thin_bar, XB1, cen1 + 0.5 * R10 - bb_ke)cyc(XC2 - 2 * R10, cen2, R10)lix(XC2 - 2 * R10 - R10, XC2 - 2 * R10 + R10, cen2)
if jij == 2:cyc(XC2 - 2 * R10 - 2 * R10 - amm, cen2, R10)lix(XC2 - 2 * R10 - 2 * R10 - amm - R10, XC2 - 2 * R10 - 2 * R10 - amm + R10, cen2)cyc(XC2 - 2 * R10, cen2, R10)lix(XE1 + thin_bar, XB1 - 0.5 * R10 + bb_ke, cen1 + 0.5 * bb_ke)lix(XE1 + thin_bar, XB1 - 0.5 * R10 + bb_ke, cen1 - 0.5 * bb_ke)# 换热管分布
cyc(XC2, cen2, pip_round * 0.5)
cyc(XC2, cen2, pip_round * 0.5 - pip_thick)cyc(XC2 + mk, cen2 + mk, pip_round * 0.5)
cyc(XC2 + mk, cen2 + mk, pip_round * 0.5 - pip_thick)
cyc(XC2 + mk, cen2 - mk, pip_round * 0.5)
cyc(XC2 + mk, cen2 - mk, pip_round * 0.5 - pip_thick)
cyc(XC2 + 2 * mk, cen2, pip_round * 0.5)
cyc(XC2 + 2 * mk, cen2, pip_round * 0.5 - pip_thick)
Z1 = APoint(XC2, cen2)
Z2 = APoint(XC2 + mk, cen2 + mk)
Z3 = APoint(XC2 + 2 * mk, cen2)
Z4 = APoint(XC2 + mk, cen2 - mk)
a_cad.model.AddLine(Z1, Z2)
a_cad.model.AddLine(Z2, Z3)
a_cad.model.AddLine(Z3, Z4)
a_cad.model.AddLine(Z1, Z4)a_cad.ActiveDocument.ActiveLayer = LayerObj3a_cyc(XC3, cen1, R10 + 3 * XEH / 5, c43 + 90, 270 - c43)
a_cyc(XC3, cen1, R10 + 3 * XEH / 5, c43 - 90, 90 - c43)
a_cad.ActiveDocument.ActiveLayer = LayerObj
tem = '6.3'
patt = 'C:_users_Default_desktop'
fnm = mna + num1 + 'V' + tema_cad.doc.SaveAs('c:/users/ianli/desktop/%s' % fnm, 24)
print("已保存为", a_cad.doc.path, a_cad.doc.Name)
a_cad.ActiveDocument.Close()

尴尬的是图案填充做不了,老是提示未封闭的图形 (T·T)

Python控制AutoCAD画换热器,一下解决一个班的课设绘图相关推荐

  1. python用渐变色画圆_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  2. python控制autocad_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  3. autocad支持python吗_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  4. cad python_利用python控制Autocad:pyautocad

    对象.这个对象连接最近打开的cad文件. 如果此时还没有打开cad,将会创建一个新的dwg文件,并自动开启cad软件(贴心) 第二行:acad.prompt() 用来在cad控制台中打印文字 第三行: ...

  5. python控制其它软件_从另一个脚本控制python脚本

    我正在尝试学习如何编写一个脚本control.py,它在循环中运行另一个脚本test.py一定次数,在每次运行中,读取其输出并在打印某些预定义输出时暂停它(例如文本'现在停止'),并且循环继续其迭代( ...

  6. python的turtle画小人_当一个学了20分钟python turtle 的人画滑稽会怎样

    python 3.7 链接:https://pan.baidu.com/s/1Lob447oqCgD6nb39sB9cig 提取码:vn0a pycharm 链接:https://pan.baidu. ...

  7. python画锯齿波_用Python控制硬件35-自制二三十元成本的信号测量采集控制系统

    如前篇所介绍,用Shell Lab测试台软件配合之前介绍的任意款实验板,都能方便地实现ADC电压测量,但遇到两个问题: 示例代码虽然众多,但大都默认ShellLab类型的控制器,需要手动改为Mcush ...

  8. 用Python Turtle库画一个萌化的蜘蛛侠

    你是从什么时候开始喜欢上漫威电影的?美国队长,钢铁侠,雷神? 我先入坑的是因为看了蜘蛛侠,小时候看完就幻想着什么时候自己也能成为一个英雄,我觉得第一代蜘蛛侠刻画得是最好的,也是给我印象最深刻的一代蜘蛛 ...

  9. 用python画一个房子_用Python动态地画一个房子

    用Python动态地画一个房子 Python代码狂人 Python代码大全 用Python动态画一个房子,我们可从上向下画,先画房顶,再依次画阁楼窗户.房屋主体.屋门及主屋窗户. 运行本程序前请确保已 ...

最新文章

  1. 阿里P9大佬总结必备的算法和工具,被10万算法工程师点赞
  2. sap系统工单关闭_什么样的系统算是坑
  3. java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习
  4. python【数据结构与算法】武松打虎问题(贪心)
  5. oracle 添加登陆数据库触发器--记录IP 地址
  6. python中三级菜单讲解_Python字典实现简单的三级菜单(实例讲解)
  7. 训练日志 2019.7.23
  8. 模仿vue自己动手写响应式框架( - v-for
  9. 自动驾驶仿真:角雷达坐标系转换详解
  10. 关于spring boot的web.xml
  11. bat批处理复制指定目录及其子目录的指定后缀文件到指定文件夹
  12. android rtsp传输,android-ndk – 使用FFMpeg在Android客户端上进行RTSP流式传输
  13. 离散数学学习笔记——第二讲——命题逻辑(第一部分)(2.1什么是命题)
  14. 《机器学习实战》加利福尼亚州房屋价格 数据结构与可视化
  15. java出现令牌语法错误_java – 令牌上的语法错误
  16. 怎么用python画四叶草_如何使用python绘图四叶草
  17. win7系统笔记本配置双屏
  18. 成为oracle白金会员,华为成为Linux基金会白金会员
  19. 比较两条曲线的相似程度
  20. CC2640R2F BLE5.0 CC2640R2F UART驱动

热门文章

  1. 冯·诺伊曼可以,你也可以!
  2. laravel faker 数据填充 中文数据填充 单元测试数据填充 数据的类型有哪些
  3. matlab 两幅图求并集,MATLAB交并集运算
  4. IDEA在import时飘红的解决办法
  5. w ndows10u盘发售,745元起!Windows10 U盘版提前上架 想要的来了
  6. FCC学习记录——使用 sort方法按字母顺序给数组排序
  7. SQL Sever 2019的下载与安装【Win10一站式服务】
  8. 计算机中用于汉字处理的是什么意思,用于汉字输出的是什么编码
  9. DeepLearning4J入门——让计算机阅读《天龙八部》
  10. 居家隔离没事干?进来秒变算法工程师