protected override void MyRepositionneChilds()
        {
            int nCoordMin             = 0;
            List <C2iComposant3D> lst = new List <C2iComposant3D>(Childs);
            EOrientationAxe       axe = GetAxeAlignement();

            lst.Sort(delegate(C2iComposant3D c1, C2iComposant3D c2)
            {
                CPositionneurDansParentAutoFill p1 = new CPositionneurDansParentAutoFill(c1, axe);
                CPositionneurDansParentAutoFill p2 = new CPositionneurDansParentAutoFill(c2, axe);
                switch (GraduationOrientation)
                {
                case EGraduationOrientation.HorizMinToMax:
                case EGraduationOrientation.VertMinToMax:
                    return(p1.ValeurAxe.CompareTo(p2.ValeurAxe));

                case EGraduationOrientation.VertMaxToMin:
                case EGraduationOrientation.HorizMaxToMin:
                    return(p2.ValeurAxe.CompareTo(p1.ValeurAxe));
                }
                return(0);
            }
                     );

            int nTaille = new CPositionneurDansParentAutoFill(this, axe).TailleOccupee;

            foreach (C2iComposant3D fils in lst)
            {
                CPositionneurDansParentAutoFill p = new CPositionneurDansParentAutoFill(fils, axe);
                int nPos = 0;
                switch (GraduationOrientation)
                {
                case EGraduationOrientation.HorizMinToMax:
                case EGraduationOrientation.VertMinToMax:
                    nPos = (int)(p.ValeurAxe / m_nEspaceGraduations);
                    break;

                case EGraduationOrientation.HorizMaxToMin:
                case EGraduationOrientation.VertMaxToMin:
                    nPos = (int)((nTaille - p.ValeurAxe) / m_nEspaceGraduations);
                    break;
                }

                if (nPos < nCoordMin)
                {
                    nPos = nCoordMin;
                }
                AjustePosition(fils, nPos);
                CGraduateCoordinate coord = new CGraduateCoordinate(fils);
                coord.Position        = nPos;
                fils.LocationInParent = coord;
                nCoordMin             = 0;// nPos + Math.Max(1, ((int)(p.TailleOccupee / m_nEspaceGraduations)) + 1);
            }
        }
        public void AjustePosition(C2iComposant3D composant, int nGraduation)
        {
            List <C2iComposant3D> lst  = GetChildsTries();
            C2iComposant3D        cRef = null;
            int nIndex = lst.IndexOf(composant);

            if (lst.Count > nGraduation)
            {
                cRef = lst[nGraduation];
            }
            else if (lst.Count > 0)
            {
                cRef = lst[lst.Count - 1];
            }
            CPositionneurDansParentAutoFill p    = new CPositionneurDansParentAutoFill(composant, GetAxeAlignement());
            CPositionneurDansParentAutoFill pRef = null;

            if (cRef != null)
            {
                pRef = new CPositionneurDansParentAutoFill(cRef, GetAxeAlignement());
            }
            int nVal    = p.ValeurAxe;
            int nTaille = new CPositionneurDansParentAutoFill(this, GetAxeAlignement()).TailleOccupee;

            switch (FillOrientation)
            {
            case EGraduationOrientation.HorizMinToMax:
            case EGraduationOrientation.VertMinToMax:
                if (pRef == null)
                {
                    nVal = -1;
                }
                else
                {
                    nVal = pRef.ValeurAxe + Math.Sign(nGraduation - nIndex);
                }
                break;

            case EGraduationOrientation.VertMaxToMin:
            case EGraduationOrientation.HorizMaxToMin:
                if (pRef == null)
                {
                    nVal = nTaille + 1;
                }
                else
                {
                    nVal = pRef.ValeurAxe - Math.Sign(nGraduation - nIndex);
                }
                break;
            }
            p.ValeurAxe = nVal;
            MyRepositionneChilds();
        }
        private List <C2iComposant3D> GetChildsTries()
        {
            EOrientationAxe       axe = GetAxeAlignement();
            List <C2iComposant3D> lst = new List <C2iComposant3D>(Childs);

            lst.Sort(delegate(C2iComposant3D c1, C2iComposant3D c2)
            {
                CPositionneurDansParentAutoFill p1 = new CPositionneurDansParentAutoFill(c1, axe);
                CPositionneurDansParentAutoFill p2 = new CPositionneurDansParentAutoFill(c2, axe);
                switch (FillOrientation)
                {
                case EGraduationOrientation.HorizMinToMax:
                case EGraduationOrientation.VertMinToMax:
                    return(p1.ValeurAxe.CompareTo(p2.ValeurAxe));

                case EGraduationOrientation.VertMaxToMin:
                case EGraduationOrientation.HorizMaxToMin:
                    return(p2.ValeurAxe.CompareTo(p1.ValeurAxe));
                }
                return(0);
            }
                     );
            return(lst);
        }
        public void AjustePosition(C2iComposant3D composant, int nGraduation)
        {
            int nVal = nGraduation * m_nEspaceGraduations;
            int nX   = composant.Position.X;
            int nY   = composant.Position.Y;
            int nZ   = composant.Position.Z;

            switch (HorizontalAlignment)
            {
            case E3DAlignement.Min:
                nX = 0;
                break;

            case E3DAlignement.Max:
                nX = Size.With - composant.Size.With;
                break;

            case E3DAlignement.Center:
                nX = (Size.With - composant.Size.With) / 2;
                break;
            }
            switch (VerticalAlignment)
            {
            case E3DAlignement.Min:
                nY = 0;
                break;

            case E3DAlignement.Max:
                nY = Size.Height - composant.Size.Height;
                break;

            case E3DAlignement.Center:
                nY = (Size.Height - composant.Size.Height) / 2;
                break;
            }
            switch (DepthAlignment)
            {
            case E3DAlignement.Min:
                nZ = 0;
                break;

            case E3DAlignement.Max:
                nZ = Size.Depth - composant.Size.Depth;
                break;

            case E3DAlignement.Center:
                nZ = (Size.Depth - composant.Size.Depth) / 2;
                break;
            }
            composant.Position = new C3DPoint(nX, nY, nZ);
            CPositionneurDansParentAutoFill p = new CPositionneurDansParentAutoFill(composant, GetAxeAlignement());
            int nTaille = new CPositionneurDansParentAutoFill(this, GetAxeAlignement()).TailleOccupee;

            switch (GraduationOrientation)
            {
            case EGraduationOrientation.HorizMinToMax:
            case EGraduationOrientation.VertMinToMax:
                p.ValeurAxe = nVal;
                break;

            case EGraduationOrientation.HorizMaxToMin:
            case EGraduationOrientation.VertMaxToMin:
                p.ValeurAxe = nTaille - nVal;
                break;
            }
        }
        protected override void MyRepositionneChilds()
        {
            List <C2iComposant3D> lst     = GetChildsTries();
            int             nPos          = 0;
            int             nIndex        = 0;
            EOrientationAxe axe           = GetAxeAlignement();
            int             nTailleTotale = new CPositionneurDansParentAutoFill(this, axe).TailleOccupee;

            foreach (C2iComposant3D fils in lst)
            {
                int nX = fils.Position.X;
                int nY = fils.Position.Y;
                int nZ = fils.Position.Z;

                switch (HorizontalAlignment)
                {
                case E3DAlignement.Min:
                    nX = 0;
                    break;

                case E3DAlignement.Max:
                    nX = Size.With - fils.Size.With;
                    break;

                case E3DAlignement.Center:
                    nX = (Size.With - fils.Size.With) / 2;
                    break;
                }
                switch (VerticalAlignment)
                {
                case E3DAlignement.Min:
                    nY = 0;
                    break;

                case E3DAlignement.Max:
                    nY = Size.Height - fils.Size.Height;
                    break;

                case E3DAlignement.Center:
                    nY = (Size.Height - fils.Size.Height) / 2;
                    break;
                }
                switch (DepthAlignment)
                {
                case E3DAlignement.Min:
                    nZ = 0;
                    break;

                case E3DAlignement.Max:
                    nZ = Size.Depth - fils.Size.Depth;
                    break;

                case E3DAlignement.Center:
                    nZ = (Size.Depth - fils.Size.Depth) / 2;
                    break;
                }
                fils.Position = new C3DPoint(nX, nY, nZ);
                CPositionneurDansParentAutoFill p = new CPositionneurDansParentAutoFill(fils, axe);
                switch (FillOrientation)
                {
                case EGraduationOrientation.HorizMinToMax:
                case EGraduationOrientation.VertMinToMax:
                    p.ValeurAxe = nPos;
                    nPos       += p.TailleOccupee;
                    break;

                case EGraduationOrientation.HorizMaxToMin:
                case EGraduationOrientation.VertMaxToMin:
                    p.ValeurAxe = nTailleTotale - nPos;
                    nPos       += p.TailleOccupee;
                    break;

                default:
                    break;
                }
                CGraduateCoordinate coord = new CGraduateCoordinate();
                coord.Position         = nIndex;
                coord.ComposantAssocie = fils;
                fils.LocationInParent  = coord;
                nIndex++;
            }
        }