开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 887|回复: 1
收起左侧

[精币悬赏] 谁能用易语言重写下面的代码,感谢!

[复制链接]
结帖率:50% (1/2)
发表于 2020-2-10 19:30:09 | 显示全部楼层 |阅读模式   安徽省芜湖市
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

实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数。将文字对象当作过滤条件,得到文字对象(此处可以是文字或多行文字)。遍历每个文字对象,将文字放到视区中间并绘制一个标记圆。


  1. private void FineText()
  2. {
  3.     // 创建选择集对象

  4.     MxDrawSelectionSet ss = new MxDrawSelectionSet();

  5.     // 创建过滤对象.
  6.     MxDrawResbuf spFilte = new MxDrawResbuf();

  7.     // 把文字对象,当着过滤条件.
  8.     spFilte.AddStringEx("TEXT,MTEXT", 5020);

  9.     // 得到图上,所有文字对象.
  10.     ss.Select2(MCAD_McSelect.mcSelectionSetAll, null, null, null, spFilte);


  11.     // 遍历每个文字.
  12.     bool bFind = false;
  13.     // 获得输入的文字
  14.     string str = textBox1.Text;
  15.     for (int i = 0; i < ss.Count; i++)
  16.     {
  17.         MxDrawEntity ent = ss.Item(i);
  18.         if (ent == null)
  19.             continue;
  20.         if (ent.ObjectName == "McDbText")
  21.         {
  22.             // 是一个文字
  23.             MxDrawText text = (MxDrawText)ent;
  24.             string sTxt = text.TextString;

  25.             if (sTxt == str)
  26.             {
  27.                 // 找到把文字放到视区中间.
  28.                 axMxDrawX1.PutEntityInView(ent.ObjectID, 300);


  29.                 var dLen = axMxDrawX1.ViewLongToDocCoord(80);

  30.                 // 绘制一个标记圆.
  31.                 axMxDrawX1.DrawVectorCircle(text.Position.x,
  32.                                             text.Position.y,
  33.                                             dLen, 65280);
  34.                 bFind = true;
  35.             }
  36.         }
  37.         else if (ent.ObjectName == "McDbMText")
  38.         {
  39.             // 找到一个多行文字

  40.             MxDrawResbuf param = new MxDrawResbuf();
  41.             param.AddObjectId(ent.ObjectID);
  42.             MxDrawMText mtext = (MxDrawMText)ent;

  43.             // 得到多行文字中的,文字内容.
  44.             MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.CallEx("Mx_GetMTextContent", param);
  45.             if (ret.AtString(0) == "Ok")
  46.             {

  47.                 if (ret.AtString(1) == str)
  48.                 {
  49.                     // 把文字放到视区.
  50.                     axMxDrawX1.PutEntityInView(ent.ObjectID, 300);

  51.                     var dLen = axMxDrawX1.ViewLongToDocCoord(80);

  52.                     // 绘制一个标记圆.
  53.                     axMxDrawX1.DrawVectorCircle(mtext.Location.x,
  54.                                                 mtext.Location.y,
  55.                                                 dLen, 65280);
  56.                     bFind = true;

  57.                     break;
  58.                 }
  59.             }
  60.         }


  61.     }
  62.     if (bFind)
  63.         MessageBox.Show("找到文字");
  64.     else
  65.         MessageBox.Show("没有找到文字");
  66. }
复制代码

结帖率:94% (15/16)

签到天数: 16 天

发表于 2020-2-10 19:37:50 | 显示全部楼层   四川省成都市
我的眼睛。。。。。。。。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表