发现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方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

python操作autocad_利用python控制Autocad:pyautocad方式相关推荐

  1. python控制autocad_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  2. python用渐变色画圆_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  3. autocad支持python吗_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  4. python开发autocad_利用Python自动化操作AutoCAD的实现

    1 Python自动绘图 在这里我主要运用了pyautocad库进行AutoCAD的自动化操作,pyautocad是一款功能非常强大的AutoCAD操作处理库,可以实现Python自动绘图.CAD图像 ...

  5. 【Python例】利用 python 进行用户画像词云图的生成 --- wordcloud

    [Python例]利用 python 进行用户画像词云图的生成 - wordcloud 本文主要用于记录,并使用 python 脚本进行用户画像的词云图的生成. 前言 对于词云图来说,是一个用户画像数 ...

  6. Python操作Neo4j图数据库的两种方式

    Python操作Neo4j图数据库的两种方式 前言 1. 用neo4j模块执行CQL ( cypher ) 语句 2. 用py2neo模块通过操作python变量,达到操作neo4j的目的 3. 用p ...

  7. 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR

    [Python例]利用 python 进行图片文字信息的提取 - OCR-EasyOCR 本文主要用于记录,并使用 python 脚本进行图片文字信息的生成. 什么是 OCR? OCR OCR(Opt ...

  8. Python操作数据库及Python实现mysql数据库连接池源代码

    简介 pymysql:纯Python实现的一个驱动.因为是纯Python编写的,因此执行效率不如MySQL-python.并且也因为是纯Python编写的,因此可以和Python代码无缝衔接. MyS ...

  9. boxplot用法 python,[Python画图笔记]利用Python画箱型图boxplot

    [Python画图笔记]利用Python画箱型图boxplot [Python画图笔记]利用Python画箱型图boxplot 最近在学习使用Python画图,想用subplot画两幅箱型图,分别用来 ...

  10. python 离散化_利用Python将数值型特征进行离散化操作的方法

    利用Python将数值型特征进行离散化操作的方法 如下所示: data = np.random.randn(20) factor = pd.cut(data,4) pd.get_dummies(fac ...

最新文章

  1. 大脑的学习方式如何,机器学习与生物学习的联系将提供「答案」
  2. Debian/linux 安装配置ftp服务器
  3. Java:希望每天叫醒你的不是闹钟而是梦想!
  4. 使用fuse.js_如何使用Fuse.js将搜索添加到React应用
  5. netapp存储常用命令
  6. 【Flink】flink keyby 在 subtask 中分配不均的研究
  7. 如何在centos上安装epel源
  8. excel怎么设置自动计算_Excel工作进度表,自动甘特进度图,函数计算简单实用...
  9. 目标检测(Object Detection)—— M2Det
  10. 【2】基于深度神经网络的脑电睡眠分期方法研究(标签导入)
  11. g ++在linux下编译rapidxml 使用与过程中出现的问题解决
  12. opencv实现电子试卷图片中对号、错误的检测
  13. 移动网络怎么修改服务器地址,移动宽带怎么修改wifi密码?
  14. 2021年美容师(初级)免费试题及美容师(初级)考试试卷
  15. springMVC 解决 “because it is included into a circular dependency(循环导入依赖)” 的问题
  16. DurIAN模型介绍
  17. isNaN、Number.isNaN、isFinite、Number.isFinite
  18. python:实现连接mysql数据库(附完整源码)
  19. java计算器sqrt_比较完整的Java计算器
  20. 对华锐风电的一些看法

热门文章

  1. Docker微服务-镜像构建交付和使用rancher进行容器创建管理
  2. 老路MBA商学课|第001课:机会成本|放弃掉的鱼,是选择熊掌的代价?
  3. 闲鱼日出2000单,不对称信息差的好项目
  4. 字符串ucfirst解析
  5. Mybatis多参数查询与列表查询不同方式实现
  6. 简单记录如何通过 VS Code 和 Auto Build Marlin编译和更新marlin固件
  7. 购买vSphere虚拟化主机的配置建议清单
  8. glsl 抗锯齿锯齿_什么是抗锯齿?
  9. 微信小程序 数据库获取字符串 在view中显示换行
  10. 怎么用java打开pkg文件怎么打开_pkg文件怎么打开,小编教你怎么打开pkg文件