public static PlaneProbeViewModel Create(MachineElementViewModel parent, Point3D point, double width = 100.0, double height = 100.0)
        {
            var t       = parent.GetChainTansform();
            var p       = t.Invert().Transform(point);
            var builder = new MeshBuilder();
            var points  = new List <Point3D>()
            {
                p + new Vector3D(-width / 2.0, -height / 2.0, 0.0),
                p + new Vector3D(-width / 2.0, height / 2.0, 0.0),
                p + new Vector3D(width / 2.0, height / 2.0, 0.0),
                p + new Vector3D(width / 2.0, -height / 2.0, 0.0)
            };

            builder.AddPolygon(points);

            return(new PlaneProbeViewModel()
            {
                X = p.X,
                Y = p.Y,
                Z = p.Z,
                SizeX = width,
                SizeY = height,
                Parent = parent,
                MeshGeometry = builder.ToMesh(),
                Fill = Brushes.Yellow
            });
        }
        private static MachineElementViewModel CreateViewModel(Models.MachineElement me)
        {
            MachineElementViewModel vm;

            switch (me.ToolHolderType)
            {
            case MachineModels.Enums.ToolHolderType.None:
                vm = new MachineElementViewModel();
                break;

            case MachineModels.Enums.ToolHolderType.Static:
                vm = new StaticToolHolderViewModel().UpdateFromModel(me.ToolHolderData);
                break;

            case MachineModels.Enums.ToolHolderType.AutoSource:
                vm = new AutoSourceToolHolderViewModel().UpdateFromModel(me.ToolHolderData);
                break;

            case MachineModels.Enums.ToolHolderType.AutoSink:
                vm = new AutoSinkToolHolderViewModel().UpdateFromModel(me.ToolHolderData);
                break;

            default:
                throw new NotImplementedException();
            }

            vm.Visible = true;

            return(vm);
        }
        public static MachineElementViewModel ToViewModel(this MachineModels.Models.MachineElement me, MachineElementViewModel parentViewModel = null)
        {
            var vm = new MachineElementViewModel()
            {
                Name             = me.Name,
                ModelFile        = me.ModelFile,
                Color            = me.Color.Convert(),
                LinkToParentType = me.LinkToParentType,
                LinkToParentData = me.LinkToParentData.Convert(),
                Parent           = parentViewModel,
                ToolHolderType   = me.ToolHolderType,
                ToolHolderData   = me.ToolHolderData?.ToViewModel(),
                ColliderGeometry = me.ColiderType,
                Collider         = me.Collider.ToViewMode(),
                HasPanelHolder   = me.HasPanelHolder,
                PanelHolder      = me.PanelHolder.ToViewModel(),
                InserterType     = me.InserterType,
                InserterData     = me.Inserter.ToViewModel()
            };

            vm.Children = me.Children.Convert(vm);

            if (vm.Model != null)
            {
                vm.Model.Transform = new System.Windows.Media.Media3D.MatrixTransform3D(me.TrasformationMatrix3D.Convert());
            }

            return(vm);
        }
        public static MachineElementViewModel ToViewModel(this BaseInserter m, MachineElementViewModel parent = null)
        {
            InserterBaseViewModel vm = null;

            if (m is Inserter ins)
            {
                var insVm = new InserterViewModel()
                {
                    Length           = ins.Length,
                    Diameter         = ins.Diameter,
                    LoaderLinkId     = ins.LoaderLinkId,
                    DischargerLinkId = ins.DischargerLinkId
                };

                vm = insVm;
            }
            else if (m is Injector inj)
            {
                vm = new InjectorViewModel();
            }

            vm?.UpdateFrom(m);
            if (vm != null && parent != null)
            {
                vm.Parent = parent;
            }

            return(vm);
        }
        public static PlaneProbeViewModel Create(MachineElementViewModel parent, Point3D point, double width = 100.0, double height = 100.0)
        {
            var t = parent.GetChainTansform();
            var p = t.Inverse.Transform(point);

            //var builder = new MeshBuilder();
            //var points = new List<Point3D>()
            //{
            //    p + new Vector3D(-width / 2.0, -height / 2.0, 0.0),
            //    p + new Vector3D(-width / 2.0, height / 2.0, 0.0),
            //    p + new Vector3D(width / 2.0, height / 2.0, 0.0),
            //    p + new Vector3D(width / 2.0, -height / 2.0, 0.0)
            //};

            //builder.AddPolygon(points);

            //return new PlaneProbeViewModel()
            //{
            //    X = p.X,
            //    Y = p.Y,
            //    Z = p.Z,
            //    SizeX = width,
            //    SizeY = height,
            //    Parent = parent,
            //    MeshGeometry = builder.ToMesh(),
            //    Fill = Brushes.Yellow
            //};

            return(null);
        }
