private static MD.MachineElements.MachineElement Create(MM.Models.MachineElement model, bool isRoot = false)
        {
            if (model.ColiderType != MM.Enums.ColliderGeometry.None)
            {
                var pc = model.Collider as MM.Models.Colliders.PointsCollider;

                var c = new MD.MachineElements.ColliderElement()
                {
                    Type   = ConvertColliderType(pc.Type),
                    Radius = pc.Radius
                };

                foreach (var item in pc.Points)
                {
                    c.Points.Add(item.ToMachineDataPoint());
                }

                return(c);
            }
            else if (model.HasPanelHolder)
            {
                var ph = model.PanelHolder;

                return(new MD.MachineElements.PanelHolderElement()
                {
                    PanelHolderId = ph.Id,
                    PanelHolderName = ph.Name,
                    Position = ph.Position.ToMachineDataPoint(),
                    Corner = ConvertPanelLoadType(ph.Corner)
                });
            }
            else if (model.InserterType != MM.Enums.InserterType.None)
            {
                var insn = CreateInserter(model);

                insn.InserterId    = model.Inserter.Id;
                insn.Position      = model.Inserter.Position.ToMachineDataPoint();
                insn.Direction     = model.Inserter.Direction.ToMachineData();
                insn.InserterColor = model.Inserter.Color.ToMachineData();

                return(insn);
            }
            else if (model.ToolHolderType != MM.Enums.ToolHolderType.None)
            {
                var th = model.ToolHolderData as MM.Models.ToolHolders.ToolHolder;

                return(new MD.MachineElements.ToolholderElement()
                {
                    ToolHolderId = th.Id,
                    Position = th.Position.ToMachineDataPoint(),
                    Direction = th.Direction.ToMachineData(),
                    ToolHolderType = ConvertToolHolderType(model.ToolHolderType)
                });
            }
            else
            {
                return(isRoot ? new MD.MachineElements.RootElement() : new MD.MachineElements.MachineElement());
            }
        }
        private static MD.Links.Link ConvertLink(MM.Models.MachineElement model)
        {
            switch (model.LinkToParentType)
            {
            case MM.Enums.LinkType.LinearPosition:
                return((model.LinkToParentData as MM.Models.Links.LinearPosition).ToMachineData());

            case MM.Enums.LinkType.LinearPneumatic:
                return((model.LinkToParentData as MM.Models.Links.LinearPneumatic).ToMachineData());

            case MM.Enums.LinkType.RotaryPneumatic:
                return((model.LinkToParentData as MM.Models.Links.RotaryPneumatic).ToMachineData());

            default:
                return(null);
            }
        }
        private static MD.MachineElements.InjectorElement CreateInserter(MM.Models.MachineElement model)
        {
            switch (model.InserterType)
            {
            case MM.Enums.InserterType.Injector:
                return(new MD.MachineElements.InjectorElement());

            case MM.Enums.InserterType.Inserter:
                var ins = new MD.MachineElements.InserterElement();
                var m   = model.Inserter as MM.Models.Inserters.Inserter;

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

                return(ins);

            default:
                throw new ArgumentException();
            }
        }
        public static MD.MachineElements.MachineElement ToMachineData(this MM.Models.MachineElement model, bool isRoot = false)
        {
            var data = Create(model, isRoot);

            data.Name           = model.Name;
            data.ModelFile      = model.ModelFile;
            data.LinkToParent   = ConvertLink(model);
            data.Color          = model.Color.ToMachineData();
            data.Transformation = model.TrasformationMatrix3D.ToMachineData();

            var list = new List <MD.MachineElements.MachineElement>();

            foreach (var item in model.Children)
            {
                data.Children.Add(item.ToMachineData());
                //list.Add(item.ToMachineData());
            }

            //data.Children = list.ToArray();

            return(data);
        }