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.
|