查找文字
查找文字

点击此处下载演示实例


主要用到函数说明:


_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

梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
技术服务
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
产品购买
TEL:156-8136-8971
QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703