python- *** 作autocad之pyautocad包

python- *** 作autocad之pyautocad包,第1张

python- *** 作autocad之pyautocad包

pyautocad包是一个 *** 作autocad的python包。使用pip直接安装即可,要求本地已安装autocad。

报错:OSError:[WinError -2147221005] 无效的类字符串

解决方案

按win+R运行regedit打开注册表,查看HKEY_CLASSES_ROOT中的AutoCAD.Application版本号

然后去pyautocad的安装位置(比如上图红框中的路径下),修改第63和67行,把版本号改成刚查到的(上图中是24,就改成.24,如下图所示)。

报错:print(pyacad.doc.Name) 找不到类对象

主要表现在:无法打印当前Autocad对象的名字,也无法绘制图像。命令行直接卡住了。

解决方案

创建Autocad对象时,加 create_if_not_exists=True

pyacad = Autocad(create_if_not_exists=True)

如果仍然不行(比如我就是),那么在autocad主面板新建一个文件,然后可以看到代码正常执行了。绘制的内容在布局1/布局2中。

pyautocad相关代码

我这里用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()

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5679741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存