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()
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值