VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Für allgemeine Fragen zur Programmierung mit PureBasic.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Im englischen Forum gibt es ja diesen langen Thread um Icons direkt zur Laufzeit zu zeichnen. Ich möchte das auch machen, nur das Zeichnen per Code ist nicht gerade einfach. Da ich ein CorelDraw-Fan bin, habe ich heute begonnen ein Konvertierungstool zu schreiben. CorelDraw kann man mit dem integrierten VBA sozusagen programmieren. Ich habe mit der Vector-Library von PureBasic noch nicht viel gemacht, nur ausprobiert. Aber es geht überaschend einfach Objekte in Corel auszulesen und in entsprechenden PureBasic Code zu konvertieren.

Hier ist ein Screenshot von CorelDraw, dem VBA-Fenster und dem PureBasic-Ergebnis:
[Link entfernt]

Hier ein Beispiel mit linearen und kreisförmigen Farbverlauf:
[Link entfernt]

Hier der Link zur CorelDraw 12 Datei mit VBA-Makro:
[Link entfernt]

Ist mehr als Info gedacht, ich vermute es werden wenige noch CorelDraw verwenden. Ob es bei den neueren Version noch VBA gibt weiß ich nicht. CorelDraw 12 macht bei mehr als 2 GB RAM und VBA-Verwendung Probleme. Es erkennt soviel Speicher nicht bzw. falsch. Darum verwende ich es in VirtualBox.

Peter
Zuletzt geändert von DePe am 26.03.2020 10:21, insgesamt 4-mal geändert.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Ich habe gleich eine Frage zu den Vektoren. Wie skaliert man Kurven richtig?
Anbei der Code den ich mit VBA erstellt habe, also die Vektor-Befehle in der Prozedur VectorIcon(). Erstellt wurde die Zeichnung mit 128 Pixel Seitenbreite, das ist das unverzerrte Bild.
Hier das Beispielbild:
[Link entfernt]

Peter

Edit:
Es funktioniert mit ScaleCoordinates() ganz einfach, habe den Code und Bild geändert. Ich hatte auch einen Fehler im Code.

Code: Alles auswählen

#iStandardSize = 16
#iStandardDepth = 32
#StandardUnit = #PB_Unit_Pixel
#StandardBackground = #PB_Image_Transparent

