|
20精币
本帖最后由 大司命 于 2020-2-11 08:29 编辑
梦想CAD控件COM接口搜索图面上的文字点击此处下载演示实例
主要用到函数说明:
_DMxDrawX::NewSelectionSet
实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。
_DMxDrawX::NewResbuf
新创建IMxDrawResbuf对象,构造一个过滤链表。
IMxDrawResbuf::AddStringEx
向链表中增加一个stringxx,比如:把文字对象,当着过滤条件。
1
spFilte.AddStringEx("TEXT,MTEXT",5020);
IMxDrawSelectionSet::Select2
根据指定的选择方式在图上构造选择集,详细说明如下:
参数说明
MCAD_McSelect Mode构造选择集方式
VARIANT point1构造择择集时需要使用到的点对象
VARIANT point2构造择择集时需要使用到的点对象
VARIANT filterType构造选择集的过滤xx的类型
VARIANT filterData构造选择集的过滤xx
实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。
- 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("没有找到文字");
- }
复制代码
|
|