ZEICHENDATEN

Top  Previous  Next

Diese Struktur wird in Moskito von Prozeduren verwendet, die das Zeichnen auf den Bildschirm und das Plotten übernehmen wollen. Es gibt zwei Ansatzpunkte.

Eine Routine, die aus der Datenbank heraus graphische Ausgaben erzeugen will und dabei die Plotmaschine von Moskito verwendet, trägt hier ihre Parameter und Funktionen ein.

Ein Treiber für spezielle Plotter wird mit dieser Struktur aufgerufen.

 

typedef struct ZEICHENDATEN {

  ULONG        colorTable[17];

  int          signaturTabelle;

  long int     flags[100];

  PROOT        root;

  int          device;

  int          rekursionsStufe;

  int          clip;

  char *       plotFileName;

  void *       userData;

  char *       blattname;

  double       offsX;

  double       offsY;

  double       rotation;

  double       linescale;

  double       textscale;

  double       symbolscale;

  double       scaleAfterOutput;

  double       scaleBeforeUse;

  double       top;

  double       left;

  double       bottom;

  double       right;

  double       rotX;

  double       rotY;

  double       pixelSize;

  TOOL_TAB *   tools;

  KEY          keys[MAX_KEYS];

  USHORT       keyCount;

  void ( DLLENTRY *addLine)(struct ZEICHENDATEN *    data,

                            FarbDefinition           fd,

                            double                   x1,

                            double                   y1,

                            double                   x2,

                            double                   y2);

  void ( DLLENTRY *addText)(struct ZEICHENDATEN *    data,

                            FarbDefinition           fd,

                            char *                   text,

                            TEXT_SETTINGS *          tSet,

                            int                      ebene,

                            double                   x,

                            double                   y,

                            char *                   fontname,

                            int                      doDraw);

  void ( DLLENTRY *addRaster)(struct ZEICHENDATEN *  data,

                              FarbDefinition         fd,

                              int                    datatype,

                              int                    breite,

                              int                    hoehe,

                              char *                 rasterdata,

                              int                    rasterFlags,

                              int                    ebene,

                              double                 x,

                              double                 y,

                              double                 x2,

                              double                 y2,

                              long int *             colortable,

                              long int               dataLen,

                              int                    lightining,

                              int                    doDraw);

  PSEGMENT     openSeg;

  PPLANS       openPlan;

  POBJECT      openObj;

  PELEMENT     openEl;

  T_PPOINT     openPoint;

  MODIF        modLayer[16];

  int          pIsHiddenL;

  void *       atxtab;

  char *       atxfixtext;

  char *       breakRequest;

  int          darstellungsModell;

  void ( DLLENTRY *addArc)(struct ZEICHENDATEN *     data,

                           FarbDefinition            fd,

                           double                    x1,

                           double                    y1,

                           double                    x2,

                           double                    y2,

                           double                    x3,

                           double                    y3);

  void ( DLLENTRY *startArea)(struct ZEICHENDATEN *  data,

                              FarbDefinition         fd,

                              int                    reason,

                              int                    flags);

  void ( DLLENTRY *startHole)(struct ZEICHENDATEN *  data,

                              FarbDefinition         fd);

  void ( DLLENTRY *endArea)(struct ZEICHENDATEN *    data,

                              FarbDefinition         fd,

                              int                    reason,

                              int                    flags);

  void ( DLLENTRY *drawObject)(POBJECT               object,

                               int                   hilightEbene,

                               struct ZEICHENDATEN * data,

                               int                 toplevelObject,

                               FarbDefinition        fd,

                               PINFORMATION          infos,

                               int                   draw);

  void ( DLLENTRY *drawElement)(PELEMENT             elem,

                                int                  hilightEbene,

                                struct ZEICHENDATEN *data,

                                FarbDefinition       fd,

                                PINFORMATION         infos,

                                int                  draw);

  void *       plotPoint;

  void *       userModelData;

  void ( DLLENTRY *addMarker)(struct ZEICHENDATEN *  data,

                              FarbDefinition         fd,

                              double                 x1,

                              double                 y1,

                              int                    num,

                              int                    doDraw);

  int          prioritaet;

  void *( DLLENTRY *controller)(struct ZEICHENDATEN *data,

                                int                  function,

                                void *               userdata);

  void *       userPlotData;

  int          dky;

  int          dka;

  int          nextPriority;

  POBJECT      classObjectOfDrawnObject;

  int          echtScale;

} *PZEICHENDATEN;

 

