コード例 #1
0
        /// <summary>
        /// 判断是否存在元素
        /// </summary>
        /// <param name="Key">唯一键</param>
        /// <param name="MatchName">匹配的名称</param>
        /// <param name="EventType">事件枚举类型</param>
        /// <param name="Helper">事件帮助类</param>
        /// <returns>是否存在</returns>
        public bool ContainsKey(object Key, string MatchName, SEEvent EventType, out SolidEdgeDocumentEventHelper Helper)
        {
            Helper = null;

            if (_mDicOccurrenceEvent.TryGetValue(Key, out var Lists))
            {
                if (Lists.Count == 0)
                {
                    return(false);
                }

                var list = Lists.Where(x => MatchName.Equals(x[0] + "") && EventType == (SEEvent)x[1]).FirstOrDefault();

                if (list == null)
                {
                    return(false);
                }

                if (list.Count < 3)
                {
                    throw new Exception("元素不匹配");
                }
                else
                {
                    Helper = (SolidEdgeDocumentEventHelper)list[2];
                }

                return(true);
            }
            return(false);
        }
コード例 #2
0
        /// <summary>
        /// 移除事件
        /// </summary>
        /// <param name="Key">唯一键</param>
        /// <param name="MatchName">匹配的名称</param>
        /// <param name="EventType">事件枚举类型</param>
        internal void Remove(object Key, string MatchName, SEEvent EventType)
        {
            lock (_mLock)
            {
                if (_mOccurrenceEventStorage.ContainsKey(Key, MatchName, EventType, out var Helper))
                {
                    Helper.UnregisterSolidEdgeEvent();

                    _mOccurrenceEventStorage.RemoveElement(Key, MatchName, EventType);
                }
            }
        }
コード例 #3
0
 /// <summary>
 /// 移除元素
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="MatchName">匹配的名称</param>
 /// <param name="EventType">事件枚举类型</param>
 public void RemoveElement(object Key, string MatchName, SEEvent EventType)
 {
     if (_mDicOccurrenceEvent.TryGetValue(Key, out var Lists))
     {
         if (Lists.Count != 0)
         {
             var list = Lists.Where(x => MatchName.Equals(x[0] + "") && EventType == (SEEvent)x[1]).FirstOrDefault();
             if (list != null)
             {
                 _mDicOccurrenceEvent[Key].Remove(list);
             }
         }
     }
 }
コード例 #4
0
 /// <summary>
 /// 索引器,根据唯一键,匹配名称,事件枚举类型获取事件帮助类
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="MatchName">匹配的名称</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <returns><see cref="SEEventMethodHelper"/></returns>
 public SolidEdgeDocumentEventHelper this[object Key, string MatchName, SEEvent EventType]
 {
     get
     {
         if (ContainsKey(Key, MatchName, EventType, out var Helper))
         {
             return(Helper);
         }
         return(null);
     }
     set
     {
         if (ContainsKey(Key, MatchName, EventType, out var Helper))
         {
             Helper = value;
         }
     }
 }
コード例 #5
0
        /// <summary>
        /// 添加事件
        /// </summary>
        /// <param name="Key">唯一键</param>
        /// <param name="MatchName">匹配的名称</param>
        /// <param name="EventType">事件枚举类型</param>
        /// <param name="RegisterMethod">事件注册的方法</param>
        /// <param name="NeedRemove">是否先移除</param>
        internal void Add(object Key, string MatchName, SEEvent EventType, Action <object[]> RegisterMethod, bool NeedRemove = false)
        {
            lock (_mLock)
            {
                if (NeedRemove)
                {
                    Remove(Key, MatchName, EventType);
                }

                if (!_mOccurrenceEventStorage.ContainsKey(Key, MatchName, EventType, out SolidEdgeDocumentEventHelper Helper))
                {
                    _mOccurrenceEventStorage.AddElement(Key, MatchName, EventType, Helper = new SolidEdgeDocumentEventHelper(EventType, RegisterMethod));
                }
                else
                {
                    throw new ArgumentException("重复添加事件:" + EventType.ToString());
                }
                Helper.RegisterSolidEdgeEvent(GetActiveObjectDocument(MatchName));
            }
        }
コード例 #6
0
 /// <summary>
 /// 添加元素
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="MatchName">匹配的Occurrence名称</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <param name="Helper">文档事件帮助类</param>
 public void AddElement(object Key, string MatchName, SEEvent EventType, SolidEdgeDocumentEventHelper Helper)
 {
     if (_mDicOccurrenceEvent.TryGetValue(Key, out var Lists))
     {
         Lists.Add(new List <object>()
         {
             MatchName, EventType, Helper
         });
     }
     else
     {
         _mDicOccurrenceEvent.Add(Key, new List <List <object> >()
         {
             new List <object>()
             {
                 MatchName, EventType, Helper
             }
         });
     }
 }
