Esempio n. 1
0
        /// ///////////////////////////////////////////////
        public override bool IsPointIn(Point pt)
        {
            AssurePositionOk();
            //Calcule la distance entre la droite et le point
            CSegmentDroite segment = new CSegmentDroite(m_lastPointArrivee, m_lastPointDepart);
            double         fA = 0, fB = 0, fC = 0;

            segment.GetEquationDroite(ref fA, ref fB, ref fC);
            double fSqrt = Math.Sqrt(fA * fA + fB * fB);

            if (fSqrt == 0)
            {
                return(false);
            }
            double fDistance = (fA * (double)pt.X + fB * (double)pt.Y + fC) / fSqrt;

            if (fDistance < 16)
            {
                //Vérifie que le point est environ sur le segment
                if (pt.X >= Math.Min(m_lastPointArrivee.X, m_lastPointDepart.X) &&
                    pt.X <= Math.Max(m_lastPointArrivee.X, m_lastPointDepart.X) &&
                    pt.Y >= Math.Min(m_lastPointArrivee.Y, m_lastPointDepart.Y) &&
                    pt.Y <= Math.Max(m_lastPointArrivee.Y, m_lastPointDepart.Y))
                {
                    return(true);
                }
            }
            return(false);
        }
Esempio n. 2
0
        //-----------------------------------------------------
        private CSegmentDroite DrawLien(
            Graphics g,
            ISatisfactionBesoin besoinSatisfait,
            ISatisfactionBesoin satisfaction,
            Pen p)
        {
            if (besoinSatisfait == null || satisfaction == null)
            {
                return(null);
            }
            CInfoDessinSatisfaction dessin1 = null;
            CInfoDessinSatisfaction dessin2 = null;

            m_dicSatisfactionToRect.TryGetValue(besoinSatisfait, out dessin1);
            m_dicSatisfactionToRect.TryGetValue(satisfaction, out dessin2);
            CSegmentDroite segment = null;

            if (dessin1 != null && dessin2 != null)
            {
                segment = new CSegmentDroite(new Point(dessin1.Rectangle.Right, dessin1.Rectangle.Top + m_nHauteurSatisfactionDefaut / 2),
                                             new Point(dessin2.Rectangle.Left, dessin2.Rectangle.Top + m_nHauteurSatisfactionDefaut / 2));
                g.DrawLine(p, segment.Point1, segment.Point2);
                segment.DrawFlechePt1(g, p, 4);
            }
            return(segment);
        }
Esempio n. 3
0
 //-----------------------------------------------------
 private void Invalidate(CRelationBesoin_Satisfaction sat)
 {
     if (sat != null)
     {
         CSegmentDroite segment = null;
         m_dicSatisfactionToSegment.TryGetValue(sat, out segment);
         if (segment != null)
         {
             Rectangle rct = new Rectangle(PointToDisplay(new Point(segment.Left - 5, segment.Top - 5)),
                                           new Size(SizeToDisplay(segment.SizeEnglobant.Width + 10), SizeToDisplay(segment.SizeEnglobant.Height + 10)));
             rct.Inflate(2, 2);
             m_panelDessin.Invalidate(rct);
         }
     }
 }
