Autocad二次開發中的XData
阿新 • • 發佈:2021-06-20
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'))