随着基于CAD的应用软件飞速发展,经常需要保存一些与图形可视性无关的数据,即非图形参数。例如在绘制化验样图中包含品位数据。MxCAD定义一类新的参数——实体扩展数据。扩展数据与实体的可视性无关,而是用户根据需要自定义的数据,因此扩展数据的类型与数目都是任意的。扩展数据不能单独地存在,它必须依附于某一个实体,因而它与实体的图形参数共存。由于扩展数据与实体的可视性无关,因而它对图形毫无影响。由此可见,实体扩展数据的引入,既保持了图形的简洁性,又保留了用户必需的信息。因此,它对实现图形的美观性与数据的完备性有重大意义。
扩展数据组码及其说明
图元名组码说明字符串
1000
扩展数据中的字符串最长为 255 个字节(第 256 个字符将被保存为空字符)应用程序名称1001
字符串名称最长为 31 个字节(第 32 个字符将被保存为空字符)。 注意:请不要向您的扩展数据中添加组码 1001控制字符串1002
一个扩展数据控制字符串即可以是 "{" 也可以是 "}"。这些大括号可以使应用程序通过把数据细分为表来组织它们的数据。左大括号开始表,右大括号结束最近的表。表可以被嵌套图层名称1003
与扩展数据相联系的图层的名称二进制数据1004
二进制数据被组织到可变长度的数据组 中。每个数据组最长为 127 个字 节。在 ASCII DXF 文件中,二进制数据被表示为十六进制数字字符串,每个二进制字节两个字符数据库句柄1005
图形数据库中的图元句柄3 个实数1010,1020,1030
三个实数值的次序为 X、Y 和 Z。它们可被用于表示点或矢量记录世界空间位置1011,1021,1031
与简单的三维点不同,世界空间坐标可被移动、缩放、旋转和连同属于扩展数据的上级图元一起产生镜像。当命令 STRETCH 被用于上级图元且此点位于所选窗口中时,世界空间位置也可被拉伸世界空间位移1012,1022,1032
同样三维点也可被缩放,旋转和连同上级图元一起产生镜像(但不能被移动或拉伸)世界方向1013,1023,1033
同样三维点也可被旋转和连同上级图元一起产生镜像(但不能被移动、缩放或拉伸)实数1040
一个实数距离1041
一个可连同上级图元一起被缩放的实数值缩放比例1042
同样是一个可连同上级图元一起被缩放的实数值。与距离的区别在于此图元为应用程序定义的整数1070
一个 16 位整数(有符号的或无符号的)长整数1071
一个 32 位符号(长型)整数SetXData写数据
主要用到函数说明:
MxDrawEntity::SetXData
设置实体的扩展数据,详细说明如下:
参数说明
[in] IMxDrawResbuf* pXData
扩展数据链表
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
function SetXData(){
var ent = mxOcx.GetEntity("选择要写扩展数据的实体:");
if(ent == null)
{
return;
}
var exData = mxOcx.Call("Mx_NewResbuf","");
exData.AddStringEx("TestApp",1001);
exData.AddStringEx("甲",1000);
ent.SetXData(exData);
}
GetXData读数据
主要用到函数说明:
MxDrawEntity::GetXData
返回实体的扩展数据。
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GetXData(){
var ent = mxOcx.GetEntity("选择要读扩展数据的实体:");
if(ent == null)
{
return;
}
var exData = ent.GetXData("TestApp");
if(exData.Count == 0)
{
alert("没有扩展数据");
}
else
{
// 向命令行窗口打印扩展数据。
exData.PrintData();
alert(exData.AtString(1));
}
}
SetxDataString写数据
主要用到函数说明:
MxDrawEntity::SetxDataString
写一个字符串扩展数据,详细说明如下:
参数说明
[in] BSTR val
字符串值
szAppName
扩展数据名称
nItem
该值所在位置
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function WriteXData(){
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要写扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
if (ent.SetxDataString("ExDataName", 0, "ExDataValue")) {
alert("写扩展数据成功");
}
else {
alert("写扩展数据失败");
}
}
GetxDataString读数据
主要用到函数说明:
MxDrawEntity::GetxDataString2
读取一个字符扩展数据,详细说明如下:
参数说明
[in] LONG lItem
该值所在位置
[out, retval] BSTR* pRet
返回该变量值
szAppName
扩展数据名称
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function ReadXData() {
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要读取扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
var val = ent.GetxDataString2("ExDataName", 0);
if (mxOcx.IsOk()) {
alert(val);
}
else {
alert("没有扩展数!");
}
}
SetxDataDouble写数据
主要用到函数说明:
MxDrawEntity::SetxDataDouble
写一个Double扩展数据,详细说明如下:
参数说明
[in] BSTR val
字符串值
szAppName
扩展数据名称
nItem
该值所在位置
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function SetxDataDouble(){
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要写扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
if (ent.SetxDataDouble("ExDataName", 0, 55.5)) {
alert("写扩展数据成功");
}
else {
alert("写扩展数据失败");
}
}
GetxDataDouble读数据
主要用到函数说明:
MxDrawEntity::GetxDataDouble2
读取一个Double扩展数据,详细说明如下:
参数说明
[in] LONG lItem
该值所在位置
[out, retval] BSTR* pRet
返回该变量值
szAppName
扩展数据名称
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GetxDataDouble() {
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要读取扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
var val = ent.GetxDataDouble2("ExDataName", 0);
if (mxOcx.IsOk()) {
alert(val);
}
else {
alert("没有扩展数!");
}
}
SetxDataLong写数据
主要用到函数说明:
MxDrawEntity::SetxDataLong
写一个long扩展数据,详细说明如下:
参数说明
[in] BSTR val
字符串值
szAppName
扩展数据名称
nItem
该值所在位置
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function SetxDataLong(){
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要写扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
if (ent.SetxDataLong("ExDataName", 0, 123456)) {
alert("写扩展数据成功");
}
else {
alert("写扩展数据失败");
}
}
GetxDataLong读数据
主要用到函数说明:
MxDrawEntity::GetxDataLong2
读取一个Long扩展数据,详细说明如下:
参数说明
[in] LONG lItem
该值所在位置
[out, retval] BSTR* pRet
返回该变量值
szAppName
扩展数据名称
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GetxDataLong() {
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要读取扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
var val = ent.GetxDataLong2("ExDataName", 0);
if (mxOcx.IsOk()) {
alert(val);
}
else {
alert("没有扩展数!");
}
}
GetAllAppName读所有名称
主要用到函数说明:
MxDrawEntity::GetAllAppName
得到所有扩展数据名称,详细说明如下:
参数说明
[out, retval] IMxDrawResbuf** ppRet
返回IMxDrawResbuf扩展数据名称数组
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GetAllAppName() {
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择需要读取的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
//得到所有扩展数据名称
var val = ent.GetAllAppName();
if (val == null) {
return;
}
for(var i = 0;i < val.Count; i++ ){
//返回链表中的指定位置字符串变量值
alert(val.AtString(i));
}
}
DeleteXData删除数据
主要用到函数说明:
MxDrawEntity::DeleteXData
删除扩展数据,详细说明如下:
参数说明
pzsAppName
删除的扩展数据名称,如果为空,删除所有扩展数据
js代码实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function DeleteXData() {
var selEnt = mxOcx.NewComObject("IMxDrawUiPrEntity");
selEnt.message = "选择要删除扩展数据的对象";
if (selEnt.go() != 1)
return;
var ent = selEnt.Entity();
if (ent == null)
return;
if (ent.DeleteXData("ExDataName")) {
alert("删除扩展数据成功");
}
else {
alert("删除扩展数据失败");
}
}