Esempio n. 4
0
        //-----------------------------------------------------
        private CSegmentDroite DrawLien(
            Graphics g,
            ISatisfactionBesoin besoinSatisfait,
            ISatisfactionBesoin satisfaction,
            Pen p)
        {
            if (besoinSatisfait == null || satisfaction == null)
            {
                return(null);
            }
            CDessinSatisfaction dessin1 = m_baseMap.GetDessin(besoinSatisfait);
            CDessinSatisfaction dessin2 = m_baseMap.GetDessin(satisfaction);
            CSegmentDroite      segment = null;

            if (dessin1 != null && dessin2 != null)
            {
                segment = new CSegmentDroite(new Point(dessin1.Rectangle.Right, dessin1.Rectangle.Top + m_baseMap.m_nHauteurSatisfactionDefaut / 2),
                                             new Point(dessin2.Rectangle.Left, dessin2.Rectangle.Top + m_baseMap.m_nHauteurSatisfactionDefaut / 2));
                g.DrawLine(p, segment.Point1, segment.Point2);
                segment.DrawFlechePt1(g, p, 4);
                CBesoin besoin = besoinSatisfait as CBesoin;
                if (besoin != null)
                {
                    double fCpt = CUtilSatisfaction.GetPourcentageFor(besoin, satisfaction);
                    if (fCpt < 99)
                    {
                        Point  pt        = segment.Milieu;
                        string strChaine = fCpt.ToString("0.##") + "%";
                        SizeF  sz        = g.MeasureString(strChaine, Font);
                        pt.Offset(-(int)(sz.Width / 2), -(int)(sz.Height / 2));
                        Rectangle rct = new Rectangle(pt, new Size((int)sz.Width, (int)sz.Height));
                        Brush     br  = new SolidBrush(Color.FromArgb(128, Color.White));
                        g.FillRectangle(br, rct);
                        br.Dispose();

                        g.DrawString(strChaine, Font, Brushes.Black, pt);
                    }
                }
            }
            return(segment);
        }
 protected void DrawLien(
     CContextDessinObjetGraphique ctx, 
     Pen pen, 
     Font ft,
     CRepresentationExpressionGraphique de, 
     CRepresentationExpressionGraphique vers,
     string strText )
 {
     CLienTracable lien = CTraceurLienDroit.GetLienPourLier(de.RectangleAbsolu, vers.RectangleAbsolu, EModeSortieLien.Automatic);
     lien.RendVisibleAvecLesAutres(ctx.Liens);
     ctx.AddLien(lien);
     ctx.Graphic.DrawLines(pen, lien.Points.ToArray());
     if (strText != "" && lien.Points.Count() > 0)
     {
         CSegmentDroite segment = lien.Segments[0];
         Point ptMilieu = segment.Milieu;
         Brush br = new SolidBrush(pen.Color);
         ctx.Graphic.DrawString(strText, ft, br, ptMilieu);
         br.Dispose();
     }
 }
Esempio n. 6
0
        private void AssurePositionOk( )
        {
            if (!m_bPositionInvalide)//Vérifie que le départ et l'arrivé n'ont pas bougé
            {
                if (ActionDepart != null && ActionDepart.RectangleAbsolu != m_lastRectangleDepart ||
                    ActionArrivee != null && ActionArrivee.RectangleAbsolu != m_lastRectangleArrivee)
                {
                    m_bPositionInvalide = true;
                }
            }
            if (m_bPositionInvalide)
            {
                Point   pt1;
                CAction actionDepart = ActionDepart;
                if (actionDepart == null)
                {
                    pt1 = m_lastPointDepart;
                }
                else
                {
                    m_lastRectangleDepart = actionDepart.RectangleAbsolu;
                    pt1 = GetCentreRect(m_lastRectangleDepart);
                }

                Point   pt2;
                CAction actionArrivee = ActionArrivee;
                if (actionArrivee == null)
                {
                    pt2 = m_lastPointArrivee;
                }
                else
                {
                    m_lastRectangleArrivee = actionArrivee.RectangleAbsolu;
                    pt2 = GetCentreRect(m_lastRectangleArrivee);
                }


                m_lienTracable = CTraceurLienDroit.GetLien(pt1, pt2, ModeSortieDuLien);

                if (actionDepart != null)
                {
                    Point[] pts1 = actionDepart.GetPolygoneDessin();

                    //Suppression des segments inutiles
                    int nLastIntersect        = 0;
                    CSegmentDroite[] segments = m_lienTracable.Segments;
                    for (nLastIntersect = segments.Count() - 1; nLastIntersect > 0; nLastIntersect--)
                    {
                        Point dummy = new Point(0, 0);
                        if (segments[nLastIntersect].GetIntersectionPoint(pts1, ref dummy))
                        {
                            break;
                        }
                    }
                    for (int n = 0; n < nLastIntersect; n++)
                    {
                        m_lienTracable.RemovePoint(0);
                    }

                    if (m_lienTracable.Points.Count() > 1)
                    {
                        CSegmentDroite segment = new CSegmentDroite(m_lienTracable.Points.ElementAt(0), m_lienTracable.Points.ElementAt(1));
                        if (segment.GetIntersectionPoint(pts1, ref pt1))
                        {
                            m_lienTracable.RemplacePoint(0, pt1);
                        }
                    }
                }
                if (actionArrivee != null)
                {
                    Point[] pts2 = actionArrivee.GetPolygoneDessin();

                    //Suppression des segments inutiles
                    CSegmentDroite[] segments = m_lienTracable.Segments;
                    int nLastIntersect        = segments.Count() - 1;
                    for (nLastIntersect = 0; nLastIntersect < segments.Count() - 1; nLastIntersect++)
                    {
                        Point dummy = new Point(0, 0);
                        if (segments[nLastIntersect].GetIntersectionPoint(pts2, ref dummy))
                        {
                            break;
                        }
                    }
                    for (int n = nLastIntersect + 1; n < segments.Count(); n++)
                    {
                        m_lienTracable.RemovePoint(m_lienTracable.Points.Count() - 1);
                    }

                    if (m_lienTracable.Points.Count() > 1)
                    {
                        CSegmentDroite segment = new CSegmentDroite(
                            m_lienTracable.Points.ElementAt(m_lienTracable.Points.Count() - 2),
                            m_lienTracable.Points.ElementAt(m_lienTracable.Points.Count() - 1));
                        if (segment.GetIntersectionPoint(pts2, ref pt2))
                        {
                            m_lienTracable.RemplacePoint(m_lienTracable.Points.Count() - 1, pt2);
                        }
                    }
                }
                m_lastPointDepart   = m_lienTracable.Points.ElementAt(0);;
                m_lastPointArrivee  = m_lienTracable.Points.ElementAt(m_lienTracable.Points.Count() - 1);
                m_bPositionInvalide = false;
            }
        }
