梦想CAD控件COM接口扩展数据

    xiaoxiao2022-07-02  141

    随着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

    扩展数据链表

     

    c#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    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#代码实现如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    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("删除扩展数据失败");

        }

    }

    最新回复(0)