Das X markiert die Stelle



  • Ich versuche einen GraphicPath in X-Form zuerstellen,aber die Mitte dieses Xs ist ausserhalb des Rechtecks in das ich das X zeichnen will.Und ich kann den Fehler nicht finden.

    GraphicPath Get_X(Rectangle base_rectangle,int width)
    {
     GraphicPath path = new GraphicPath();
     List<Point> points = new List<Point>();
     int w =  (int)System.Math.Sqrt(System.Math.Pow(width, 2) / 2);
    
     points.Add(new Point(base_rectangle.Left +w,base_rectangle.Top));
     points.Add(new Point(base_rectangle.Left,base_rectangle.Top +w));
     points.Add(new Point(base_rectangle.Left + (base_rectangle.Width/2) - (width/2),base_rectangle.Top + (base_rectangle.Height/2)));
     points.Add(new Point(base_rectangle.Left,base_rectangle.Bottom - w));
     points.Add(new Point(base_rectangle.Left + w, base_rectangle.Bottom));
     points.Add(new Point(base_rectangle.Left + (base_rectangle.Width/2),base_rectangle.Top + (base_rectangle.Height/2)+(w/2)));
     points.Add(new Point(base_rectangle.Right - w, base_rectangle.Bottom));
     points.Add(new Point(base_rectangle.Right, base_rectangle.Bottom - w));
     points.Add(new Point(base_rectangle.Left + (base_rectangle.Width / 2) + (width / 2), base_rectangle.Top + (base_rectangle.Height / 2)));
     points.Add(new Point(base_rectangle.Right, base_rectangle.Top + w));
     points.Add(new Point(base_rectangle.Right - w, base_rectangle.Top));
     points.Add(new Point(base_rectangle.Left + (base_rectangle.Width / 2), base_rectangle.Top + (base_rectangle.Height / 2) - (w / 2)));
    
     for (int i = 0; i < points.Count; i++)
     {
        int next_pos = i + 1;
        if (next_pos > points.Count - 1) { next_pos = 0; }
        path.AddLine(points[i], points[next_pos]);
      }
      path.CloseFigure();
     return path;
    }
    


  • Also bei dem GraphicsPath-Objekt was ich im .NET 1.1 habe
    kann man entscheiden ob der Pfadverlauf offen oder geschlossen ist dabei muss man auch noch aufpassen das anfangs und Endpunkt übereinstimmt.

    Viele mögliche Fehlerquellen!

    Wäre vielleicht besser für das "Slash" und "Backslash" Deines X
    jeweils 1 GraphicsPath anzulegen. Dann hast Du quasi jeweils 2 Pfade mit gedrehten Vierecks.



  • Du könntest auch bloss ein GraphicsPath nehmen und ein Rechteck drin abbilden
    Du stellst das X dann dar inden
    Du die Koordinaten per

    Koordinatenrotation (gabs auch nen Objekt mit Methoden dazu) um x Grad nach links drehst ---> Backslasch dann zeichen.

    dann x Grad nach rechts drehst ---> Slash zeichnen

    fertig ist das X



  • genau jetzt habe ichs auch gefunden

    Das GraphicsPath-Objekt kann selbst eine Transformationsmatrix bilden
    weil es einen Member mit dem Namen Transform hat.
    da kannst Du dann drehen verschieben etc. des Punktpfades anstellen.



  • Das soll keine Linenfigure sondern eine Form sein.Es soll so aussehen

    /\/\
    \  /
    /  \
    \/\/
    

    nicht so

    \  /
     \/
     /\
    /  \
    


  • Andorxor schrieb:

    Das soll keine Linenfigure sondern eine Form sein.Es soll so aussehen

    /\/\
    \  /
    /  \
    \/\/
    

    nicht so

    \  /
     \/
     /\
    /  \
    

    Ein Rechteck hat Vier Punkte und ich kann es ausfüllen. das brauche ich dann nur um X Grad nach links drehen Pfad zeichnen und ausfüllen.
    Dann X Grad nach rechts drehen Pfad zeichnen und ausfüllen. Wo ist das Problem?

    Hat also nix mit Linienfigur zutun. Wenn man die Sache mit genug Abstand
    verschwimmt jegliche grafische Sache zu irgendwas diffusen.



  • Viereckkoordinatenpfad drehen als Backslash des X zeichnen.
    Viereckkoordinatenpfad drehen als Slash des X zeichnen.

    So wollte ich das zu verstehen geben.



  • Ich möchte aber nicht so ein X

    /\/\
    \/\/
    /\/\
    \/\/
    

    ,da ich den Rand zeichnen will.



  • Das X funktioniert ich habe nur das Rechteck des Dialoges statt des Rechtecks in das X soll an die Funktion übergeben.



  • Die Strich in der Mitte würdest Du wegbekommen
    indem Du gesetz dem Fall

    Background Weiss und Textfarbe Schwarz also schwaz auf weiss.

    Die Rechtecke zum Schluss mit "weisser Farbe" füllst.



  • Okay wenn Du ein Pfad-Objekt als Parameter fuer eine Methode brauchst
    kann man es auf meine Art nicht machen!


Anmelden zum Antworten