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); }
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); } } }
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 }); }
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() }); }
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); }
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); } }
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)))); }
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(); } }