コード例 #7
0
        /// <summary>
        /// 添加事件
        /// </summary>
        /// <param name="key">唯一键(如果Key是字符串类型,则寻找当前ASM下面匹配的ASM文档)</param>
        /// <param name="EventType">事件枚举值</param>
        /// <param name="RegisterMethod">事件执行方法</param>
        /// <param name="NeedRemove">是否需要移除已存在事件</param>
        internal void Add(object Key, SEEvent EventType, Action <object[]> RegisterMethod, bool NeedRemove = false)
        {
            lock (_mLock)
            {
                //系统事件
                if (CheckSolidEdgeApplicationEvent(Key, EventType, RegisterMethod, true, NeedRemove))
                {
                    return;
                }

                //文档事件
                if (NeedRemove)
                {
                    Remove(Key, EventType);
                }

                SolidEdgeDocumentEventHelper Helper = new SolidEdgeDocumentEventHelper(EventType, RegisterMethod);

                if (!_mDicHelperOfDoc.ContainsKey(Key))
                {
                    _mDicHelperOfDoc.Add(Key, new Dictionary <SEEvent, SolidEdgeDocumentEventHelper>(new EnumComparer <SEEvent>())
                    {
                        [EventType] = Helper
                    });
                }
                else
                {
                    if (!_mDicHelperOfDoc[Key].ContainsKey(EventType))
                    {
                        _mDicHelperOfDoc[Key].Add(EventType, Helper);
                    }
                    else
                    {
                        throw new ArgumentException("重复添加事件:" + EventType.ToString());
                    }
                }

                Helper.RegisterSolidEdgeEvent(GetActiveObjectDocument());
            }
        }
コード例 #8
0
        /// <summary>
        /// 移除事件
        /// </summary>
        /// <param name="Key">唯一键</param>
        /// <param name="EventType">事件枚举值</param>
        internal void Remove(object Key, SEEvent EventType)
        {
            lock (_mLock)
            {
                //系统事件
                if (CheckSolidEdgeApplicationEvent(Key, EventType))
                {
                    return;
                }

                //文档事件
                if (_mDicHelperOfDoc.TryGetValue(Key, out var CurrentDic))
                {
                    if (CurrentDic.TryGetValue(EventType, out var Helper))
                    {
                        Helper.UnregisterSolidEdgeEvent();

                        CurrentDic.Remove(EventType);
                    }
                }
            }
        }
コード例 #9
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="EvenType">事件枚举</param>
 /// <param name="RegisterMethod">事件方法</param>
 internal SolidEdgeDocumentEventHelper(SEEvent EvenType, Action <object[]> RegisterMethod)
 {
     _mSEEventType    = EvenType;
     _mRegisterMethod = RegisterMethod;
 }
コード例 #10
0
 /// <summary>
 /// Application相关事件
 /// </summary>
 /// <param name="ObjectKey">唯一键</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <param name="RegisterAction">事件注册方法</param>
 internal SolidEdgeSystemEventHelper(object ObjectKey, SEEvent EventType, Action <object[]> RegisterAction)
 {
     _mObjKey         = ObjectKey;
     _mSEEventType    = EventType;
     _mRegisterMethod = RegisterAction;
 }
コード例 #11
0
 /// <summary>
 /// 添加或者替换事件
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="MatchaName">匹配的名称</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <param name="RegisterMethod">事件注册方法</param>
 public void AddOrReplaceEvent(object Key, string MatchaName, SEEvent EventType, Action <object[]> RegisterMethod)
 {
     Add(Key, MatchaName, EventType, RegisterMethod, true);
 }
コード例 #12
0
 /// <summary>
 /// 移除Occurrence事件
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="MatchName">匹配的名称</param>
 /// <param name="EventType">事件枚举类型</param>
 public void RemoveEvent(object Key, string MatchName, SEEvent EventType)
 {
     Remove(Key, MatchName, EventType);
 }
コード例 #13
0
 /// <summary>
 /// 移除事件
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="EventType">事件枚举类型</param>
 public void RemoveEvent(object Key, SEEvent EventType)
 {
     Remove(Key, EventType);
 }