Beschreibung der Felder

 

colorTable (ULONG[17])

RGB-Werte mit 17 fest definierten Stifte. Die Farben sind im Tabellenhandbuch unter Stiftfarben beschrieben.

signaturTabelle (int)

Nummer der Signaturtabelle, die zur Ausgabe verwendet werden soll.

flags (long int[100])

 

Schalter zum Festlegen der Ausgabeoptionen. Von den hundert Schaltern sind bisher folgende definiert:

FLAG_DRAWSEGMENT_BEFORE                0

Vor der Ausgabe der Objekte wird der Zeichenpuffer ausgegeben. Am Bildschirm erscheinen die Markierungen und Hilfslinien sofort bei Beginn des Zeichnens.

FLAG_DRAW_AREAS                        1

Flächen werden ausgegeben.

FLAG_BREAK_ON_REQUEST                2

Die Plotmaschine soll auf Unterbrechungsanforderungen des Anwenders reagieren.

FLAG_DRAWSEGMENT_AFTER                3

Nach der Ausgabe der Objekte wird der Zeichenpuffer noch einmal ausgegeben. Am Bildschirm erscheinen die Markierungen und Hilfslinien über der Grafik.

FLAG_STD_LINES                                4

Keine Ausgabe von Liniensignaturen.

FLAG_STD_AREAS                        5

Ausgabe von Vollflächen, auch wenn Schraffuren angegeben sind.

FLAG_REAL_CLIP                                6

Das Clipping soll exakt erfolgen, also auf Linienebene in der letzten Stufe der Ausgabe. Die Berechnung ist zeitaufwendig und kann deshalb das Ausgeben verlangsamen.

FLAG_OPTIMIZE                                7

Die Ausgabe soll optimiert werden, auch wenn kleine Unsauberkeiten entstehen (z.B. Texte, die zu klein sind, entfernen).

FLAG_INITIALIZED                                8

Markierung, dass die Struktur initialisiert wurde. Ohne dieses Flag werden beim Drucken Standardwerte eingesetzt.

FLAG_USE_WINDOWSFONT                9

Texte werden über den Eintrag addText() ausgegeben. Ist dieses Flag 0, so werden Texte mit dem eingebauten Textgenerator in Linien zerlegt.

FLAG_DRAW_DEFAULT                        10

Linien, für die keine Farbinformationen in den Tabellen vorhanden sind, werden in Standardfarbe gezeichnet. Sind keine Farbinformationen vorhanden werden solche Linien unterdrückt.

FLAG_BIGCURSOR                                11

Der Fadenkreuzcursor wird dargestellt. Wenn das Flag nicht gesetzt ist, wird statt dessen der Mauscursor vom Tablett mitgezogen.

FLAG_DELETERASTER                        12

Rasterdaten werden nach dem Zeichnen wieder freigegeben um Speicherplatz zu sparen. Sinnvoll beim Drucken, da die Daten nicht wieder benötigt werden.

FLAG_NO_DRAW_PSY                        13

Die Symbole an den Stützpunkten von Linien werden nicht gezeichnet. Die Linie wird durchgezeichnet.

FLAG_CONTINOUS_LINESEGMENTS        14

Muster über Stützpunkte hinweg

FLAG_BUSY                                15

Am Bildschirm wird hiermit über dem Graphikfenster die Sanduhr gesetzt..

FLAG_NO_TEXT_DRAW                        16

Texte werden nicht gezeichnet.

FLAG_NO_SYMBOL_DRAW                        17

Symbole werden nicht gezeichnet. Es sind die Symbolelemente gemeint. Punktsymbole an den Stützpunkten von Linien werden mit FLAG_NO_DRAW_PSY beeinflusst.

FLAG_NO_RASTER_DRAW                        18

Raster werden nicht gezeichnet.

FLAG_NO_STRING_DRAW                        19

Linien werden nicht gezeichnet.

FLAG_NO_POINTELEM_DRAW                20

Punktelemente (Marker) werden nicht mitgezeichnet.

