VectorDrawing Box im Vordergrund

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

VectorDrawing Box im Vordergrund

Beitrag von marcelx »

Hallo,

wie kann ich eine Linie Hintern eine Box darstellen ohne die Reihenfolge der Darstellung zu ändern (zu erste AddPathBox dann AddPathLine)

Gruß
MarcelX

EDIT: Kommentar eingefügt

Code: Alles auswählen

If OpenWindow(0, 0, 0, 400, 200, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, 400, 200)
  If StartVectorDrawing(CanvasVectorOutput(0))
    ; Alle Box abfragen und darstellen
    MovePathCursor(40, 20)
    AddPathBox(50, 50, 200, 50)
    FillPath(#PB_Path_Preserve)
    
    ; Alle Linie abfragen und darstellen
    MovePathCursor(40, 20)
    AddPathLine(150, 100, #PB_Path_Relative)
    VectorSourceColor(RGBA(0, 255, 0, 255))

    StrokePath(2)
  
    StopVectorDrawing()
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Zuletzt geändert von marcelx am 31.01.2020 13:51, insgesamt 1-mal geändert.
Win-10, PB 5.31 (Windows - x86)
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: VectorDrawing Box im Vordergrund

Beitrag von Derren »

Warum willst du die Reihenfolge nicht ändern.
So funktioniert "Drawing" nunmal, auch in der Realität.

Dann müsstest du die Linie bis zur Box zeichnen, von auf der anderen Seite der Box wieder weiter. Also eigentlich zwei Linien. Zuvor musst du natürlich die Schnittpunkte der Linie mit den Seiten der Box berechnen.
Signatur und so
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: VectorDrawing Box im Vordergrund

Beitrag von marcelx »

Der Code repräsentiert nicht die ganze Programm (es ist nur ein Beispiel).
Es ist so, dass die Box zu erste definiert werden und anschließen die Linie abgefragt und dargestellt.
Das Tränen der Linie wäre schwierig zu realisieren.
Win-10, PB 5.31 (Windows - x86)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: VectorDrawing Box im Vordergrund

Beitrag von ccode_new »

Hallo!

Eine einfache Möglichkeit wäre:

Code: Alles auswählen

Procedure Drawing(ZEbene.i)
  If StartVectorDrawing(CanvasVectorOutput(0))
      If ZEbene = 0
        ; Alle Box abfragen und darstellen
        MovePathCursor(40, 20)
        AddPathBox(50, 50, 200, 50)
        FillPath(#PB_Path_Preserve)
      EndIf
      ; Alle Linie abfragen und darstellen
      If ZEbene = 1
        MovePathCursor(40, 20)
        AddPathLine(150, 100, #PB_Path_Relative)
        VectorSourceColor(RGBA(0, 255, 0, 255))
      EndIf
      StrokePath(2)
    StopVectorDrawing()
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 400, 200, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, 400, 200)
  
  Repeat
    Event = WaitWindowEvent()
    
    If #PB_Event_Repaint
      Drawing(1)
      Drawing(0)
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: VectorDrawing Box im Vordergrund

Beitrag von #NULL »

@marcelx
Du musst die Datenbeschaffung und dass Zeichnen von einander trennen. Wenn du zuerst nur die Box hast, aber noch keine Daten für die Linie, dann speichere dir diese Boxdaten irgendwie und zeichne nur das was du hast (keine Linie, nur dir Box). Wenn du dann auch die Linendaten hast, zeichnest du alles erneut, erst die Line, dann die Box.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: VectorDrawing Box im Vordergrund

Beitrag von marcelx »

@ccode_new
interessant Lösung
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: VectorDrawing Box im Vordergrund

Beitrag von marcelx »

#NULL
leider schwierig weil die Box bekannt sind und die Linie nachträglich aufgebaut werden auf die Box.
Was funktioniert ist z.B. alle Box ausgeben und wenn eine Linie dargestellt wurde, die Box nochmal ausgeben.
Win-10, PB 5.31 (Windows - x86)
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: VectorDrawing Box im Vordergrund

Beitrag von Derren »

Warum?

Ein StartDrawing()-StopDrawing() Block wird auf einmal ausgegeben. Zweimal etwas identisches zeichen macht also keinen Sinn.
Signatur und so
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: VectorDrawing Box im Vordergrund

Beitrag von Nino »

#NULL hat geschrieben:Du musst die Datenbeschaffung und dass Zeichnen von einander trennen.
Yup! Genau das ist das entscheidende Prinzip.
Antworten