Wirkungsweise des Makros 1. Datei suchen Die Objekte werden in Autocad möglichst weit nach oben links geschoben und dann wird eine WMF erzeugt, a.wmf genannt und in den Ordner des Worddokumentes gelegt. Das Makro findet diese. Modifikationsmöglichkeiten In Word entscheidet das linke Zeichen darüber, ob die WMF abweichend bearbeitet werden soll. Es gibt folgende Modifikationen. Nichts ist Standard und wandelt alle Hauptfarben in Schwarz um. Leerzeichen wandelt rote Farben nicht in Schwarz um. p schneidet die Zeichnung an Polylinien zu. Ist unten oder rechts ein Text, so wird er abgeschnitten. v schreibt Simon Pie in weißer Schrift in das Bild. z schreibt die Berechnungszeit auf. 2. Liniendicke ermitteln An Polylinien wird ermittelt, wie groß die maximal verwendeten Koordinaten sind. Mit den maximalen Koordinaten wird die Zeichnung bei Modifikation p zugeschnitten. Die X-Koordinate entscheidet, wie dick die Linien sind. Der Autocadbildschirm ist horizontal, während das Worddokument vertikal ist. Bei vertikalen Grafiken bleibt rechts ein riesiger freier Rand. Wird dieser in Word oder vom Makro weggeschnitten, so wird der Rest stark skaliert und die Linien werden zu fett. Die Ermittlung einer geringen X-Koordinate behebt das Problem. 3. Startpunkt ermitteln Die Palette wird gesucht und bei Modifikation v durch Simon Pie ersetzt. Außerdem wird der Startpunkt für die Suche ermittelt. 4. Linienfarben umwandeln Schwarze Linien ohne Makro aus Autocad haben die Linienstärke 0 und werden nur von Word mit einer Strichstärke gedruckt. Von PDF aus sind sie unendlich dünn. Zeigt man sich bei Autocad die Linienstärken an, so wird jede Linie in speicherlastige Doppeldreiecke umgewandelt. Deshalb sollen Linienstärken auf dem Bildschirm ausbleiben. Das Makro wandelt die Farben wie in einer CTB in native Strichstärken um. Der Speicherbedarf steigt für jede umgewandelte Linienstärke um 0 Bype. Die Füller im WMF haben sowohl eine Farbe, als auch sine Stärke. Alle Hauptfarben werden schwarz. Alle anderen Farben bleiben Farbig und werden mitteldick. 5. Füllfarben umwandeln Farbige Texte und Flächenfüllungen werden geschwärzt. Schwarze Flächen werden weiß, weil der Hintergrund in Autocad schwarz ist und das Papier jedoch weiß ist. Ohne diese Umwandlung hat man in der WMF schwarze Texte auf schwarzem Textabdecken. 6. Kreise wiederherstellen Autocad zerschießt Kreise (und Ellipsen) zu Polygone. Das Makro prüft alle Polygone, ob diese eigentlich Kreise sind. Steigt und sinkt die X- und Y- Koordinate jeweils 2 mal und die Punkte liegen fast auf einer Ellipse, dann wird das Objekt in eine Ellipse rückverwandelt. Der Speicherbedarf und die Entropie sinken stark. Als Entropie wird hier der Speicherbedarf der gezippten WMF bezeichnet. Als Luft ablassen wird ein Ergebnis bezeichnet, das dem Deflate-Algorithmus gleich kommt und nur die Dateigröße reduziert, ohne dass sie im gezippten Zustand nennenswert kleiner wird. Word speichert WMF gezippt. 7. doppelte Linien entfernen Es werden alle doppelten diagonalen Linien gesucht und gelöscht. Für jede gelöschte Linie werden 16 Byte Luft abgelassen. Da dieser Teil so langsam ist, werden horizontale und vertikale Linien den Algorithmus für überlappende Linien überlassen. 8. Pixel umwandeln Jede Maßkette hinterlässt 3 Pixel in der WMF. Sind diese rot, so werden sie entfernt. Jede Strichpunktlinie hinterlässt auch Pixel. Diese werden in Kreislein verwandelt. Bei jedem Pixel, der in ein Kreis umgewandelt wurde, ändert sich die Dateigröße um 0 Byte und die Entropie steigt. Bei jedem gelöschtem Pixel werden 14 Byte eingespart und die Entropie reduziert. 9. Schraffuren verbinden Autocad zerschießt alle Schraffuren zu Dreiecke. Diese werden zu Vierecke verbunden, um das Problem zu halbieren. Jedes Dreieck belegt 20 Byte und ein Viereck benötigt 24 Byte. Damit ergibt sich eine Ersparnis von 16 Byte, die die Entropie kaum reduziert. Textabdecken von Maßketten hinterlässt 2 Doppeldreiecke. Bilden 2 Dreiecke ein Rechteck, so tauscht das Makro diese gegen ein Rechteck aus. Ein Rechteck benötigt nur 14 Byte und die Einsparung liegt bei 26 Byte. Die Entropie sinkt geringfügig. 10. WMF auslösen Der String der WMF-Datei wird in eine Tabelle aufgelöst. Dabei werden den Objekten nach den Vorgaben der Dateispezifikation Eigenschaften wie Füller, Pinsel und Font zugeordnet. Außerdem werden MTexte in Texte umgewandelt, wenn diese nicht länger als 10 Zeichen sind. Beim MText benötigt jedes Zeichen zusätzlich ein Doppelbyte. Dieses Doppelbyte sorgt dafür, dass der MText bei jeder Zoomstufe die gleiche Länge hat. Eine Überschrift, kann daher in Word noch reinpassen, während sie im Druck abgeschnitten wird. Bei kurzen Texten sind die Doppelbytes nicht notwendig. Die Datei und Entropie nehmen ab. Die Modifikation p wird die Länge auf 30 Zeichen erhöht, weil diese Grafik von Polylinien begrenzt wird. 11. Müllhaufen wegkehren Jeder Text wird von einem gigantischen 250 Byte schweren Müllhaufen umgeben. Dieser besteht aus Füller kreieren, wählen, wegwerfen, alten Füller kreieren, wählen, Pinsel kreieren, wählen, wegwerfen, alten Pinsel kreieren, wählen, Texthintergrundfarbe = abdeckend, Texthintergrundfarbe = farblos, Textfarbe = schwarz, Textfarbe = Nutztext, Font definieren, benutzen, wegwerfen… Dieser Müllberg wird in mehreren Teilschritten weggegehrt. Diese sind: * MText sprengen * Füller und Pinsel aussortieren * Font recyceln * Textfarbe wiederverwerten * Texthintergrundfarbe nur einmal Dateianfang schreiben * nutzlose Objekte um den Text löschen 12. Objekte sortieren Autocad nimmt einen Füller, malt damit und wirft ihn weg. Das gleiche passiert mit Pinseln und Fonts. In der WMF können diese auch beiseite gelegt werden. Deshalb werden alle Füller, Pinsel und Fonts in der Datei gesammelt und am Anfang der Datei in einer Federtasche, Tuschkasten und Fontmappe gesammelt. Jeder Füller benötigt 16 Byte, jeder Pinsel 14 Byte und jeder Font 56 Byte. Löschen benötigt auch nochmal 8 Byte. Dadurch wird gewaltig Luft abgelassen. 13. überlappende Linien verbinden Überlappende Linien, die mit dem gleichen Füller gezeichnet sind, werden durch eine ersetzt. Da der Algorithmus so langsam ist, wird erstmal ermittelt, welche Linien in Frage kommen. Dann werden alle horizontalen und vertikalen Linien überprüft. Jede gelöschte Linie erleichtert die Datei um 16 Byte. Handelte es sich um eine doppelte Linie, so wird nur Luft abgelassen. Hatten die überlappenden Linien jedoch unterschiedliche Endpunkte, so sinkt auch die Entropie. 14. Linien zu Polylinien verbinden In einer WMF gibt es nur Polylinien. Eine Linie besteht aus 2 Punkte. Jeder Punkt in der Polylinie benötigt 4 Byte. Haben 2 Polylinien einen gemeinsamen Endpunkt und den gleichen Füller, so werden sie geeint. Jede Vereinigung lässt 12 Byte Luft ab. Dieser Algorithmus muss nach den überlappenden Linien folgen, weil der Algorithmus der überlappenden Linien nur 2Punkt Polylinien bearbeitet. 15. Texte ans Ende stellen Zwischen wurden die Lücken in den Listen wegsortiert. Da ein Text mit seiner Farbe und seinem abdeckenden Rechteck nie selbst verdeckt wird, werden diese an das Ende der Datei gestellt. Das Rechteck wird mit einem unsichtbaren Füller gezeichnet. Dadurch, dass dieses mit an das Ende kommt, werden 2 Füllerwechsel von 2*8 Byte und etwas Entropie eingespart. Gibt es sehr viele Texte in der Datei, bei denen das Abdecken fehlt, so kann schnell mit dem Hexeditor das native Textabdecken am Anfang der Datei eingeschaltet werden. Natives Textabdecken benötigt einmal zusätzlich 0 Byte, während jedes Rechteck von Autocad 14 Byte benötigt. 16. Datei neu aufbauen Die WMF wird neu zusammengebaut und der Header korrekt berechnet. Die Datei wird überschrieben und in Word eingefügt.