Ejemplo n.º 1
0
        public static MachineViewModels.ViewModels.Links.ILinkViewModel Convert(this ILink link, MachineElementViewModel mevm, Transform3DGroup transformGroup, Point3D rotationCenter)
        {
            if (link == null)
            {
                return(null);
            }

            if (link is LinearPosition linPos)
            {
                var vm     = new LinearPositionViewModel();
                var action = GetLinearPositionLinkAction(transformGroup, linPos.Direction, linPos.Pos);

                MachineViewModels.Extensions.LinkExtensions.UpdateViewModel(vm, linPos);
                vm.Description = mevm.Name;
                if (action != null)
                {
                    vm.ValueChanged += (s, e) => action(e);
                }

                return(vm);
            }
            else if (link is LinearPneumatic pnmPos)
            {
                var vm = new LinearPneumaticViewModel();

                MachineViewModels.Extensions.LinkExtensions.UpdateViewModel(vm, pnmPos);
                vm.Description = mevm.Name;
                ApplyLinearPneumaticLinkAction(transformGroup, vm, mevm);

                return(vm);
            }
            else if (link is RotaryPneumatic pnmRot)
            {
                var vm = new RotaryPneumaticViewModel();

                MachineViewModels.Extensions.LinkExtensions.UpdateViewModel(vm, pnmRot);
                vm.Description = mevm.Name;
                ApplyRotaryPneumaticLinkAction(transformGroup, rotationCenter, vm);

                return(vm);
            }
            else
            {
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 2
0
        private static Action <double> GetSetTraslationAction(LinearPneumaticViewModel vm, TranslateTransform3D tt)
        {
            Action <double> action = null;

            switch (vm.Direction)
            {
            case LinkDirection.X:
                action = (d) => tt.OffsetX = d;
                break;

            case LinkDirection.Y:
                action = (d) => tt.OffsetY = d;
                break;

            case LinkDirection.Z:
                action = (d) => tt.OffsetZ = d;
                break;

            default:
                throw new ArgumentException("Invalid traslation direction!");
            }

            return(action);
        }
Ejemplo n.º 3
0
        private static Func <double> GetGetTraslationFuncion(LinearPneumaticViewModel vm, TranslateTransform3D tt)
        {
            Func <double> function = null;

            switch (vm.Direction)
            {
            case LinkDirection.X:
                function = () => tt.OffsetX;
                break;

            case LinkDirection.Y:
                function = () => tt.OffsetY;
                break;

            case LinkDirection.Z:
                function = () => tt.OffsetZ;
                break;

            default:
                throw new ArgumentException("Invalid traslation direction!");
            }

            return(function);
        }
Ejemplo n.º 4
0
        private static void ApplyLinearPneumaticLinkAction(Transform3DGroup transformGroup, LinearPneumaticViewModel vm, MachineElementViewModel mevm)
        {
            if (transformGroup != null)
            {
                var tt = new TranslateTransform3D();

                transformGroup.Children.Add(tt);

                var setAction = GetSetTraslationAction(vm, tt);

                vm.SetPosition = setAction;
                vm.GetPosition = GetGetTraslationFuncion(vm, tt);

                vm.ValueChanged += (s, e) =>
                {
                    var onPos         = vm.OnPos;
                    var offPos        = vm.OffPos;
                    var tOn           = vm.TOn;
                    var tOff          = vm.TOff;
                    var toolActivator = vm.ToolActivator;
                    var lmevm         = mevm;
                    var inserterId    = vm.InserterId;

                    EvaluateLinkDataByCollision(vm, e, ref onPos, offPos, ref tOn, ref tOff);

                    if (vm.IsGradualTransactionEnabled)
                    {
                        var to = e ? onPos : offPos;
                        var t  = e ? tOn : tOff;
                        vm.OnMovementStarting?.Invoke(vm);
                        vm.SetPosition = (d) =>
                        {
                            setAction(d);
                            if (d == to)
                            {
                                vm.OnMovementCompleted?.Invoke(vm);
                                if (toolActivator)
                                {
                                    lmevm.ManageToolActivation(e);
                                }
                                if (inserterId > 0)
                                {
                                    vm.ManageInserter(e);
                                }
                            }
                        };
                        LinearLinkMovementManager.Add(vm.Id, vm.Pos, to, t);
                    }
                    else
                    {
                        var v = e ? onPos : offPos;
                        vm.OnMovementStarting?.Invoke(vm);
                        setAction(v);
                        vm.OnMovementCompleted?.Invoke(vm);
                        if (toolActivator)
                        {
                            lmevm.ManageToolActivation(e);
                        }
                        if (inserterId > 0)
                        {
                            vm.ManageInserter(e);
                        }
                    }
                };
            }
        }