LOGO
帮助文档
旧版文档
简介SetXData写数据GetXData读数据SetxDataString写数据GetxDataString读数据SetxDataDouble写数据GetxDataDouble读数据SetxDataLong写数据GetxDataLong读数据GetAllAppName读所有名称DeleteXData删除数据
简介

用户可给图纸上的对象设置扩展数据,这些扩展数据可以是用户实际需求的专业数据,扩展数据支持字符串,double,int,等类型。每个扩展数据都一个扩展数据名称,每个名称下也可能有多个扩展数据,一个实体可以有多个扩展数据名称,这些扩展数据在内存中是一个链表来存放的,每个链结代表一个数据,每个链结中字符串数据长度不超过200(DWG图纸格式确定了),链表类MxDrawResbuf详细说明参考:

http://www.mxdraw.com/help/IMxDrawResbuf.htm点击此处下载演示实例



在DWG文件格式中,所有对象的数据都一个DXF组码,不同的DXF组码代表不同的数据类型,这样可能在百度搜索关键词"DXF组码"找到相关教程。

扩展数据中的每个数据类型也同样有一个DXF组码,比如设置一个字符串数据,并指定dxf组码,使用MxDrawResbuf的AddStringEx函数。

            MxDrawResbuf xData = new MxDrawResbuf();
            // 设置扩展数据名称 TestApp
            xData.AddStringEx("TestApp",1001);
            // 设置字符串数据,DXF组码是1000
            xData.AddStringEx("string data", 1000);
            // 设置一个 Long数据,DXF组码是1071
            xData.AddLongEx(77677, 1071);
            
           // 把准备好的数据,写到实体上。
            ent.SetXData(xData);


DXF组码说明



图元名组码说明
字符串

1000

扩展数据中的字符串最长为 255 个字节(第 256 个字符将被保存为空字符)
应用程序名称

1001

字符串名称最长为 31 个字节(第 32 个字符将被保存为空字符)。 注意:请不要向您的扩展数据中添加组码 1001
控制字符串

1002

一个扩展数据控制字符串即可以是 "{" 也可以是 "}"。这些大括号可以使应用程序通过把数据细分为表来组织它们的数据。左大括号开始表,右大括号结束最近的表。表可以被嵌套
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

扩展数据链表


c#代码实现如下:


private void SetXData()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity ent = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的实体:"));
 
    if (ent == null)
    {
        return;
    }
    MxDrawResbuf exData = new MxDrawResbuf();
    exData.AddStringEx("TestApp", 1001);
    exData.AddStringEx("甲", 1000);
    ent.SetXData(exData);
}
GetXData读数据

主要用到函数说明:


MxDrawEntity::GetXData


返回实体的扩展数据。


c#代码实现如下:


private void GetXData()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity ent = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要读扩展数据的实体:"));
    if (ent == null)
    {
        return;
    }
    MxDrawResbuf exData = ent.GetXData("");
 
    if (exData.Count == 0)
    {
        MessageBox.Show("没有扩展数据");
 
    }
    else
    {
        // 向命令行窗口打印扩展数据。
        exData.PrintData();
        MessageBox.Show(exData.AtString(1));
    }
}
SetxDataString写数据

主要用到函数说明:


MxDrawEntity::SetxDataString


写一个字符串扩展数据,详细说明如下:


参数 说明

[in] BSTR val

字符串值

szAppName

扩展数据名称

nItem

该值所在位置


C#代码实现如下:


private void WriteXData()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的对象"));
    if (selEnt == null)
        return;
    if (selEnt.SetxDataString("ExDataName", 0, "ExDataValue"))
    {
        MessageBox.Show("写扩展数据成功");
    }
    else
    {
        MessageBox.Show("写扩展数据失败");
    }
}
GetxDataString读数据

主要用到函数说明:


MxDrawEntity::GetxDataString2


读取一个字符扩展数据,详细说明如下:


参数 说明

[in] LONG lItem

该值所在位置

[out, retval] BSTR* pRet

返回该变量值

szAppName

扩展数据名称


C#代码实现如下:


