0
点赞
收藏
分享

微信扫一扫

梦想CAD控件COM接口搜索图面上的文字

罗子僧 2022-07-27 阅读 46


主要用到函数说明:

1、_DMxDrawX::NewSelectionSet

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

2、_DMxDrawX::NewResbuf

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

3、IMxDrawResbuf::AddStringEx

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

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

 

4、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(​​​​"没有找到文字"​​​​);​​
​​}​​

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

梦想CAD控件COM接口搜索图面上的文字_数据

查找结果如下图所示:

梦想CAD控件COM接口搜索图面上的文字_封装_02

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

梦想CAD控件COM接口搜索图面上的文字_数据_03

举报

相关推荐

0 条评论