Esempio n. 7
0
        private void m_panelDessin_Paint(object sender, PaintEventArgs e)
        {
            Matrix m = new Matrix();

            e.Graphics.FillRectangle(Brushes.White, e.ClipRectangle);


            PrepareGraphic(e.Graphics);

            int nX0 = PointToLogical(new Point(0, 0)).X;
            int nIndexNiveauStart = (nX0) / (m_nLargeurNiveauDefaut + m_nLargeurFleches);

            if (nX0 < 0)
            {
                nIndexNiveauStart--;
            }

            int nNbNiveauxVisibles = SizeToLogical(m_panelDessin.Width) / (m_nLargeurNiveauDefaut + m_nLargeurFleches) + 2;

            List <ISatisfactionBesoin> satisfactionsDessines = new List <ISatisfactionBesoin>();

            if (nIndexNiveauStart < 0)
            {
                nIndexNiveauStart = 0;
            }
            for (int nIndexNiveau = nIndexNiveauStart; nIndexNiveau <= nIndexNiveauStart + nNbNiveauxVisibles &&
                 nIndexNiveau < m_listeNiveaux.Count; nIndexNiveau++)
            {
                CNiveau niveau        = m_listeNiveaux[nIndexNiveau];
                int     nNiveau       = niveau.Niveau;
                Color   couleurNiveau = Color.LightGreen;
                if (nNiveau > 0)
                {
                    couleurNiveau = Color.White;
                }
                else if (nNiveau < 0)
                {
                    couleurNiveau = Color.LightBlue;
                }
                foreach (ISatisfactionBesoin satisfaction in niveau.Satisfactions)
                {
                    CInfoDessinSatisfaction dessin = null;
                    if (m_dicSatisfactionToRect.TryGetValue(satisfaction, out dessin))
                    {
                        Point pt = PointToDisplay(new Point(dessin.Rectangle.Left, dessin.Rectangle.Bottom));
                        if (pt.Y > 0)
                        {
                            pt = PointToDisplay(new Point(dessin.Rectangle.Left, dessin.Rectangle.Top));
                            if (pt.Y < m_panelDessin.Height)
                            {
                                bool bSel = dessin.Satisfaction.Equals(m_satisfactionSel);
                                dessin.Draw(this, couleurNiveau, bSel, e.Graphics);
                                satisfactionsDessines.Add(satisfaction);
                            }
                        }
                    }
                }
            }
            //Trace les lignes
            HashSet <CRelationBesoin_Satisfaction> liensDessines = new HashSet <CRelationBesoin_Satisfaction>();
            Pen p    = new Pen(Color.Black);
            Pen pSel = new Pen(Color.Yellow, 2);

            //p.EndCap = LineCap.ArrowAnchor;

            m_dicSatisfactionToSegment.Clear();
            foreach (ISatisfactionBesoin satDessinee in satisfactionsDessines)
            {
                CBesoin besoin = satDessinee as CBesoin;
                if (besoin != null)
                {
                    foreach (CRelationBesoin_Satisfaction rel in besoin.RelationsSatisfactions)
                    {
                        if (!liensDessines.Contains(rel))
                        {
                            CSegmentDroite segment = DrawLien(
                                e.Graphics,
                                rel.Besoin,
                                rel.Satisfaction,
                                rel == m_lienSel ? pSel : p);
                            liensDessines.Add(rel);
                            if (segment != null)
                            {
                                m_dicSatisfactionToSegment[rel] = segment;
                            }
                        }
                    }
                }
                foreach (CRelationBesoin_Satisfaction rel in satDessinee.RelationsSatisfaits)
                {
                    if (!liensDessines.Contains(rel))
                    {
                        CSegmentDroite segment = DrawLien(
                            e.Graphics,
                            rel.Besoin,
                            rel.Satisfaction,
                            rel == m_lienSel ? pSel : p);
                        liensDessines.Add(rel);
                        if (segment != null)
                        {
                            m_dicSatisfactionToSegment[rel] = segment;
                        }
                    }
                }
            }
            pSel.Dispose();
            p.Dispose();



            e.Graphics.ResetTransform();
        }
