import win32com.client as win32#输出dwg文件
 from pyautocad import Autocad#输出dwg文件
 import numpy as np#输出dwg文件import pywin32 #输出dxf文件
 import ezdxf #输出dxf文件#打开CAD AutoCAD.Application.18 为 2010版本
 #AutoCAD.Application.19 为 2014版本
 #AutoCAD.Application.16 为 2004/2006版本
 #AutoCAD.Application.17 为 2007/2008/2009版本CAD对象 python对象名
 TEXT AcDbText
 MTEXT AcDbMText
 POINT AcDbPoint
 LINE AcDbLine
 LWPOLYLINE AcDbPolyline
 ARC AcDbArc
 CIRCLE AcDbCircle
 ELLIPSE AcDbEllipse
 SPLINE AcDbSpline
 HATCH AcDbHatch
 MLINE AcDbMline
 TABLE AcDbTable
 ####################
 #######图形修改#####
 #####################
 item.Linetype = ‘DASHED’#修改线型
 item.LinetypeScale = ‘10’ #修改线型比例
 item.Lineweight = ‘100’#设置线宽
 item.Height = ‘5’ #设置文字高度
 ##########################
 #使用pywin32库############
 ##########################
 wincad = win32.Dispatch(“AutoCAD.Application”)
 doc = wincad.ActiveDocument
 msp = doc.ModelSpacedoc.Utility.Prompt(“dk\n”)#在控制台输出
 #########################扩展属性读取#####################################
 def vtInt(list):
 “”“列表转化为整数”“”
 return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, list)def vtVariant(list):
 “”“列表转化为变体”“”
 return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, list)
 try:
 doc.SelectionSets.Item(“SS1”).Delete()
 except:
 print(“Delete selection failed”)
 slt = doc.SelectionSets.Add(“SS1”)#创建选择集slt.Select(5, 0, 0, vtInt([0, 8, 1000]), vtVariant([“LWPOLYLINE”, “BDMAP_地籍图框”, “JC10020”]))
slt.Select(5, 0, 0, vtInt([0, 8]), vtVariant([“LWPOLYLINE”, layer_fw]))#按属性进行选择
 pnts = vtFloat1(APoint1)#将坐标集合转换成点坐标
 slt1.SelectByPolygon(7, pnts)#根据多边形选择
 slt.SelectOnScreen()#选择set_width = doc.Utility.GetInteger(‘输入宽度(整数):\n’)
 ifdo = doc.Utility.GetKeyword(‘重复放缩输入y后空格,取消按任意键\n’)
 wincad = win32.Dispatch(“AutoCAD.Application”)
 doc = wincad.ActiveDocument
 msp = doc.ModelSpace
 rtnObj = doc.Utility.Getpoint()
 xy = rtnObj[0]
 print(xy, rtnObj[1])
 rtnObj = doc.Utility.GetEntity()for text in acad.iter_objects(‘Text’):###循环文字
for item in slt:#循环选择集
 zddm = item.GetXData(“BDMAP_XPMTK”)[1][1].split(‘$’)[0]#获取扩展属性
 xy = item.Coordinates#获取多段线坐标
 layer = item.layer#获取图层名
 name = item.EntityName#获取图形类型
 text_xy = item.TextString#获取文本内容
 xy = item.InsertionPoint#获取文本坐标
 xy = item.center#获取圆心坐标print(doc.Name)#
pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0, -60, 10, 0]#点的三维坐标
 pnts = vtfloat(pnts)#将坐标转换为数据plineObj = msp.AddPolyLine(pnts)#绘制多段线
 plineObj.Closed = True#闭合多段线#进行计算填充图案
 [ptnName, ptnType, bAss] = [“ANSI31”, 0, True]
 outerLoop = []
 outerLoop.append(plineObj)
 outerLoop = vtobj(outerLoop)
 hatchObj = msp.AddHatch(ptnType, ptnName, bAss)
 hatchObj.AppendOuterLoop(outerLoop)
 hatchObj.Evaluate()rtnObj = doc.Utility.GetEntity()#选取图中的图形
 a = rtnObj[0].ObjectID#所选的图形ID
 b = rtnObj[1]#鼠标单击的坐标
 sltObject = doc.ObjectIdToObject(rtnObj[0].ObjectID) # 图元ID转化为对应的图元
 #给所选的图形改成红色
 clr = doc.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”)
 clr.SetRGB(255, 0, 0) # 创建红色
 sltObject.TrueColor = clr # 指定颜色
 doc.Application.Update()#######################
 #画点
 def vtpnt(x, y, z=0):
 return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
 pyacad.ActiveDocument.SetVariable(“PDMODE”, 35) # 设置点样式的显示方式
 pyacad.ActiveDocument.SetVariable(“PDSIZE”, 2) # 设置点大小
 startPntCoords = vtpnt(5, 5)
 startPoint = msp.AddPoint(startPntCoords)#画点#################
 #画直线
 lineObj = msp.AddLine(startPntCoords, endPntCoords)#######################
 #画多段线创建图元