Declare.i VectorIcon(iSize.i = #iStandardSize, iImageNumber.i = #PB_Any)

Procedure.i StartVectorImage(iImageNumber.i, iWidth.i, iHeight.i = 0, iDepth.i = #iStandardDepth,
                             iBackColor.i = #StandardBackground, iUnit.i = #StandardUnit)
   ; -> iImageNumber:   Die Image-Nummer oder #PB_Any für das Erstellen eines neuen Image.
   ; -> iWidth:         Die Breite des Image in Pixel.
   ; -> iHeight:        Die Höhe des Image in Pixel, Wenn Null übergeben wird, wird die Breite verwendet.
   ; -> iDepth:         Die Farbtiefe in Bit, z.B. 24 oder 32.
   ; -> iBackColor:     Die Farbe für den Hintergrund.
   ; -> iUnit:          Die Einheit für die Größenangaben.
   ; Die Parameter sind ähnlich wie für die Funktionen CreateImage() und ImageVectorOutput().
   ; Rückgabe: Die Image-Nummer oder Null bei einem Fehler.
   Protected iReturn.i

   If (Not iHeight)
      iHeight = iWidth
   EndIf

   iReturn = CreateImage(iImageNumber, iWidth, iHeight, iDepth, iBackColor)
   If iReturn
      If iImageNumber = #PB_Any
         iImageNumber = iReturn
      EndIf
      If (Not StartVectorDrawing(ImageVectorOutput(iImageNumber, iUnit)))
         FreeImage(iImageNumber)
         iReturn = 0
      EndIf
   EndIf

   ProcedureReturn iReturn
EndProcedure

Procedure.i VectorIcon(iSize.i = #iStandardSize, iImageNumber.i = #PB_Any)
   ; Erstellt ein leeres transparentes Icon.
   ; -> iSize:          Die Größe des Icons in der Breite und Höhe in Pixel.
   ; -> iImageNumber:   Ein Image-Nummer oder #PB_Any für das Erstellen eines neuen Image.
   ; Rückgabe: Die Image-Nummer oder Null bei einem Fehler.
   Protected iReturn.i

   iReturn = StartVectorImage(iImageNumber, iSize)

   If iReturn
      ; CorelDraw - VectorIcon.
      Protected rCreatedSizeWidth.d =  128
      Protected rCreatedSizeHeight.d =  128
      Protected rScaleWidth.d = (iSize / rCreatedSizeWidth)
      Protected rScaleHeight.d = (iSize / rCreatedSizeHeight)

      ScaleCoordinates(rScaleWidth, rScaleHeight)

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(46, 23)
      AddPathLine(46, 45)
      AddPathCurve(46, 51, 41, 56, 35, 56)
      AddPathLine(13, 56)
      AddPathCurve(7, 56, 2, 51, 2, 45)
      AddPathLine(2, 23)
      AddPathCurve(2, 17, 7, 12, 13, 12)
      AddPathLine(35, 12)
      AddPathCurve(41, 12, 46, 17, 46, 23)
      VectorSourceColor($FF00F5FF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF171A1F)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.
      AddPathBox(28, 6, 38, 42)
      VectorSourceColor($FF3F9200)
      StrokePath(5)
      ResetPath()

      ; CorelDraw RectangleShape.
      AddPathBox(18, 36, 34, 34)
      VectorSourceColor($FFDD9300)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF171A1F)
      StrokePath(3)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(26, 73)
      AddPathLine(86, 52)
      AddPathLine(86, 70)
      AddPathCurve(86, 76, 79, 83, 70, 86)
      AddPathLine(26, 101)
      AddPathCurve(17, 104, 10, 101, 10, 95)
      AddPathLine(10, 89)
      AddPathCurve(10, 83, 17, 76, 26, 73)
      VectorSourceColor($FF3F9200)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF1D25DA)
      StrokePath(5)
      ResetPath()

      StopVectorDrawing()
   EndIf

   ProcedureReturn iReturn
EndProcedure


; ###### TEST ######

If OpenWindow(0, 0, 0, 460, 260, "VectorIcon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   SetWindowColor(0, #White)
   ImageGadget(#PB_Any, 2, 2, 256, 256, ImageID(VectorIcon(256)))
   ImageGadget(#PB_Any, 260, 2, 128, 128, ImageID(VectorIcon(128)))
   ImageGadget(#PB_Any, 392, 2, 64, 64, ImageID(VectorIcon(64)))
   ImageGadget(#PB_Any, 408, 68, 32, 32, ImageID(VectorIcon(32)))
   ImageGadget(#PB_Any, 412, 104, 24, 24, ImageID(VectorIcon(24)))
   ImageGadget(#PB_Any, 416, 132, 16, 16, ImageID(VectorIcon(16)))

   Repeat
      Event = WaitWindowEvent()
   Until Event = #PB_Event_CloseWindow
EndIf
Zuletzt geändert von DePe am 26.03.2020 10:22, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von STARGÅTE »

Vielleicht ist dieses (nicht fertige) Include was für dich:
https://www.unionbytes.de/downloads/VectorGraphic.pbi
(viewtopic.php?p=352029#p352029)

Ich hatte damals begonnen Prozeduren zu schreiben um auf einfache Weise SVG-Bilder in PB zu laden und anzuzeigen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Danke, werde ich mir anschauen. Im Moment bin ich mit dem Corel-Tool ganz zufrieden. Es fehlt nur noch der Text, den kann man aber auch nach Kurven konvertieren.
Anbei ein Bild:
[Link entfernt]

Für Icons oder kleine Grafiken fehlt glaube ich nichts wichtiges. Transparenz oder Fülleffekte benötige ich nicht.

Peter
Zuletzt geändert von DePe am 26.03.2020 10:22, insgesamt 1-mal geändert.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Ich habe jetzt auch die Textobjekte übernommen. Die werden je nach Eigenschaften als DrawVectorText, AddPathText oder Kurven übernommen. Bei den Rechtecken und Ellipsen ist es das gleiche. Wenn die Objekte gestaucht, gedreht oder skaliert werden nach dem Erstellen, werden automatisch im Code Kurven verwendet.

Die Farbverwaltung sollte in CorelDraw deaktivert, oder z.B. auf Webausgabe geändert werden. Ansonst werden die Farben für den CMYK-Bereich verwendet, die sind etwas flau.

Zum Ausführen des Markos im Menü 'Etras' -> 'Visual Basic' -> "Wiedergeben..." wählen, und im Dialog 'PureBasic.VectorIcon' auswählen und ausführen.

Ich habe eine komplette PB-Prozedur erstellt für das Kopieren. Das lässt sich aber leicht ändern. In der VBA-Prozedur cmdRefresh_Click wird am Ende der Code zusammengestellt.
Der viele Code in der Prozedur ist nur für die Ausgabe der Eigenschaften der Corel-Objekte, damit habe ich die passenden Werte gesucht. Umschalten kann man mit der Schaltfläche 'Corel / Vektor'.

Hier der Link zur CorelDraw 12 Datei:
[siehe ersten Beitrag]

Und hier ein aktueller Screenshot:
[Link entfernt]

Edit: Ich habe noch versucht die Schriftgröße und Position anzugleichen, aber es gelingt mir momentan nicht. In Kurven konvertiert funktioniert es natürlich. Geändert habe ich auch noch, dass keine Werte ohne führender Null im PB-Code vorkommen.

Peter
Zuletzt geändert von DePe am 26.03.2020 10:22, insgesamt 4-mal geändert.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Damit es nicht so abstrakt aussieht, hier ein ungefähr 5 Minuten Gebastel für ein Oszilloskop als Test.

Peter

Code: Alles auswählen

#iStandardSize = 16
#iStandardDepth = 32
#StandardUnit = #PB_Unit_Pixel
#StandardBackground = #PB_Image_Transparent

Declare.i VectorIcon(iSize.i = #iStandardSize, iImageNumber.i = #PB_Any)

Procedure.i StartVectorImage(iImageNumber.i, iWidth.i, iHeight.i = 0, iDepth.i = #iStandardDepth,
                             iBackColor.i = #StandardBackground, iUnit.i = #StandardUnit)
   ; -> iImageNumber:   Die Image-Nummer oder #PB_Any für das Erstellen eines neuen Image.
   ; -> iWidth:         Die Breite des Image in Pixel.
   ; -> iHeight:        Die Höhe des Image in Pixel, Wenn Null übergeben wird, wird die Breite verwendet.
   ; -> iDepth:         Die Farbtiefe in Bit, z.B. 24 oder 32.
   ; -> iBackColor:     Die Farbe für den Hintergrund.
   ; -> iUnit:          Die Einheit für die Größenangaben.
   ; Die Parameter sind ähnlich wie für die Funktionen CreateImage() und ImageVectorOutput().
   ; Rückgabe: Die Image-Nummer oder Null bei einem Fehler.
   Protected iReturn.i

   If (Not iHeight)
      iHeight = iWidth
   EndIf

   iReturn = CreateImage(iImageNumber, iWidth, iHeight, iDepth, iBackColor)
   If iReturn
      If iImageNumber = #PB_Any
         iImageNumber = iReturn
      EndIf
      If (Not StartVectorDrawing(ImageVectorOutput(iImageNumber, iUnit)))
         FreeImage(iImageNumber)
         iReturn = 0
      EndIf
   EndIf

   ProcedureReturn iReturn
EndProcedure

Procedure.i VectorIcon(iSize.i = #iStandardSize, iImageNumber.i = #PB_Any)
   ; Erstellt ein Icon bzw. Image.
   ; -> iSize:          Die Größe des Icons in der Breite und Höhe in Pixel.
   ; -> iImageNumber:   Ein Image-Nummer oder #PB_Any für das Erstellen eines neuen Image.
   ; Rückgabe: Die Image-Nummer oder Null bei einem Fehler.
   Protected iReturn.i, iFontId.i
   Protected rCreatedSizeWidth.d =  128
   Protected rCreatedSizeHeight.d =  128
   Protected rScaleWidth.d = (iSize / rCreatedSizeWidth)
   Protected rScaleHeight.d = (iSize / rCreatedSizeHeight)

   iReturn = StartVectorImage(iImageNumber, iSize)

   If iReturn
      ScaleCoordinates(rScaleWidth, rScaleHeight)

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(16, 103.99)
      AddPathLine(23, 103.99)
      AddPathCurve(23.82, 103.99, 24.5, 103.31, 24.5, 102.49)
      AddPathLine(24.5, 99.49)
      AddPathCurve(24.5, 98.66, 23.82, 97.99, 23, 97.99)
      AddPathLine(16, 97.99)
      AddPathCurve(15.17, 97.99, 14.5, 98.66, 14.5, 99.49)
      AddPathLine(14.5, 102.49)
      AddPathCurve(14.5, 103.31, 15.17, 103.99, 16, 103.99)
      VectorSourceColor($FF7F7F7F)
      FillPath(#PB_Path_Preserve)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(105.05, 104.04)
      AddPathLine(112.05, 104.04)
      AddPathCurve(112.87, 104.04, 113.55, 103.37, 113.55, 102.54)
      AddPathLine(113.55, 99.54)
      AddPathCurve(113.55, 98.72, 112.87, 98.05, 112.05, 98.05)
      AddPathLine(105.05, 98.05)
      AddPathCurve(104.22, 98.05, 103.55, 98.72, 103.55, 99.54)
      AddPathLine(103.55, 102.54)
      AddPathCurve(103.55, 103.37, 104.22, 104.04, 105.05, 104.04)
      VectorSourceColor($FF7F7F7F)
      FillPath(#PB_Path_Preserve)
      ResetPath()

      ; CorelDraw RectangleShape.
      AddPathBox(10, 38, 79.99, 47.99)
      VectorSourceColor($FF333333)
      FillPath(#PB_Path_Preserve)
      ResetPath()

      ; CorelDraw CurveShape.Curve.
      MovePathCursor(9.65, 73.32)
      AddPathLine(16.89, 49.66)
      AddPathLine(24.86, 73.57)
      AddPathLine(32.83, 49.66)
      AddPathLine(40.8, 73.57)
      AddPathLine(48.77, 49.66)
      AddPathLine(56.74, 73.57)
      AddPathLine(64.93, 49.66)
      AddPathLine(72.9, 73.57)
      AddPathLine(80.87, 49.66)
      AddPathLine(88.84, 73.57)
      VectorSourceColor($FF00FFFF)
      StrokePath(3)
      ResetPath()

      ; CorelDraw RectangleShape.
      AddPathBox(10, 38, 79.99, 47.99)
      VectorSourceColor($FFB2B2B2)
      StrokePath(4)
      ResetPath()

      ; CorelDraw CurveShape.Curve.
      MovePathCursor(12.25, 32)
      AddPathLine(115.74, 32)
      AddPathCurve(120.27, 32, 123.98, 35.71, 123.98, 40.24)
      AddPathLine(123.98, 89.74)
      AddPathCurve(123.98, 94.28, 120.27, 97.99, 115.74, 97.99)
      AddPathLine(12.25, 97.99)
      AddPathCurve(7.71, 97.99, 4, 94.28, 4, 89.74)
      AddPathLine(4, 40.24)
      AddPathCurve(4, 35.71, 7.71, 32, 12.25, 32)
      MovePathCursor(10, 38)
      AddPathLine(89.99, 38)
      AddPathLine(89.99, 85.99)
      AddPathLine(10, 85.99)
      AddPathLine(10, 38)
      VectorSourceColor($FFE5E5E5)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(103.99, 81.99, 4, 4)
      VectorSourceColor($FFCCFFFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(115.99, 69.99, 4, 4)
      VectorSourceColor($FFCCFFFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(103.99, 51.99, 4, 4)
      VectorSourceColor($FFCCFFFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(103.99, 41.99, 3, 3)
      VectorSourceColor($FFCCFFFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(103.99, 63.99, 3, 3)
      VectorSourceColor($FFCCFFFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(113.99, 91.99, 3, 3)
      VectorSourceColor($FF00CCFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(103.99, 91.99, 3, 3)
      VectorSourceColor($FF00CCFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(93.99, 91.99, 3, 3)
      VectorSourceColor($FF00CCFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw EllipseShape.Ellipse.
      AddPathEllipse(83.99, 91.99, 3, 3)
      VectorSourceColor($FF00CCFF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.
      AddPathBox(59.99, 89.99, 14, 4)
      VectorSourceColor($FF666666)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FFB2B2B2)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.
      AddPathBox(42.99, 89.99, 14, 4)
      VectorSourceColor($FF666666)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FFB2B2B2)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(11, 89.99)
      AddPathLine(15, 89.99)
      AddPathCurve(15.55, 89.99, 16, 90.44, 16, 90.99)
      AddPathLine(16, 92.99)
      AddPathCurve(16, 93.54, 15.55, 93.99, 15, 93.99)
      AddPathLine(11, 93.99)
      AddPathCurve(10.45, 93.99, 10, 93.54, 10, 92.99)
      AddPathLine(10, 90.99)
      AddPathCurve(10, 90.44, 10.45, 89.99, 11, 89.99)
      VectorSourceColor($FF33CC33)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF336600)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(92.99, 39.99)
      AddPathLine(96.99, 39.99)
      AddPathCurve(97.54, 39.99, 97.99, 40.44, 97.99, 41)
      AddPathLine(97.99, 42.99)
      AddPathCurve(97.99, 43.54, 97.54, 43.99, 96.99, 43.99)
      AddPathLine(92.99, 43.99)
      AddPathCurve(92.44, 43.99, 91.99, 43.54, 91.99, 42.99)
      AddPathLine(91.99, 41)
      AddPathCurve(91.99, 40.44, 92.44, 39.99, 92.99, 39.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(113.99, 39.99)
      AddPathLine(117.99, 39.99)
      AddPathCurve(118.54, 39.99, 118.99, 40.44, 118.99, 41)
      AddPathLine(118.99, 42.99)
      AddPathCurve(118.99, 43.54, 118.54, 43.99, 117.99, 43.99)
      AddPathLine(113.99, 43.99)
      AddPathCurve(113.44, 43.99, 112.99, 43.54, 112.99, 42.99)
      AddPathLine(112.99, 41)
      AddPathCurve(112.99, 40.44, 113.44, 39.99, 113.99, 39.99)
      VectorSourceColor($FF6600FF)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FFCC99FF)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(113.99, 47.99)
      AddPathLine(117.99, 47.99)
      AddPathCurve(118.54, 47.99, 118.99, 48.44, 118.99, 48.99)
      AddPathLine(118.99, 50.99)
      AddPathCurve(118.99, 51.54, 118.54, 51.99, 117.99, 51.99)
      AddPathLine(113.99, 51.99)
      AddPathCurve(113.44, 51.99, 112.99, 51.54, 112.99, 50.99)
      AddPathLine(112.99, 48.99)
      AddPathCurve(112.99, 48.44, 113.44, 47.99, 113.99, 47.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(92.99, 47.99)
      AddPathLine(96.99, 47.99)
      AddPathCurve(97.54, 47.99, 97.99, 48.44, 97.99, 48.99)
      AddPathLine(97.99, 50.99)
      AddPathCurve(97.99, 51.54, 97.54, 51.99, 96.99, 51.99)
      AddPathLine(92.99, 51.99)
      AddPathCurve(92.44, 51.99, 91.99, 51.54, 91.99, 50.99)
      AddPathLine(91.99, 48.99)
      AddPathCurve(91.99, 48.44, 92.44, 47.99, 92.99, 47.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(92.99, 55.99)
      AddPathLine(96.99, 55.99)
      AddPathCurve(97.54, 55.99, 97.99, 56.44, 97.99, 56.99)
      AddPathLine(97.99, 58.99)
      AddPathCurve(97.99, 59.54, 97.54, 59.99, 96.99, 59.99)
      AddPathLine(92.99, 59.99)
      AddPathCurve(92.44, 59.99, 91.99, 59.54, 91.99, 58.99)
      AddPathLine(91.99, 56.99)
      AddPathCurve(91.99, 56.44, 92.44, 55.99, 92.99, 55.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(92.99, 63.99)
      AddPathLine(96.99, 63.99)
      AddPathCurve(97.54, 63.99, 97.99, 64.44, 97.99, 64.99)
      AddPathLine(97.99, 66.99)
      AddPathCurve(97.99, 67.54, 97.54, 67.99, 96.99, 67.99)
      AddPathLine(92.99, 67.99)
      AddPathCurve(92.44, 67.99, 91.99, 67.54, 91.99, 66.99)
      AddPathLine(91.99, 64.99)
      AddPathCurve(91.99, 64.44, 92.44, 63.99, 92.99, 63.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(92.99, 71.99)
      AddPathLine(96.99, 71.99)
      AddPathCurve(97.54, 71.99, 97.99, 72.44, 97.99, 72.99)
      AddPathLine(97.99, 74.99)
      AddPathCurve(97.99, 75.54, 97.54, 75.99, 96.99, 75.99)
      AddPathLine(92.99, 75.99)
      AddPathCurve(92.44, 75.99, 91.99, 75.54, 91.99, 74.99)
      AddPathLine(91.99, 72.99)
      AddPathCurve(91.99, 72.44, 92.44, 71.99, 92.99, 71.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw RectangleShape.Curve.
      MovePathCursor(92.99, 79.99)
      AddPathLine(96.99, 79.99)
      AddPathCurve(97.54, 79.99, 97.99, 80.44, 97.99, 80.99)
      AddPathLine(97.99, 82.99)
      AddPathCurve(97.99, 83.54, 97.54, 83.99, 96.99, 83.99)
      AddPathLine(92.99, 83.99)
      AddPathCurve(92.44, 83.99, 91.99, 83.54, 91.99, 82.99)
      AddPathLine(91.99, 80.99)
      AddPathCurve(91.99, 80.44, 92.44, 79.99, 92.99, 79.99)
      VectorSourceColor($FFCCCC99)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF999966)
      StrokePath(1)
      ResetPath()

      ; CorelDraw CurveShape.Curve.
      MovePathCursor(100.52, 32)
      AddPathCurve(100.82, 31.25, 100.99, 30.44, 100.99, 29.6)
      AddPathLine(100.99, 26.4)
      AddPathCurve(100.99, 22.88, 98.11, 20, 94.59, 20)
      AddPathLine(31.4, 20)
      AddPathCurve(27.88, 20, 25, 22.88, 25, 26.4)
      AddPathLine(25, 29.6)
      AddPathCurve(25, 30.44, 25.17, 31.25, 25.47, 32)
      AddPathLine(31.17, 32)
      AddPathCurve(31.06, 31.68, 31, 31.35, 31, 31)
      AddPathLine(31, 27)
      AddPathCurve(31, 25.35, 32.35, 24, 34, 24)
      AddPathLine(91.99, 24)
      AddPathCurve(93.64, 24, 94.99, 25.35, 94.99, 27)
      AddPathLine(94.99, 31)
      AddPathCurve(94.99, 31.35, 94.93, 31.68, 94.82, 32)
      AddPathLine(100.52, 32)
      VectorSourceColor($FF999999)
      FillPath(#PB_Path_Preserve)
      VectorSourceColor($FF000000)
      StrokePath(1)
      ResetPath()

      StopVectorDrawing()
   EndIf

   ProcedureReturn iReturn
EndProcedure

; ############

If OpenWindow(0, 0, 0, 460, 260, "VectorIcon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   SetWindowColor(0, #White)
   ImageGadget(#PB_Any, 2, 2, 256, 256, ImageID(VectorIcon(256)))
   ImageGadget(#PB_Any, 260, 2, 128, 128, ImageID(VectorIcon(128)))
   ImageGadget(#PB_Any, 392, 2, 64, 64, ImageID(VectorIcon(64)))
   ImageGadget(#PB_Any, 408, 68, 32, 32, ImageID(VectorIcon(32)))
   ImageGadget(#PB_Any, 412, 104, 24, 24, ImageID(VectorIcon(24)))
   ImageGadget(#PB_Any, 416, 132, 16, 16, ImageID(VectorIcon(16)))

   Repeat
      Event = WaitWindowEvent()
   Until Event = #PB_Event_CloseWindow
EndIf
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Ich habe jetzt noch die Verlaufsfüllung für Linear- und CircularGradient eingebaut. Es ist nicht ganz genau gleich, aber ganz brauchbar. Fehler gibt es wenn man die Corel-Objekte verdreht, staucht usw.

Hier ein Beispiel mit linearen und kreisförmigen Farbverlauf:
[Link entfernt]

Ich hab im ersten Beitrag die Links aktualisiert.

Peter
Zuletzt geändert von DePe am 26.03.2020 10:23, insgesamt 1-mal geändert.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Wenn man das Marko bzw. VBA-Module als GMS-Datei verwendet, funktioniert CorelDraw auch mit mehr als 2 GB RAM. Ansonst kann ich das Dokument mit Makro nicht laden, es gibt bei 50 % immer eine Fehlermeldung. Als GMS-Datei funktioniert alles und man kann auch das Makro in die Toolbar ziehen und ein Tastaturkürzel zuweisen.

Hier der Link zur GMS-Datei und zwei Vorlage-Dateien:
[Link entfernt]

Die Datei muss man in das Verzeichnis 'C:\Program Files (x86)\Corel\Corel Graphics 12\Draw\GMS\' kopieren. In der VBA-Hilfe ist beschrieben was eine GMS-Datei ist.

Peter
Zuletzt geändert von DePe am 26.03.2020 10:23, insgesamt 1-mal geändert.
DePe
Beiträge: 153
Registriert: 26.11.2017 16:17
Wohnort: Wien
Kontaktdaten:

Re: VectorIcon mit CorelDraw zeichnen - Konvertierungstool

Beitrag von DePe »

Ich habe das ZIP-Archiv mit der GMS-Datei und Version v08 aktualisiert. Ein Ellipsenbogen wurde spiegelverkehrt gezeichnet. Man muss immer aufpassen das der Ursprung im Corel-Dokument links oben ist.

Hier noch ein letzter Screenshot von meinem Programm mit den VectorIcons. Ich habe ungefähr zwei Stunden daran gezeichnet, aber langsam und mit ausprobieren. Mehr Icons habe ich noch nicht. Bin noch immer total begeistert von der Idee und dem Konvertierungstool. Die Toolbar ist auf groß geschaltet, und skaliert mit der Bildschirmeinstellung mit.

[Link entfernt]

Peter
Antworten