LOGO
帮助文档
旧版文档
查找文字
查找文字

点击此处下载演示实例

视频如下:


主要用到函数说明:


_DMxDrawX::NewSelectionSet


实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。


_DMxDrawX::NewResbuf


新创建IMxDrawResbuf对象,构造一个过滤链表。


IMxDrawResbuf::AddStringEx


向链表中增加一个string数据,比如:把文字对象,当着过滤条件。


spFilte.AddStringEx("TEXT,MTEXT",5020);



IMxDrawSelectionSet::Select2


根据指定的选择方式在图上构造选择集,详细说明如下:


参数说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

构造择择集时需要使用到的点对象

[in] VARIANT point2

构造择择集时需要使用到的点对象

[in,optional] VARIANT filterType

构造选择集的过滤数据的类型

[in,optional] VARIANT filterData

构造选择集的过滤数据


实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。


      private void FineText()
        {
            // 创建选择集对象
 
            MxDrawSelectionSet ss = new MxDrawSelectionSet();
 
            // 创建过滤对象.
            MxDrawResbuf spFilte = new MxDrawResbuf();
 
            // 把文字对象,当着过滤条件.
            spFilte.AddStringEx("TEXT,MTEXT", 5020);
 
            // 得到图上,所有文字对象.
            ss.Select2(MCAD_McSelect.mcSelectionSetAll, null, null, null, spFilte);
 
 
            // 遍历每个文字.
            bool bFind = false;
   // 获得输入的文字
            string str = textBox1.Text;
            for (int i = 0; i < ss.Count; i++)
            {
                MxDrawEntity ent = ss.Item(i);
                if (ent == null)
                    continue;
                if (ent.ObjectName == "McDbText")
                {
                    // 是一个文字
                    MxDrawText text = (MxDrawText)ent;
                    string sTxt = text.TextString;
 
                    if (sTxt == str)
                    {
                        // 找到把文字放到视区中间.
                        axMxDrawX1.PutEntityInView(ent.ObjectID, 300);
 
 
                        var dLen = axMxDrawX1.ViewLongToDocCoord(80);
 
                        // 绘制一个标记圆.
                        axMxDrawX1.DrawVectorCircle(text.Position.x,
                        text.Position.y,
                        dLen, 65280);
                        bFind = true;
                    }
                }
                else if (ent.ObjectName == "McDbMText")
                {
                    // 找到一个多行文字
 
                    MxDrawResbuf param = new MxDrawResbuf();
                    param.AddObjectId(ent.ObjectID);
                    MxDrawMText mtext = (MxDrawMText)ent;
 
                    // 得到多行文字中的,文字内容.
                    MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.CallEx("Mx_GetMTextContent", param);
                    if (ret.AtString(0) == "Ok")
                    {
 
                        if (ret.AtString(1) == str)
                        {
                            // 把文字放到视区.
                            axMxDrawX1.PutEntityInView(ent.ObjectID, 300);
 
                            var dLen = axMxDrawX1.ViewLongToDocCoord(80);
 
                            // 绘制一个标记圆.
                            axMxDrawX1.DrawVectorCircle(mtext.Location.x,
                                mtext.Location.y,
                                dLen, 65280);
                            bFind = true;
 
                            break;
                        }
                    }
                }
 
 
            }
            if (bFind)
                MessageBox.Show("找到文字");
            else
                MessageBox.Show("没有找到文字");
        }


用户可以通过点击查找图上文字按钮,在目标文字输入框输入用户需要查找的文字。如下图所示:


c#findtext.png


查找结果如下图所示:


c#findtext1.png


如果输入目标文字不存在则提示没有找到文字对象,效果如下:


c#findtext2.png