首先感谢大佬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 lm
def lix(a, b, h): # 横线
bp = APoint(a, h)
ep = APoint(b, h)
lm = a_cad.model.AddLine(bp, ep)
return lm
def cyc(x, y, r):
center = APoint(x, y) # 圆心
c = a_cad.model.AddCircle(center, r)
return c
def 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 ellObj
def 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) / po0
txt_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 = 15
lix(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 * 10
q1 = 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_ke
XD211 = 0.8 * XD21
lix(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 / y
c45 = 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:
break
liy(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 = LayerObj3
a_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' + tem
a_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)



