python 操作CAD 二次开发 相关函数

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.ModelSpace

doc.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##############
#############################

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python Autocad二次开发是指使用Python编程语言Autocad进行二次开发,以实现更加个性化的功能和自动化的操作Python是一种简单易学的高级编程语言,具有丰富的库和工具,可以轻松地与Autocad进行交互。通过Python Autocad二次开发,可以实现自动化绘图、批量处理、数据分析等功能,提高工作效率和准确性。 ### 回答2: Python是一种高级编程语言,被广泛应用于各种领域的软件开发中。在自动化CAD二次开发中,Python被认为是一种非常好的选择。这是因为Python是一种易于学习和使用的语言,而且它有很多优秀的开源库和模块,可以帮助开发人员快速地构建CAD自动化工具。 在Python中,我们可以使用pyautocad模块来进行自动化CAD二次开发。这个模块提供了许多功能强大的API接口,可以帮助我们快速地创建,编辑和维护CAD图纸。 通过pyautocad,我们可以完成以下一些操作: 1.创建新的CAD图纸 2.打开、读取和修改现有CAD图纸 3.执行一系列绘图操作,如绘制直线、弧线、圆等 4.处理CAD图纸中的块和属性 5.导入和导出各种文件格式,如DXF、DWG等 6.自动化完成一些重复性的任务,如批量修改CAD图纸中的文本内容等 在实际开发中,我们可以将Python和pyautocad结合使用,完成一些真正有意义的工作。这些工作包括绘制设备布局、生成BOM报表、自动将CAD图纸导入到各种软件中等等。 总之,在自动化CAD二次开发环境中,Python和pyautocad是一种非常有用的组合。因为它们可以简化开发过程,减少错误和提高效率。如果你想深入了解这个领域,建议你学习Python和pyautocad,掌握开发CAD自动化工具的必要技能。 ### 回答3: Python是一种高级编程语言,具有易读易学、简洁、规范化等特点,被广泛应用于多个领域,包括自动化、Web开发、科学计算等。同时,Python语言还支持多种操作系统和平台,使其具有更强的适用性和灵活性。Autocad是一种专业的计算机辅助设计软件,广泛用于建筑、土木工程、机械、电气等行业。 Python Autocad二次开发结合了Python语言的优势和Autocad的特点,能够为用户提供更加高效、自动化的设计工具。Python Autocad二次开发主要应用于以下几个方面: 1. 自动处理和管理大量的绘图文件。用户可以编写Python程序,通过Autocad的API实现对文件进行自动打开、编辑、保存等操作,同时实现文件名的批量更改、格式的批量转换等功能,从而提高效率。 2. 自动绘图。通过Python Autocad二次开发,用户可以编写自动绘图程序,根据不同的设计需求,自动生成符合标准的设计图纸,从而简化了手工绘图的过程,提高了制图效率。 3. 自动化测量和计算。用户可以使用Python Autocad二次开发,编写自动化测量和计算程序,用于计算建筑物面积、土木工程方案等各种建筑工程参数,从而辅助工程师快速计算和评估方案数据。 在进行Python Autocad二次开发时,需要掌握Autocad API的使用方法,熟悉Python的基本语法和常用模块,同时还需要对设计和计算相关的知识有一定的了解。此外,还需要熟悉编程最佳实践,严格遵守代码的规范和安全,保障程序的稳定性和可靠性。 总之,Python Autocad二次开发是一种高度的自动化设计和计算方式,为用户提供了更加高效、便捷的工具,具有广泛的应用前景和潜力。对于拥有编程基础和设计计算需求的用户而言,学习Python Autocad二次开发可谓是一项非常有价值的投资。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DK业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值