private void ReadXData()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的对象"));
 
    if (selEnt == null)
        return;
 
    string val = selEnt.GetxDataString2("ExDataName", 0);
    if (axMxDrawX1.IsOk())
    {
        MessageBox.Show(val);
    }
    else
    {
        MessageBox.Show("没有扩展数!");
    }
}
SetxDataDouble写数据

主要用到函数说明:


MxDrawEntity::SetxDataDouble


写一个Double扩展数据,详细说明如下:


参数说明

[in] BSTR val

字符串值

szAppName

扩展数据名称

nItem

该值所在位置


C#代码实现如下:


private void SetxDataDouble()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的对象"));
 
    if (selEnt == null)
        return;
    if (selEnt.SetxDataDouble("ExDataName", 0, 55.5))
    {
        MessageBox.Show("写扩展数据成功");
    }
    else
    {
        MessageBox.Show("写扩展数据失败");
    }
}
GetxDataDouble读数据

主要用到函数说明:


MxDrawEntity::GetxDataDouble2


读取一个Double扩展数据,详细说明如下:


参数说明

[in] LONG lItem

该值所在位置

[out, retval] BSTR* pRet

返回该变量值

szAppName

扩展数据名称


C#代码实现如下:


private void GetxDataDouble()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的对象"));
 
    if (selEnt == null)
        return;
 
    double val = selEnt.GetxDataDouble2("ExDataName", 0);
    if (axMxDrawX1.IsOk())
    {
        MessageBox.Show(val.ToString());
    }
    else
    {
        MessageBox.Show("没有扩展数!");
    }
}
SetxDataLong写数据

主要用到函数说明:


MxDrawEntity::SetxDataLong


写一个long扩展数据,详细说明如下:


参数 说明

[in] BSTR val

字符串值

szAppName

扩展数据名称

nItem

该值所在位置


c#代码实现如下:


private void SetxDataLong()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的对象"));
 
    if (selEnt == null)
        return;
    if (selEnt.SetxDataLong("ExDataName", 0, 123456))
    {
        MessageBox.Show("写扩展数据成功");
    }
    else
    {
        MessageBox.Show("写扩展数据失败");
    }
}
GetxDataLong读数据

主要用到函数说明:


MxDrawEntity::GetxDataLong2


读取一个Long扩展数据,详细说明如下:


参数 说明

[in] LONG lItem

该值所在位置

[out, retval] BSTR* pRet

返回该变量值

szAppName

扩展数据名称


c#代码实现如下:


private void GetxDataLong()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要写扩展数据的对象"));
 
    if (selEnt == null)
        return;
 
    int val = selEnt.GetxDataLong2("ExDataName", 0);
    if (axMxDrawX1.IsOk())
    {
        MessageBox.Show(val.ToString());
    }
    else
    {
        MessageBox.Show("没有扩展数!");
    }
}
GetAllAppName读所有名称

主要用到函数说明:


MxDrawEntity::GetAllAppName


得到所有扩展数据名称,详细说明如下:


参数说明

[out, retval] IMxDrawResbuf** ppRet

返回IMxDrawResbuf扩展数据名称数组


c#代码实现如下:


private void GetAllAppName()
{
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要读扩展数据的对象"));
 
    if (selEnt == null)
        return;
    //得到所有扩展数据名称
    MxDrawResbuf val = selEnt.GetAllAppName();
    if (val == null)
    {
        return;
    }
    for (var i = 0; i < val.Count; i++)
    {
        //返回链表中的指定位置字符串变量值
        MessageBox.Show(val.AtString(i));
    }
}
DeleteXData删除数据

主要用到函数说明:


MxDrawEntity::DeleteXData


删除扩展数据,详细说明如下:


参数说明

pzsAppName

删除的扩展数据名称,如果为空,删除所有扩展数据


c#代码实现如下:


private void DeleteXData()
{
 
    MxDrawUtility mxUtility = new MxDrawUtility();
    MxDrawPoint point;
    MxDrawEntity selEnt = (MxDrawEntity)(mxUtility.GetEntity(out point, "选择要读扩展数据的对象"));
 
    if (selEnt == null)
        return;
    //删除的扩展数据名称,如果为空,删除所有扩展数据。 
    if (selEnt.DeleteXData("ExDataName"))
    {
        MessageBox.Show("删除扩展数据成功");
    }
    else
    {
        MessageBox.Show("删除扩展数据失败");
    }
}