&d2D(s3b1S Vektorgrafik braucht Format! (s0b0S&d@

Mit dem neuen MegaPaint Professional knnen nun auch Vektorgrafiken erstellt
und bearbeitet werden. Dabei hat sich gezeigt, da existierende Formate fr
Vektorgrafiken den Ansprchen des Programms nicht gerecht wurden oder nicht
ausreichend dokumentiert waren. Aus diesem Grund haben wir uns entschlossen,
das Vektorgrafikformat von MegaPaint Professional ausfhrlich zu beschreiben
und es allgemein zugnglich zu machen, in der Hoffnung, der Verwirrung um die
Vektorgrafikformate ein Ende zu setzen.

Diese Beschreibung ist so gehalten, da sie auch ohne Kenntnis des Programms
verstanden werden kann, ein Einblick in die Arbeitsweise von MegaPaint
Professional kann jedoch das Verstndnis der einzelnen Funktionen erleichtern.

Das Dateiformat wurde so gestaltet, da es keine besonderen Anforderungen an
die Hardware und das Betriebssystem stellt. Es ist also auch denkbar, dieses
Format auf andere Rechnersysteme zu portieren.


&d2D Datenformat der MegaPaint Vektordatei *.VEK &d@

&d1D Das Koordinatensystem &d@

Das Koordinatensystem hat seinen Ursprung in der linken oberen Bildecke und
erstreckt seine positiven Achsen nach rechts und unten. Die minimale Koordinate
ist -7680, die maximale 15360.


&d1D Die Koordinatendarstellung &d@

Ein Punkt wird durch eine X- und eine Y-Ordinate beschrieben. Diese belegen
jeweils 32 Bits. Die Werte werden in 1/65536 Bildpunkten dargestellt, d.h. der
Wert 65536 entspricht einem Bildpunkt.


&d1D Dateikopf &d@

  8 Bytes (  0) Identifikation          ( $07 56 45 4b 20 32 2e 33 = 'VEK 2.3' )

  4 Bytes (  8) Dateilnge              ( Lnge der gesamten Datei in Bytes )
  2 Bytes ( 12) Farbkennung             ( Momentan immer $0000 - Keine Farben )
  2 Bytes ( 14) Headerlnge             ( Momentan immer $0020 )

  4 Bytes ( 16) Minimale X-Ordinate     ( Minimale und maximale Koordinaten,
  4 Bytes ( 20) Minimale Y-Ordinate       die bei Selektionsrahmen in der
  4 Bytes ( 24) Maximale X-Ordinate       Datei auftreten )
  4 Bytes ( 28) Maximale Y-Ordinate

Sowohl die Farbinformation als auch die Headerlnge mssen in jedem Fall
abgefragt und beachtet werden, um zu gewhrleisten, da auch zuknftige
Versionen korrekt gelesen werden.

Bei Farbbildern wird anschlieend die Farbpalette gespeichert. Die Form dieser
Palette hngt von der Farbkennung ab. Die Farbkennung hat folgendes Format:

  1 Byte  ( 12) Farbdefinitionsart      (      0 - RGB mit drei Bytes pro Farbe
                                          1..255 - andere Arten )
  1 Byte  ( 13) Ebenenanzahl            ( Anzahl Farbebenen, maximal 8 Ebenen
                                          = 256 Farben. Fr jede mgliche Farbe
                                          ein Eintrag in der Farbpalette.
                                          Ebeneanzahl=0 bedeutet Schwarz/Wei,
                                          wobei Farbe 0 "wei" und Farbe 1
                                          "schwarz" ist. Keine Farbpalette! )
Momentan ist zustzlich zur Schwarz/Wei-Darstellung nur die Farbdarstellung
in RGB geplant. Andere Formate werden noch durchdacht. MegaPaint Professional
Version 2.3 akzeptiert nur Schwarz/Wei-Bilder.


&d1D Dateirumpf &d@

Der Dateirumpf besteht aus einer Folge von einzelnen Objekten. Jedes Objekt
besteht aus einem einheitlichen Kopf und objektabhngigen Parametern.

  2 Bytes (  0) Objektlnge           ( Lnge des Objektes in Bytes )

  4 Bytes (  2) Rect_x1               ( Obere linke und untere rechte Ecke
  4 Bytes (  6) Rect_y1                 des zum Objekt gehrenden Selektions-
  4 Bytes ( 10) Rect_x2                 rahmens. Dieser beschreibt den maximalen
  4 Bytes ( 14) Rect_y2                 rechteckigen Bereich, der vom Objekt
                                        belegt wird )

  1 Byte  ( 18) Funktionsnummer       ( Nummer der Zeichenfunktion, s.u. )
  1 Byte  ( 19) Ebenennummer          ( Nummer der Ebene, der dieses Objekt
                                        angehrt.
                                          $01 - Ebene 1,
                                          $02 - Ebene 2,
                                          $04 - Ebene 3,
                                          $08 - Ebene 4.
                                        In diesem Byte mu genau ein Bit gesetzt
                                        sein )
  1 Byte  ( 20) Reserviert            ( Immer $00 )
  1 Byte  ( 21) Gruppennummer         ( Gibt die Nummer der Gruppe an, zu der
                                        dieses Objekt gehrt. Ist es $00, gehrt
                                        es zu keiner Gruppe )
  1 Byte  ( 22) Farbe                 ( Farbe des Objektes )
  1 Byte  ( 23) Zeichenmodus          ( Zeichenmodus aus MegaPaint.
                                          $00 - Normal
                                          $01 - Oder
                                          $02 - Revers
                                          $03 - Lschen )
  1 Byte  ( 24) Fllmodus             ( Fllmodus aus MegaPaint.
                                          $00 - Rahmen
                                          $01 - Fllung
                                          $02 - Beides )
  1 Byte  ( 25) Fllmuster            ( Nummer des Fllmuster (0..31), s.u. )
  1 Byte  ( 26) Linienmuster          ( Nummer des Linienmusters (0..7), s.u. )
  1 Byte  ( 27) Linienbreite          ( Linienbreite in Pixeln (1..9) )

  n Bytes ( 28) Parameter             ( Objektabhngige Parameter, siehe "Liste
                                        der Funktionen" )

Die Fll- und Linienmuster werden getrennt in einer Datei mit der Endung *.PAT
gespeichert. Fllmuster haben eine Gre von 32 x 32 Punkten, Linienmuster eine
Lnge von 32 Punkten. Damit lassen sich komplexere Muster darstellen als mit
den blichen 16 Punkten. Eine genaue Beschreibung dieser Datei folgt.

Da die Objektlnge 2 Bytes belegt, ist die maximale Lnge eines Objektes 32 KB.
Die Objektlnge in den ersten Bytes kann als Zeiger einer einfachen Liste
benutzt werden, mit der die Objekte durchlaufen werden knnen.
&d1D Liste der Funktionen &d@

  xi,yi   - Bezeichnet den i-ten Definitionspunkt des jeweiligen Objektes.
  mx,my   - Bezeichnet den Mittelpunkt eines Kreises oder einer Ellipse.
  ai,bi   - Bezeichnet die Halbachsen a und b der i-ten Ellipse bzw. Raute.
            Diese errechnen sich als Absolutbetrag der Differenz der Koordinaten
            des Mittelpunktes mx,my und des Punktes ai,bi.
  axi,ayi - Bezeichnet einen Punkt auf dem i-ten Strahl si, der vom Mittelpunkt
            mx,my ausgehend das Objekt schneidet. Das Objekt wird von den beiden
            Strahlen s1 und s2 so begrenzt, da es nur in dem Bereich sichtbar
            ist, der sich gegen den Uhrzeigersinn von s1 bis s2 erstreckt.
  ecken   - Bezeichnet ein Langwort, da die Eckenanzahl angibt. Das obere Wort
            ist immer $8000, das untere Wort enthlt s, die Anzahl der Ecken
            ( 3 <= s <= 32 ).

Bentigt das Objekt eine nicht festgelegte Anzahl von Parametern, so ist deren
Anzahl aus der Objektlnge herzuleiten ( Anzahl=(Objektlnge-28)div 4 ).

Allgemein ist zu sagen, da Langworte, die im oberen Wort den Wert $8000 haben,
Kennungen mit irgendeiner Sonderfunktion sind und keine Ordinate darstellen.


Nummer  Bezeichnung                         Parameter

 50     Punkt (1)                           x1,y1
 51     Linie (2)                           x1,y1,x2,y2
 52     Linienzug (n)                       x1,y1, ... ,xn,yn
 53     Dreieck (3)                         x1,y1,x2,y2,x3,y3
 54     Rechteck (2)                        x1,y1,x2,y2,x3,y3,x4,y4
 55     Raute (M+1)                         mx,my,a1,b1
 56     Parallelogramm (3)                  x1,y1,x2,y2,x3,y3,x4,y4
 57     N-Eck (3)                           x1,y1,x2,y2,x3,y3,x4,y4,ecken
 58     N-Eck (M+1)                         mx,my,x1,y1,ecken
 59     Kreis (3)                           x1,y1,x2,y2,x3,y3,x4,y4
 60     Kreisbogen (3)                      x1,y1,x2,y2,x3,y3,x4,y4
 61     Kreis (M+1)                         mx,my,x1,y1
 62     Kreisbogen (M+3)                    mx,my,x1,y1,ax1,ay1,ax2,ay2
 63     Kreissektor (M+3)                   mx,my,x1,y1,ax1,ay1,ax2,ay2
 64     Kreistorus (M+2)                    mx,my,x1,y1,x2,y2
 65     Kreistorussektor (M+4)              mx,my,x1,y1,x2,y2,ax1,ay1,ax2,ay2
 66     Ellipse (M+2)                       mx,my,x1,y1,x2,y2
 67     Ellipse (M+1)                       mx,my,a1,b1
 68     Ellipsenbogen (M+3)                 mx,my,a1,b1,ax1,ay1,ax2,ay2
 69     Ellipsensektor (M+3)                mx,my,a1,b1,ax1,ay1,ax2,ay2
 70     Ellipsentorus (M+2)                 mx,my,a1,b1,a2,b2
 71     Ellipsentorussektor (M+4)           mx,my,a1,b1,a2,b2,ax1,ay1,ax2,ay2

109     Vollinie 0,35 mm                    x1,y1,x2,y2
110     Strichlinie 0,35 mm                 x1,y1,x2,y2
111     Strichpunktlinie 0,35 mm            x1,y1,x2,y2
112     Vollinie 0,25 mm                    x1,y1,x2,y2
113     Strichlinie 0,25 mm                 x1,y1,x2,y2
114     Strichpunktlinie 0,25 mm            x1,y1,x2,y2
115     Malinie DIN 406 <---               x1,y1,x2,y2
116     Malinie DIN 406 <-->               x1,y1,x2,y2
117     Malinie DIN 406 --->               x1,y1,x2,y2
118     Malinie DIN 406 gebogen <---       mx,my,x1,x2,ax1,ay1,ax2,ay2
119     Malinie DIN 406 gebogen <-->       mx,my,x1,x2,ax1,ay1,ax2,ay2
120     Malinie DIN 406 gebogen --->       mx,my,x1,x2,ax1,ay1,ax2,ay2
126     Malinie DIN 406 <-->               x1,y1,x2,y2
127     Malinie DIN 406 <-->               x1,y1,x2,y2
128     Malinie DIN 406 --->               x1,y1,x2,y2
129     Malinie DIN 406 gebogen <-->       mx,my,x1,x2,ax1,ay1,ax2,ay2
130     Malinie DIN 406 gebogen <-->       mx,my,x1,x2,ax1,ay1,ax2,ay2

132     Lot fllen                          x1,y1,x2,y2,x3,y3,x4,y4
133     Winkel zeichnen                     x1,y1,x2,y2,x3,y3
134     Kreisbogen anfgen                  x1,y1,x2,y2,x3,y3
135     Parallele                           x1,y1,x2,y2,x3,y3,x4,y4
136     Bzier-Kurve                        x1,y1,x2,y2,x3,y3,x4,y4

203     Hilfspunkt (Direkt)                 x1,y1
204     Hilfspunkt (Schnittpunkt)           x1,y1
205     Hilfspunkt (Mittelpunkt)            x1,y1
206     Hilfspunkt (Aufteilung)             x1,y1, ... ,xn,yn
207     Hilfspunkt (Lotfupunkt)            x1,y1
208     Hilfspunkt (Krnen)                 x1,y1
209     Hilfspunkt (Umkreismitte)           x1,y1
210     Hilfspunkt (Kreisteilung)           x1,y1, ... ,xn,yn
211     Hilfspunkt (Bogenmitte)             x1,y1

215     Outline                             x1,y1, ... ,xn,yn


&d1D Besonderheiten &d@

- Rechteck/Parallelogramm:
  Die Punkte 1 und 2 bzw. 3 und 4 sind jeweils diagonal gegenberliegende
  Eckpunkte.

- N-Eck/Kreis/Kreisbogen(3):
  Bei diesen Funktionen werden nur die Punkte 1 bis 3 eingegeben. Punkt 4 ist
  der daraus errechnete Kreismittelpunkt.

- Lot fllen:
  Bei "Lot fllen" werden nur die Punkte 1, 3 und 4 eingegeben. Die Punkte 3 und
  4 sind Punkte auf der Bezugsgeraden, das Lot wird von Punkt 1 auf diese
  Bezugsgerade gefllt. Punkt 2 ist der errechnete Lotfupunkt. Es mu also
  nur eine Linie von Punkt 1 zu Punkt 2 gezogen werden, die anderen Punkte sind
  als Definitionspunkt anzuzeigen.

- Winkel zeichnen:
  Bei "Winkel zeichnen" mu nur eine Linie von Punkt 1 zu Punkt 2 gezogen
  werden. Der dritte Punkt ist als Definitionspunkt anzuzeigen.

- Kreisbogen anfgen:
  Bei "Kreisbogen anfgen" werden nur die Punkte 1, 2 und 3 eingegeben. Punkt 1
  ist ein Punkt auf der Bezugsgeraden, Punkt 3 ist der Verkettungspunkt und
  Punkt 2 ist der Endpunkt des Kreisbogens. Punkt 4 ist der errechnete
  Mittelpunkt des Kreisbogens. Es mu also ein Kreisbogen mit Punkt 4 als
  Mittelpunkt von Punkt 2 nach Punkt 3 gezeichnet werden. Welcher der beiden
  Teilbgen dafr bentigt wird, mu zuvor ermittelt werden.

- Parallele:
  Bei "Parallele" werden nur die Punkte 1, 3 und 4 eingegeben. Die Punkte 3 und
  4 liegen auf der Bezugsgeraden. Der Punkt 1 ist der Anfangspunkt der
  Parallelen. Punkt 2 wird errechnet. Er ist der Endpunkt der Parallelen und
  steht senkrecht ber Punkt 3. Es mu also nur eine Linie von Punkt 1 zu Punkt
  2 gezogen werden, die anderen Punkte sind als Definitionspunkt anzuzeigen.
- Hilfspunkte:
  Alle Arten von Hilfspunkten knnen vllig gleich als Menge von Hilfspunkten
  mit variabler Punktanzahl behandelt werden. Die Punktanzahl errechnet sich,
  wie oben erwhnt, aus der Objektlnge.

- Outline:
  Das Outline ist ein Objekt, welches durch einen oder mehrere Umrisse
  beschrieben wird. Jeder Umri wird aus Linienzgen und Bezier-Kurven
  zusammengesetzt. Ein Umri hat folgendes Format:

  8 Bytes       Koordinaten Startpunkt
  4 Bytes       Funktionskennung der folgenden Funktion
                  $80000001 - Bezierkurven.
                              Fr jede Bezierkurve folgen drei Punkte
                              (je 8 Bytes). Zusammen mit dem Endpunkt
                              des bisher gezeichneten Teilstcks des
                              Umrisses (bzw. dem Startpunkt) definieren
                              diese Punkte eine Bezierkurve.
                              Diese Folge von Bezier-Kurven wird beendet,
                              wenn das nchste Langwort eine Kennung ist
                              (oberes Wort = $8000, s.o.).
                  $80000002 - Linienzug.
                              Fr jede Linie folgt ein Punkt (je 8 Bytes).
                              Zusammen mit dem Endpunkt des bisher gezeichneten
                              Teilstcks des Umrisses (bzw. dem Startpunkt)
                              definiert dieser Punkt die Linie.
                              Diese Folge von Linien wird beendet, wenn das
                              nchste Langwort eine Kennung ist (oberes Wort
                              = $8000, s.o.).
                  $80000003 - Neuer Startpunkt.
                              Es soll ein neuer Umri begonnen werden. Dazu
                              wird zuerst der aktuelle Umri geschlossen, indem
                              eine Linie vom aktuellen Endpunkt zum Startpunkt
                              des Umrisses gezeichnet wird.
                              Dann wird ein neuer Startpunkt gelesen (8 Bytes)
                              und anschlieend die nchste Funktion abgearbeitet,
                              d.h. das nchste Langwort mu eine Kennung sein
                              (oberes Wort = $8000, s.o.).
                  $80000004 - Ende des ganzen Outlines (evtl. Schlieen des
                              letzten Umrisses, s.o.).

  Nach den ersten zwei Kennungen kann direkt eine neue Kennung folgen, d.h. es
  gibt Linienzge und Bezierkurven ohne Inhalt!

  Beim Fllen dieses Objektes wird der Raum zwischen jeweils zwei Umrissen
  gefllt. Die Wirkung dieser Berechnung ist mit Worten schwer darzustellen,
  hier hilft am ehesten ein Blick ins Programm.

&d1D Beispiel fr ein Objekt &d@

  $00 2c        - Objektlnge:  44 Bytes
  $00 01 00 00 \
  $00 01 00 00  - Ecken des Selektionsrahmens: (1,1) und (512,256)
  $02 00 00 00
  $01 00 00 00 /

  $33           - Funktion: ... 51 "Linie"
  $01           - Ebene: ...... 1
  $00           - Reserviert
  $00           - Gruppe: ..... Keine
  $01           - Farbe: ...... Schwarz
  $00           - Zeichenmodus: Normal
  $00           - Fllmodus: .. Rahmen   (Bei "Linie" ohne Auswirkung )
  $04           - Fllmuster: . Nummer 4 (Bei "Linie" ohne Auswirkung )
  $03           - Linienmuster: Nummer 3
  $02           - Linienbreite: 2 Pixel
  $02 00 00 00 \
  $00 01 00 00  - Endkoordinaten der Linie: (512,1) und (1,256)
  $00 01 00 00
  $01 00 00 00 /

Fll- und Linienmuster mten zuvor aus einer Musterdatei *.PAT geladen werden,
sofern dies noch nicht geschehen war. Es empfiehlt sich, standardmig mit den
Fll- und Linienmustern der Datei MEGA.PAT zu arbeiten, da diese von den meisten
Benutzern verwendet werden.


&d2D Datenformat der MegaPaint Musterdatei *.PAT &d@

    8 Bytes     Identifikation          ( $07 50 41 54 20 32 2e 32 = 'PAT 2.2' )
 4096 Bytes     Fllmuster              ( 32 Fllmuster mit jeweils 128 Bytes
                                          Daten, vier nacheineinanderfolgende
                                          Bytes ergeben eine Zeile des Musters )
  128 Bytes     Reserviert              ( Immer $00 )
  128 Bytes     Reserviert              ( Immer $ff )
   32 Bytes     Linienmuster            ( 8 Linienmuster mit jeweils 4 Bytes
                                          Daten )
    4 Bytes     Reserviert              ( Immer $ff )


&d2D Datenformat der MegaPaint Vektorsymboldatei *.VLB &d@

&d1D Dateikopf &d@

    8 Bytes     Identifikation          ( $07 56 4c 42 20 32 2e 33 = 'VLB 2.3' )

    4 Bytes     Dateilnge              ( Lnge der gesamten Datei in Bytes )
128*4 Bytes     Offsets                 ( Zeiger auf den Anfang des jeweiligen
                                          Symbols, relativ zum Dateianfang, d.h.
                                          der Offset des ersten Symbols ist
                                          524. )
&d1D Fr jedes der 128 Symbole &d@

    4 Bytes     X_max                   ( Maximal auftretende X-Ordinate,
                                          < 0 bedeutet Symbol nicht belegt )
    4 Bytes     Y_max                   ( Maximal auftretende Y-Ordinate,
                                          < 0 bedeutet Symbol nicht belegt )
    n Bytes     Objektdaten             ( siehe Vektordatenformat )

Jedes Symbol besteht aus einem oder mehreren Objekten, deren Gesamtlnge 32 KB
nicht berschreiten darf. Die Lnge eine Symbols errechnet sich als Differenz
der Zeiger zum aktuellen Symbol und dem nchsten Symbol bzw. dem Dateiende.

Die Koordinaten mssen so vorliegen, da die linke obere Ecke des Symbols im
Ursprung liegt. Die Gesamtlnge der Symboldatei darf 352 KB nicht berschreiten.


(s1SStand Mrz 1990(s0S
