主要用到函数说明:
1、_DMxDrawX::NewSelectionSet
实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
2、_DMxDrawX::NewResbuf
新创建IMxDrawResbuf对象,构造一个过滤链表。
3、IMxDrawResbuf::AddStringEx
向链表中增加一个string数据,比如:把文字对象,当着过滤条件。
1 | 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 | 构造选择集的过滤数据 |
js中实现代码说明
实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。
1 2 3 4 5 6 7 8 | // 创建选择集对象 ss = mxOcx.NewSelectionSet(); // 创建一个链表对象 var spFilte = mxOcx.NewResbuf(); // 把文字,多行文字当着过滤条件 spFilte.AddStringEx( "TEXT,MTEXT" ,5020); // 得到图上所有文字,5代码,全图选择 ss.Select2(5, null , null , null ,spFilte); |
遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | // 遍历每个文字. 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、效果展示
用户可以通过点击查找图上文字按钮,获取目标文字输入框。如下图所示:
查找结果如下图所示:
如果输入目标文字不存在则提示没有找到文字对象,效果如下: