chr
2024-08-07 22beee93f14d042aa184148c53efb79e23416526
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using SolidWorks.Interop.sldworks;
using System.Collections;
 
namespace PdmSwPlugin.Main.EventHandler
{
    /// <summary>
    /// 通用文档事件处理器
    /// </summary>
    public class BaseEventHandler
    {
        protected ISldWorks iSwApp;
        protected ModelDoc2 document;
        protected BaseAttacher userAddIn;
 
        protected Hashtable openModelViews;
 
        public BaseEventHandler(ModelDoc2 modDoc, BaseAttacher docEventHandler)
        {
            document = modDoc;
            iSwApp = docEventHandler.SwApp;
            userAddIn = docEventHandler;
            openModelViews = new Hashtable();
        }
 
        /// <summary>
        /// 附加事件
        /// </summary>
        /// <returns></returns>
        virtual public bool AttachEventHandlers()
        {
            return true;
        }
 
        /// <summary>
        /// 移除事件
        /// </summary>
        /// <returns></returns>
        virtual public bool DetachEventHandlers()
        {
            return true;
        }
 
        /// <summary>
        /// 附加视图事件
        /// </summary>
        /// <returns></returns>
        public bool ConnectModelViews()
        {
            IModelView mView;
            mView = (IModelView)document.GetFirstModelView();
 
            while (mView != null)
            {
                if (!openModelViews.Contains(mView))
                {
                    DocViewEventHandler dView = new DocViewEventHandler(userAddIn, mView, this);
                    dView.AttachEventHandlers();
                    openModelViews.Add(mView, dView);
                }
                mView = (IModelView)mView.GetNext();
            }
            return true;
        }
 
        /// <summary>
        /// 移除视图事件
        /// </summary>
        /// <returns></returns>
        public bool DisconnectModelViews()
        {
            //Close events on all currently open docs
            DocViewEventHandler dView;
            int numKeys;
            numKeys = openModelViews.Count;
 
            if (numKeys == 0)
            {
                return false;
            }
 
            object[] keys = new object[numKeys];
 
            //Remove all ModelView event handlers
            openModelViews.Keys.CopyTo(keys, 0);
            foreach (ModelView key in keys)
            {
                dView = (DocViewEventHandler)openModelViews[key];
                dView.DetachEventHandlers();
                openModelViews.Remove(key);
                dView = null;
            }
            return true;
        }
 
        public bool DetachModelViewEventHandler(ModelView mView)
        {
            DocViewEventHandler dView;
            if (openModelViews.Contains(mView))
            {
                dView = (DocViewEventHandler)openModelViews[mView];
                openModelViews.Remove(mView);
                mView = null;
                dView = null;
            }
            return true;
        }
    }
}