Esempio n. 8
0
        private void m_panelDessin_Paint(object sender, PaintEventArgs e)
        {
            Matrix m = new Matrix();

            e.Graphics.FillRectangle(Brushes.White, e.ClipRectangle);


            PrepareGraphic(e.Graphics);

            int nX0 = PointToLogical(new Point(0, 0)).X;
            int nIndexNiveauStart = (nX0) / (m_baseMap.m_nLargeurNiveauDefaut + m_baseMap.m_nLargeurFleches);

            if (nX0 < 0)
            {
                nIndexNiveauStart--;
            }

            int nNbNiveauxVisibles = SizeToLogical(m_panelDessin.Width) / (m_baseMap.m_nLargeurNiveauDefaut + m_baseMap.m_nLargeurFleches) + 2;

            List <ISatisfactionBesoin> satisfactionsDessines = new List <ISatisfactionBesoin>();

            if (nIndexNiveauStart < 0)
            {
                nIndexNiveauStart = 0;
            }

            List <CDessinSatisfaction> lstToDraw = m_baseMap.GetListeADessiner();

            foreach (CDessinSatisfaction dessin in lstToDraw)
            {
                if (dessin.IsPositionValide() && dessin.IsVisible())
                {
                    Rectangle rct = dessin.Rectangle;
                    Point     pt  = PointToDisplay(new Point(rct.Left, rct.Top));
                    rct = new Rectangle(pt, rct.Size);
                    if (rct.IntersectsWith(m_panelDessin.ClientRectangle))
                    {
                        bool bSel = dessin.Satisfaction.Equals(m_satisfactionSel);
                        satisfactionsDessines.Add(dessin.Satisfaction);
                        dessin.Draw(Color.White, Font, bSel, e.Graphics);
                    }
                }
            }
            //Trace les lignes
            HashSet <CRelationBesoin_Satisfaction> liensDessines = new HashSet <CRelationBesoin_Satisfaction>();
            Pen p    = new Pen(Color.Black);
            Pen pSel = new Pen(Color.Yellow, 2);

            //p.EndCap = LineCap.ArrowAnchor;

            m_dicSatisfactionToSegment.Clear();
            foreach (ISatisfactionBesoin satDessinee in satisfactionsDessines)
            {
                CBesoin besoin = satDessinee as CBesoin;
                if (besoin != null)
                {
                    foreach (CRelationBesoin_Satisfaction rel in besoin.RelationsSatisfactions)
                    {
                        if (!liensDessines.Contains(rel))
                        {
                            CSegmentDroite segment = DrawLien(
                                e.Graphics,
                                rel.Besoin,
                                rel.Satisfaction,
                                rel == m_lienSel ? pSel : p);
                            liensDessines.Add(rel);
                            if (segment != null)
                            {
                                m_dicSatisfactionToSegment[rel] = segment;
                            }
                        }
                    }
                }
                foreach (CRelationBesoin_Satisfaction rel in satDessinee.RelationsSatisfaits)
                {
                    if (!liensDessines.Contains(rel))
                    {
                        CSegmentDroite segment = DrawLien(
                            e.Graphics,
                            rel.Besoin,
                            rel.Satisfaction,
                            rel == m_lienSel ? pSel : p);
                        liensDessines.Add(rel);
                        if (segment != null)
                        {
                            m_dicSatisfactionToSegment[rel] = segment;
                        }
                    }
                }
            }
            pSel.Dispose();
            p.Dispose();



            e.Graphics.ResetTransform();
        }