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);
            }
        }
 protected EOrientationAxe GetAxeAlignement()
 {
     //Face visible, Orientation
     EOrientationAxe[,] orientations = new EOrientationAxe[, ] {
         /*face*/ { EOrientationAxe.Xp, EOrientationAxe.Xm, EOrientationAxe.Yp, EOrientationAxe.Ym },
         /*left*/ { EOrientationAxe.Zp, EOrientationAxe.Zm, EOrientationAxe.Yp, EOrientationAxe.Ym },
         /*Top*/ { EOrientationAxe.Xp, EOrientationAxe.Xm, EOrientationAxe.Zp, EOrientationAxe.Zm },
         /*Back*/ { EOrientationAxe.Xp, EOrientationAxe.Xm, EOrientationAxe.Yp, EOrientationAxe.Ym },
         /*right*/ { EOrientationAxe.Zp, EOrientationAxe.Zm, EOrientationAxe.Yp, EOrientationAxe.Ym },
         /*bottom*/ { EOrientationAxe.Xp, EOrientationAxe.Xm, EOrientationAxe.Zp, EOrientationAxe.Zm }
     };
     return(orientations[(int)AlignmentFace, (int)GraduationOrientation]);
 }
        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);
        }
        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++;
            }
        }
예제 #5
0
 public CPositionneurDansParentAutoFill(C2iComposant3D composant,
                                        EOrientationAxe axePositionne)
 {
     m_axePositionne = axePositionne;
     m_composant     = composant;
 }
예제 #6
0
 public C2iComposantAvecAxeComparer(EOrientationAxe axe)
 {
     m_axe = axe;
 }