Seite 1 von 1

Linie mit eigenem Pattern

Verfasst: 30.06.2012 16:02
von E-P-S
Hallo zusammen,

wenn ich Danilos GDI+ Lib (hier) verwende und eine Datei als Pattern (Textur) nehme wird dieses gekachelt und erscheint immer in gleicher Ausrichtung.
Bild

Ist es möglich eine Linie mit einem eigenen Pattern auch so zu zeichnen das die Ausrichtung des Patterns dem Linienverlauf folgt?

Re: Linie mit eigenem Pattern

Verfasst: 01.07.2012 19:01
von Danilo
E-P-S hat geschrieben:Ist es möglich eine Linie mit einem eigenen Pattern auch so zu zeichnen das die Ausrichtung des Patterns dem Linienverlauf folgt?
Das geht so normal nicht, da es einfach ein Muster (Pattern) ist, das wiederholt gezeichnet wird (tiled).

Du kannst probieren es selbst zu machen. In Deinem Beispielbild sind 4 Linien zu sehen.
Für jede Linie kannst Du den Winkel ausrechnen und den Pen mit gSetPenRotation entsprechend
drehen. Danach nächste Linie mit neuem Winkel zeichnen.
Allerdings werden die Übergänge von den Linien wohl nicht so gut aussehen.

Test:

Code: Alles auswählen

XIncludeFile "gDrawing.pbi"

Global penImage.i

Procedure Draw()
    gDrawingMode( #PB_2DDrawing_Outlined )
    
    gSetPenSize(10)
    gSetPenImage(penImage)
    ;gSetPenCaps(#PenCapRound,#PenCapRound)
    
    gSetPenRotation(-45) : gSetPenOrigin(100,100)
    
    gLineXY(100,100,200,200)

    gResetPenTransform()
    gSetPenRotation(-90) ;: gSetPenOrigin(200,200)
    
    gLineXY(200,200,300,200)

    gResetPenTransform()
    gSetPenRotation(-135) ;: gSetPenOrigin(300,200)
    
    gLineXY(300,200,400,100)


EndProcedure

penImage = CreateImage(#PB_Any,20,20)
If StartDrawing( ImageOutput(penImage) )
    DrawingMode(#PB_2DDrawing_Gradient)

    BackColor($00FFFF)
    FrontColor($FF0000)
    LinearGradient(0, 0, 0, 20)

    Box(0,0,20,20)

    StopDrawing()
EndIf

If gInit()
    mainWin = OpenWindow(#PB_Any,0,0,800,600,"gDrawing feature demo",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    img = CreateImage(#PB_Any,800,600,24)
    If gStartDrawing( ImageOutput(img) )
        gClear( RGBA($AA,$AA,$AA,$FF) )
        Draw()
        gStopDrawing()
    EndIf
    imgWin  = ImageGadget(#PB_Any,0,0,800,600,ImageID(img))
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
    gEnd()
EndIf
Sieht mMn nicht gut aus.

Re: Linie mit eigenem Pattern

Verfasst: 01.07.2012 19:43
von E-P-S
So toll muß es gar nicht aussehen - ist für meine Zwecke also die perfekte Lösung.

Besten dank.