コード例 #1
0
        private void UnregisterLinks(IToolElement tool)
        {
            IMachineElement me = tool;

            while (me.Parent != null)
            {
                if ((me.LinkToParent != null) && (me.LinkToParent.MoveType == MDE.LinkMoveType.Linear))
                {
                    if (_links.TryGetValue(me.LinkToParent.Id, out int n))
                    {
                        if (n <= 1)
                        {
                            me.LinkToParent.ValueChanged -= OnLinkValueChanged;
                            _links.Remove(me.LinkToParent.Id);
                        }
                        else
                        {
                            _links[me.LinkToParent.Id] = n - 1;
                        }
                    }
                }

                me = me.Parent;
            }
        }
コード例 #2
0
 public static MDE.MachineElement ToModel(this IMachineElement me)
 {
     if (me is IRootElement re)
     {
         return(Convert(re));
     }
     else if (me is IInserterElement inse)
     {
         return(Convert(inse));
     }
     else if (me is IInjectorElement inje)
     {
         return(Convert(inje));
     }
     else if (me is IColliderElement ce)
     {
         return(Convert(ce));
     }
     else if (me is IToolholderElement the)
     {
         return(Convert(the));
     }
     else if (me is IPanelholderElement phe)
     {
         return(Convert(phe));
     }
     else
     {
         return(Convert <MDE.MachineElement>(me));
     }
     return(null);
 }
コード例 #3
0
        private static ToolholderElementViewModel Convert(MDE.ToolholderElement th, IMachineElement parent)
        {
            ToolholderElementViewModel vm = null;

            switch (th.ToolHolderType)
            {
            case MD.Enums.ToolHolderType.Static:
                vm = Convert <StaticToolholderElementViewModel>(th, parent);
                break;

            case MD.Enums.ToolHolderType.AutoSource:
                vm = Convert <AutoSourceToolholderElementViewModel>(th, parent);
                break;

            case MD.Enums.ToolHolderType.AutoSink:
                vm = Convert <AutoSyncToolholderElementViewModel>(th, parent);
                break;

            default:
                throw new NotImplementedException();
            }

            vm.ToolHolderId = th.ToolHolderId;
            vm.Position     = th.Position;
            vm.Direction    = th.Direction;

            return(vm);
        }
コード例 #4
0
        private static IMachineElement Decorate(this IMachineElement element)
        {
            var appType = Machine.ViewModels.Ioc.SimpleIoc <MVMUI.IApplicationInformationProvider> .GetInstance().ApplicationType;

            if (appType == MVMUI.ApplicationType.MachineEditor)
            {
                var name = $"Indicator {++_indicatorCount}";

                if (element is MVMII.IPositionAndDirectionIndicator pdi)
                {
                    element.Children.Add(new MVMI.PositionAndDirectionIndicatorViewModel()
                    {
                        Name = name, Parent = element
                    });
                }
                else if (element is MVMII.IPositionIndicator pi)
                {
                    element.Children.Add(new MVMI.PositionIndicatorViewModel()
                    {
                        Name = name, Parent = element
                    });
                }
                else if (element is MVMII.IPositionsIndicator psi)
                {
                    element.Children.Add(new MVMI.PositionsIndicatorViewModel()
                    {
                        Name = name, Parent = element
                    });
                }
            }

            return(element);
        }
コード例 #5
0
 public static IMachineElement ToViewModel(this MDE.MachineElement me, IMachineElement parent = null)
 {
     if (me is MDE.RootElement re)
     {
         return(Convert(re, parent).Decorate());
     }
     else if (me is MDE.InserterElement ins)
     {
         return(Convert(ins, parent).Decorate());
     }
     else if (me is MDE.InjectorElement inj)
     {
         return(Convert(inj, parent).Decorate());
     }
     else if (me is MDE.ColliderElement ce)
     {
         return(Convert(ce, parent).Decorate());
     }
     else if (me is MDE.ToolholderElement th)
     {
         return(Convert(th, parent).Decorate());
     }
     else if (me is MDE.PanelHolderElement ph)
     {
         return(Convert(ph, parent).Decorate());
     }
     else
     {
         return(Convert <ElementViewModel>(me, parent).Decorate());
     }
 }
