Search code examples
c#drawsystem.drawingdrawimage

Fill a drawn triangle using lines


i need to generate a new method to fill the triangle in the below code and call it separately any advise please?

public void draw(Graphics g, Pen blackPen)
    {
        double xDiff, yDiff, xMid, yMid;

        xDiff = oppPt.X - keyPt.X;
        yDiff = oppPt.Y - keyPt.Y;
        xMid = (oppPt.X + keyPt.X) / 2;
        yMid = (oppPt.Y + keyPt.Y) / 2;

        // draw triangle
        g.DrawLine(blackPen, (int)keyPt.X, (int)keyPt.Y, (int)(xMid + yDiff / 2), (int)(yMid - xDiff / 2));
        g.DrawLine(blackPen, (int)(xMid + yDiff / 2), (int)(yMid - xDiff / 2), (int)oppPt.X, (int)oppPt.Y);
        g.DrawLine(blackPen, (int)keyPt.X, (int)keyPt.Y, oppPt.X, oppPt.Y);

    }

the method should take both of these arguments

public void fillTriangle(Graphics g, Brush redBrush)
    {


    }

Solution

  • Use a single function for the drawing, and for reduced complexity and consistency use a GraphicsPath object.

    void DrawGraphics(Graphics g, Pen pen, Brush brush)
    {
        float xDiff=oppPt.X-keyPt.X;
        float yDiff=oppPt.Y-keyPt.Y;
        float xMid=(oppPt.X+keyPt.X)/2;
        float yMid=(oppPt.Y+keyPt.Y)/2;
    
        // Define path with the geometry information only
        var path = new GraphicsPath();
        path.AddLines(new PointF[] {
            keyPt,
            new PointF(xMid + yDiff/2, yMid-xDiff/2),
            oppPt,
        });
        path.CloseFigure();
    
        // Fill Triangle
        g.FillPath(brush, path);
    
        // Draw Triangle
        g.DrawPath(pen, path);
    }
    

    The result is as seen below:

    scr