pyautocad包是一个操作autocad的python包。使用pip直接安装即可,要求本地已安装autocad。
按win+R运行regedit打开注册表,查看HKEY_CLASSES_ROOT中的AutoCAD.Application版本号
然后去pyautocad的安装位置(比如上图红框中的路径下),修改第63和67行,把版本号改成刚查到的(上图中是24,就改成.24,如下图所示)。
主要表现在:无法打印当前Autocad对象的名字,也无法绘制图像。命令行直接卡住了。
创建Autocad对象时,加 create_if_not_exists=True
pyacad = Autocad(create_if_not_exists=True)
如果仍然不行(比如我就是),那么在autocad主面板新建一个文件,然后可以看到代码正常执行了。绘制的内容在布局1/布局2中。
我这里用qt画了个面板,允许用户输入线段两端点的坐标+一段文字,然后在autocad中显示,再用Python代码保存。qt代码有省略,主要贴pyautocad的代码。
from tkinter import *
from pyautocad import Autocad, APoint, aDouble
def draw_frame():
root = Tk()
root.title('xxx')
global entryx1, entryy1, entryx2, entryy2, entry
# 起点
labelx1 = Label(root, text="起点 x")
labelx1.grid(row=0, column=0)
entryx1 = Entry(root)
entryx1.grid(row=0, column=1, padx=10, pady=5)
...
# 省略布局
# 文字框
label = Label(root, text="输入文字")
label.grid(row=2, column=0)
entry = Entry(root)
entry.grid(row=2, column=1, padx=10, pady=5)
# 按钮
button1 = Button(root, text="绘制", command=draw)\
.grid(row=4, column=0, padx=30, pady=5)
button2 = Button(root, text="保存", command=save) \
.grid(row=4, column=1, padx=30, pady=5)
button3 = Button(root, text="关闭", command=root.quit) \
.grid(row=4, column=2, padx=30, pady=5)
root.mainloop()
def draw():
# get就可以获取内容了
#print("起点:(%s, %s)"%(entryx1.get(), entryy1.get()))
#print("终点:(%s, %s)"%(entryx2.get(), entryy2.get()))
global pyacad
pyacad = Autocad(create_if_not_exists=True)
#pyacad.prompt("Hello! Autocad from pyautocad.")
#print(pyacad.doc.Name)
...
# 省略一些内容
startPoint = APoint(x1, y1) # z坐标可空缺,空缺时系统默认其为0
endPoint = APoint(x2, y2) # 当然,pyautocad自动将各坐标转化为双精度浮点数。
# 画线段
lineObj = pyacad.model.AddLine(startPoint, endPoint)
# 贴文字
textString = entry.get()
insertPnt = APoint(0, 0)
height = 1
textObj = pyacad.model.AddText(textString, insertPnt, height)
def save():
# 保存在默认位置
pyacad.doc.SaveAs(pyacad.doc.Name)
if __name__ == "__main__":
draw_frame()