python-cad二次开发入门教程

这篇具有很好参考价值的文章主要介绍了python-cad二次开发入门教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开篇词

用python做cad二次开发已经快两年的时间了,今天看到群里一个哥们到处问怎么python怎么进行cad二次开发,不禁回想起当初自己找教程找的焦头烂额,却始终不得办法的辛酸。现在网上的教程逐渐多了起来,但是我看很多都没有直接讲一个问题,那就是“我到底怎么去二次开发”或者“我学会了哪些东西我就会二次开发”。今天就简单讲讲,初学者怎么掌握这个技能。

python进行cad二次开发简单说明

简单说明:python做cad的二次开发,调用的是com接口,cad内置了com接口的相关函数,com接口最典型的开发模式是VBA。python做cad二次开发,就是调用pywin32这个库,并利用pythoncom这个库进行数据类型转换,所以python开发cad完全可以参考VBA的开发教程。这里强烈推荐“明经通道 ActiveX 和 VBA 参考.ch”。
注意:python开发cad要注意两个东西,1、python数据类型需要转换成cad接收的数据类型;2、com接口的API里面的方法需要加上括号,属性不加括号,例如copy方法,
VBA语法为:

RetVal = object.Copy

python语法为:

RetVal = object.Copy()

掌握哪些东西能够进行二次开发

1、cad对象模型说明
python-cad二次开发入门教程
在“明经通道 ActiveX 和 VBA 参考.chm”里面能够看到对象模型中,每个对象的说明,这里不在赘述,我们一般用到的是Documents、MenuBar、MenuGroups,以下是python的代码说明

import win32com.client
wincad = win32com.client.Dispatch("AutoCAD.Application")	# 链接cad,这里是调用目前打开的cad
doc = wincad.ActiveDocument		# doc表示当前活跃的Document
mp = doc.ModelSpace		# mp表示模型空间

从上面的对象模型图中,很容易看到上面三行代码的意思。
2、学会变量类型转换

import pythoncom
#变量类型转换
def vtPnt(x, y, z=0):
    """坐标点转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
def vtObj(obj):
    """转化为对象数组"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)
def vtFloat(list):
    """列表转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, list)
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)

上面有五种数据类型的转换,举一个例子说明,假如要在模型空间中画一个点,画点的语法是:

RetVal = object.AddPoint(Point)

其中,Point是“Variant[变体] (三元素双精度数组); 仅用于输入要创建点的坐标”。前面是VBA 参考的解释,python的数据类型一般是列表类型的,因此需要进行数据类型转换

import win32com.client
import pythoncom
def vtFloat(list):
    """列表转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, list)
wincad = win32com.client.Dispatch("AutoCAD.Application")	# 链接cad,这里是调用目前打开的cad
doc = wincad.ActiveDocument		# doc表示当前活跃的Document
mp = doc.ModelSpace		# mp表示模型空间
Point=vtFloat([1, 1, 1])
Line=vtFloat([1, 1, 1, 2, 2, 2])
RetVal = mp.AddPoint(Point)		# 在模型空间里画一个点,坐标为[1, 1, 1]
RetVal = mp.AddLine(Line)		# 在模型空间中画一条值线,起点坐标为[1, 1, 1],终点坐标为[2, 2, 2]

上面举了浮点型列表转换的例子,其它转换可以看“明经通道 ActiveX 和 VBA 参考.chm”中需要什么样的类型。
3、在“明经通道 ActiveX 和 VBA 参考.chm”中找需要的API函数
当我们需要实现一个功能时,一定要去查找“明经通道 ActiveX 和 VBA 参考.chm”,这个文档里面内容按照对象、方法、属性进行了分类,比如想画一条多段线时,“多段线”是对象,“画多段线”是方法,这个多段线的线型、颜色等是它的属性。具体:
(1)在对象里找到“LightweightPolyline”,这个就是多段线
(2)“LightweightPolyline”的方法和属性:
python-cad二次开发入门教程
(3)调用。
python调用方法时,一定要加括号,不管括号里有没有参数,例如copy方法

RetVal = object.Copy	# VBA写法,不需要括号
RetVal = object.Copy()		# python写法,需要括号

属性就直接调用

RetVal = object.Closed		# 返回一个布尔型数值RetVal

具体每个对象有哪些方法,这就自己去查文档了,另外每个对象、方法、属性在右上角都有一个vba的示例,看下示例也能明白python该怎么写。

示例

下面以一个需求为例,进行演示,需求:将特征线图层里面的所有多段线坐标导出
1、链接cad

import win32com.client
wincad = win32com.client.Dispatch("AutoCAD.Application")	# 链接cad,这里是调用目前打开的cad
doc = wincad.ActiveDocument		# doc表示当前活跃的Document
mp = doc.ModelSpace		# mp表示模型空间

2、准备好转换函数

import pythoncom
#变量类型转换
def vtPnt(x, y, z=0):
    """坐标点转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
def vtObj(obj):
    """转化为对象数组"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)
def vtFloat(list):
    """列表转化为浮点数"""
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, list)
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)

3、创建选择集(选择集的作用是自动选中目标)

# 创建选择集,创建ss1的时候,最好先试着删除ss1,不然SelectionSets里已经有ss1时,会报错
try:
    doc.SelectionSets.Item("ss1").Delete()
except:
    print("Delete selection failed")

