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的更多相关文章

  1. AutoCAD二次开发——AutoCAD.NET API开发环境搭建

    AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...

  2. 1,下载和部署开发环境--AutoCAD二次开发

    环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...

  3. AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

    AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...

  4. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  5. AutoCad 二次开发 jig操作之标注跟随线移动

    AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...

  6. CAD二次开发中浮动面板不浮动的问题

    CAD二次开发中创建了一个浮动面板,想让它创建出来后以浮动状态显示, 但是DockSides.None设置完后,面板还是不浮动.搞了很久,最后原来是 需要先设置Visible,再设置DockSides ...

  7. AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)

    AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...

  8. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

  9. 我的AutoCAD二次开发之路 (一)

    原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...

  10. AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)

    /* * 实习课上讲进阶功能所用文档,因为赶时间从网上抄抄改改,凑合能用,记录一下以备个人后用. * * ----------------------------------------------- ...

随机推荐

  1. D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> off

    D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> ...

  2. autMan奥特曼机器人-内置微信如何定时给公众号发消息

    autMan版本要求2.1.3以上 一.打开左侧栏的本地开发,然后从实时日志获取公众号的ID或名称 ![2024-10-23T01:45:34.png][1] ![2024-10-23T01:44:5 ...

  3. Typecho 引入JS简单的实现点击文字即可复制

    在文章中插入大量无意义内容一不美观,二不便复制,不如使用 js 创建隐藏内容的复制按钮吧. 引入 JS 本主题:依次进入 控制台 - 外观 - 设置外观 - 主题自定义扩展,将以下代码加入到 自定义 ...

  4. FastAPI路由与请求处理全解:手把手打造用户管理系统 🔌

    title: FastAPI路由与请求处理全解:手把手打造用户管理系统 date: 2025/3/2 updated: 2025/3/2 author: cmdragon excerpt: 通过咖啡店 ...

  5. LCP 17. 速算机器人

    地址:https://leetcode-cn.com/problems/nGK0Fy/ <?php /** LCP 17. 速算机器人 小扣在秋日市集发现了一款速算机器人.店家对机器人说出两个数 ...

  6. 【MATLAB习题】曲柄滑块机构运动学分析

    曲柄滑块机构分享 1. 机构简图 2. 实例 3. matlab code function main %输入已知数据 clear; i1=100; i2=300; e=0; hd = pi/180; ...

  7. vue 判断某个时间小于当前时间

    如下 new Date().getTime() 获取当前时间(毫秒) 我需要对比的时间为秒,所以需要除于1000 <div v-if="scope.row.created_at < ...

  8. 【SqlServer】datetime存储精度问题探究

    最近使用sqlserver 2012的时候注意到datetime类型的毫秒的精度是存在问题的,好奇是怎么回事,特意来研究一下 问题复现 如下的sql执行 UPDATE AlarmItem SET cr ...

  9. CSAPP学习笔记——chapter9 虚拟内存

    CSAPP学习笔记--chapter9 虚拟内存 虚拟内存提供三个重要的功能.第一,它在主存中自动缓存最近使用的存放磁盘上的虚拟地址空间的内容.虚拟内存缓存中的块叫做页.对磁盘上页的引用会触发缺页,缺 ...

  10. 【调研】Vision Language Model Safety

    Adversarial Attacks White-box Attacks Task-specific Attacks 的目标是针对某个具体的任务(如图像描述生成.指代表达理解等),通过精心设计的对抗 ...