FLAG_PAPER_DRAW                        21

Die Ausgabe erfolgt auf Papier. Entsprechend werden Detailzeichnungen durchgeführt und Begleitdokumente mitgedruckt.

 

root (PROOT)

Handle der Datenbank.

device (int)

rekursionsStufe (int)

Anzahl der Selbstaufrufe der Plotprozedur. Bei Tiefe 4 wird das Plotten abgebrochen, um eine unendliche Rekursion zu verhindern. Wahrscheinlich liegt bei einer Rekursion ein rekursiv definiertes Symbol vor.

clip (int)

Außer Betrieb, ersetzt durch das Flag FLAG_REAL_CLIP.

plotFileName (char *)

Name der Datei, in der der Plot abgelegt wird.

userData (void *)

Reserviert für IO-Routinen

blattname (char *)

Name des Plots, wie er im Blattrahmen ausgegeben werden kann.

offsX, offsY (double)

Wird zu den berechneten Koordinatenwerten addiert, bevor die Ausgabe erfolgt.

rotation (double)

Rotationswinkel der Ausgabe. Wird in Bogenmaß angegeben.

linescale (double)

Maßstab, der für Liniensignaturen (Strichlierung und Breite) verwendet wird, da diese in 1/100 mm in Ausdruck angegeben werden. Eine Linienbreite von 50 wird bei Linescale 75 und Ausgabemaßstab 125 (in scaleAfterOutput) mit einer echten Breite von 50*75/125/100 = 0,3mm ausgegeben.

textscale (double)

Mit diesem Wert werden alle Textgrößen in der Ausgabe berechnet, der Algorithmus ist derselbe wie bei lineScale.

symbolscale (double)

Mit diesem Wert werden alle Symbolgrößen in der Ausgabe berechnet, der Algorithmus ist derselbe wie bei lineScale.

scaleAfterOutput (double)

Nach der Ausgabeberechnung werden alle Koordinaten durch diesen Wert geteilt. Beim Drucken steht hier normalerweise der Maßstab, bei der Bildschirmausgabe 1. Dies kann in Symbolen anders sein.

scaleBeforeUse (double)

Alle Koordinaten nach dem Lesen aus der DB mit diesem Wert multiplizieren. Dient z.B. dazu, Symbole auf ihre reale Größe zu bringen.

top, left, bottom, right (double)

Koordinatenbereich des Ausgabemedium. Angabe erfolgt in Meter.

rotX, rotY (double)

Drehpunkt für die Rotation. Wenn der Rotationswinkel nicht 0 ist, werden die Koordinaten um diesen Punkt gedreht. Ein Punkt mit der Koordinate (rotX,rotY) landet nach der Drehung an der Position (0,0).

pixelSize (double)

Größe eines Pixel auf dem Ausgabegerät in Meter. Wenn das Flag FLAG_OPTIMIZE gesetzt ist, werden Schriften und Vektoren, die zu klein für diesen Wert sind, weggelassen. Kreise werden immer mit Hilfe dieses Wertes in Liniensegmente zerlegt.

tools (TOOL_TAB *)

keys[MAX_KEYS] (KEY)

Intern verwendet zum Zwischenspeichern von Objektschlüsseln.

keyCount (USHORT)

Anzahl realer Werte in keys

addLine (Prozedurzeiger)

Der Treiber für das Ausgabegerät trägt hier die Zeichenroutine für Linien ein. Wird keine Routine eingetragen, so erfolgt keine Linienausgabe.

 

Parameter

data (struct ZEICHENDATEN *)

Zeiger auf die Beschreibung der Ausgabe, selbst für die Verwendung in addLine.

fd (FarbDefinition)

Modifikatoren für die Farbe der Ausgabe, also Breite, Linienart, Farbe. Benutzerdefinierte Linienmuster werden vorher aufgelöst.

x1 (double)

y1 (double)

Koordinate des Startpunktes für diese Linie in Papierkoordinaten.

x2 (double)

y2 (double)

Koordinate des Zielpunktes für diese Linie in Papierkoordinaten.

 

Ergebnis

void

 

addText (Prozedurzeiger)

Der Treiber für das Ausgabegerät trägt hier die Zeichenroutine für Texte ein. Wird keine Routine eingetragen, so erfolgt keine Textausgabe.

 

