none
Zeichnungen in Zeichnungen finden RRS feed

  • Frage

  • Hallo!

    Ich habe eine Frage. Ich habe eine Windows Forms Anwendnug mit "Punkten" (in form von rechtecken realisiert) gezeichnet.
    Nun soll der Benutzer selbstständig geometrische Figuren zeichnen mit einer simplen Eingabe. Wenn diese geometrische Figur dann gezeichnet wird, soll festgestellt werden ob nun einer der Punkte in der geometrischen Form liegt. (Ich hoffe man weiß was ich mein)

    Das heißt ich bräuchte so ein Art "Zeichnungen in Zeichnungen" finden. Gibt es da Methoden?

    Ich hab zwar ein bisschen gegoogelt ehrlich gesagt weiß ich aber nicht nach was ich genau googeln soll, daher auch mein etwas komischer Titel.

     

    Ich sag schonmal danke!

    Dienstag, 22. Februar 2011 11:43

Antworten

  • servus,

    das ist ganz einfach:

    Region.IsVisible-Methode (Point, Graphics)
    http://msdn.microsoft.com/de-de/library/ms142260%28v=VS.100%29.aspx

    Du musst allerdings deinen Ansatz mit den Rechtecken etwas überarbeiten.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 22. Februar 2011 11:50
  • Hallo Joe,

    ja Stefan hat schon die IsVisible-Methode für die Region angesprochen.
    Der Vollständigkeit halber ... es geht auch je nach Objekt mit Contains-Methoden von Objekten.
    Man braucht aber auch nicht über Region zu gehen, sondern kann ggf. auch über die GraphicsPath.IsVisible-Methode gehen.
    Die Contains-Methoden sind (übrigens) intern zum Beispiel bei Rectangle folgendermaßen implementiert:

     /// Determines if the specfied point is contained within the 
     /// rectangular region defined by this <see cref='System.Drawing.Rectangle'/> .
     public bool Contains(int x, int y)
     {
     return this.X <= x &&
     x < this.X + this.Width &&
     this.Y <= y &&
     y < this.Y + this.Height;
     }
    
     /// Determines if the specfied point is contained within the
     /// rectangular region defined by this <see cref='System.Drawing.Rectangle'/> . 
     public bool Contains(Point pt)
     {
     return Contains(pt.X, pt.Y);
     }
    
     /// Determines if the rectangular region represented by
     /// <paramref name="rect"/> is entirely contained within the rectangular region represented by 
     /// this <see cref='System.Drawing.Rectangle'/> . 
     public bool Contains(Rectangle rect)
     {
     return (this.X <= rect.X) &&
     ((rect.X + rect.Width) <= (this.X + this.Width)) &&
     (this.Y <= rect.Y) &&
     ((rect.Y + rect.Height) <= (this.Y + this.Height));
     } 
    

    somit wird Dir auch die Methodik klar, wie die Inhalts-Berechnungen implementiert werden.
    In .NET sind diese Methoden aber alle gewrappt.

    Weitere Links: http://www.ms-news.net/f824/ueberdeckung-11888338.html


    ciao Frank
    Dienstag, 22. Februar 2011 12:09

Alle Antworten

  • servus,

    das ist ganz einfach:

    Region.IsVisible-Methode (Point, Graphics)
    http://msdn.microsoft.com/de-de/library/ms142260%28v=VS.100%29.aspx

    Du musst allerdings deinen Ansatz mit den Rechtecken etwas überarbeiten.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 22. Februar 2011 11:50
  • Hallo Joe,

    ja Stefan hat schon die IsVisible-Methode für die Region angesprochen.
    Der Vollständigkeit halber ... es geht auch je nach Objekt mit Contains-Methoden von Objekten.
    Man braucht aber auch nicht über Region zu gehen, sondern kann ggf. auch über die GraphicsPath.IsVisible-Methode gehen.
    Die Contains-Methoden sind (übrigens) intern zum Beispiel bei Rectangle folgendermaßen implementiert:

     /// Determines if the specfied point is contained within the 
     /// rectangular region defined by this <see cref='System.Drawing.Rectangle'/> .
     public bool Contains(int x, int y)
     {
     return this.X <= x &&
     x < this.X + this.Width &&
     this.Y <= y &&
     y < this.Y + this.Height;
     }
    
     /// Determines if the specfied point is contained within the
     /// rectangular region defined by this <see cref='System.Drawing.Rectangle'/> . 
     public bool Contains(Point pt)
     {
     return Contains(pt.X, pt.Y);
     }
    
     /// Determines if the rectangular region represented by
     /// <paramref name="rect"/> is entirely contained within the rectangular region represented by 
     /// this <see cref='System.Drawing.Rectangle'/> . 
     public bool Contains(Rectangle rect)
     {
     return (this.X <= rect.X) &&
     ((rect.X + rect.Width) <= (this.X + this.Width)) &&
     (this.Y <= rect.Y) &&
     ((rect.Y + rect.Height) <= (this.Y + this.Height));
     } 
    

    somit wird Dir auch die Methodik klar, wie die Inhalts-Berechnungen implementiert werden.
    In .NET sind diese Methoden aber alle gewrappt.

    Weitere Links: http://www.ms-news.net/f824/ueberdeckung-11888338.html


    ciao Frank
    Dienstag, 22. Februar 2011 12:09
  • Danke euch beiden. Ich werde das heute/morgen umsetzen und schauen ob das so einfach funktioniert wie ich mir das erhoffe :)
    Dienstag, 22. Februar 2011 14:20