コード例 #6
0
        private static Matrix3D GetElementTransformation(IMachineElement e)
        {
            if (e is IPanelElement pe)
            {
                return(pe.GetTransformation());
            }
            else if (e == null)
            //else if ((e == null) || (e.Transformation == null))
            //if ((e == null) || (e.Transformation == null))
            {
                return(Matrix3D.Identity);
            }
            else
            {
                var ts = (e.Transformation != null) ? StaticTransformationConverter.Convert(e.Transformation) : Matrix3D.Identity;

                if (e.LinkToParent != null)
                {
                    ts.Append(GetLinkTransformation(e.LinkToParent));
                }

                if (e.Parent is IToolholderBase th)
                {
                    var dt = DirectionToMatrixConverter.Convert(th.Direction);
                    var pt = StaticTransformationConverter.Convert(th.Position);

                    ts.Append(dt);
                    ts.Append(pt);
                }


                return(ts);
            }
        }
コード例 #7
0
        public bool GetBoundingBox(IMachineElement element, out double minX, out double minY, out double minZ, out double maxX, out double maxY, out double maxZ)
        {
            var result = TryGet(element.ModelFile, out Geometry3D geometry);

            if (result)
            {
                var bb = geometry.Bound;

                minX = bb.Minimum.X;
                minY = bb.Minimum.Y;
                minZ = bb.Minimum.Z;
                maxX = bb.Maximum.X;
                maxY = bb.Maximum.Y;
                maxZ = bb.Maximum.Z;
            }
            else
            {
                minX = 0.0;
                minY = 0.0;
                minZ = 0.0;
                maxX = 0.0;
                maxY = 0.0;
                maxZ = 0.0;
            }

            return(result);
        }
コード例 #8
0
        //public static Matrix3D GetChainTransformation(this IPanelElement panel)
        //{
        //    var matrix = (panel as IMachineElement).GetChainTransformation();

        //    //if (panel is IMovablePanel mp)
        //    //{
        //    //    var m = Matrix3D.Identity;

        //    //    m.OffsetX = mp.OffsetX;
        //    //    matrix.Append(m);
        //    //}

        //    //var mc = Matrix3D.Identity;

        //    //mc.OffsetX = panel.CenterX;
        //    //mc.OffsetY = panel.CenterY;
        //    //mc.OffsetZ = panel.CenterZ;

        //    //matrix.Append(mc);

        //    //var pm = panel.GetTransformation();

        //    return matrix;
        //}

        public static Matrix3D GetChainTransformation(this IMachineElement endOfChain, bool fromRoot = false)
        {
            IMachineElement p      = endOfChain;
            var             list   = new List <IMachineElement>();
            var             matrix = Matrix3D.Identity;

            while (p != null)
            {
                list.Add(p);
                p = p.Parent;
            }

            if (fromRoot)
            {
                for (int i = (list.Count - 1); i >= 0; i--)
                {
                    matrix.Append(GetElementTransformation(list[i]));
                }
            }
            else
            {
                for (int i = 0; i < list.Count; i++)
                {
                    matrix.Append(GetElementTransformation(list[i]));
                }
            }

            return(matrix);
        }
コード例 #9
0
        private static ColliderElementViewModel Convert(MDE.ColliderElement ce, IMachineElement parent)
        {
            ColliderElementViewModel vm = null;

            switch (ce.Type)
            {
            case Enums.ColliderType.Presser:
                vm = Convert <PresserColliderElementViewModel>(ce, parent);
                break;

            case Enums.ColliderType.Gripper:
                vm = Convert <GripperColliderElementViewModel>(ce, parent);
                break;

            case Enums.ColliderType.Detect:
            default:
                throw new NotImplementedException();
            }

            vm.Radius = ce.Radius;

            foreach (var p in ce.Points)
            {
                vm.Points.Add(p);
            }

            return(vm);
        }