pnts = [5, 20, 0, 10, 20, 0, 20, 5, 0, 25, 5, 0]
 points = vtfloat(pnts)
 plineObj = msp.AddPolyline(points)指定颜色
clr = doc.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”)
 clr.SetRGB(255, 0, 0) # 创建红色
 plineObj.TrueColor = clr # 指定颜色设置线宽
segmentIndex = 0 # 多段线的段号,从0起计数。
 startWidth = 1.0 # 段起点处线宽
 endWidth = 0.5 # 段终点处线宽
 plineObj.SetWidth(segmentIndex, startWidth, endWidth) # 为多段线plineObj的第1段设置变宽度线宽
 doc.preferences.LineweightDisplay = 1 # 显示线宽
 doc.Application.ZoomAll()
 doc.Application.Update()######################
 #画圆
 #创建图元
 center, radius = vtpnt(5, 5, 0), 2
 circleObj = msp.AddCircle(center, radius)指定颜色
clr = doc.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”)
 clr.SetRGB(255, 0, 0) # 创建红色
 circleObj.TrueColor = clr # 指定颜色copyObj = sltObject.Copy()#复制图形
 sltObject.Delete()#删除图形#############################
 #使用pyautocad库##############
 #############################
 pyacad = Autocad(create_if_not_exists=True)#打开CAD
 pyacad.prompt(“Hello! AutoCAD from pyautocad.”)#在控制台输出文字提示
 clr=R+256×G+256×256×B#颜色的计算方式
 clr=198+256×224+256×256×180=11854022#如白色的数值
 #模拟在控制台输出命令
 acad = Autocad(create_if_not_exists=True)
 acad.ActiveDocument.SendCommand(“C” + chr(13) + “0,0” +
 chr(13) + “100,100” + chr(13) )# car(13)是回车,"0,0"是坐标,"L"是快捷键######################
 #画直线
 startPoint = APoint(5, 8) # z坐标可空缺,空缺时系统默认其为0,即点Pnt1在CAD中坐标为(5,25,0)。
 endPoint = APoint(20, 15) # pyautocad自动将各坐标转化为双精度浮点数。
 lineObj = pyacad.model.AddLine(startPoint, endPoint)#画直线####################
 #画多段线创建图元
pnts = [APoint(5, 5), APoint(10, 5), APoint(20, 20), APoint(25, 20)]
 pnts = [j for i in pnts for j in i] # 将各点坐标顺序变换为1行多列的1维数组。
 pnts = aDouble(pnts) # 数据类型转化为双精度浮点数
 plineObj = pyacad.model.AddPolyLine(pnts)指定颜色
clr = pyacad.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”)
 clr.SetRGB(0, 0, 255) # 创建蓝色
 plineObj.TrueColor = clr # 指定颜色设置线宽
segmentIndex = 2 # 多段线的段号,从0起计数。
 startWidth = 0.5 # 段起点处线宽
 endWidth = 1.0 # 段终点处线宽
 plineObj.SetWidth(segmentIndex, startWidth, endWidth) # 为多段线plineObj的第3段设置变宽度线宽
 pyacad.ActiveDocument.preferences.LineweightDisplay = 1 # 显示线宽
 pyacad.ActiveDocument.Application.ZoomAll()
 pyacad.ActiveDocument.Application.Update()########################
 #画圆创建图元
center = APoint(5, 5) # 圆心
 radius = 4 # 半径
 circleObj = pyacad.model.AddCircle(center, radius)指定颜色
clr = pyacad.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”)
 clr.SetRGB(0, 0, 255) # 创建蓝色
 circleObj.TrueColor = clr # 指定颜色##################
 #打开文件
 acad.ActiveDocument.Application.Documents.Open(r"D:\AutoCAD\PyAutoCAD.dwg")
 DrawingObj.Activate() # 将New_Drawing设为当前文件。##################
 #另存文件
 acad.ActiveDocument.Application.Documents(“PyAutoCAD.dwg”).Close(True, “PyAutoCAD_已变更.dwg”)
 # 关闭PyAutoCAD.dwg文件。
 # True 布尔值,为系统默认,表示打开文件后关闭前文件若发生变更,则保存变更,并另存为PyAutoCAD_已变更.dwg
 # 此时文件夹中同时存在未变更的"PyAutoCAD.dwg"和已变更的"PyAutoCAD_已变更.dwg"
 # 若第二项空缺,则新文件名为"PyAutoCAD.dwg",覆盖之前未变更的文件。
 acad.ActiveDocument.SaveAs(r"D:\AutoCAD\PyAutoCAD_SaveAs", 61)#############
 #文件另存
 pyacad.ActiveDocument.SaveAs(“D:\AutoCAD\TestSaveAs”, 61)
 #版本 dwg dxf
 2000 12 13
 2004 24 25
 2007 36 37
 2010 48 49
 2013 60 61
 #将dwg文件另存为dxf文件
 pyacad.ActiveDocument.Application.Documents(“PyAutoCAD.dwg”).SaveAs(“D:\AutoCAD\TestSaveAs”, 61)##########################
 ######ezdxf##############
 #############################