コード例 #14
0
 /// <summary>
 /// 添加Occurrence事件
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="MatchName">匹配名称</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <param name="RegisterMethod">事件注册方法</param>
 public void AddEvent(object Key, string MatchName, SEEvent EventType, Action <object[]> RegisterMethod)
 {
     Add(Key, MatchName, EventType, RegisterMethod);
 }
コード例 #15
0
 /// <summary>
 /// 添加事件
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <param name="RegisterMethod">事件注册方法</param>
 public void AddEvent(object Key, SEEvent EventType, Action <object[]> RegisterMethod)
 {
     Add(Key, EventType, RegisterMethod);
 }
コード例 #16
0
        /// <summary>
        /// 检查是否为系统事件,并且添加/替换或者移除事件
        /// </summary>
        /// <param name="ObjectKey">唯一键</param>
        /// <param name="EventType">事件枚举类型</param>
        /// <param name="RegisterMethod">事件注册方法</param>
        /// <param name="AddOrRemove">添加或者移除</param>
        /// <param name="Replace">如果存在是否替换</param>
        /// <returns></returns>
        private bool CheckSolidEdgeApplicationEvent(object ObjectKey, SEEvent EventType
                                                    , Action <object[]> RegisterMethod = null
                                                    , bool AddOrRemove = false, bool Replace = false)
        {
            switch (EventType)
            {
            case SEEvent.ApplicationAfterActiveDocumentChange:
            case SEEvent.ApplicationAfterCommandRun:
            case SEEvent.ApplicationAfterDocumentOpen:
            case SEEvent.ApplicationAfterDocumentPrint:
            case SEEvent.ApplicationAfterDocumentSave:
            case SEEvent.ApplicationAfterEnvironmentActivate:
            case SEEvent.ApplicationAfterNewDocumentOpen:
            case SEEvent.ApplicationAfterNewWindow:
            case SEEvent.ApplicationAfterWindowActivate:
            case SEEvent.ApplicationBeforeCommandRun:
            case SEEvent.ApplicationBeforeDocumentClose:
            case SEEvent.ApplicationBeforeDocumentPrint:
            case SEEvent.ApplicationBeforeEnvironmentDeactivate:
            case SEEvent.ApplicationBeforeWindowDeactivate:
            case SEEvent.ApplicationBeforeQuit:
            case SEEvent.ApplicationBeforeDocumentSave:

                //添加
                if (AddOrRemove)
                {
                    SolidEdgeSystemEventHelper Helper = new SolidEdgeSystemEventHelper(ObjectKey, EventType, RegisterMethod);
                    //不存在
                    if (!_mDicHelprOfApp.ContainsKey(ObjectKey))
                    {
                        //添加
                        _mDicHelprOfApp.Add(ObjectKey, new Dictionary <SEEvent, SolidEdgeSystemEventHelper>(new EnumComparer <SEEvent>())
                        {
                            [EventType] = Helper
                        });
                    }
                    //存在主键
                    else
                    {
                        //不存在该事件类型
                        if (!_mDicHelprOfApp[ObjectKey].ContainsKey(EventType))
                        {
                            //添加
                            _mDicHelprOfApp[ObjectKey].Add(EventType, Helper);
                        }
                        //已存在
                        else
                        {
                            //需要替换
                            if (Replace)
                            {
                                //先注销事件
                                _mDicHelprOfApp[ObjectKey][EventType].UnregisterEvent();
                                _mDicHelprOfApp[ObjectKey].Remove(EventType);

                                //添加
                                _mDicHelprOfApp[ObjectKey].Add(EventType, Helper);
                            }
                            //提示重复
                            else
                            {
                                throw new ArgumentException("重复添加事件:" + EventType.ToString());
                            }
                        }
                    }
                    //最后统一注册事件
                    Helper.RegisterEvent();
                }
                //移除
                else
                {
                    if (_mDicHelprOfApp.ContainsKey(ObjectKey))
                    {
                        if (_mDicHelprOfApp[ObjectKey].ContainsKey(EventType))
                        {
                            _mDicHelprOfApp[ObjectKey][EventType].UnregisterEvent();
                        }
                    }
                }

                return(true);
            }
            return(false);
        }
コード例 #17
0
 /// <summary>
 /// 添加或者替换事件
 /// </summary>
 /// <param name="Key">唯一键</param>
 /// <param name="EventType">事件枚举类型</param>
 /// <param name="RegisterMethod">事件注册方法</param>
 public void AddOrReplaceEvent(object Key, SEEvent EventType, Action <object[]> RegisterMethod)
 {
     Add(Key, EventType, RegisterMethod, true);
 }