autocad支持python吗_利用python控制Autocad:pyautocad方式
发现pyautocad模块:可以用python控制autocad的包。今天把文档中的重点内容摘录出来,以后绘图、计算大工程量、或者识别施工图的时候时候也许可以用到。
一、连接cad
pyautocad包可以用任何版本的cad进行操作,实际上接口都是一样的。文档中首先给出连接cad的代码:
from pyautocad import Autocad, APoint
acad = Autocad(create_if_not_exists=True)
acad.prompt("Hello, Autocad from Python\n")
print acad.doc.Name
第一行:自动连接上cad,只要cad是开着的,就创建了一个 对象。这个对象连接最近打开的cad文件。
如果此时还没有打开cad,将会创建一个新的dwg文件,并自动开启cad软件(贴心)
第二行:acad.prompt() 用来在cad控制台中打印文字
第三行:acad.doc.Name储存着cad最近打开的图形名
二、ActiveX interface(这个到底是什么东西)
可以利用ActiveX interface,python中储存的autocad对象中保存了一些可以简化操作的自动化操作(可以迭代对象、搜索对象等等)
三、用acad.model 对象绘制简单图形
acad.model对象是用来在图形中添加图元的,先来做一个简单的功能,在两点之间画线,以一个点为圆心画圆
# 已经导入 APoint 类
p1 = APoint(0, 0)
p2 = APoint(50, 25)
for i in range(5):
text = acad.model.AddText(u'Hi %s!' % i, p1, 2.5)
acad.model.AddLine(p1, p2)
acad.model.AddCircle(p1, 10)
p1.y += 10
1、循环中的第一行用于添加一个Text,参数:(u'%s' % text, x, y)
如果后面不需要操作AddText对象的话,只是实现在cad中创建一个Text并不一定要创建变量,直接调用acad.model.AddText()方法就可以做到了。
2、acad.model.AddCircle(p1, 10) 画圆,同理
3、可以尝试更多的 addXxxx 方法,由于文档中并没有写输入变量究竟是什么,慢慢尝试吧
尝试过可以使用的:addPolyLine(
练练手:
用递归程序写一个在cad中画一个螺旋图,写的有点啰嗦,
from pyautocad import Autocad, APoint
acad = Autocad(create_if_not_exists = True)
p = APoint(5, 0)
def recur(p, step, layer):
if layer == 50:
return
p2 = next_p(p, layer, step)
acad.model.AddLine(p, p2)
layer += 1
step += 5
print step
recur(p2, step, layer)
def next_p(p, i, step):
x = p.x
y = p.y
if i % 4 == 0:
x += step
elif i % 4 == 1:
y += step
elif i % 4 == 2:
x -= step
elif i % 4 == 3:
y -= step
return APoint(x, y)
if __name__ == '__main__':
recur(p, 0, 0)
画出来是这个样子的,还是挺好玩的
四、遍历cad图形对象以及访问/修改对象属性
基本的遍历图形中所有图元的方法:
for obj in acad.iter_objects():
print obj.ObjectName
# ObjectName 可以打印出对象的类型
想要按类型查找出所有某种图元(如所有Text对象):
for text in acad.iter_objects('Text'): print text.TextString, text.InsertionPoint
或者也可以在类型选择时填入多种类型,如:
for obj in acad.iter_objects(['Text', 'Line']): print obj.ObjectName
pyautocad还提供了一个比较
*文档中特地说明:按照类型查找可以混淆大小写,也可以只输入类型的一部分,比如查找”te”类型就可以自动匹配到text类型,输入”li“就自动匹配到Ellipse和Line类型,挺方便的吧~
访问对象的属性
以下内容文档中貌似没有写,探究一下:
用dir(text)可以得出很多text下的属性和方法:
# 属性/方法 第一种形式(可以直接调用)
AddRef
Application
ArrayPolar
ArrayRectangular
AttachmentPoint
BackgroundFill
Copy
Database
Delete
Document
DrawingDirection
EntityName
EntityTransparency
EntityType
Erase
FieldCode
GetBoundingBox
GetExtensionDictionary
GetIDsOfNames
GetTypeInfo
GetTypeInfoCount
GetXData
Handle
HasExtensionDictionary
Height
Highlight
Hyperlinks
InsertionPoint
IntersectWith
Invoke
Layer
LineSpacingDistance
LineSpacingFactor
LineSpacingStyle
Linetype
LinetypeScale
Lineweight
Material
Mirror
Mirror3D
Move
Normal
ObjectID
ObjectID32
ObjectName
OwnerID
OwnerID32
PlotStyleName
QueryInterface
Release
Rotate
Rotate3D
Rotation
ScaleEntity
SetXData
StyleName
TextString
TransformBy
TrueColor
Update
Visible
Width
# 属性/方法 第二种形式
_AddRef
_GetIDsOfNames
_GetTypeInfo
_IAcadEntity__com_ArrayPolar
_IAcadEntity__com_ArrayRectangular
_IAcadEntity__com_Copy
_IAcadEntity__com_GetBoundingBox
_IAcadEntity__com_Highlight
_IAcadEntity__com_IntersectWith
_IAcadEntity__com_Mirror
_IAcadEntity__com_Mirror3D
_IAcadEntity__com_Move
_IAcadEntity__com_Rotate
_IAcadEntity__com_Rotate3D
_IAcadEntity__com_ScaleEntity
_IAcadEntity__com_TransformBy
_IAcadEntity__com_Update
_IAcadEntity__com__get_EntityName
_IAcadEntity__com__get_EntityTransparency
_IAcadEntity__com__get_EntityType
_IAcadEntity__com__get_Hyperlinks
_IAcadEntity__com__get_Layer
_IAcadEntity__com__get_Linetype
_IAcadEntity__com__get_LinetypeScale
_IAcadEntity__com__get_Lineweight
_IAcadEntity__com__get_Material
_IAcadEntity__com__get_PlotStyleName
_IAcadEntity__com__get_TrueColor
_IAcadEntity__com__get_Visible
_IAcadEntity__com__get_color
_IAcadEntity__com__set_EntityTransparency
_IAcadEntity__com__set_Layer
_IAcadEntity__com__set_Linetype
_IAcadEntity__com__set_LinetypeScale
_IAcadEntity__com__set_Lineweight
_IAcadEntity__com__set_Material
_IAcadEntity__com__set_PlotStyleName
_IAcadEntity__com__set_TrueColor
_IAcadEntity__com__set_Visible
_IAcadEntity__com__set_color
_IAcadMText__com_FieldCode
_IAcadMText__com__get_AttachmentPoint
_IAcadMText__com__get_BackgroundFill
_IAcadMText__com__get_DrawingDirection
_IAcadMText__com__get_Height
_IAcadMText__com__get_InsertionPoint
_IAcadMText__com__get_LineSpacingDistance
_IAcadMText__com__get_LineSpacingFactor
_IAcadMText__com__get_LineSpacingStyle
_IAcadMText__com__get_Normal
_IAcadMText__com__get_Rotation
_IAcadMText__com__get_StyleName
_IAcadMText__com__get_TextString
_IAcadMText__com__get_Width
_IAcadMText__com__set_AttachmentPoint
_IAcadMText__com__set_BackgroundFill
_IAcadMText__com__set_DrawingDirection
_IAcadMText__com__set_Height
_IAcadMText__com__set_InsertionPoint
_IAcadMText__com__set_LineSpacingDistance
_IAcadMText__com__set_LineSpacingFactor
_IAcadMText__com__set_LineSpacingStyle
_IAcadMText__com__set_Normal
_IAcadMText__com__set_Rotation
_IAcadMText__com__set_StyleName
_IAcadMText__com__set_TextString
_IAcadMText__com__set_Width
_IAcadObject__com_Delete
_IAcadObject__com_Erase
_IAcadObject__com_GetExtensionDictionary
_IAcadObject__com_GetXData
_IAcadObject__com_SetXData
_IAcadObject__com__get_Application
_IAcadObject__com__get_Database
_IAcadObject__com__get_Document
_IAcadObject__com__get_Handle
_IAcadObject__com__get_HasExtensionDictionary
_IAcadObject__com__get_ObjectID
_IAcadObject__com__get_ObjectID32
_IAcadObject__com__get_ObjectName
_IAcadObject__com__get_OwnerID
_IAcadObject__com__get_OwnerID32
_IDispatch__com_GetIDsOfNames
_IDispatch__com_GetTypeInfo
_IDispatch__com_GetTypeInfoCount
_IDispatch__com_Invoke
_IUnknown__com_AddRef
_IUnknown__com_QueryInterface
_IUnknown__com_Release
_Invoke
_QueryInterface
_Release
__class__
__cmp__
__com_interface__
__ctypes_from_outparam__
__del__
__delattr__
__dict__
__doc__
__eq__
__format__
__getattr__
__getattribute__
__hash__
__init__
__map_case__
__metaclass__
__module__
__new__
__nonzero__
__reduce__
__reduce_ex__
__repr__
__setattr__
__setstate__
__sizeof__
__str__
__subclasshook__
__weakref__
_b_base_
_b_needsfree_
_case_insensitive_
_compointer_base__get_value
_idlflags_
_iid_
_invoke
_methods_
_needs_com_addref_
_objects
_type_
color
from_param
value
这些cad图元的属性和方法是分明存在的,但是应该怎么才能get或者set这些属性呢?
可以看到形如“_IAcadMText__com__set_Width”的私有属性(现在我也不知道这些属性能够怎么利用,也许这个是句柄??不懂)。但是所有这些属性中,可以直接调用的方法中大部分(在代码区里的第一类公有属性中)是可以与之匹配的。
这些公有属性应该是可以调用的,下面是一些例子:
1、调用move方法(set)
text.move(APoint(0,0), APoint(100,100)) #( 原点,相对原点的位置)
用这行代码就可以将所有的text对象向右、向上平移100个单位
2、访问layer属性(setter、getter)
print text.layer # 0
就提取出了text.layer的值,如果想要改变text对象的layer,直接赋值即可(给layer变量复制的layer名字必须已经存在,否则会报错)
text.layer = "new layer"
print text.layer
# new layer
3、提取PolyLine的各个顶点(很有用)
# for item in acad.iter_objects("PolyLine"):
print item.Coordinates
'''
(-462.01707322354014, 719.8251441314151, 207.17175903027055, 1056.4031530064085, 389.6778054895749, 574.9096117303479, -143.80140284041954, 434.6687742615859, -326.30744929972207, -60.84885181138725, -564.9692056597924, 308.45202158973643, -327.4641724567995, 461.94033545845366, -593.0470534647193, 546.8614421365228, -616.4452718779175, 803.9696476627087)
'''
# 第1、2个元素构成第一个坐标, 3、4个元素构成第二个坐标
以上操作证明了确实可以通过调用对象的公有属性来操作cad中的对象,但是麻烦的是,由于这些方法都是ctype的,dir()这些方法无法得知具体应该输入那些参数和参数的类型,有待解决…
如果实在没有找到这些方法的文档说明,就只好一个一个试出来使用方法了
(补充:help(obj) 可以得到一些信息,但是好像还是没有参数类型信息。只能得到哪些obj的属性可以set,哪些可以get等等)
以上这篇利用python控制Autocad:pyautocad方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
autocad支持python吗_利用python控制Autocad:pyautocad方式相关推荐
- 利用python发送邮件_利用python实现简单的邮件发送客户端示例
脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...
- excel python插件_利用 Python 插件 xlwings 读写 Excel
Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...
- 动态照片墙 python 实现_利用python生成照片墙的示例代码
这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...
- python 发送邮件_利用Python 发送邮件
原标题:利用Python 发送邮件 概要 我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP规定电子邮件应该如何格式化.如何加密, ...
- java调python 监控_利用Python实现一个简单的系统监控图表
作为运维人员,想必大家肯定都做过这样的事情:为了监控系统资源使用情况,开了若干个窗口,来回切换看输出: 只要我切得够快,性能异常点就逃不过我的眼睛! 这个时候你要是有个监控工具自然是很好的,例如我们美 ...
- python拼图_利用python制作拼图小游戏的全过程
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...
- python 认证机构_利用Python爬了SIG官网BQB认证公司清单,我有一些重大发现..
关注"无线技术联盟"提供有价值的物联网市场信息和最新的技术分析 利用Python爬取了蓝牙联盟上近一年BQB认证公司的清单,把爬到的有价值的东西写出来分享给大家. 1 蓝牙认证 产 ...
- python 离散化_利用Python将数值型特征进行离散化操作的方法
利用Python将数值型特征进行离散化操作的方法 如下所示: data = np.random.randn(20) factor = pd.cut(data,4) pd.get_dummies(fac ...
- 如何用python赚钱_利用python能怎么挣钱
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 6年python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫 ...
最新文章
- Dokcer容器实战之部署论坛
- 《JAVA编程思想》学习笔记——第三章 操作符
- 系统视频教学视频教程_太极拳教学视频教程,董氏太极拳基本功训练方法视频...
- 第一章 PX4-Pixhawk-程序编译过程解析
- 收藏 | Redis 超详细总结笔记总
- Spring boot的简单用法
- html5 android6.0摄像头,HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试...
- [算法笔记]分块算法从入门到TLE
- 湖北职业技术学院计算机协会,湖北职业技术学院2019年教师教学能力大赛顺利举行...
- 如何设置Win11账户密码有效期?Win11账户密码使用期限设置教程
- 为什么我不再推荐使用MVC框架?
- vc使用nmake时报错
- ue4 基于motion vector粒子优化的一些感悟
- C# 证书 .cer, .pfx 创建,加解密 导出为 Base64编码文件
- 公司账号服务单点登录到gitlab
- 解决JWT解析token数据时拿不到问题
- Python爬虫网络请求 requests(get、post)
- 计算机主板电池没电的状态,电脑主板电池没电引起的故障检查修理_提示CMOS电池电量不足怎么办...
- html 滚动图片代码
- uni-app封装请求方法和loading样式
热门文章
- JS是按值传递还是按引用传递?
- [转]centos7下yum安装mysql
- Android中Webview自适应屏幕
- SMS2003 推送软件包中的日志查看及安装错误代号1633分析
- 显示部分x_i5 9400F+GTX 1030+23.8英寸,攀升迁跃者X上手简评
- java中static_认识java中的static
- mysql 怎么查询慢sql语句_如何优化MySQL中查询慢的SQL语句啊?
- java 表格树_00030-layui+java 树形表格treeTable
- mongodb java 地理位置_MongoDB的地理位置索引
- Halcon PDF文档(hdevelop_users_guide)学习总结之一