Parameter

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt.

text (char *)

Beschreibung fehlt.

tSet (TEXT_SETTINGS *)

Beschreibung fehlt.

ebene (int)

Beschreibung fehlt.

x (double)

Beschreibung fehlt.

y (double)

Beschreibung fehlt.

fontname (char *)

Beschreibung fehlt.

doDraw (int)

Beschreibung fehlt

Ergebnis

void

 

addRaster (Prozedurzeiger)

Beschreibung fehlt

 

Parameter

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt.

datatype (int)

Farbtiefe der übergebenen Pixeldaten, 1=Monochrom, 2= 8 Bit mit Palette, 3 Echtfarben mit 24 Bit.

breite (int)

Breite des Rasters in Pixeln.

hoehe (int)

Höhe des Rasters in Pixeln.

rasterdata (char *)

Beschreibung fehlt.

rasterFlags (int)

Beschreibung fehlt.

ebene (int)

Highlight-Ebene.

x (double)

Position (Rechtswert) der linken unteren Ecke des Bildes.

y (double)

Position (Hochwert) der linken unteren Ecke des Bildes.

x2 (double)

Position (Rechtswert) der rechten oberen Ecke des Bildes.

y2 (double)

Position (Hochwert) der rechten oberen Ecke des Bildes.

colortable (long int *)

Beschreibung fehlt.

dataLen (long int)

Beschreibung fehlt.

lightining (int)

Beschreibung fehlt.

doDraw (int)

Beschreibung fehlt.

 

Ergebnis

void

 

openSeg (PSEGMENT)

Handle des aktuell geöffneten Layers.

openPlan (PPLANS)

Handle des gerade aktuellen Plans. Dient später der Modifikation der Anzeige. Bisher ohne Funktion.

openObj (POBJECT)

Handle des aktuellen Objekts. Wird zur Anzeigemodifikation dieses Objekts verwendet. Siehe auch modLayer.

openEl (PELEMENT)

Handle des aktuellen Elements. Wird zur Anzeigemodifikation dieses Elements verwendet. Siehe auch modLayer.

openPoint (T_PPOINT)

Handle des aktuellen Punktes. Wird zur Anzeigemodifikation dieses Punktes verwendet. Siehe auch modLayer.

modLayer[16] (MODIF)

Beschreibung fehlt.

pIsHiddenL (int)

Beschreibung fehlt.

atxtab (void *)

Beschreibung fehlt.

atxfixtext (char *)

Beschreibung fehlt.

breakRequest (char *)

Beschreibung fehlt.

darstellungsModell (int)

Beschreibung fehlt.

addArc (Prozedurezeiger)

Beschreibung fehlt

 

Parameter

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt.

double x1

double y1

double x2

double y2

double x3

double y3

Koordinate für die Kreisbogenpunkte

 

Ergebnis

void

 

startArea (Prozedurzeiger)

Beschreibung fehlt.

 

Parameter

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt.

 

Ergebnis

void

 

Alle Aufrufe nach startArea bis endArea bilden die Definition einer Fläche. Löcher werden wie üblich definiert als Bereiche mit gerader Schnittanzahl zur Unendlichkeit.

startHole (Prozedurezeiger)

Beschreibung fehlt.

 

Parameter

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt

reason (int)

Eine der Konstanten

PLOT_START_END_AREA_REASON_AREAFILL (0)

  Das System führt bis zum nächsten EndArea eine Flächenfüllung durch. Bis EndArea folgen Linien, Kreise und ggf. eine Bitmap zur Füllung.

PLOT_START_END_AREA_REASON_STARTCLIP (1)

  Das System legt ein neues Clippolygon fest. Dieses gilt bis zum nächsten ENDCLIP. Dann wird wieder das alte Polygon eingesetzt.

PLOT_START_END_AREA_REASON_ENDCLIP (2)

  Das letzte Clippolygon wird entfernt. Es gilt wieder der davor gültige Wert.

flags (int)

immer 0

 

Ergebnis

void

 

Wird nicht verwendet.

endArea (Prozedurzeiger)

Beschreibung fehlt

 

Parameter

data (struct ZEICHENDATEN *)

Beschreibung fehlt

