From 1e12238d9d6ea02f89aa7150f8507c9d8368a429 Mon Sep 17 00:00:00 2001 From: xcd <834800634@qq.com> Date: 星期四, 09 七月 2020 14:29:15 +0800 Subject: [PATCH] 板卡操作配置编辑时传递轴号和轴名称 --- src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 137 +++++++++++++++++++++++++++++++++++++++------ 1 files changed, 119 insertions(+), 18 deletions(-) diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs index a6d2849..1ff6cd5 100644 --- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs +++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs @@ -190,13 +190,48 @@ [Category("鏉垮崱鎿嶄綔")] [Description("鏉垮崱鎿嶄綔閰嶇疆鍩虹被闆嗗悎锛屼緷娆℃墽琛�")] [TypeConverter(typeof(CollectionCountConvert))] - [Editor(typeof(ComplexCollectionEditor<MotionCardOperationSet>), typeof(UITypeEditor))] + [Editor(typeof(MotionCardOperationSetEditor), typeof(UITypeEditor))] public List<MotionCardOperationSet> OperationCollection { get; set; } = new List<MotionCardOperationSet>(); public string GetDisplayText() { + //OperationCollection.ForEach(o => + //{ + // o.MotionCardId = DeviceId; + //}); + return string.Join(" ", OperationCollection.Select(u => u.GetDisplayText())); } + } + + public class MotionCardOperationSetEditor : ComplexCollectionEditor<MotionCardOperationSet> + { + public MotionCardOperationSetEditor(Type type) : base(type) { } + + IOperationConfig opConfig = null; + public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) + { + if (context.Instance is IOperationConfig config && value is List<MotionCardOperationSet> setList) + { + opConfig = config; + setList.ForEach(set => set.MotionCardId = opConfig.DeviceId); + } + + return base.EditValue(context, provider, value); + } + + protected override object CreateInstance(Type itemType) + { + object obj = base.CreateInstance(itemType); + + if (obj is MotionCardOperationSet set) + { + set.MotionCardId = opConfig?.DeviceId; + } + + return obj; + } + } [Device("MotionOperationSet", "杩愬姩鎿嶄綔閰嶇疆鍩虹被", EnumHelper.DeviceAttributeType.OperationConfig)] @@ -230,18 +265,21 @@ [DisplayName("IO纭瓒呮椂")] public int IOConfirmTimeout { get; set; } = 0; - //[Category("鏉垮崱杩愬姩閰嶇疆")] - //[DisplayName("杩愬姩閰嶇疆闆嗗悎")] - //[Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")] - //[TypeConverter(typeof(CollectionCountConvert))] - //[Editor(typeof(ComplexCollectionEditor<MovingOption>), typeof(UITypeEditor))] - //public List<MovingOption> MovingOps { get; set; } = new List<MovingOption>(); [Category("鏉垮崱杩愬姩閰嶇疆")] [DisplayName("杩愬姩閰嶇疆闆嗗悎")] [Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public MotionOperationCollection MotionOperationCollection { get; set; } = new MotionOperationCollection(); + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(MovingOpsCollectionEditor), typeof(UITypeEditor))] + public List<MovingOption> MovingOps { get; set; } = new List<MovingOption>(); + + public string MotionCardId = ""; + + //[Category("鏉垮崱杩愬姩閰嶇疆")] + //[DisplayName("杩愬姩閰嶇疆闆嗗悎")] + //[Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")] + //[TypeConverter(typeof(ComplexObjectConvert))] + //[Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] + //public MotionOperationCollection MotionOperationCollection { get; set; } = new MotionOperationCollection(); public string GetDisplayText() @@ -276,14 +314,15 @@ } string moving = ""; - //MovingOps.ForEach(i => - //{ - // moving += i.GetDisplayText() + " "; - //}); - //if (moving != "") - //{ - // moving = " 杩愬姩锛�" + moving; - //} + MovingOps.ForEach(i => + { + moving += i.GetDisplayText() + " "; + }); + + if (moving != "") + { + moving = " 杩愬姩锛�" + moving; + } return (preCheck + output + confirm + moving).Trim(); } @@ -444,4 +483,66 @@ //} } + public class MovingOpsCollectionEditor : ComplexCollectionEditor<MovingOption> + { + public MovingOpsCollectionEditor(Type type) : base(type) + { + } + + MotionCardBase motionCard = null; + public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) + { + if (context.Instance is MotionCardOperationSet set) + { + if (!string.IsNullOrWhiteSpace(set.MotionCardId)) + { + using (var scope = GlobalVar.Container.BeginLifetimeScope()) + { + var deviceList = scope.Resolve<List<IDevice>>(); + if (deviceList != null) + { + motionCard = deviceList.FirstOrDefault(u => u.Id == set.MotionCardId) as MotionCardBase; + } + } + } + + if (motionCard != null && value is List<MovingOption> ops) + { + ops.ForEach(o => o.SetAxisSetting(motionCard.IConfig.AxisSettings)); + } + } + + return base.EditValue(context, provider, value); + } + + protected override object SetItems(object editValue, object[] value) + { + Array.ForEach(value, v => + { + if (v is MovingOption op && motionCard != null) + { + op.SetAxisSetting(motionCard.IConfig.AxisSettings); + } + }); + + return base.SetItems(editValue, value); + } + ///// <summary> + ///// 闄愬埗涓�娆¢�変竴涓疄渚� + ///// </summary> + ///// <returns></returns> + //protected override bool CanSelectMultipleInstances() + //{ + // return false; + //} + ///// <summary> + ///// 鎸囧畾鍒涘缓鐨勫璞$被鍨� + ///// </summary> + ///// <returns></returns> + //protected override Type CreateCollectionItemType() + //{ + // return typeof(MovingOption); + //} + } + } -- Gitblit v1.8.0