Autocad二次开发中的XData
Autocad允许应用程序在实体对象上附加XDATA(扩展数据)。XDATA可以附在任何图形实体以及层,线型等非图形实体上,Autocad负责维护这些信息,但不使用这些信息,也不在图纸中直接表现出来。XDATA的每一组均以一个互相不相同的应用程序名开头,组码在1000~1071之间,不同组码对应不同类型的信息。
| 1000 | 扩展数据中的 ASCII 字符串(最长 255 个字节)。 |
|---|---|
| 1001 | 扩展数据的已注册应用程序名(ASCII 字符串,最长 31 个字节)。 |
| 1002 | 扩展数据控制字符串("{" 或 "}")。 |
| 1003 | 扩展数据图层名。 |
| 1004 | 扩展数据中的字节数据组(最长 127 字节)。 |
| 1005 | 扩展数据中的图元句柄。文字字符串,最多 16 位十六进制数字。 |
| 1010 | 扩展数据中的点 DXF:X 值(其后跟组码 1020 和 1030) APP:三维点 |
| 1020, 1030 | DXF:点的 Y 和 Z 值 |
| 1011 | 扩展数据中的三维世界空间位置 DXF:X 值(其后跟组码 1021 和 1031):三维点 |
| 1021, 1031 | DXF:世界空间位置的 Y 和 Z 值。 |
| 1012 | 扩展数据中的三维世界空间位移 DXF:X 值(其后跟组码 1022 和 1032):三维矢量 |
| 1022, 1032 | DXF:世界空间位移的 Y 和 Z 值 |
| 1013 | 扩展数据中的三维世界空间方向 DXF:X 值(其后跟组码 1022 和 1032) APP:三维矢量 |
| 1023, 1033 | DXF:世界空间方向的 Y 和 Z 值 |
| 1040 | 扩展数据浮点值。 |
| 1041 | 扩展数据距离值。 |
| 1042 | 扩展数据比例因子。 |
| 1070 | 扩展数据 16 位符号整数。 |
| 1071 | 扩展数据 32 位符号整数。 |
Autocad提供的这个特性,为应用程序提供了极大的方便,在开发零件序号标注,图框绘制,自动拼图等应用程序时,均利用了XDATA来识别实体的身份,位置,保存图幅,比例等信息供程序使用。
import sys
sys.path.append(r'E:\programming\PycomCAD')
from pycomcad import *
acad=Autocad()
rapps=acad.acad.ActiveDocument.RegisteredApplications
rapps是图形对象的注册应用(registered applications)的集合,它有Add(),Item()方法,当用Add()方法时候,就像该集合添加了一个应用,选择某个特定的app用Item()方法。
rapps.Count
71
rapps.__class__
win32com.gen_py.D5C3CB6F-AA0A-4D45-B02D-CF2974EFD4BEx0x1x0.IAcadRegisteredApplications
以下代码可用以增强RegisteredApplication类的用法:
class rappSpecial(rapps.__class__):
@property
def appNames(self):
names=[]
for item in range(self.Count):
names.append(super().Item(item).Name)
return names
def Item(self,item):
print('intercepting')
if isinstance(item,int):
return super().Item(item)
if isinstance(item,str):
return super().Item(self.appNames.index(item))
rappSpecial(rapps).Item(0).Name
intercepting
'ACAD'
rappSpecial(rapps).Item('ACAD').Name
'ACAD'
rappSpecial(rapps).Count
43
for index in range(rapps.Count):
app=rapps.Item(index)
print(app.Name)
print(app.GetXData(''))
ACAD
(None, None)
ACAD_PSEXT
(None, None)
AcadAnnotative
(None, None)
ACAD_DSTYLE_DIMJAG
(None, None)
ACAD_DSTYLE_DIMTALN
(None, None)
ACAD_NAV_VCDISPLAY
(None, None)
ACAD_TEMP_GRAPHIC
(None, None)
DESIGNERASSEMBLIES
(None, None)
ACAD_DSTYLE_DIMBREAK
(None, None)
AcAecLayerStandard
(None, None)
GENIUS_GENBH_13
(None, None)
GENIUS_GENOENT_13
(None, None)
GENIUS_GENODEF_13
(None, None)
GENIUS_GENOREF_13
(None, None)
GEVID1390703250
(None, None)
GENIUS_GENDTOL_13
(None, None)
ACAD_DSTYLE_DIMRADIAL_EXTENSION
(None, None)
GENIUS_GENREC_14
(None, None)
GENIUS_GENOBJ-N-CEN_13
(None, None)
GENIUS_GENOBJ-N-CRC_13
(None, None)
GENIUS_GENSCREG_15
(None, None)
GENIUS_GENOBJ-N-SDF_13
(None, None)
ACCMTRANSPARENCY
(None, None)
GEVID1474596514
(None, None)
ACM_PP_ASSOCVAR
(None, None)
ACM_PP_DIM_CONSTRAINT_DRAG_GRIP
(None, None)
GEVID1474596516
(None, None)
GEVID1474682654
(None, None)
GEVID1474682656
(None, None)
GEVID1474682658
(None, None)
GEVID1474682660
(None, None)
GradientColor1ACI
(None, None)
GradientColor2ACI
(None, None)
AcDbDynamicBlockGUID
(None, None)
AcDbBlockRepETag
(None, None)
AcDbDynamicBlockTrueName2
(None, None)
ACAD_OBJECT_NAME
(None, None)
ACAD_NETWORK_GROUPS
(None, None)
ACAD_DSTYLE_DIM_LINETYPE
(None, None)
ACAD_DSTYLE_DIM_EXT2_LINETYPE
(None, None)
AcDbAttr
(None, None)
CAXA_DRAFT_TXTSCALE
(None, None)
test
(None, None)
p=rapps.Add('today20210619')
p.SetXData(FilterType([1001,1000,]),FilterData(['test','this is a test in 2021']))
rapps.Item(74).GetXData('')
((1001, 1000), ('test', 'this is a test in 2021'))
对XData进行构造和读取,只用:
SetXData(XdataType,Xdata),
GetXData(AppName,XDataType,XdataValue),
用pycomcad内置的方法就是acad.SetXData(entity,xdataPairs)
p=acad.GetEntity() #拾取实体
acad.SetXData(p[0],[(1001,'test'),(1000,'this is an example')])
p[0].GetXData('')
((1001, 1000), ('test', 'this is an example'))
p[0].GetXData('test')
((1001, 1000), ('test', 'this is an example'))
Autocad二次开发中的XData的更多相关文章
- AutoCAD二次开发——AutoCAD.NET API开发环境搭建
AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...
- 1,下载和部署开发环境--AutoCAD二次开发
环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- AutoCad 二次开发 文字镜像
AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...
- AutoCad 二次开发 jig操作之标注跟随线移动
AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...
- CAD二次开发中浮动面板不浮动的问题
CAD二次开发中创建了一个浮动面板,想让它创建出来后以浮动状态显示, 但是DockSides.None设置完后,面板还是不浮动.搞了很久,最后原来是 需要先设置Visible,再设置DockSides ...
- AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)
AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...
- Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序
在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...
- 我的AutoCAD二次开发之路 (一)
原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...
- AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)
/* * 实习课上讲进阶功能所用文档,因为赶时间从网上抄抄改改,凑合能用,记录一下以备个人后用. * * ----------------------------------------------- ...
随机推荐
- Docker Hub 无法访问,替代镜像
我使用以下配置成功拉取了mysql 8.0.33 和redis lastest,但是不知道究竟是哪一个起作用了 linux 执行 sudo vim /etc/docker/daemon.json 填入 ...
- 如何通过 Linux Bash 技术,让你的独立产品实现一键安装
我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户. 虽然我编写了非常详细的在线文档,说明如 ...
- Elasticsearch搜索引擎学习笔记(一)
核心概念 ES -> 数据库 索引index -> 表 文档 document -> 行(记录) 字段 fields -> 列 安装Elasticsearch 1. 上传后解压 ...
- 【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】
摘要:当代码提交触发时空涟漪,当构建流水线穿越量子维度--欢迎来到自动化构建的终极形态.本文将揭示如何用Jenkinsfile编写量子构建乐章,让每次代码提交都成为跨维度交响乐的音符. 动机:构建系统 ...
- 启动本地node服务器报错: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
背景:今天启动node服务时直接报错,顿时一激灵,之前(几个月前哈哈)明明好好的.主要问题就是在连接数据库上,我登上mysql瞅瞅有没有问题,当要输入密码时,emmm, 很好, 忘记root密码了,于 ...
- JMeter BeanShell 获取 HTTP Request 中的 Name
场景:添加 JMeter log 输出,想输入自定义请求的名称 // 获取 response body prev.getResponseDataAsString(); // 获取 HTTP Reque ...
- iframe高度自适应 完美解决
前言 一直被iframe的高度自适应的问题困扰着,今天终于找到完美解决方案,加上以下css即可. css iframe { display: block; border: none; height: ...
- 利用Windows自带性能计数器分析软件产品的性能瓶颈(转)
利用Windows性能计数器分析软件产品的性能瓶颈转自:http://blog.163.com/jack_test/blog/static/166620663201061594459936/ [摘要] ...
- 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
前言 今天大姚给大家分享一款基于 .NET 开源(GPL-2.0 license).免费.功能强大的 Windows 远程连接管理工具,支持 RDP.VNC.SSH 等多种主流协议:mRemoteNG ...
- Redis 原理 - Set
Set数据结构 使用 intset 当同时满足下面两个条件时,使用 intset 存储数据 元素个数少于512个 (set-max-intset-entries: 512) 所有元素都是整数值 不满足 ...