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 - Fortgeschrittene
Drawing2d.Path vereinen 
Autor: met
Datum: 02.11.16 13:14

Hallo,

kann man irgendwie 2 Path-Objekte (Polygone) miteinander vereinen?
ich müsste mehrere Polygone (mit Geraden und Bögen) miteinander vereinen und mit dem Ergebnis (Polygon) weiter arbeiten.

mein 1. Versuch war dieser...

        Dim myGraphics As Graphics
        Dim myPath As New System.Drawing.Drawing2D.GraphicsPath()
        Dim myPath2 As New System.Drawing.Drawing2D.GraphicsPath()
        Dim myRegion As Region
        Dim myRegion2 As Region
 
        'return the current form as a drawing surface
        myGraphics = Me.CreateGraphics 'Graphics.FromHwnd(hwnd:=ActiveForm( 
        ' ).Handle)
 
        'create the first path and region
        myPath.StartFigure()
        myPath.AddRectangle(rect:=New Rectangle(x:=50, y:=50, Width:=50, _
          Height:=20))
        myRegion = New Region(path:=myPath)
 
        'create the first path and region
        myPath2.StartFigure()
        Dim myRec As New Rectangle(x:=35, y:=45, Width:=50, Height:=30)
        myPath2.AddEllipse(rect:=myRec)
        myRegion2 = New Region(path:=myPath2)
 
        'add the paths together 
        myRegion.Union(region:=myRegion2)
 
        'fill the region
        myGraphics.FillRegion(brush:=New SolidBrush(Color.Black), _
          region:=myRegion)
Allerdings ist myRegion.data kein Polygon mehr

Kennt jemand eine Lösung?

Folgende Ansätze habe ich bereits ausprobiert:
http://www.angusj.com/delphi/clipper/documentation/Docs/Overview/_Body.htm ist leider nichts, da alle Bögen in kleine Linien umgewandelt werden

Danke im Voraus für eure Anregungen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Drawing2d.Path vereinen 
Autor: Manfred X
Datum: 03.11.16 07:05

Hallo!

Was verstehst Du unter einem Polygon mit Geraden und Bögen?

Ich vermute, du mußt Ellipsen hilfsweise als Polygone
im Graphik-Pfad definieren, wenn Du mit der Region-Klasse in
der gewünschten Weise arbeiten willst (= Bögen werden als eine
Abfolge kurzer Geraden realisiert).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Drawing2d.Path vereinen 
Autor: met
Datum: 03.11.16 07:27

Hi, danke für die Antwort...

Ich habe z.B. gerundete Rechtecke die übereinander liegen. Von all diesen benötige ich die Outline und muss aber noch die Radien auslesen können.
Das geht leider bei lauter Geraden nicht mehr
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Drawing2d.Path vereinen 
Autor: Manfred X
Datum: 03.11.16 16:10

Hallo!

Deine Flächen sind anscheinend begrenzt durch eine Abfolge von
Abschnitten von Geraden und Abschnitten von Ellipsen.
Es handelt sich offenbar nicht um Vielecke.

Du benötigst eine Klasse, die Flächen durch solche Abfolgen verwaltet.
Dabei ist ein Geradenabschnitt durch Anfangs- und Endpunkt (x1,y1, x2,y2)
definiert, für Ellipsenabschnitte sind zusätzlich die beiden Brennpunkte
erforderlich.

Um die so gegebenen Flächen zu "fusionieren" benötigt diese Klasse
drei Hilfsmethoden zur Bestimmung von Schnittpunkten zwischen
- zwei Geradenabschnitten
- zwei Ellipsenabschnitten
- einem Geraden- und einem Ellipsenbabschnitt

Durch diese Schnittpunkte sind die Anfangs- und Endpunkte der
neuen Abschnittsabfolge der fusionierten Fläche gegeben.

Vermutlich gibt es dafür bereits Net-Bibliotheken.
Ich kenne leider keine.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Paths auslesen 
Autor: VB3-Guru
Datum: 26.12.16 17:49

Du musst die Informationen aus dem Path auslesen. Der Pfad besteht aus Geraden und Bezier-Kurven. Der Krümmungsradius einer abgerundeten Ecke steckt also in den Parametern der Bezier-Handles (Länge, Position).

Du darfst den Path natürlich nicht vorher in einem Polygon fixieren (hierbei gehen die Bezier-Parameter flöten).

Um mehrere Pfade zusammenzufügen, kannst du sie entweder per Grafikbefehl in einen neuen Path schreiben oder du zerlegst die Pfade in ihre Bestandteile und fügst sie rein rechnerisch ´zusammen. Für Letzeres musst du den Aufbau von Paths natürlich genau kennen (ist nicht soo schwer - ist nur ne Liste von Geraden oder Polylines und Bezier-Kurven).

lg, VB3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paths auslesen 
Autor: met
Datum: 26.12.16 20:52

Hallo, danke für die Antwort.
Hast du evtl. ein kleines Beispiel für mich?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paths auslesen 
Autor: VB3-Guru
Datum: 26.12.16 21:55

Ein Beispiel hab ich nur in VB6. Aber die Paths in Vb.Net sind genauso aufgebaut.
Hier ein Wenig MSDN-Lektüre:
https://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.graphicspath_methods(v=vs.110).aspx
https://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.graphicspath(v=vs.110).aspx
Ich glaube du suchst das hier:
https://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.graphicspath.addpath(v=vs.110).aspx
Irgendwo gabs da auch was zu Join Paths, also Zusammenfügen von Paths, find das aber gerade nicht.

lg, vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paths auslesen 
Autor: met
Datum: 07.01.17 22:40

Hi, danke für die antworten...
Addpath ist gut aber mit Join finde ich leider nix, nur als Region (union) und das sind dann nur kleine Linien und keine Bögen mehr 😣
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