栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

首先感谢大佬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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号