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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using PdmSwPlugin.Common.Util;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
 
namespace PdmSwPlugin.Main.EventHandler
{
    public class AssDocEventHandler : BaseEventHandler
    {
        AssemblyDoc doc;
        BaseAttacher swAddin;
 
        public AssDocEventHandler(ModelDoc2 modDoc, BaseAttacher addin) : base(modDoc, addin)
        {
            doc = (AssemblyDoc)document;
            swAddin = addin;
        }
 
        override public bool AttachEventHandlers()
        {
            doc.DestroyNotify += new DAssemblyDocEvents_DestroyNotifyEventHandler(OnDestroy);
            doc.NewSelectionNotify += new DAssemblyDocEvents_NewSelectionNotifyEventHandler(OnNewSelection);
            doc.ComponentStateChangeNotify2 += new DAssemblyDocEvents_ComponentStateChangeNotify2EventHandler(ComponentStateChangeNotify2);
            doc.ComponentStateChangeNotify += new DAssemblyDocEvents_ComponentStateChangeNotifyEventHandler(ComponentStateChangeNotify);
            doc.ComponentVisualPropertiesChangeNotify += new DAssemblyDocEvents_ComponentVisualPropertiesChangeNotifyEventHandler(ComponentVisualPropertiesChangeNotify);
            doc.ComponentDisplayStateChangeNotify += new DAssemblyDocEvents_ComponentDisplayStateChangeNotifyEventHandler(ComponentDisplayStateChangeNotify);
 
            // 附加文件保存后的事件
            doc.FileSavePostNotify += new DAssemblyDocEvents_FileSavePostNotifyEventHandler(swAddin.OnActiveDocSaved);
            // 文档属性变更事件
            doc.AddCustomPropertyNotify += new DAssemblyDocEvents_AddCustomPropertyNotifyEventHandler(swAddin.OnActiveDocCustomPropertyAdded);
            doc.ChangeCustomPropertyNotify += new DAssemblyDocEvents_ChangeCustomPropertyNotifyEventHandler(swAddin.OnActiveDocCustomPropertyChanged);
            ConnectModelViews();
            return true;
        }
 
        override public bool DetachEventHandlers()
        {
            doc.DestroyNotify -= new DAssemblyDocEvents_DestroyNotifyEventHandler(OnDestroy);
            doc.NewSelectionNotify -= new DAssemblyDocEvents_NewSelectionNotifyEventHandler(OnNewSelection);
            doc.ComponentStateChangeNotify2 -= new DAssemblyDocEvents_ComponentStateChangeNotify2EventHandler(ComponentStateChangeNotify2);
            doc.ComponentStateChangeNotify -= new DAssemblyDocEvents_ComponentStateChangeNotifyEventHandler(ComponentStateChangeNotify);
            doc.ComponentVisualPropertiesChangeNotify -= new DAssemblyDocEvents_ComponentVisualPropertiesChangeNotifyEventHandler(ComponentVisualPropertiesChangeNotify);
            doc.ComponentDisplayStateChangeNotify -= new DAssemblyDocEvents_ComponentDisplayStateChangeNotifyEventHandler(ComponentDisplayStateChangeNotify);
            // 移除文件保存后的事件
            doc.FileSavePostNotify -= new DAssemblyDocEvents_FileSavePostNotifyEventHandler(swAddin.OnActiveDocSaved);
            // 文档属性变更事件
            doc.AddCustomPropertyNotify -= new DAssemblyDocEvents_AddCustomPropertyNotifyEventHandler(swAddin.OnActiveDocCustomPropertyAdded);
            doc.ChangeCustomPropertyNotify -= new DAssemblyDocEvents_ChangeCustomPropertyNotifyEventHandler(swAddin.OnActiveDocCustomPropertyChanged);
            DisconnectModelViews();
 
            userAddIn.DetachModelEventHandler(document);
            return true;
        }
 
        //Event Handlers
        public int OnDestroy()
        {
            swAddin.OnDocDestory((ModelDoc2)doc);
            DetachEventHandlers();
            swAddin.AfterDocDestroy();
            return 0;
        }
 
        public int OnNewSelection()
        {
            return 0;
        }
 
        //attach events to a component if it becomes resolved
        protected int ComponentStateChange(object componentModel, short newCompState)
        {
            ModelDoc2 modDoc = (ModelDoc2)componentModel;
            swComponentSuppressionState_e newState = (swComponentSuppressionState_e)newCompState;
 
 
            switch (newState)
            {
 
                case swComponentSuppressionState_e.swComponentFullyResolved:
                    {
                        if ((modDoc != null) & !OpenDocContext.IsOpenDoc(modDoc))
                        {
                            swAddin.AttachModelDocEventHandler(modDoc);
                        }
                        break;
                    }
 
                case swComponentSuppressionState_e.swComponentResolved:
                    {
                        if ((modDoc != null) & !OpenDocContext.IsOpenDoc(modDoc))
                        {
                            this.swAddin.AttachModelDocEventHandler(modDoc);
                        }
                        break;
                    }
 
            }
            return 0;
        }
 
        protected int ComponentStateChange(object componentModel)
        {
            ComponentStateChange(componentModel, (short)swComponentSuppressionState_e.swComponentResolved);
            return 0;
        }
 
        public int ComponentStateChangeNotify2(object componentModel, string CompName, short oldCompState, short newCompState)
        {
            return ComponentStateChange(componentModel, newCompState);
        }
 
        int ComponentStateChangeNotify(object componentModel, short oldCompState, short newCompState)
        {
            return ComponentStateChange(componentModel, newCompState);
        }
 
        int ComponentDisplayStateChangeNotify(object swObject)
        {
            Component2 component = (Component2)swObject;
            ModelDoc2 modDoc = (ModelDoc2)component.GetModelDoc();
 
            return ComponentStateChange(modDoc);
        }
 
        int ComponentVisualPropertiesChangeNotify(object swObject)
        {
            Component2 component = (Component2)swObject;
            ModelDoc2 modDoc = (ModelDoc2)component.GetModelDoc();
 
            return ComponentStateChange(modDoc);
        }
    }
}