fd (FarbDefinition)

Beschreibung fehlt

reason (int)

Eine der Konstanten

PLOT_START_END_AREA_REASON_AREAFILL (0)

  Das System führt bis zum nächsten EndArea eine Flächenfüllung durch. Bis EndArea folgen Linien, Kreise und ggf. eine Bitmap zur Füllung.

PLOT_START_END_AREA_REASON_STARTCLIP (1)

  Das System legt ein neues Clippolygon fest. Dieses gilt bis zum nächsten ENDCLIP. Dann wird wieder das alte Polygon eingesetzt.

PLOT_START_END_AREA_REASON_ENDCLIP (2)

  Das letzte Clippolygon wird entfernt. Es gilt wieder der davor gültige Wert.

flags (int)

immer 0

 

Ergebnis

void

siehe startArea.

drawObject (Prozedurzeiger)

Beschreibung fehlt.

 

Parameter

object (POBJECT)

Beschreibung fehlt.

hilightEbene (int)

Beschreibung fehlt.

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

toplevelObject (int)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt.

infos (PINFORMATION)

Beschreibung fehlt.

draw (int)

Beschreibung fehlt.

 

Ergebnis

void

 

drawElement (Prozedurzeiger)

Beschreibung fehlt.

 

Parameter

elem (PELEMENT)

Beschreibung fehlt

hilightEbene (int)

Beschreibung fehlt.

data (struct ZEICHENDATEN *)

Beschreibung fehlt.

fd (FarbDefinition)

Beschreibung fehlt.

infos (PINFORMATION)

Beschreibung fehlt.

draw (int)

Beschreibung fehlt.

 

Ergebnis

void

 

plotPoint (void *)

Bemerkung: als Ersatz, bis PLINE_TABLE exportiert ist.

Zeichenroutine für einen einzelnen Punkt. Da die Struktur PLINE_TABLE noch nicht nach außen bekannt ist muss die Definition als void* geschehen.

userModelData (void*)

Objektklassen, die eigene Zeichenroutinen definieren, können hier Parameter zwischenspeichern.

addMarker (Prozedurzeiger)

Plotformate, die Markersymbole ausgeben können, geben hier Ihre Zeichenroutine an. Die Marker werden mit fester Größe an der Position (x,y) ausgegeben. Es wird der Marker <num> verwendet. Eine Liste der Marker ist im Tabellenhandbuch zu finden.

 

Parameter

data (struct ZEICHENDATEN *)

Handle der Datenausgabe.

fd (Farbdefinition)

Beschreibung der Ausgabemodifikatoren, siehe Farbdefinition.

x (double)

y (double)

Position des Markersymbols.

num (int)

Nummer des Markersymbols. Standardmäßig werden die Nummern 1 bis 17 verwendet. Definition siehe Tabellenhandbuch.

doDraw (int)

<>0       Die Symbole sollen gezeichnet werden.

0   Die Symbole sollen aus der Zeichnung entfernt werden.

 

Ergebnis

void

 

prioritaet (int)

Angabe der Priorität mit der gerade ausgegeben wird. Ist für ein Element ein kleinerer Wert notwendig, so muss die Ausgabe übersprungen werden, da das Element bereits ausgegeben wurde. Ist der Wert größer, so muss die Ausgabe zurückgestellt werden. Diese Funktion ist noch nicht implementiert.

controller (Prozedurzeiger)

Allgemeine Callbackfunktion, noch nicht in Betrieb.

 

Parameter:

struct ZEICHENDATEN *data

Handle der Datenausgabe.

int function

Nummer der auszuführenden Funktionalität.

void  *userdata

Daten für die Funktion sind abhängig vom Wert von Funktion

 

Ergebnis:

void *

 

Das Ergebnis ist von der Funktionsart abhängig.

userPlotData (void *)

Die Zeichenroutinen (addLine, addText,...) dürfen hier Daten ablegen.

dky (int)

Letzter benutzter Flächenschlüssel.

dka (int)

Letzter benutzter Flächenschlüssel.

nextPriority (int)

Wird mit 0x7fffffff initialisiert. Wenn eine Zeichenroutine eine weitere Priorität braucht, die kleiner als der aktuelle Wert ist, muss er hier eingetragen werden.