Ejemplo n.º 6
0
        public static MachineElementViewModel ToViewModel(this Collider m, MachineElementViewModel parent = null)
        {
            MachineElementViewModel vm = null;

            if (m is PointsCollider pcm)
            {
                switch (pcm.Type)
                {
                case MachineModels.Enums.ColliderType.Presser:
                {
                    var pcvm = new PointsColliderViewModel()
                    {
                        Type     = ConvertColliderType(pcm.Type),
                        Radius   = pcm.Radius,
                        Points   = pcm.Points.Select((p) => p.ToPoint3D()).ToList(),
                        Parent   = parent,
                        Material = PhongMaterials.Green
                    };

                    pcvm.Geometry = GetMeshGeometry(pcvm.Radius, pcvm.Points);

                    AttachProbeToLinkForPresser(pcvm);

                    vm = pcvm;
                }
                break;

                case MachineModels.Enums.ColliderType.Gripper:
                {
                    var pcvm = new PointsColliderViewModel()
                    {
                        Type     = ConvertColliderType(pcm.Type),
                        Radius   = pcm.Radius,
                        Points   = pcm.Points.Select((p) => p.ToPoint3D()).ToList(),
                        Parent   = parent,
                        Material = PhongMaterials.Red
                    };

                    pcvm.Geometry = GetMeshGeometry(pcvm.Radius, pcvm.Points);

                    AttachProbeToLink(pcvm);

                    vm = pcvm;
                }
                break;

                case MachineModels.Enums.ColliderType.Detect:
                default:
                    throw new NotImplementedException();
                }
            }
            else
            {
                throw new ArgumentException("Unexpected collider type!");
            }

            return(vm);
        }
        private static void AddParentTansform(MachineElementViewModel vm, Transform3DGroup tg)
        {
            tg.Children.Add(vm.Transform);

            if (vm.Parent != null)
            {
                AddParentTansform(vm.Parent, tg);
            }
        }
        private static void UpdateFromModel(Models.MachineElement me, MachineElementViewModel vm)
        {
            vm.Name         = me.Name;
            vm.Geometry     = LoadGeometry(me.ModelFile);
            vm.Transform    = ConvertTransform(me.TrasformationMatrix3D);
            vm.Material     = me.Color.ToMaterial();
            vm.LinkToParent = me.LinkToParentData.Convert();

            if (vm.LinkToParent != null)
            {
                vm.LinkToParent.Description = vm.Name;
            }
            vm.ApplyLinkAction();
        }
        public static Transform3D GetChainTansform(this MachineElementViewModel vm)
        {
            if (vm != null)
            {
                var tg = new Transform3DGroup();

                AddParentTansform(vm, tg);

                return(tg);
            }
            else
            {
                return(null);
            }
        }
        public static void ManageToolActivation(this MachineElementViewModel vm, bool value)
        {
            if (vm is ToolHolderViewModel thvm)
            {
                thvm.ActiveTool = value;
            }
            else
            {
                foreach (var item in vm.Children)
                {
                    var child = item as MachineElementViewModel;

                    child.ManageToolActivation(value);
                }
            }
        }
Ejemplo n.º 11
0
        public static PanelHolderViewModel ToViewModel(this PanelHolder m, MachineElementViewModel parent = null)
        {
            var builder = new HelixToolkit.Wpf.MeshBuilder();

            builder.AddSphere(m.Position.ToPoint3D(), 10.0);

            //return new PanelHolderViewModel()
            return(new WorkablePanelViewModel()
            {
                PanelHolderId = m.Id,
                Name = m.Name,
                Corner = m.Corner,
                Position = m.Position.ToPoint3D(),
                Parent = parent,
                MeshGeometry = builder.ToMesh(),
                Material = HelixToolkit.Wpf.Materials.Blue
            });
        }
