主要用到函数说明:

1、_DMxDrawX::NewSelectionSet

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

2、_DMxDrawX::NewResbuf

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

3、IMxDrawResbuf::AddStringEx

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


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

4、IMxDrawSelectionSet::Se

lect2

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

参数

说明

[in] MCAD_McSelect Mode

构造选择集方式

[in] VARIANT point1

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

[in] VARIANT point2

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

[in,optional] VARIANT filterType

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

[in,optional] VARIANT filterData

构造选择集的过滤数据

js中实现代码说明

实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。

// 创建选择集对象​​
​​ss = mxOcx.NewSelectionSet(); ​​
​​// 创建一个链表对象 ​​
​​var​​​ ​​spFilte = mxOcx.NewResbuf();​​
​​// 把文字,多行文字当着过滤条件​​
​​spFilte.AddStringEx(​​​​"TEXT,MTEXT"​​​​,5020);​​
​​// 得到图上所有文字,5代码,全图选择​​
​​ss.Select2(5,​​​​null​​​​,​​​​null​​​​,​​​​null​​​​,spFilte);​​

遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。

// 遍历每个文字.​​
​​var​​​ ​​bFind = ​​​​false​​​​;​​

​​// 遍历选择集​​
​​for​​​​(​​​​var​​​ ​​i = 0; i < ss.Count;i++)​​
​​{​​
​​// 得到选集中的实体​​
​​var​​​ ​​ent = ss.Item(i);​​
​​if​​​​(ent == ​​​​null​​​​)​​
​​continue​​​​;​​
​​if​​​ ​​(ent.ObjectName == ​​​​"McDbText"​​​​) {​​
​​// 得到文字内容​​
​​var​​​ ​​sTxt = ent.TextString;​​

​​if​​​ ​​(sTxt == txt) {​​
​​// 把文字放到视区中间.​​
​​mxOcx.PutEntityInView(ent.ObjectID, 300);​​


​​var​​​ ​​dLen = mxOcx.ViewLongToDocCoord(80);​​

​​// 绘制一个标记圆.​​
​​mxOcx.DrawVectorCircle(ent.Position.x,​​
​​ent.Position.y,​​
​​dLen, 65280);​​
​​bFind = ​​​​true​​​​;​​
​​}​​
​​}​​
​​else​​​ ​​if​​​ ​​(ent.ObjectName == ​​​​"McDbMText"​​​​) {​​


​​var​​​ ​​param = mxOcx.NewResbuf();​​
​​param.AddObjectId(ent.ObjectID);​​
​​// 得到多行文字中的文字本内容​​
​​var​​​ ​​ret = mxOcx.CallEx(​​​​"Mx_GetMTextContent"​​​​, param);​​
​​if​​​ ​​(ret.AtString(0) == ​​​​"Ok"​​​​) {​​

​​if​​​ ​​(ret.AtString(1) == txt) {​​
​​// 把文字放到视区.​​
​​mxOcx.PutEntityInView(ent.ObjectID, 300);​​

​​var​​​ ​​dLen = mxOcx.ViewLongToDocCoord(80);​​

​​// 绘制一个标记圆.​​
​​mxOcx.DrawVectorCircle(ent.Location.x,​​
​​ent.Location.y,​​
​​dLen, 65280);​​
​​bFind = ​​​​true​​​​;​​

​​break​​​​;​​
​​}​​
​​}​​
​​}​​
​​ent = ​​​​null​​​​;​​
​​}​​

​​if​​​ ​​(!bFind) {​​
​​alert(​​​​"没有找到文字对象"​​​​);​​
​​}​​
​​// 在这里必须显示释放控件的COM对象指针.​​
​​ss = ​​​​null​​​​;​​
​​spFilte = ​​​​null​​​​;​​
​​CollectGarbage();​​
​​}​​

5、效果展示

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

梦想CAD控件网页版搜索图面上的文字_封装

查找结果如下图所示:

梦想CAD控件网页版搜索图面上的文字_链表_02

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

梦想CAD控件网页版搜索图面上的文字_数据_03