我是靠谱客的博主 还单身小虾米,最近开发中收集的这篇文章主要介绍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

构造选择集的过滤数据

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

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("没有找到文字");

        }

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

c#findtext.png

查找结果如下图所示:

c#findtext1.png

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

c#findtext2.png

最后

以上就是还单身小虾米为你收集整理的CAD查找图上的文字(com接口)的全部内容,希望文章能够帮你解决CAD查找图上的文字(com接口)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部