Ejemplo n.º 12
0
 private static MachineElementViewModel GetFirstAncestorWithPneumaticLink(MachineElementViewModel vm)
 {
     if (vm != null)
     {
         if ((vm.LinkToParent != null) && (vm.LinkToParent is MachineViewModels.ViewModels.Links.TwoPositionLinkViewModel))
         {
             return(vm);
         }
         else
         {
             return(GetFirstAncestorWithPneumaticLink(vm.Parent));
         }
     }
     else
     {
         return(null);
     }
 }
        public static void ApplyLinkAction(this MachineElementViewModel vm)
        {
            if (vm.LinkToParent != null)
            {
                switch (vm.LinkToParent.LinkType)
                {
                case LinkType.LinearPosition:
                    ApplyLinearPositionLinkAction(vm);
                    break;

                case LinkType.LinearPneumatic:
                    ApplyLinearPneumaticLinkAction(vm);
                    break;

                case LinkType.RotaryPneumatic:
                    ApplyRotationPneumaticLinkAction(vm);
                    break;

                default:
                    throw new ArgumentException();
                }
            }
        }
        public static MachineElement ToModel(this MachineElementViewModel vm)
        {
            var mv3d = vm.Model as System.Windows.Media.Media3D.ModelVisual3D;

            return(new MachineElement()
            {
                Name = vm.Name,
                ModelFile = vm.ModelFile,
                Color = vm.Color.Convert(),
                TrasformationMatrix3D = Convert((mv3d != null) ? mv3d.Transform.Value : System.Windows.Media.Media3D.Matrix3D.Identity),
                Children = vm.Children.Convert(),
                LinkToParentType = vm.LinkToParentType,
                LinkToParentData = vm.LinkToParentData.Convert(),
                ToolHolderType = vm.ToolHolderType,
                ToolHolderData = vm.ToolHolderData?.ToModel(),
                ColiderType = vm.ColliderGeometry,
                Collider = vm.Collider.ToModel(),
                HasPanelHolder = vm.HasPanelHolder,
                PanelHolder = vm.PanelHolder.ToModel(),
                InserterType = vm.InserterType,
                Inserter = vm.InserterData.ToModel()
            });
        }
Ejemplo n.º 15
0
        public static PointProbeViewModel Create(MachineElementViewModel parent, Point3D point, double radius = 5.0)
        {
            var t       = parent.GetChainTansform();
            var p       = t.Invert().Transform(point);
            var builder = new MeshBuilder();

            builder.AddSphere(p, radius);

            var vm = new PointProbeViewModel()
            {
                X            = p.X,
                Y            = p.Y,
                Z            = p.Z,
                Radius       = radius,
                Parent       = parent,
                MeshGeometry = builder.ToMesh(),
                Fill         = Brushes.Yellow
            };

            vm._onIsSelectedChanged = (b) => vm.Fill = b ? Brushes.Red : Brushes.Yellow;
            vm.PropertyChanged     += (s, e) => vm.OnPropertyChanged(s, e);

            return(vm);
        }
Ejemplo n.º 16
0
 private static MachineElementViewModel GetFirstAncestorWithLinearPositionLink(MachineElementViewModel vm, MachineModels.Enums.LinkDirection direction)
 {
     if (vm != null)
     {
         if ((vm.LinkToParent != null) &&
             (vm.LinkToParent is MachineViewModels.ViewModels.Links.LinearPositionViewModel lpvm) &&
             (lpvm.Direction == direction))
         {
             return(vm);
         }
         else
         {
             return(GetFirstAncestorWithLinearPositionLink(vm.Parent, direction));
         }
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 17
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);
                        }
                    }
                };
            }
        }
 private static ObservableCollection <MachineElementViewModel> Convert(this IList <MachineElement> elements, MachineElementViewModel parentViewModel)
 {
     return(new ObservableCollection <MachineElementViewModel>(elements.Select((e) => e.ToViewModel(parentViewModel))));
 }
Ejemplo n.º 19
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();
            }
        }