视频如下:
主要用到函数说明:
_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("没有找到文字"); }
用户可以通过点击查找图上文字按钮,在目标文字输入框输入用户需要查找的文字。如下图所示:
查找结果如下图所示:
如果输入目标文字不存在则提示没有找到文字对象,效果如下: