pyautocad文档
版本0.2.0 pyautocad库旨在简化用Python为AutoCAD编写ActiveX自动化脚本
1.1入门
1.1.1安装
如果您安装了pip或easy_install,您可以:
pip install --upgrade pyautocad
或:
easy_install -U pyautocad
此外,还可以从PyPI pyautocad页面下载Windows安装程序。
1.1.2要求
•通信类型
注意:如果您使用的是pip或easy_install 安装,那么它将自动安装。否则您应该手动安装comtypes包。
•可选:
用于处理表格的xlrd和tablib
1.1.3检索AutoCAD ActiveX文档
AutoCAD ActiveX指南和参考的副本可以在AutoCAD安装的帮助目录中到。
• acad_aag.chm - ActiveX and VBA Developer’s Guide
• acadauto.chm - ActiveX and VBA Reference
参考也可以在C:\Program Files\Common Files\AutodeskShared\acadauto.chm 中到 1.1.4下一步是什么?
阅读用法部分,或者在源代码分发的examples文件夹中查真正的应用程序。
注意:示例中的应用程序是特定于俄罗斯工程的,但无论如何,我希望您能在该代码中到一些有趣
的东西。
有关特性的更多信息,请参阅API文档和源代码。
1.2用法
1.2.1主界面及类型
对于第一个示例,我们将使用Autocad (main Automation object) 和
from pyautocad import Autocad, APoint
让我们创建AutoCAD应用程序或连接到已运行的应用程序:
acad = Autocad(create_if_not_exists=True)
acad.prompt("Hello, Autocad from Python\n")
print acad.doc.Name
为了处理AutoCAD文档和对象,我们可以使用ActiveX接口,AutoCAD(从pyautocad)包含了一些简化常见自动化任务的方法,如对象迭代和搜索,从用户选择的对象获取对象,打印消息。
当前活动文档有快捷方式 ActiveDocument - Autocad.doc 和
ActiveDocument.ModelSpace -del
让我们添加一些对象到文档:
p1 = APoint(0, 0)
p2 = APoint(50, 25)
for i in range(5):
python中文文档
text = del.AddText(u'Hi %s!' % i, p1, 2.5)
p1.y += 10
现在我们的文档包含了一些文本、行和圆,让我们迭代它们:
for obj in acad.iter_objects():
print obj.ObjectName
Wea还可以迭代具体类型的对象:
for text in acad.iter_objects('Text'):
print text.TextString, text.InsertionPoint
注意:对象名称可以是不区分大小写的,例如acad.iter_objects(’tex’)将返回AcDbText 和 AcDbMText对象
或多种类型:
for obj in acad.iter_objects(['Text', 'Line']):
print obj.ObjectName
我们也可以在一定条件下到第一个物体。例如,让我们到包含3的第一个文本项:
def text_contains_3(text_obj):
return '3' in text_obj.TextString
text = acad.find_one('Text', predicate=text_contains_3)
print text.TextString
要修改文档中的对象,我们需要到感兴趣的对象并更改其属性。有些属性用常量来描述,例如文本对齐。这些常量可以通过ACAD访问,让我们改变所有文本对象的文本对齐方式
from pyautocad import ACAD
for text in acad.iter_objects('Text'):
old_insertion_point = APoint(text.InsertionPoint)
text.Alignment = ACAD.acAlignmentRight
text.TextAlignmentPoint = old_insertion_point
在前面的代码中,我们已经转换了文本。因为我们不能只使用默认元组设置其他属性,如text.TextAlignmentPoint。如果我们需要改变某个对象的位置,我们应该使用点,例如让我们改变行结束位置
for line in acad.iter_objects('Line'):
p1 = APoint(line.StartPoint)
line.EndPoint = p1 - APoint(20, 0)
1.2.2使用表格
注意:要使用表格,应安装xlrd和tablib库。
为了简化数据的导入和导出,存在一个类。它允许您以流行格式读取和写入表格数据: • csv
• xls
• xlsx (只写)
• json
让我们试着解决一些基本的任务。我们需要将所有文本对象中的文本和位置保存到Excel 文件中,然后将其加载回来。
首先,我们需要向AutoCAD添加一些对象:
from pyautocad import Autocad, APoint
ib.tables import Table
acad = Autocad()
p1 = APoint(0, 0)
for i in range(5):
1.2. 用法
pyautocad文档,Release 0.2.0
obj = del.AddText(u'Hi %s!' % i, p1, 2.5)
p1.y += 10
现在我们可以迭代这些对象并将它们保存到Excel表中:
table = Table()
for obj in acad.iter_objects('Text'):
x, y, z = obj.InsertionPoint
table.writerow([obj.TextString, x, y, z])
table.save('data.xls', 'xls')
在将此数据保存到“data.xls”之后。可能会用一些表处理器软件(例如Microsoft Office
我们可以从文件中检索数据:
data = Table.data_from_file('data.xls')
数据将包含:
[[u'Hi 0!', 0.0, 0.0, 0.0],
[u'Hi 1!', 0.0, 10.0, 0.0],
[u'Hi 2!', 0.0, 20.0, 0.0],
[u'Hi 3!', 0.0, 30.0, 0.0],
[u'Hi 4!', 0.0, 40.0, 0.0]]
另请参见:
在examples/dev_get_table_info.py中使用AutoCAD表对象的示例
1.2.3提高速度
•ActiveX技术非常慢。访问对象属性(如位置、文字等)时,每次调用都会传递到AutoCAD。它可以减慢执行时间。例如,如果您有一个程序,它根据文本的相对位置组合单行文本,您可能需要多次获取每个文本位置。为了加快速度,可以使用代理缓存对象属性(参见类文档中的示例)pyautocad.cache.Cached文件
•要提高AutoCAD表格操作的速度,
可以使用table . regeneratetablesuppressed= True或
handy context manager suppressed_regeneration_of(table):
table = del.AddTable(pos, rows, columns, row_height, col_width) with suppressed_regeneration_of(table):
table.SetAlignment(ACAD.acDataRow, ACAD.acMiddleCenter)
for row in range(rows):
for col in range(columns):
table.SetText(row, col, '%s %s' % (row, col))
1.2.4实用功能
还有一些用于处理AutoCAD文本对象等的实用函数。参见文档。pyautocad.utils文件 1.3应用程序接口
这部分文档涵盖了pyautocad的所有接口
1.3.1 api‐Autocad主界面
class pyautocad.api.Autocad(create_if_not_exists=False, visible=True) AutoCAD主要自动化对象
参数
•create_if_not_exists—如果AutoCAD不运行,则会创建新的实例
•visible -如果为True,新AutoCAD实例将可见(默认)
app
返回活动状态AutoCAD应用程序
如果使用create_if_not_exists=True 创建Autocad 时,如果没有活动的应用程序,它将创建新的Autocad应用程序
doc
返回当前Application(应用程序)的ActiveDocument
ActiveDocument
等同于doc
Application
等同于app
Model
读取的是活动文档的模型空间
iter_layouts(doc=None, skip_model=True)
从doc迭代布局
参数
如果doc=None(默认),则使用ActiveDocument来迭代布局
skip_model-如果为真,则不包括ModelSpace
iter_objects(object_name_or_list=None, block=None, limit=None,dont_cast=False)  从块中迭代对象
参数
•–object_name_or_list - 对象类型名的一部分,或对象类型名的列表
•–block - Autocad block,默认- ActiveDocument.ActiveLayout.Block
•–limit -返回对象的最大数目,默认为infinite
•-dont_cast - 不检索对象的最佳接口,可能会加速迭代。返回
对象应该由调用者进行类型转换
iter_objects_fast(object_name_or_list=None, container=None, limit=None) iter_objects的快捷方式(dont_cast=True)
在正常情况下不应使用
find_one(object_name_or_list, container=None, predicate=None)
返回第一个匹配谓词的对象
参数
•–iter_objects()中的对象名称或类似列表
•–类似于iter_objects()中的容器
•–predicate——可调用的,它接受object作为参数并返回True或False
如果到则返回对象,否则为None
best_interface(obj)
检索对象的最佳接口
prompt(text)
在控制台和AutoCAD提示符中打印文本
get_selection(text=’Select objects’)
要求用户选择对象
参数文本–提示选择
static aDouble(*seq)
static aInt(*seq)
static aShort(*seq)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。