コード例 #10
0
        private IElementHandle CreatePositionElementHandle(IMachineElement element)
        {
            var bbProvider = Ioc.SimpleIoc <IElementBoundingBoxProvider> .GetInstance();

            if (bbProvider.GetBoundingBox(element, out double minX, out double minY, out double minZ, out double maxX, out double maxY, out double maxZ))
            {
                var handle = new Handles.ElementHandleViewModel()
                {
                    IsVisible = true,
                    MinX      = minX,
                    MinY      = minY,
                    MinZ      = minZ,
                    MaxX      = maxX,
                    MaxY      = maxY,
                    MaxZ      = maxZ
                };

                handle.Children.Add(new Handles.PositionHandleViewModel()
                {
                    IsVisible = true, Parent = handle, Type = Interfaces.Handles.Type.X
                });
                handle.Children.Add(new Handles.PositionHandleViewModel()
                {
                    IsVisible = true, Parent = handle, Type = Interfaces.Handles.Type.Y
                });
                handle.Children.Add(new Handles.PositionHandleViewModel()
                {
                    IsVisible = true, Parent = handle, Type = Interfaces.Handles.Type.Z
                });

                return(handle);
            }
        public ProbePointChangableTransformer(IMachineElement probeParent, IList <ILinkViewModel> links, IList <IMovablePanel> movables) : base(probeParent)
        {
            _links    = links;
            _movables = movables;

            AttachToLinks();
            AttachToMovable();
        }
コード例 #12
0
        private static RootElementViewModel Convert(MDE.RootElement re, IMachineElement parent)
        {
            var revm = Convert <RootElementViewModel>(re, parent);

            revm.AssemblyName = re.AssemblyName;
            revm.RootType     = re.RootType;

            return(revm);
        }
コード例 #13
0
        private static InserterElementViewModel Convert(MDE.InserterElement ins, IMachineElement parent)
        {
            var vm = ConverterInserter <InserterElementViewModel>(ins, parent);

            vm.Diameter         = ins.Diameter;
            vm.Length           = ins.Length;
            vm.LoaderLinkId     = ins.LoaderLinkId;
            vm.DischargerLinkId = ins.DischargerLinkId;

            return(vm);
        }
コード例 #14
0
        private static T ConverterInserter <T>(MDE.InjectorElement me, IMachineElement parent) where T : InjectorBaseElementViewModel, new()
        {
            var vm = Convert <T>(me, parent);

            vm.InserterId = me.InserterId;
            vm.Position   = new Base.Point()
            {
                X = me.Position.X, Y = me.Position.Y, Z = me.Position.Z
            };
            vm.Direction     = me.Direction;
            vm.InserterColor = me.InserterColor;

            return(vm);
        }
コード例 #15
0
        public IProbePointTransformer GetTransformer(IMachineElement probeParent)
        {
            var links    = GetLinks(probeParent);
            var movables = GetMovables(probeParent);

            if ((links.Count() > 0) || (movables.Count() > 0))
            {
                return(new ProbePointChangableTransformer(probeParent, links, movables));
            }
            else
            {
                return(new ProbePointTransformer(probeParent));
            }
        }
コード例 #16
0
        public void StartMove()
        {
            _elementToMove  = Parent.Parent;
            _startTransform = _elementToMove.Transformation;

            if (_startTransform == null)
            {
                _startTransform = new Matrix()
                {
                    M11 = 1.0, M22 = 1.0, M33 = 1.0
                }
            }
            ;
        }
コード例 #17
0
        private static IList <IMovablePanel> GetMovables(IMachineElement machineElement)
        {
            var list = new List <IMovablePanel>();
            var me   = machineElement;

            while (me.Parent != null)
            {
                if (me is IMovablePanel mp)
                {
                    list.Add(mp);
                }
                me = me.Parent;
            }

            return(list);
        }
コード例 #18
0
        private static IList <ILinkViewModel> GetLinks(IMachineElement machineElement)
        {
            var list = new List <ILinkViewModel>();
            var me   = machineElement;

            while (me.Parent != null)
            {
                if (me.LinkToParent != null)
                {
                    list.Add(me.LinkToParent);
                }
                me = me.Parent;
            }

            return(list);
        }
コード例 #19
0
        private SWMM.Point3D GetRotationCenter(IMachineElement element)
        {
            Machine.ViewModels.Ioc.SimpleIoc <MVMIPR.IElementBoundingBoxProvider>
            .GetInstance()
            .GetBoundingBox(element,
                            out double minX,
                            out double minY,
                            out double minZ,
                            out double maxX,
                            out double maxY,
                            out double maxZ);

            var bb = new SharpDX.BoundingBox(new SharpDX.Vector3((float)minX, (float)minY, (float)minZ), new SharpDX.Vector3((float)maxX, (float)maxY, (float)maxZ));

            return(bb.Center.ToPoint3D());
        }
コード例 #20
0
        private static T Convert <T>(IMachineElement machineElement) where T : MDE.MachineElement, new()
        {
            var m = new T()
            {
                MachineElementID = machineElement.MachineElementID,
                Name             = machineElement.Name,
                ModelFile        = machineElement.ModelFile,
                Color            = machineElement.Color.Convert(),
                Transformation   = machineElement.Transformation.Convert(),
                LinkToParent     = machineElement.LinkToParent.Convert(),
            };

            foreach (var item in machineElement.Children)
            {
                if (!item.IsIndicator())
                {
                    m.Children.Add(item.ToModel());
                }
            }

            return(m);
        }
コード例 #21
0
        private static T Convert <T>(MDE.MachineElement machineElement, IMachineElement parent) where T : ElementViewModel, new()
        {
            var evm = new T()
            {
                MachineElementID = machineElement.MachineElementID,
                Name             = machineElement.Name,
                ModelFile        = machineElement.ModelFile,
                Color            = machineElement.Color,
                Transformation   = machineElement.Transformation,
                LinkToParent     = ConvertLink(machineElement.LinkToParent, machineElement.Name),
                Parent           = parent
            };

            foreach (var item in machineElement.Children)
            {
                evm.Children.Add(item.ToViewModel(evm));
            }

            //foreach (var item in evm.Children) item.Parent = evm;

            return(evm);
        }
コード例 #22
0
        private void RegisterLinks(IToolElement tool)
        {
            IMachineElement me = tool;

            while (me.Parent != null)
            {
                if ((me.LinkToParent != null) && (me.LinkToParent.MoveType == MDE.LinkMoveType.Linear))
                {
                    if (_links.TryGetValue(me.LinkToParent.Id, out int n))
                    {
                        _links[me.LinkToParent.Id] = n + 1;
                    }
                    else
                    {
                        _links.Add(me.LinkToParent.Id, 1);
                        me.LinkToParent.ValueChanged += OnLinkValueChanged;
                    }
                }

                me = me.Parent;
            }
        }
コード例 #23
0
        public IElementHandle Create(IMachineElement element, MDE.ElementHandle type = MDE.ElementHandle.Position)
        {
            IElementHandle handle = null;

            if ((element != null) && !string.IsNullOrEmpty(element.ModelFile))
            {
                switch (type)
                {
                case MDE.ElementHandle.Position:
                    handle = CreatePositionElementHandle(element);
                    break;

                case MDE.ElementHandle.Rotation:
                    handle = CreaterRotationElementHandle(element);
                    break;

                default:
                    break;
                }
            }

            return(handle);
        }
コード例 #24
0
 public ElementRotator(IMachineElement element)
 {
     _element = element;
     _matrix = StaticTransformationConverter.Convert(element.Transformation);
     _center = GetCenter(element);
 }
コード例 #25
0
 public IElementRotator Create(IMachineElement element) => new ElementRotator(element);
コード例 #26
0
 private static bool IsIndicator(this IMachineElement element) => element is MVMII.IIndicatorProxy;
コード例 #27
0
 public ProbePointTransformer(IMachineElement probeParent)
 {
     _probeParent = probeParent;
 }
コード例 #28
0
 private static InjectorElementViewModel Convert(MDE.InjectorElement inj, IMachineElement parent) => ConverterInserter <InjectorElementViewModel>(inj, parent);
コード例 #29
0
        private static PanelHolderElementViewModel Convert(MDE.PanelHolderElement ph, IMachineElement parent)
        {
            var vm = Convert <PanelHolderElementViewModel>(ph, parent);

            vm.PanelHolderId   = ph.PanelHolderId;
            vm.PanelHolderName = ph.PanelHolderName;
            vm.Position        = ph.Position;
            vm.Corner          = ph.Corner;

            return(vm);
        }