# 选择到图框
ss1 = doc.SelectionSets.Add("ss1")
point1 = ref_fun.vtFloat([-10000000000, -10000000000, 0])
point2 = ref_fun.vtFloat([10000000000, 10000000000, 0])
model = 5
ftype = ref_fun.vtInt([8, ])
fdata = ref_fun.vtVariant(["特征线", ])
ss1.Select(model, point1, point2, ftype, fdata)		# 选中特征线图层里的所有图元

4、利用ObjectName属性进行筛选,当然也可以在选择集创建的时候就筛选,但是python在选择集那里的操作有点问题,最好利用ObjectName属性筛选

data1=[]
for i in range(len(ss1)):
	if ss1[i].ObjectName=="LightweightPolyline":	# 只保存特征线图层里,对象名称为LightweightPolyline的线坐标
	    mid = ss1[i].Coordinates
	    mid_data = []
	    for j in range(len(mid)):
	        if j % 2 == 0:
	            mid_coordinate = [mid[j], mid[j + 1]]
	            mid_data.append(mid_coordinate)
	    data1.append(mid_data)
print(data1)

总结

以上就是自学py的cad二开简单教程,说白了,就是照着VBA的形式,用python语言调用com口的API函数。所以“明经通道 ActiveX 和 VBA 参考.chm”和一本VBA的CAD二次开发书籍,就能够完成基本上所有cad二次开发功能。

感谢

特别感谢以下文章作者、工作室、论坛,文章中,很多代码都是摘抄至链接1、链接2,本人学习的过程也深受下面链接启发,最后向以下作者、工作室、论坛表示衷心的感谢!
scdn作者Hulunbuir的Python 二次开发 AutoCAD 简介系列教程
微信335工作室系列python二次开发教程
明经通道论坛文章来源地址https://www.toymoban.com/news/detail-457670.html

到了这里,关于python-cad二次开发入门教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 很合适新手入门使用的Python游戏开发包pygame实例教程-01[开发环境配置与第一个界面]

    我们假定你已经安装好了我们开发python程序的sublime text,如果不知道怎么安装的可以参照我前面的博文。这里只需要解决的是配置好Pygame的问题。本篇博文主要解决开发环境配置以及第一个游戏界面的显示问题。 文章原出处: https://blog.csdn.net/haigear/article/details/130173836 没有

    2024年01月25日
    浏览(79)
  • CAD 二次开发-Handle

    在 CAD 二次开发中, Handle 是每个 CAD 实体的唯一标识符,类似于一个 ID。它是一个 long 类型的整数,可以用于标识和引用 CAD 实体,如图形 对象、块、图层、实体 等。 使用 Handle 可以方便地操作 CAD 实体,例如: 获取 CAD 实体的 Handle。 根据 Handle 获取 CAD 实体。 在上面的示例

    2023年04月20日
    浏览(34)
  • 网页CAD二次开发(在线CAD SDK)用到的数学库

    在CAD二次开发中, 正确的使用数学库是十分重要的, 我们不需要会很多数学知识, 只要会普通的四则运算和调用mxcad提供的api即可,通过[快速入门]了解了打开图纸后,如果要对图形进行处理,就需要各种计算, mxcad提供了一些类来参与计算或者表示一些数据结构,相关的API查询

    2024年02月20日
    浏览(32)
  • Cad二次开发关于多段线

    NumberOfVertices 是一个表示多段线(Polyline)对象中顶点数量的属性。顶点表示多段线上的角点或拐点,决定了多段线的形状。 在AutoCAD等CAD软件中,多段线是由一系列直线段组成的图形对象。它可以包含任意数量的顶点,并且可以是开放的或闭合的。 NumberOfVertices 属性用于获取

    2024年02月14日
    浏览(26)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗

    找到配置文件目录,遍历下面的每个配置文件; 找到 Variables 下的 TRUSTEDPATHS 项目;在后面添加新的目录即可,多个目录使用分号分隔;

    2024年02月07日
    浏览(30)
  • QGIS二次开发:集成二维CAD控件MxDraw

    本文记录在QGIS中集成MxDraw控件的方法。 参见笔者博文“FreeCAD二次开发:集成二维CAD控件MxDraw”所述的安装方法。 参见笔者博文\\\"Windows 10下编译安装QGIS\\\"所述的编译安装方法。 按照QGIS的管理,Qt ui文件可放到src/ui目录及其子目录下。因此,可将MxDrawView.ui拷贝到src/ui/gd目录下,

    2024年02月15日
    浏览(26)
  • c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色

    c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Application = Autodesk.AutoCAD.Applicat

    2024年02月07日
    浏览(39)
  • Android开发入门教程

    当涉及到 Android 开发入门教程时,以下是一个详细的大纲,包含了一些常见的实践和指导: 1. Android 概述    - 介绍 Android 平台的基本概念和特点    - 解释 Android 应用的组成和架构    - 说明 Android 应用的开发环境和工具 2. 开发准备    - 安装和配置 Java 开发环境    - 下载

    2024年02月16日
    浏览(37)
  • CAD二次开发,安装程序中写注册表

    我们知道,dll加载到cad中后使用 就可以拿到当前cad的注册表,那么如果想在安装程序时写,此时并没有cad的环境,要怎么办呢? cad在安装后,会在注册表的 计算机HKEY_LOCAL_MACHINESOFTWAREAutodeskHardcopy 目录下存放所有已安装的cad的注册表位置 如图,由于我只安装了一个,所以

    2023年04月11日
    浏览(36)
  • 微信小程序开发入门教程

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包