梦想CAD控件COM接口搜索图面上的文字

主要用到函数说明:

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

构造选择集的过滤数据

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

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

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

      private void FineText()

        {

            // 创建选择集对象

  

            MxDrawSelectionSet ss = new MxDrawSelectionSet();

  

            // 创建过滤对象.

            MxDrawResbuf spFilte = new MxDrawResbuf();

  

            // 把文字对象,当着过滤条件.

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

  

            // 得到图上,所有文字对象.

            ss.Select2(MCAD_McSelect.mcSelectionSetAll, nullnullnull, 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("没有找到文字");

        }

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

c#findtext.png

查找结果如下图所示:

c#findtext1.png

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

c#findtext2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值