vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Schraffieren ohne HatchBrush 
Autor: Manfred X
Datum: 07.07.16 13:07

Hallo!

Meinst Du so etwas ?????

Über den Parameter "Versetzung" wird der Winkel der Schraffur gesteuert,
durch das Vorzeichen dieses Wertes die Richtung der Linien.
 Private Sub Schraffur(ByVal bmp As Bitmap, versetzung As Integer, _
                       breite As Integer, farbe As Drawing.Color, _
                       Optional ByVal crossed As Boolean = False)
 
     Dim x As Integer
 
     Using g As Graphics = Graphics.FromImage(bmp),
        p As New Pen(farbe, breite)
 
        For x = -Math.Abs(versetzung) To _
           bmp.Width + Math.Abs(versetzung) Step breite * 3
 
           g.DrawLine(p, New Point(x, 0), New Point(x + versetzung, bmp.Height))
        Next x
     End Using
 
     If crossed Then
        Schraffur(bmp, -versetzung, breite, farbe, False)
     End If
 End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 07.07.16 12:05

Hallo,
ich exportiere gezeichnete Elemente mit PdfSharp in ein Pdf.
Leider kann PdfSharp kein HatchBrush.

Wie könnte man die Flächen sonst noch schraffieren?
Ich habe Kreisanschnitte (Parabelsegment),Kreisabschnitte (Tortenstück) , Kreise und diverse Polygone.

Die 2.Farbe ist Transparent, also würde es reichen Linien zu zeichnen. Aber wie komme ich an die Punkte?

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 07.07.16 13:43

ja, im Prinzip schon. Jedoch nicht auf ein Bitmap, sondern das Innere einer beliebigen geschlossenen Figur.

Beispiel, ich habe ein Polygon bzw. dessen Points. Das zeichne ich via PdfSharp ins PDF mit

 gfx.DrawPolygon(Pen, Brush, PointsArr, XFillMode.Winding)
Nun würde ich das noch gerne schraffieren. Um schräge Linien rein zu zeichnen bräuchte ich Points, bei denen ich nicht weiß wie ich die berechnen soll.

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Manfred X
Datum: 07.07.16 13:58

Hallo!

Mit PDF-Zeichnungen kenne ich mich nicht aus.

Male die Figur in ein Bitmap-Objekt und schraffiere die gesamte Zeichen-Fläche
in einer Kennfarbe. Wenn Du die Fläche Deiner Figur in der Bitmap pixelweise
durchläufst, kannst Du die wg. Schraffur einzufärbenden Pixel erkennen.
Die Berechnung solcher Punkte im 2D-Raum bei komplexen Figuren ist aufwendig.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 07.07.16 14:32

Hm, hab ich nun nicht wirklich verstanden.

Angenommen ich habe ein Dreieck, zeichne das mit Drei Linien in Rot in ein Bitmap.
Dann schraffiere ich das gesamte Bitmap in Blau.

Wie durchlaufe ich die Fläche meines Dreieckes pixelweise? Die gesamte Bitmap pixelweise wäre soweit kein Problem, aber mit dem Inneren meiner beliebigen Figur check ich das nicht.

Gefühlsmäßig wird das viel Rechenzeit in Anspruch nehmen, also bei einem Plan im Format DIN A0 bei dem etwa 1/3 der Fläche schraffiert wird zu lange dauern.


Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 07.07.16 14:36

ich werde mal schauen was für Möglichkeiten ich im PdfSharp mit dem LinearGradientBrush habe.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Manfred X
Datum: 07.07.16 15:37

Du hast verschiedene Figuren und müßtest deshalb jeweils die Formeln für
die Schnittpunkte zwischen Schraffurlinien und Figurbegrenzungen programmieren.

Einfacher ist es, Du zeichnest den Umriß Deiner Figur in eine Bitmap,
in deren Rechteck sie hineinpaßt.
Eine zweite Bitmap der gleichen Größe wird schraffiert.
Es wären die Punkte zu suchen, die in der einen Bitmap die Farbe der Figur-
begrenzung besitzen und in der zweiten Bitmap die Schraffurfarbe (Schnittstellen).

Schnell geht das bei direktem Zugriff auf die Bild-Daten:
http://www.vbarchiv.net/workshop/workshop_100-direkte-manipulation-von-bilddaten-vb-2005.html

Die Größe ist nicht relevant, weil Du für die Schnittpunkt-Bestimmungen ggf.
die Zeichnungen über einen Zoomfaktor verkleinert verarbeiten kannst.

Beitrag wurde zuletzt am 07.07.16 um 15:50:08 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 07.07.16 16:30

OK, mit 2 Bitmaps und die Pixelfarbe vergleichen leuchtet mir ein. Wobei ich das mit dem Link in diesem Zusammenhang noch nicht verstanden habe.

Und via Winkelfunktion dann berechnen welche Punkte zu verbinden sind?

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Manfred X
Datum: 07.07.16 17:03

Der direkte Zugriff auf die in ein Array ausgelesenen Bitmapdaten ist
erheblich schneller als die Getpixel/Setpixel-Methoden der Bitmapklasse.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 07.07.16 20:38

ok, Danke
Ich probiere es.

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: keco
Datum: 11.07.16 19:36

Wenn du mit der Bibliothek ganze Bilder zeichnen kannst, dann erzeuge ein Bitmap-Objekt mit dem HatchBrush und zeichne dieses.

Mal ganz quick'n'dirty:
        Dim p1 As New Point(10, 10)
        Dim p2 As New Point(220, 110)
        Dim p3 As New Point(50, 240)
 
        Using path As New Drawing2D.GraphicsPath, brush As New _
          Drawing2D.HatchBrush(Drawing2D.HatchStyle.BackwardDiagonal, _
          Color.Red, Color.White)
            path.AddPolygon(New Point() {p1, p2, p3})
            e.Graphics.DrawPath(Pens.Red, path)
            e.Graphics.FillPath(brush, path)
        End Using
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: VB3-Guru
Datum: 10.09.16 13:05

Gib bei Google mal den Begriff "vector hatch" ein. Auf seite 2 der Ergebnisse findest du einen link zu einer deutschsprachigen Site...

VB.Net kann von Hause aus nur mit Bitmap-Hatches (Brushes) schraffieren. Das ist für Vektorgrafik aber nicht ausreichend. Man muss also jede Gerade der Schraffur selbst erzeugen.

Kürzlich bin ich über das hier gestolpert:
http://www.vb-helper.com/howto_hatch_nonstandard.html (ist allerdings VB6). Aber nach diesem Prinzip geht's wohl auch in VB.Net.

lg Vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schraffieren ohne HatchBrush 
Autor: Bazi
Datum: 12.09.16 07:09

Danke für den Link und die Infos.
Sieht interessant aus, auch wenn ich es derzeit noch nicht umsetzen kann.
Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel