标签:None ACAD Autocad GENIUS 扩展 Item XData 二次开发 rapps
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'))
标签:None,ACAD,Autocad,GENIUS,扩展,Item,XData,二次开发,rapps 来源: https://www.cnblogs.com/johnyang/p/14905127.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。