WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 1
EinleitungPowerWMFeinfügen ist ein Datenkompressionsprogramm zum Einfügen von AutoCADinhalten in Word. Der eingefügte Inhalt ist eine Vektorgrafik im Dateiformat WMF (Windows Metafile). PowerWMFeinfügen wird im Bereich der professionellen Dokumentation eingesetzt.Es gibt viele Dokumente, dessen äußeres Erscheinungsbild wichtig ist. Zu einem schönen Dokument gehören auch Vektorgrafiken. Schöne Vektorgrafiken haben gegenüber Bitmaps diese Vorteile:
beliebig Zoomen: keine Pixel an der Tafel, im PDF oder auf dem Papier gute Lesbarkeit der Texte, auch wenn sie viel zu klein sind scrollen über das Dokument, ohne Sand im Mausrad besseres Verständnis und Durchsuchen nach Texte winzige Dateigröße scharfe Linien, auch wenn sie diagonal sind gestochen scharfe Drucke - egal ob 4 Seiten pro Blatt oder starke Vergrößerung
Dokumente mit Vektorgrafiken sind sehr beliebt bei den jüngeren Menschen der Counterstrike-Generation. Bei alten Leuten kann es vorkommen, dass sie solchen Quatsch wie Word, AutoCAD, Vektorgrafiken und Rechenprogamme ihren Bleistift, Zeichenbrett, Handskizze und Handrechnung vorziehen. Dennoch gehört die Zukunft dem Fortschritt und nicht denen, die in Ruhestand gehen, sodass vektorisierte Dokumente immer mehr an Popularität gewinnen.Mit AutoCAD, Word und PowerWMF kann jeder dieses Ziel nun erreichen und ist nicht mehr auf erfahrene Dokumentierer mit spezieller Software angewiesen.
Dieses Dokument beschreibt die Anwendung und die Funxionsweise des Makros „PowerWMFeinfügen“.Das Makro PowerWMFeinfügen bildet die dringend benötigte Verbindung zwischen AutoCAD und Word. Zeichnungen werden in AutoCAD mit viel Zeit gezeichnet und dann müssen diese irgendwie in Word eingefügt werden. Bitmapformate, wie PNG und JPG, sind der herkömmliche Lösungsweg. AutoCAD kann WMF Grafiken erzeugen, die aber sehr zu wünschen übrig lassen. Die WMF beim Druck viel zu dünn aus und die Farben müssen manuell auf schwarz gesetzt werden. Genau hier setzt das Makro an. Dieses wandelt die Farben wie nach einer CTB in native WMF Strichstärken um. Damit werden 2 Probleme auf einmal gelöst. Man muss die Farben nicht mehr auf Schwarz setzen und beim Einfügen haben diese bereits Strichstärken.Die zweite Funxion des Makros ist eine verlustarme Datenkompression mit einer Kompressionsrate von 50% bis 85%. Der Kompressionsalgorithmus dieses Makros setzt sich aus einer strukturellen und einer geometrischen Datenkompression zusammen. ZIParchive, wie docx oder xlsx, kombinieren eine Wörterbuchkompression mit der Huffmannentropiekompression. Die Datenkompression des Makros konkurriert also nicht mit ZIP, sodass hier nicht geprahlt wird, dass PowerWMF ein klein bisschen besser packt als ZIP, sondern PowerWMF und ZIP ergänzen sich und erreichen zusammen ein größeres Ergebnis.
Es wird Word 2007 empfohlen.
PowerWMFeinfügen vereinigt beste grafische Qualität mit minimalstem Speicherbedarf!
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 2
Einsatzgebiete Professionelle Grafiken werden dringend in prachtvollen Diplom-, Bachelor-, Master- und
Doktorarbeiten, Skripte sowie Lehrbüchern und häufig gelesenen Dokumenten benötigt! Außerdem sind erklärende Grafiken für Excelberechnungen sinnvoll, wo es auf häufige
Wiederverwendung ankommt. Für Einwegstatiken und Wegwerfdokumente ist PowerWMF im Gegensatz zur Bitmap
zumindest die etwas bessere Wahl, da die Grafiken schneller in Word eingefügt sind und weniger Speicher brauchen.
Dokumente, die als PDF gedruckt werden müssen. Vektorgrafiken bleiben auch in PDF Vektorgrafiken. Bei Bitmaps hingegen kann man sich ab Windows 7 mit Word 2010 noch so viel Mühe mit dem Aussehen und der Kompression machen, beim Druck werden diese erstmals hässlich und speicherfressend zerrechnet. Mit Word 2010 kann man besser telefonieren, aber schlechter drucken. Word 2013 hat eine schlechtere Darstellung von WMF-Dateien und bei Word2016 sagte man, dass es bei Formeln abstürzt.
Gute Grafiken sind nichts für Ingenieurbüros der alten Schule, wo noch die Seitenzahlen mit dem Kuli reingeschrieben und die Blätter mehrmals zusammengescannt werden.
PowerWMF macht keinen Sinn, wo WMF keinen Sinn macht. Dies betrifft zum einen Kunstwerke. WMF enthält keine Splinien, Farbverläufe und Transparenz und ist daher gänzlich ungeeignet für schöne Kunstwerke. Für Kunst sind z.B. die Dateiformate SVG, CDR und SWF sinnvoll. Auch das erweiterte Windows Metafile hat keine Farbverläufe und Transparenz, sodass Word selbst für Kunst ungeeignet ist. Zum anderen werden Word und Windows vorausgesetzt, also keine Arbeiten mit Latex und Linux. Für reine Nichtkunstwerke wie technische Zeichnungen und mathematische Berechnungen ist Word mit WMF die beste Wahl, weil das abgespeckte WMF sehr wenig Speicher benötigt.
Beim Arbeiten mit Bautext macht der Formelumwandler keinen Sinn, da Bautext im Gegensatz zu Word besser rechnen und schlechter formatieren kann. Wer bei Word bleiben will, dem ist der Formelumwandler eine riesige Hilfe.
Dieses Dokument beinhaltet auch den Formelumwandler. Mit diesen kann Word als Taschenrechner benutzt werden und Formeln schnell und bequem erstellt werden. Wer viele Berechnungen in Word dokumentiert, wird diesen dringend brauchen.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 3
Inhaltsverzeichnis
Einleitung..............................................................................................................................................1
PowerWMF anwenden........................................................................................................................5
Beispiel für Dokumentation.................................................................................................................7Dokumentation eines Praktikanten.....................................................................................................8durchschnittliche Dokumentation....................................................................................................10professionelle Dokumentation..........................................................................................................12
Beispielgrafiken..................................................................................................................................14
Problemlösungen bei hässlicher Grafik...........................................................................................22Die Texte sind zensiert.....................................................................................................................22In der Grafik liegen lauter kleine Kreise rum und die Punkte der Axen fehlen...............................24Die Texte sehen hässlich aus............................................................................................................24Die Grafik sieht immer noch hässlich aus........................................................................................25Es fehlen Objekte.............................................................................................................................26Die Grafik wird nicht in ein korrektes PDFormat umgewandelt.....................................................26Die Grafik hat falsche Linienstärken...............................................................................................27Die Grafik sieht nach dem Drehen ekelhaft aus...............................................................................28Achtecke werden zu Kreise..............................................................................................................29Darstellungsprobleme.......................................................................................................................29Extrawünsche...................................................................................................................................30Zusammenfassung............................................................................................................................31
Wirkungsweise des Makros...............................................................................................................32Beispiel der Kompressionsleistung..................................................................................................41Mathematische Hintergründe der Funxion Polyglätten...................................................................44
Inhalt einer WMF-Datei....................................................................................................................52Hexdump einer AutoCAD-WMF.....................................................................................................52Hexdump einer AutoCAD-WMF mit PowerWMF..........................................................................56bildliche Darstellung des Hexdump.................................................................................................58bildliche Darstellung des Hexdump mit PowerWMF......................................................................62
Installationsanleitung.........................................................................................................................64
Der Code..............................................................................................................................................68Zubehör............................................................................................................................................68
Function Typ() As Integer..................................................68Function Starten() As String...............................................69Sub ausrechnen()...........................................................70Sub vausrechnen()..........................................................70Sub KKTformelumwandler()...................................................71Sub KKTfurmelumwandler()...................................................72Function Ribozym() As Integer..............................................72Function tRNA() As Integer.................................................73Function DNApolymerase() As Integer........................................74Function DNAse() As Integer................................................76Function RNApolymerase(ByVal Hemmung As Integer) As Integer................77Function Reversetransskriptase() As Integer................................84Function Ribosom() As Integer..............................................88Function Reversetranslatase(ByVal Hemmung As Integer) As Integer...........93Function Makrozählen(ByVal Makroeintrag As String) As Integer.............101Sub Zeicheneinkreisen()...................................................102
'WMFzerleger.................................................................................................................................102Function Polyglätten(ByVal Polylinie As String, ByVal Kompression As Double) As String.................................................................110
'Hauptmakro.....................................................................................................................................115
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 4
Der Formelumwandler....................................................................................................................140Die Formelmakros..........................................................................................................................140Beispiele.........................................................................................................................................142Das kann der Formelumwandler nicht...........................................................................................143
Lizenzen.............................................................................................................................................144
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 5
PowerWMF anwendenDie herkömmliche Art und Weise, wie man AutoCADinhalte in Word rein bekommt ist sehr vielfältig. Gemeinsam ist allen, dass das Resultat jedoch unprofessionell ist.
Dies sind die Lösungswege eines Anfängers Exportieren als PDF und dann irgendwie in Word.
Das irgendwie geschieht über Bildexport, Snippingtools, Screenshot oder Paint.Meist fehlt die Erfahrung, welches das richtige Dateiformat für die Bitmap ist.
Screenshot + Ränder in Word wegschneiden AutoCAD WMFexport: Texte in Polygone und keine Linienstärken
Der Anfänger hinterlässt Hässlichkeiten im Bild, wie AutoCAD-Reste, Windowsleistenstücke, JPG-Artefakte, riesen Datei und alles ist doch irgendwie unscharf.
Und hier die Lösungswege eines Fortgeschrittenen Exportieren als PDF und dann in Word.
Das Bild ist weiterhin eine Bitmap, aber im Gegensatz zum Anfänger wird der Qualitätsverlust minimal gehalten.
Screenshot und Ränder in einem Bildbearbeitungsprogramm wegschneiden.Methoden zur Bildverbesserung
AutoCAD WMFexport: Texte sind Texte aber keine LinienstärkenDer Fortgeschrittene mindert die Probleme die Bitmaps an sich haben, aber vermeidet Lächerlichkeiten, wie AutoCADreste und Windowsleisten.
1%
HEA 200Winkel L 100x50x5
Absturz- und SchlagsichereVerglasung
M16 5.6
44
Abflussrinne mit Gefällein Längsrichtung
S imo n P i e - P o werW M F ei n fü g en 2 . 3P latt en b eu len ; Kamp fk raft th eo rie
1%
HEA 200Winkel L 100x50x5
Absturz- und SchlagsichereVerglasung
M16 5.6
44
Abflussrinne mit Gefällein Längsrichtung
keine Ahnung, wie man das als Vektorgrafik in Word reinbekommt
Exportieren
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 6
Die professionellen Lösungen für Dokumente mit Vektorgrafiken lauten: Einfügen der AutoCADinhalte mit einem Einfügeprogramm als schöne Vektorgrafik Exportieren als PDF + lange Nachbearbeitung, um es als Vektorgrafik in Word rein zu
bekommen. Exportieren als PDF und ein sauteures Einfügeprogramm, falls es das gibt... alternativer Skizzeneditor anstelle von AutoCAD ein alternatives Programm anstelle von Word z.B. Latex
Einige professionelle Lösungen haben den Nachteil, dass die Vektorgrafiken in Word krank sind. Die Krankheit kann Word und dessen PDFexport in Mitleidenschaft ziehen.
Jede professionelle Lösung hat irgendwo einen Haken.
Deshalb gibt es PowerWMF!
Dabei werden die Objekte in AutoCAD markiert und als WMF exportiert. In Word wird das Tastenkürzel zum Einfügen getippt. Das Makro komprimiert die Datei und wandelt die Farben in Strichstärken um. Durch die starke Datenkompression ist die Grafik in Word scharf und kann beliebig gezoomt werden.
Der Haken an PowerWMF ist, dass man für einen Erfolg viele Kleinigkeiten beachten muss. Lese das Kapitel „Problemlösung bei hässlicher Grafik“.
1%
HEA 200Winkel L 100x50x5
Absturz- und SchlagsichereVerglasung
M16 5.6
44
Abflussrinne mit Gefällein Längsrichtung
S i mo n P i e - P o werW M F ein fü g en 2 . 3P l att en b eu l en ; Kamp fk raftt h eo rie
1%
HEA 200Winkel L 100x50x5
Absturz- und SchlagsichereVerglasung
M16 5.6
44
Abflussrinne mit Gefällein Längsrichtung
Exportieren als WMF und dann PowerWMFeinfügen3.0 in Word
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 7
Beispiel für DokumentationIn meinen 6 Jahren als Bauingenieur habe ich viele Dokumente erstellt und PDFs von anderen Firmen gelesen. Bei der großen Menge an Fremddokumenten habe ich mehrere Qualitätsstufen erkennen können.
unterstes NiveauDie unterste Stufe sind Bitmapscans. Dabei werden verschiedene Programmausdrucke zusammengescannt und die Seitenzahlen per Hand rein geschrieben. Dokumente auf unterstem Niveau können nicht auf Text durchsucht werden, die Handschriften sind saumäßig hin gekrakelt, Grafiken so verschwommen, sodass kleine Buchstaben nicht lesbar sind. Momocromscanne haben hohem Speicherbedarf, während Farbscanne noch wesentlich mehr benötigen und ein bisschen besser lesbar sind.
Dokument eines PraktikantenEtwa 1/3 der Baufirmen erstellen ihre Dokumentation auf Praktikantenniveau. Dessen Ingenieure wissen nicht wie man ein Bild in Word richtig einfügt. Das riesengroße PDF hat verschwommene Bilder und echtem Text. Tabellen sind meist Bitmaps und Formeln treten sporadisch auf.
durchschnittliche DokumentationEin weiteres Drittel erreicht durch schärfere Bilder eine geringere Dateigröße. Im Dokument kommen auch Vektorgrafiken aus Programmen vor. Auf gutem PDF Ausdruck wurde geachtet. Texte sind lesbar und durchsuchbar.
professionelle DokumentationBisher habe ich noch keine Firma gesehen, die eine vergleichbare Qualität zu PowerWMF erreicht. Professionelle Dokumentation hat einen höheren Zeitaufwand am Anfang. Auf der nächsten Seite sind 3 der 4 Dokumentationsqualitäten dokumentiert.Professionelle Dokumente gibt es an Unis und wurden von erfahrenen Freaks mit Latex erstellt. Mit PowerWMF wird der Qualitätsunterschied zwischen Word und Latex verkleinert.
Bei den Beispielen wird die Lösung dieser Aufgabe dokumentiert:Eine Armee besteht aus 10 Kreuzer und 20 Corvetten. Ein Kreuzer einen Angriff von 2,5ka, hält 5kl aus und kostet 10 Führungspunkte. Eine Corvette hat 1ka, 6kl und benötigt 7 Führungspunkte. Beide Gruppen kämpfen 0,8 und der Spieler hat 240 Führungspunkte. Gesucht ist die Kampfkraft und der Kampfverlauf dieser Armee. Kann die Kampfkraft optimiert werden?
Es spielt an sich keine Rolle, welches Thema dokumentiert wird. Statt eines Beispiels der Spieleindustrie, ist für Bauingenieure die Berechnung eines Stahlverbundträgers denkbar und für Maschinenbauer die Leistungsfähigkeit eines Motorteils.
PowerWMFeinfügen3.0 Simon Pie Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 8
Dokumentation eines PraktikantenAufgabe: Eine Armee besteht aus 10 Kreuzer und 20 Corvetten. Ein Kreuzer einen Angriff von 2,5ka, hält 5kl aus und kostet 10 Führungspunkte. Eine Corvette hat 1ka, 6kl und benötigt 7 Führungspunkte. Beide Gruppen kämpfen 0,8 und der Spieler hat 240 Führungspunkte. Gesucht ist die Kampfkraft und der Kampfverlauf dieser Armee. Kann die Kampfkraft optimiert werden?
Hilfstabelle
Berechnung der KampfkraftLbr =6*(2*fb-1)= 6*(2*0,8-1)= 3,6 klLbr < La => lange MischformelK= fa*La*n*gAa+n*(La-Lrb)*0,5*(gAb+(gAb*(Lb-La))/Lbd)+Lbr*n*gAb+(Ab*(Lb-La)^2*b^2)/(Lbd*2)K= 5838,33Mal
Diagrammpunkte des Kampfverlaufes mit den Punkten P1; P2; P3P1: L1= b*Lb-b*La L1=20*6- 20*5= 20 kl A1= (b*Lb-b*La)*Ab/((2-2*fb)*Lb) A1= 8,33 kaP2: L2=62 kl A2= b*Ab+ ( a*(La-Lb*(2*fb-1))*Aa)/((2-2*fa)*La) A2= 37,5 kaP3: L3= b*Lb+a*La-n*(2*fa-1)*La L3= 80 kl A3= b*Ab+ a*Aa =20*1+10*2,5= 45 ka
scheußlich: Weil dem Ingenieur das Fachwissen fehlt, eine komplexe Exceltabelle in Word ein zu fügen, hat er diese als Screenshot eingefügt
was: bedeuten die Buchstaben?
unverständlich: Die Formel wurde hintereinander weggeschrieben, Zahlen wurden nicht eingesetzt und das Ergebnis vom Taschenrechner abgeschrieben
schlampig: Zahlen werden nicht in die Formeln eingesetzt. Formeln werden teilweise nicht hingeschrieben.
ekelhaft:JPG-Artefakte
PowerWMFeinfügen3.0 Simon Pie Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 9
Berechnung der optimalen Anzahl
b= (240*3,6*1+240*(5-3,6)*0,5*1*(1+(6-5)/2,4)+0,8*5*2,5*(240-2*240*7/10))/(2*3,6*1*(7-10) +2*7*0,8*5*2,5*(1-7/10)+(5-3,6)*1*(1+(6-5)/2,4)*(7-10)-(10*1*(6-5)^2)/2,4)b= 13,81
a= W−Wb∙b
Wa =14,33
K= fa*La*n*gAa+n*(La-Lrb)*0,5*(gAb+(gAb*(Lb-La))/Lbd)+Lbr*n*gAb+(Ab*(Lb-La)^2*b^2)/(Lbd*2)K= 5858
Eine optimierte Kampfkraft von 5858 Megaangriffsleben ist mit 13,81 Corvetten und 14,33 Kreuzer zu erreichen.
widerlich: Formel als JPG ist schwer lesbar oder braucht viel Speicher. Bei dem Screenshot hätte man wenigstens Cleartype ausstellen sollen!
Zeit am falschen Ende gespart: AutoCADreste
Juhuuu: Ich habe ein Bild in Word eingefügt bekommen!
billig: Seitenzahl mit der Hand reingeschreben
unpassend: Die Schriftart und –größe ist unterschiedlich
unsinnig: eingescannte Handskizzen machen in Word Sinn, wenn es sich dabei Kunstwerke handelt. Also keine Diagramme, Mathematik oder technische Zeichnungen, sondern Gemälde und Fotos.
kompliziert: Der Rechenweg ist schlecht nachvollziehbar
ekelhaft:JPG-Artefakte
schäbig: potthässliches Firmenlogo
grässlich:leichter Graustich
PowerWMFeinfügen3.0 Simon Pie Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 10
durchschnittliche DokumentationAufgabe: Eine Armee besteht aus 10 Kreuzer und 20 Corvetten. Ein Kreuzer einen Angriff von 2,5ka, hält 5kl aus und kostet 10 Führungspunkte. Eine Corvette hat 1ka, 6kl und benötigt 7 Führungspunkte. Beide Gruppen kämpfen 0,8 und der Spieler hat 240 Führungspunkte. Gesucht ist die Kampfkraft und der Kampfverlauf dieser Armee. Kann die Kampfkraft optimiert werden?
Eingabewerte und Nebenrechnungen N W L f Lr Ld A gL gAa 10 10 5 0,8 3 2 2,5 50 25b 20 7 6 0,8 3,6 2,4 1 120 20Summe 30 240 170 45
Dabei sinda = Anzahl der Schiffe mit der geringeren Lebenb = Anzahl der Schiffe mit der höheren LebenLa= Leben eines der Schiffe mit der geringeren Leben Lb= Leben eines der Schiffe mit der höheren LebenAa; Ab= Angriff fa; fb= Kampfbeiwert Wa; Wb; W= Rohstoffverbrauchn= a+bgAa= a·Aa; gAb= b·Ab; gLa= a·La; gLb= b·LbLra= La·(2·fa-1); Lrb= Lb·(2·fb-1); Lda= La-Lra; Ldb= Lb-Ldb
Berechnung der KampfkraftLbr =6·(2·fb-1)= 6·(2·0,8-1)= 3,6 klLbr < La => lange Mischformel
K= ∑ (fa ∙ La∙n ∙ gAa
n ∙(La−Lrb)∙ 0,5 ∙(gAb+ gAb ∙(Lb−La)Ldb )
Lbr ∙ n ∙ gAb+Ab ∙(Lb−La)2
Lbd ∙2)
K= 0,8·5·30·25+ 30·(5- 3,6)·0,5·(20+(20·(6-5))/2,4)+3,6·30·20+( (1·(6-5)²·20²))/(2,4·2)K= 3000+ 595+2160+ 83,33K= 5838,33Mal
Diagrammpunkte des Kampfverlaufes mit den Punkten P1; P2 und P3Punkt 1 =(L1;A1)
L1= b·Lb-b·LaL1= 20·6-20·5= 20 klA1= (b·Lb-b·La)·Ab/((2-2·fb)·Lb)A1= (20·6-20·5)·1/((2-2·0,8)·6)= 8,33 ka
Punkt 2 =(L2;A2)L2= b·Lb+a·La-n·Lb·(2·fb-1)L2= 20·6+10·5-30·6·(2·0,8-1)= 62 klA2= b·Ab+( a·(La-Lb·(2·fb-1))·Aa)/((2-2·fa)·La)A2= 20·1+(10·(5-6·(2·0,8-1))·2,5)/((2-2·0,8)·5)= 37,5 ka
unpassend: Die Schriftart und –größe ist unterschiedlich
verständlich: Zahlen wurden in die Formel eingesetzt
hilfreich: Die Buchstaben werden erklärt
schön: Die Formel ist leicht lesbar
Tortur: ewiges klicken im Formeleditor führte dazu, dass die Zahlen in der nächten Zeile hintereinander weggeschrieben wurden
durchschnittlich: Um Zeit zu sparen wurde der Formeleditor wegglassen. Der Taschenrechner brauchte eine Menge Zeit zum Eintippen
PowerWMFeinfügen3.0 Simon Pie Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 11
Punkt 3 =(L3;A3)L3= b·Lb+a·La-n·(2·fa-1)·LaL3= 20·6+10·5-30·(2·0,8-1)·5= 80 klA3= b·Ab+a·AaA3= 20·1+10·2,5= 45 ka
b*(Lb-La)
n*(La-Lrb)
n*(Lrb-Lra) n*Lra
A
L00
A1
A2A3
L1 L2 L3 gLa+gLb
P1
P2P3
Berechnung der optimalen Anzahl
b= (240·3,6·1+240·(5-3,6)·0,5·1·(1+(6-5)/2,4)+0,8·5·2,5·(240-2·240·7/10))/(2·3,6·1·(7-10) +2·7·0,8·5·2,5·(1-7/10)+(5-3,6)·1·(1+(6-5)/2,4)·(7-10)-(10·1·(6-5)²)/2,4)
b= 13,81 Corvettena= (W- Wb·b)/Wa= (240-7·13,81)/10= 14,33 Kreuzer
K= ∑ (fa ∙ La∙n ∙ gAa
n ∙(La−Lrb)∙ 0,5 ∙(gAb+ gAb ∙(Lb−La)Ldb )
Lbr ∙ n ∙ gAb+Ab ∙(Lb−La)2
Lbd ∙2)
K= 0,8·5·28,14·2,5·14,33+28,14·(5-3,6)·0,5·(1·13,81+(1·13,81·(6-5))/2,4)+3,6·28,14·1·13,81+(1·(6-5)²·13,81²)/(2,4·2)
K= 5858 Mal
störend: diese weißen Linien eines AutoCAD Bugs.
schön: scharfe Grafik mit echtem Text
furchtbar: Formel als Bitmap ist schwer lesbar oder braucht viel Speicher. Bei dem Screenshot hätte man wenigstens Cleartype ausstellen sollen!
unpassend: Linien sind in PDF viiiiiiel zu dünn
Tortur: der Zeitaufwand des Formeleditors führte dazu, dass er konsequent nicht benutzt wurde.
herkömmlich: Firmenlogo aus Pixeln mit hoher Auflösung, die in Word, PDF oder spätestens im Ausdruck verschwunden ist
PowerWMFeinfügen3.0 Simon Pie Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 12
0 5 10 15 20 25 30 35 40550055505600565057005750580058505900
14
Eine optimierte Kampfkraft von 5858 Megaangriffsleben ist mit 13,81 Corvetten und 14,33 Kreuzer zu erreichen.
normal: ein gestochen scharfes Diagramm aus Excel. Aber: Extras können pixelhaft in Word oder PDF erscheinen
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 13
professionelle DokumentationAufgabe: Eine Armee besteht aus 10 Kreuzer und 20 Corvetten. Ein Kreuzer einen Angriff von 2,5ka, hält 5kl aus und kostet 10 Führungspunkte. Eine Corvette hat 1ka, 6kl und benötigt 7 Führungspunkte. Beide Gruppen kämpfen 0,8 und der Spieler hat 240 Führungspunkte. Gesucht ist die Kampfkraft und der Kampfverlauf dieser Armee. Kann die Kampfkraft optimiert werden?
Eingabewerte und Nebenrechnungen N W L f Lr Ld A gL gAa 10 10 5 0,8 3 2 2,5 50 25b 20 7 6 0,8 3,6 2,4 1 120 20Summe 30 240 170 45
Dabei sinda = Anzahl der Schiffe mit der geringeren Lebenb = Anzahl der Schiffe mit der höheren LebenLa= Leben eines der Schiffe mit der geringeren Leben Lb= Leben eines der Schiffe mit der höheren LebenAa; Ab= Angriff fa; fb= Kampfbeiwert Wa; Wb; W= Rohstoffverbrauchn= a+bgAa= a·Aa; gAb= b·Ab; gLa= a·La; gLb= b·LbLra= La·(2·fa-1); Lrb= Lb·(2·fb-1); Lda= La-Lra; Ldb= Lb-Ldb
Berechnung der KampfkraftLbr =6·(2·fb-1)= 6·(2·0,8-1)= 3,6 klLbr < La => lange MischformelK= = K= 3000+ 595+2160+ 83,33K= 5838,33Mal
Diagrammpunkte des Kampfverlaufes mit den Punkten P1; P2 und P3Punkt 1 =(L1;A1)
L1= b·Lb-b·LaL1= 20·6-20·5= 20 klA1= A1= = 8,33 ka
Punkt 2 =(L2;A2)L2= b·Lb+a·La-n·Lb·(2·fb-1)L2= 20·6+10·5-30·6·(2·0,8-1)= 62 klA2= A2= = 37,5 ka
Punkt 3 =(L3;A3)L3= b·Lb+a·La-n·(2·fa-1)·LaL3= 20·6+10·5-30·(2·0,8-1)·5= 80 klA3= b·Ab+a·AaA3= 20·1+10·2,5= 45 ka
passend: Die Schriftart und –größe ist nicht unterschiedlich
verständlich: Zahlen wurden in die Formel eingesetzt
hilfreich: Die Buchstaben werden erklärt
schön: Die Formel ist leicht lesbar
schön: der Dokumentationsstil wird konsequent durchgezogen
prachtvoll: gestochen scharfe Grafik für nur 1154 Byte; Selbst zu klein geratene Schrift bleibt lesbar
professionell: Firmenlogo als speichersparende Vektorgrafik ohne Pixel
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 14
L
A
0 20 62 80 17008,33
37,545
P1=(L1;A1)
P2=(L2;A2)P3=(L3;A3)
b·(Lb-La) n·(Lrb-Lra)n·(La-Lrb) n·Lra20 42 18 90
Berechnung der optimalen Anzahlb = b= b= 13,81 Corvettena= = = 14,33 KreuzerK= =K= 5858 Mal
b
K(a;b) Optimum
0 14,3 20 34,35600
5760
58585838
5642
Eine optimierte Kampfkraft von 5858 Megaangriffsleben ist mit 13,81 Corvetten und 14,33 Kreuzer zu erreichen.
BeispielgrafikenHier wurden viele Grafiken aus dem Zusammenhang gerissen und nebeneinander angeordnet.Diese können pixelfrei mit 500% Zoom in Word, PDF und Druck betrachtet werden.Diese 50 Grafiken benötigen gezippt 250kB.
passend: Die Schriftart und –größe der Grafik ist wie im Dokument
schnell: Der Formel- umwandler rechnet Formeln aus
intelligent: Grafik mit allgemeinen und zum Dokument angepassten Größen
schnell: Die Formel wurde ohne Maus hintereinander weg eingetippt
Geschmackssache: Schrift im Bruch ist nicht kleiner
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eSt abil i t ät sskript Dr. -Ing. M. Rei ni nghaus
m = 1; n = 1
m = 2; n = 2 m = 3; n = 2
m = 2; n = 1
Knotenlinie
Knoten-
x,(m)
y,(n)
z,(w)
x,(m)
x,(m)
x,(m)
z,(w)
z,(w)
z,(w)
y,(n) y,(n)
linie
T2
T1
T3
T2
T1
T3
T2
T1
T3
1 2 3X1X2
X3
X4
X2
X3
X4
X2
X3X4
S im o n P ie - P o w erW M F ein fü g en 2 .3P latten b eu len ; K am p fk raftth eo rieS tab ilitätssk rip t D r.-In g . M . R ein in g h au s
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 15
Seitenfüllende Grafiken mit 50% Größe (Strg + Mausrad)
T2
T1
T3
T2
T1
T3
T2
T1
T3
1 2 3X1X2
X3
X4
X2
X3
X4
X2
X3X4
P1 P2
P3 P4
P5 P6dreiheitlicher Kampfverlauf
gLa gLc gLegL
K(a)
K(c)
K(e)
gLe·gAc
gLe·gAagLc·gAa
L
A
gAa
gAc
gAe
gA
Si monPi e - PowerWMFeinfügen2. 3Pl at tenbeulen; Kampfkraf t t heor ieWMF-Balken
Zug
Druckfcd
0,71
37
45%
45%
10%
Si monPi e - PowerWMFei nfügen3. 0Pl at tenbeul en; Kampfkraft t heor i eTorsionsskr i pt Inst i tut St ahlbau -h/2
h/2 -b h/4
b h/4
-h/2h/2
b h/4-b h/4
h
-h
-b h/2
b h/2
h
-h
-b h/4
3 b h/4
b h/4
-b h/4
-b h/4
-b/2
b/2
. .
..
.
.
.
.
..
.
.
r
r
r
D =M D =M
D D
D D
-285
285
285-285
-570
570
-285
855
285
-285
-285
D =M
D
D
I = dA+.. . .dA
dA+.. . .dA+
I = dA+.. . .dA
I = dA+.. . .dA
dA+.. . .dA+
dA- K² A..+ .
t
t
t
1 1
2 2
3 3
1
2
3
-285
-285
285
285
-285
-285
285
285
150 150
150150
-570
-570
570
570
150 150
-285
-285
855
855
-285
-285
285
285
75 225
190190
-285
-285
300
0
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·dx
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
y1" =480·x³-816·x²+396·x-46y2" =80·x³-144·x²+78·x-12 y3" =0·x³+192·x²-192·x+32 y4" =320·x³-480·x²+192·x-16y5" =-480·x³+624·x²-204·x+14y6" =80·x³-96·x²+30·x-2
x1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
14
14
14
14
14
14
14
32
32
32
32
32
32
32
16
16
16
16
16
16
16
14
14
14
14
14
14
14
12
12
12
12
12
12
12
-2
-2
-2
-2
-2
-2
-2
y1"
-46 -12
-12
-12
-12
-12
-12
-12
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-16
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
y1"
y1"
y1"
y1"
y1"
y1"
y2"
y2"
y2"
y2"
y2"
y2"
y2"
y3"
y3"
y3"
y3"
y3"
y3"
y3"
y4"
y4"
y4"
y4"
y4"
y4"
y4"
y5"
y5"
y5"
y5"
y5"
y5"
y5"
y6"
y6"
y6"
y6"
y6"
y6"
y6"
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
2 2 2 2 2 2 2
x x x x x x
x x x x x x
x x x x x x
x x x x x x
x x x x x x
x x x x x x
12 12 12 12 12 12 12
14 14 14 14 14 14 14
14 14 14 14 14 14 14
16 16 16 16 16 16 16
-2 -2 -2 -2 -2 -2 -2
32 32 32 32 32 32 32
y1"
-46
-12 -12 -12 -12 -12 -12 -12
-16 -16 -16 -16 -16 -16 -16
-16 -16 -16 -16 -16 -16 -16
-46 -46 -46 -46 -46 -46
-46 -46 -46 -46 -46 -46 -46
y1" y1" y1" y1" y1" y1"
y2" y2" y2" y2" y2" y2" y2"
y3" y3" y3" y3" y3" y3" y3"
y4" y4" y4" y4" y4" y4" y4"
y5" y5" y5" y5" y5" y5" y5"
y6" y6" y6" y6" y6" y6" y6"
Si m onPi e W M F- Ba l ke n CC- BY- SAW M F- Ba l ke n
1,00 0,5 6,5
8,00
3,00 0,5 4,5
7,00 1,00
6,00 1,5 0,5
3,00 2,00 1,00 2,00
4 4
3 3
2 2
3 3Lastzeile Eigengewicht
2,5 2,5Lastzeile Lastfall 1
2 2Lastzeile Lastfall 2 2 2
HEB 300
Zeile0
Zeile1
Zeile2
Zeile3
Zeile5
Zeile6
Zeile8
Zeile9
Zeile13
Zeile14
Zeile11Zeile12
Zeile10
Zeile7
Zeile4
1,00 0,5 1,5 0,5 2,5 1,5 0,5
3,00 2,00 1,00 1,00 1,00
1,00 3,00 3,00 1,00
1,00 0,5 1,5 0,5 0,5 1,00 1,00 1,00 0,5 0,5
Simo nPie - Po werWMFein füg en 3.0Plattenb eulen; Kamp fkraftth eo rieTo rsion sskript In stitut Stahlb au
De
De
De
De
De
De
De
DE
DE
De
DE
DE
DE
DeDeck
Deck
Deeh
ZIPFEL
Deeh
Weich
DECK
DEEH
DECK
DEEH
DEEH
DEEH
Weich
DEE
H
Dec
k
Dec
k
Dec
k
Deck
DECK
Dee
h
Zipf
el
DEEH
DECK
DECK
0
1
D
L
0 1 2 3 4 5
1T 2T 3T 4T 5T
1-4T
2-4T2-5T
2-6T
3-5T3-6T
3-7T
4-6T4-7T
4-8T
5-6T
1
23
4 56 7
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 16
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eSt abil i t ät sskript Dr. -Ing. M. Rei ni nghaus
Wölbmoment
Verwölbungen
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eWMF-Balken
Element
Element
Element
Element
Element
q q
linkesLager
linkesLager
linkesLager
rechtesLager
kein mittleresLager
Knoten1 2
Si m onPi e W M F- Ba l ke n CC- BY- SAW M F- Ba l ke n
1,00 0,5 6,5
8,00
3,00 0,5 4,5
7,00 1,00
6,00 1,5 0,5
3,00 2,00 1,00 2,00
4 4
3 3
2 2
3 3Lastzeile Eigengewicht
2,5 2,5Lastzeile Lastfall 1
2 2Lastzeile Lastfall 2 2 2
HEB 300
Zeile0
Zeile1
Zeile2
Zeile3
Zeile5
Zeile6
Zeile8
Zeile9
Zeile13
Zeile14
Zeile11Zeile12
Zeile10
Zeile7
Zeile4
1,00 0,5 1,5 0,5 2,5 1,5 0,5
3,00 2,00 1,00 1,00 1,00
1,00 3,00 3,00 1,00
1,00 0,5 1,5 0,5 0,5 1,00 1,00 1,00 0,5 0,5
Simo nPie - Po werWMFein füg en 3.0Plattenb eulen; Kamp fkraftth eo rieTo rsion sskript In stitut Stahlb au
De
De
De
De
De
De
De
DE
DE
De
DE
DE
DE
DeDeck
Deck
Deeh
ZIPFEL
Deeh
Weich
DECK
DEEH
DECK
DEEH
DEEH
DEEH
Weich
DEE
H
Dec
k
Dec
k
Dec
k
Deck
DECK
Dee
h
Zipf
el
DEEH
DECK
DECK
erste Teilkampfkraft subtrahieren
weitere Teilkampfkräfte subtrahieren
bis Zekkadauria besiegt ist
P1 P2 P3 P4
tK1tK2tK3 tK4 ZekkadauriaDeckchins
- = -
- = -
- = -Rest L tL=10
tA=80
P(L1;A1)
P(L2;A2)
gL=300
gegL=210
K=36250 geK=34650 13750 22500 12150 22500
13750 22500 12150 22500 7500 28750 5900 28750
gA=150 gegA=
220
N=4
K=23
N=4
K=19
1/4
3/4 N=4
K=15,5
2/4
2/4
N=4
K=12,5
3/4
1/4N=4
K=10
N=3
K=13,5
N=3
K=10,5
1/3
2/3 N=3
K=8
1/3
2/3
N=2
K=6,5
N=3
K=6
N=2
K=4,51/2
1/2
N=2
K=3
N=1
K=2
N=1
K=1
L
A roter Pfad
0 1 2 3 4 5 6 7 801234
L
A blauer Pfad
0 1 2 3 4 5 6 7 801234
K= 21 K= 26
f=23/32
rot
64
64
0
0
0
0
255
255
128
0
0
0
grün
64
64
0
192
192
96
0
0
0
0
0
0
blau
64
64
0
0
0
0
0
0
0
255
255
128
LFpRPinsel(LF=0)
LFpRpPinsel(LF=0)
LFPfeilPinsel(LF=0)
LFpRPinsel(0)
LFpRpPinsel(0)
LFPfeilPinsel(0)
LFpRPinsel(1)
LFpRpPinsel(1)
LFPfeilPinsel(1)
LFpRPinsel(LF)
LFpRpPinsel(LF)
LFPfeilPinsel(LF)
224
128
64
192
128
0
255
255
255
192
128
0
224
128
64
255
255
192
192
128
0
192
128
0
224
128
64
192
128
0
192
128
0
255
255
255
LFpRFüller(LF=0)
LFpRpFüller(LF=0)
LFPfeilFüller(LF=0)
LFpRFüller(0)
LFpRpFüller(0)
LFPfeilFüller(0)
LFpRFüller(1)
LFpRpFüller(1)
LFPfeilFüller(1)
LFpRFüller(LF)
LFpRpFüller(LF)
LFPfeilFüller(LF)
Si monPi e - Power WMFeinfügen3. 0Pl at tenbeulen; Kampf kr aftt heori eTorsionsskri pt Inst it ut Stahlbau0,5 3m 0,5
W =7kN
G =2,4kN
242,5 15 242,5500
1,75
11
6m
2046
020
500k
k
Simo n Pie - Po werWMFein fü g en 3 .0Platten b eu len ; Kamp fk raftth eo rie
hL
x
y
b
x
y
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 17
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eSt abi l i t ät sskr ipt Dr . - Ing. M. Rei ni nghaus
Drillknickfigur
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eSt abil i t ät sskript Dr. -Ing. M. Rei ni nghaus
Que
rrand
bb
bb
b b
bb
bb
b
Ges
amtb
reite
= T
eilfe
ldbr
eite
Que
rste
ifen
1312
1114
11 11
4342
4144
Längsrand
a a a a
GesamtfeldTeilfelderEinzelfelder
= Feld= Felder= Felder
a·ba ·ba ·b
a GesamtfeldlängeSeitenverhältnis a
LängsrandlängeQuerrandlänge
aba ==
Teilfeldi
Einzelfeldik
Längssteifen
1 2 3 4
ii ik
Si monPi e - PowerWMFei nfügen3. 0Pl at tenbeulen; Kampfkraft theori eTorsionsskri pt Inst i tut St ahlbau
S=M
zs
y
9901000
1010
A B
D C
1990
1010
2000
rot
64
64
0
0
0
0
255
255
128
0
0
0
grün
64
64
0
192
192
96
0
0
0
0
0
0
blau
64
64
0
0
0
0
0
0
0
255
255
128
LFpRPinsel(LF=0)
LFpRpPinsel(LF=0)
LFPfeilPinsel(LF=0)
LFpRPinsel(0)
LFpRpPinsel(0)
LFPfeilPinsel(0)
LFpRPinsel(1)
LFpRpPinsel(1)
LFPfeilPinsel(1)
LFpRPinsel(LF)
LFpRpPinsel(LF)
LFPfeilPinsel(LF)
224
128
64
192
128
0
255
255
255
192
128
0
224
128
64
255
255
192
192
128
0
192
128
0
224
128
64
192
128
0
192
128
0
255
255
255
LFpRFüller(LF=0)
LFpRpFüller(LF=0)
LFPfeilFüller(LF=0)
LFpRFüller(0)
LFpRpFüller(0)
LFPfeilFüller(0)
LFpRFüller(1)
LFpRpFüller(1)
LFPfeilFüller(1)
LFpRFüller(LF)
LFpRpFüller(LF)
LFPfeilFüller(LF)
Si monPi e - Power WMFeinfügen3. 0Pl at tenbeulen; Kampf kr aftt heori eTorsionsskri pt Inst it ut Stahlbau0,5 3m 0,5
W =7kN
G =2,4kN
242,5 15 242,5500
1,75
11
6m
2046
020
500k
k
Si monPi e - PowerWMFeinfügen3.0Pl at tenbeulen; Kampfkraftt heorieTorsionsskri pt Inst i t ut Stahl bau0,5 3m 0,5
W =7kN
G =2,4kN
242,5 15 242,5500
1,75
11
6m
2046
020
500k
k
L
A
0 275,2 8000
100
L
A
0 10000
80
L
A
0 8000
34
100
blauer Stamm roter Stamm Restkampfkraft
93,8326,8
76
P0
P1 P2
P3 P4P5 P6
P0
P1 P2
P3 P4P5 P6
+ + + + +tK1tK2 tK3 tK4 tK5 tK6 tK1 tK2 tK3 tK4 tK5 tK6
S imo n P ie - P o werW M F ein fü g en 3 . 0P latt en b eu len ; Kamp fk raftt h eo rie
Le
22
H
D
Z
Si monPi e - PowerWMFei nfügen3. 0Pl at tenbeulen; Kampfkraft theori e
bb
bb
L L LL
1 2 3
12
3
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 18
1,051
0,950,9
0,850,8
0,750,7
0,650,6
0,550,5
0,450,4
0,350,3
0,250,2
0,150,1
0,050
D
L
U
Überschaden
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
A Held
L
A N=2
LA N=10
L
A N=25
L
f = 1 f = 0,75
f = 0,55 f = 0,52
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eWMF-Balken
Ellipse
Rechteck
Polylinie
Polygon
Text
Bogen
Pie
Chord
rundesRechteck
Füller
Pinsel
Font
Typ Inhalt
1048
1051
805
804
1313
2071
2074
2096
1564
762
764
763
A%" "/§
fgh Blubb4r5rtWS
qwertzu43
Aoj
s
Aoj
s
A
SimonPi e - PowerWMFeinfügen3. 0Plat tenbeulen; Kampfkr aft theori e
a
K(a)
0 4 8 12 16 20 24 28 32 36 407000
8500
10541
7680
Mischoptimierungfa= 0,8 La=6 Aa=1fb= 0,85 Lb=10 Ab=10Wa=0,5 Wb=2 W=20
L
A nur Blocker
0 30 1000
100
b=10;a=0K= 8500
L
A
0 273667,2 1140
9094
b= 9; a= 4K= 9294,6
L
A
0 2432 70,4 1280
8088
b= 8; a= 8K= 9894,4
L
A
0 2128 73,6 1420
7082
b= 7; a= 12K= 10299,4 L
A Optimum
016,522 78,4 1630
5573
b= 5,5; a= 18K= 10541,65
L
A Halbe-Halbe
01520 80 1700
5070
b= 5; a= 20K= 10525
L
A
0 912 86,4 19803058 b= 3; a= 28
K= 9971,4
L
A
0 68 89,6 21202052
K= 9402,4 b= 2; a= 32
L
A
03 4 92,8 22601046
K= 8638,6 b= 1; a= 36
L
A nur kAnonenfutter
0 96 2400
40K= 7680 b=0; a=40
S imo n P ie - P o werWM F ein fü g en 3 .0P latten b eu len ; Kamp fk raftth eo rieKrafteck
ha
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 19
50% Größe
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eWMF-Balken
Ellipse
Rechteck
Polylinie
Polygon
Text
Bogen
Pie
Chord
rundesRechteck
Füller
Pinsel
Font
Typ Inhalt
1048
1051
805
804
1313
2071
2074
2096
1564
762
764
763
A%" "/§
fgh Blubb4r5rtWS
qwertzu43
Aoj
s
Aoj
s
A
SimonPi e - PowerWMFeinfügen3. 0Plat tenbeulen; Kampfkr aft theori e
Si m onPi e W M F- Bal ken CC- BY- SAW M F- Ba l ke n
2 2 2 2 2 2
IPE 100 Text
SimonPie - PowerWMFeinfügen3. 0Plat tenbeulen; Kampfkraft t heori eTorsionsskript Inst i t ut St ahlbau
x
M (x)M /2
-M /2
Anteil M
Anteil M
M
M /2 M /2
u u
x
M (x)M /2
-M /2
Anteil M
Anteil Mx
M (x)
Verwölbungbehindert
Verwölbungbehindert
entgegengesetzte Verwölbung=> behinderte Verwölbung
T
T
T
T
T T
1 2
T
T
T
T
TP
TS
TP
TS
L1 L3 L5 L7 L9 L11
L1 L2 L4 L5 L7 L8 L10 L11
L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11
6 Maßketten307Doppelbyte4 Bimaßketten314Doppelbyte1 Polymaßkette327Doppelbyte
allgemeines Schlachtfeld
zweiheitlicher Kampf
gemischter Kampf
einheitlicher Kampf
3.Reihe 2.Reihe 1.Reihe
2.Reihe 1.Reihe
GegnerFrontGruppe e
Gruppe c(gemischt)
Gruppe a
GegnerFrontGruppe e
Gruppe a
GegnerFrontGruppe
Gruppe
Gruppe
GegnerFront
0 0 0
0 0 0
0 0 0
0 0 0
20 20
20 20
25 25 25
25
25 25 25
25
40 40
40 40
50 50 50
50
50 50 50
50
300
385315
393
350
533417393
300
512
352393
350
533417385
350
512468385
450
512472
533
350385
543
393350
533483393
350
512502393
350
533462385
200
512
224385
400
512445
533
K(a) Bogen => Schild
K(a) Bogen => Schild
K(a) Bogen => Schurke K(a) Bogen => Samurai
K(a) Schild => Schurke K(a) Schild => Samurai
K(a) Bogen => Schurke K(a) Bogen => Samurai
K(a) Schild => Schurke K(a) Schild => Samurai
K(a) Schurke => Samurai
K(a) Schurke => Samurai
Mischkampf Mischkampf Mischkampf
Mischkampf Mischkampf Mischkampf
zweiheitlich zweiheitlich zweiheitlich
zweiheitlich zweiheitlich zweiheitlich
N
L
1
2X2·X2=1/4
1
1,1 2,2
S2 S2
0,1 1,2
K=3Ku=3,3
N
L
1
2X2·X1=1/4
2
1,9 3
1 S2
0,9 2
K=3Ku=4,1
S1
N
L
1
2X2·X1/2=1/8
3
1,1 3
S2 1
0,1 2
K=3Ku=4,9
S1N
L
1
2X2·X1/26
=1/8
1 3
1 S2
K=3,9Ku=5
S1
2,1
N
L
1
2X1²/2=1/8
5
1 3,8
1 1
1,9
K=3,9Ku=6,6
S1 S1
2,9
N
L
1
2X1²/2=1/8
4
1,9 3,8
1 1
0,9 1,9
K=3Ku=5,7
S1 S1
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 20
Si monPi e - PowerWMFei nfügen3. 0Pl at tenbeulen; Kampfkraft theori eTorsionsskri pt Insti tut St ahlbau
dr
t
max
b
r
S imo n P i e - P o werW M F ei n fü g en 2 .2P latt en b eu len ; Kamp fk raft th eo ri eGemalt mi t Au to cad , k o mp rimi ert mit P o werW M F, so rti ert u n d co l iriert mi t W M F zerl eg er
Fall 1 Fall 2 Fall 3
kurze Mischformel lange Mischformel dritte Mischformel
Lrb>La Lrb<La & Lrb>Lra Lrb<La & Lrb<Lra
Lb
LrbLdb
Gruppe B
Ab
Lb
LrbLdb
Gruppe B
Ab
Lb
LrbLdb
Gruppe B
Ab
La
LraLda
Gruppe A Aa
La
LraLda
Gruppe A Aa
La
LraLda
Gruppe A Aa
SimonPie - PowerWM Feinfügen3.0Pla ttenbeulen; Kampfkrafttheorie
F F
F F
H H
HH
Joch Joch
JochJoch
a
a
a ab
b
Joch
II
Joch
II
Joch
II
Joch
II
H
H
H H
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 21
L
A
gLa+gLb
gAb
L
A
gLa+gLb
gAa
ggLad= Lad·n ggLar= Lar·nggLa= La·n
ggLbd= L1+L2+L3 ggLbr= Lrb·nggLb= gLa+gLb
L1 L2 L3
A1A2P1
P3P2
A
B
Si monPi e - PowerWMFeinfügen2. 3Pl at tenbeulen; Kampfkraft theori eWMF-BalkenP40W36
S50 RUXVS500
S18H20
S150
Si monPi e - PowerWMFei nfügen3. 0Pl at tenbeulen; Kampfkraft theori eTorsionsskri pt Insti tut St ahlbau
dr
t
max
b
r
Schuss 1
Schuss 2
1+D
1
L
L+D-1
1-D1-D 1 1+D
X31 X32
X1
X2
L
2
S imo n P ie - Po werWM Fein fü g en 2 .3P latten b eu len ; Kamp fk raftth eo rie
ba o
o
o
kein knickstab-
knickstabähnlichesVerhalten
ähnliches Verhalten
x
x
x
Free Software
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori eWMF-Balken Breite
x1 x2y1
y3
y4
y2
D x3 x4 D
Breite
x1 x2x3 x4
D
D=DickeR=RadiusRi=Innenradius
RR
i
tfR
Höh
e
SimonPie - PowerWMFeinfügen3.0Plattenbeulen; Kampfkrafttheorie
E
NN
N N
E
N = E·mN= E²+N²
Knotenschnitt 1
Knotenschnitt 2
VN
VN
N
NVV
N
N = C = NV + V
m
HEB
HEB
HEB
kk
A
A
k
A
A
m Ak A
Si monPi e - Power WMFei nfügen3. 0Pl at t enbeul en; Kampf kr af t t heori e
F
L
d
k
L
d
SimonPie - PowerWM Feinfügen3.0Pla ttenbeulen; Kampfkrafttheorie
F F
F F
H H
HH
Joch Joch
JochJoch
a
a
a ab
b
Joch
II
Joch
II
Joch
II
Joch
II
H
H
H H
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 22
L
A
gLa+gLb
gAb
L
A
gLa+gLb
gAa
ggLad= Lad·n ggLar= Lar·nggLa= La·n
ggLbd= L1+L2+L3 ggLbr= Lrb·nggLb= gLa+gLb
L1 L2 L3
A1A2P1
P3P2
A
B
S imo n P ie - P o werW M F ein fü g en 2 . 3P latt en b eu len ; Kamp fk raft th eo ri eS tab il it ät ssk rip t Dr. -In g . M . Rein in g h au s
-1,4[-]
-1 -0,6 -0,2 0 0,2 0,6 1 1,4
0,2
0,8
1
1,2
1,4
1,6
Theorie2.Ordnung
Theorie3.Ordnung
=0,02
mit Imperfektion
ohne Imperfektion
Theorie2.Ordnungohne Imperfektion
Theorie3.Ordnungmit Imperfektion
Ausmitte
S imo n P ie - Po werWM Fein fü g en 3 .0P latten b eu len ; Kamp fk raftth eo rie
Kno
tens
chni
tteH zu
s.H
N
zus.H zu
s.HH
zus.H
N
zus.H
NK
rafte
cke
zus.H
Joch
I Joch
II
Träg
er
Joch
III
Joch
IJo
ch I
Joch
IITräg
er
Joch
IIITr
äger
Joch
I
SimonPie - PowerWMFeinfügen3.0Plattenbeulen; Kampfkrafttheorie
E
NN
N N
E
N = E·mN= E²+N²
Knotenschnitt 1
Knotenschnitt 2
VN
VN
N
NVV
N
N = C = NV + V
m
HEB
HEB
HEB
kk
A
A
k
A
A
m Ak A
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 23
Problemlösungen bei hässlicher GrafikDieses Kapitel zeigt, wie man PowerWMF richtig benutzt, um schöne Grafiken zu erhalten, anstatt 5 mal hintereinander frustriert zu sein. Folgende Grafik soll in Word eingefügt werden:
So sieht eine Grafik direkt aus dem AutoCAD aus. Der schwarze Rahmen wurde mit Word hinzugefügt, damit man auch den zugehörigen weißen Bereich sieht. Schlecht ist hier schon mal, dass der Ausschnitt nicht maximal groß gezoomt wurde, gut hingegen ist, dass die Grafik nach oben links geschoben wurde. Außerdem ist die Anzeige der Linienstärken deaktiviert, sodass es keine Probleme mit den Linien geben wird.
Die Texte sind zensiertS im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
Ein Text, der in AutoCAD abdeckend ist, hat die Farbe des Hintergrundes. Hinter jedem Text sind also 2 hintergrundfarbige Dreiecke (Polygone). PowerWMF ist so eingestellt, dass es schwarze Flächen in weiß umwandelt, die meisten anderen Farben bleiben so wie sie sind. Deshalb muss der Hintergrund in AutoCAD auf schwarz umgestellt werden.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 24
Dazu klickt man auf Anzeige und dann auf Farben.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 25
Die dunkelgraue Farbe des Modellbereiches muss in reines Schwarz (0,0,0) geändert werden. Die hellgelbe Farbe des Layoutbereiches muss in reines Weis (255, 255, 255) oder schwarz geändert werden. Ist die Anzeige richtig eingestellt, wird der Texthintergrund in Word weiß. PowerWMF wandelt eine dunkelgraue Farbe (33,40,48) selbstständig in weiß im.
In der Grafik liegen lauter kleine Kreise rum und die Punkte der Axen fehlenS im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
AutoCAD legt mit jeder Maßkette 3 Pixel in die WMF. Bei jeder Strichpunktlinie hinterlässt AutoCAD ebenfalls für jeden Punkt einen Pixel. Die Pixel der Strichpunktlinien sind so klein, sodass man sie kaum sehen kann. PowerWMF wandelt diese Pixel in kleine Kreise um, um das Aussehen der Axen wiederherzustellen. Leider werden auch die Pixel der Maßketten in Kreise verwandelt, sodass man in Word sieht, welche Punkte vermaßt wurden. Das Problem wurde folgendermaßen gelöst:rote Pixel = Löschen (gelb bei Modifikation i)andere Pixel = schwarze KreisleinSollen die Kreise der Axen in Word erscheinen, dann müssen die Axen eine andere Farbe als rot haben. Sollen die Kreise der Maßketten verschwinden, dann muss die Farbe des Maßobjektes auf rot (oder vonlayer bei roten Layer) liegen. Die Farbe des Maßtextes und der Maßlinien ist weiterhin frei wählbar.
Sollen eine andere Farbe als Rot für das Löschen entscheiden, so sind die 3 RGB-Werte in diesem Programmteil zu ändern:'Pixel in Kreislein verwandelnIf ModI = 1 Then Farbe2 = Chr(255) & Chr(255) & Chr(0) Else Farbe2 = Chr(255) & Chr(0) & Chr(0)End If
Die Texte sehen hässlich ausSo sieht die Grafik mit richtig eingestellter Anzeige und richtigen Farben aus:
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 26
S im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
Die Ursache ist, dass keine Truetype-Schriftart verwendet wurde, wie z.B. Simplex. Die Texte sind Polylinien und die Datei ist mit 3164 Byte auch ziemlich groß.Für eine gute Grafik wird Truetype benötigt z.B. Arial Narrow.
Die Grafik sieht immer noch hässlich aus Es wurde die Schriftart Arial Narrow verwendet:
S im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
Die Texte sehen entweder hässlich aus oder sind ganz verschwunden. Die Datei ist mit 6838 Byte riesengroß. Die Ursache ist, dass AutoCAD die Texte zu Polygone zersplittert hat. Rein schwarze Polygone werden vom Makro in weiße Polygone umgewandelt und reine Farben wie rot, grün oder magenta in schwarz.Damit AutoCAD den Text als Text exportiert, müssen für jeden Text diese Bedingungen eingehalten sein!
Breitenfaktor ist 1 Die DWG wurde bisher noch nie 3D betrachtet Der Text ist nicht zu nah am Rand linksoben Die Z-Koordinate des Textes ist exakt 0
AutoCAD stellt Zahlen oft mit einer „Genauigkeit“ dar. Statt 1,418E-15 sieht man in den Eigenschaften bei der Z-Koordinate eine 0. 1,418E-15 ist aber nicht 0 und AutoCAD zerreißt den Text in Stücke. Wähle alle Texte (über Schnellauswahl) aus und ändere die 0 in eine 0.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 27
Es fehlen ObjekteS im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
176 214 132 156
Es fehlen Objekte182
161
160
AutoCAD exportiert weiße Objekte manchmal als weiße Objekte und nicht als schwarze Objekte. PowerWMF ändert die Farbe von weißen Objekten nicht. Sollte das Problem auftreten, dann müssen die weißen Objekte eine andere Farbe erhalten.
Die Grafik wird nicht in ein korrektes PDFormat umgewandeltS im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
1 7 6 2 1 4 1 3 2 1 5 6
D e r T e x t w i r d f a l s c h g e d r u c k t
1 8 2
1 6 1
1 6 0
In Word sieht diese Grafik vollkommen in Ordnung aus - dieses Bild ist nachgestellt. Dieses Problem liegt größtenteils nicht an PowerWMF, sondern daran, dass ein schlechter PDF-Drucker verwendet wird. Der PDF-Ersteller von Word kann seine eigenen Metafiles nicht richtig lesen. Dabei werden runde Linienenden eckig gedruckt und mit einer Wahrscheinlichkeit von 5% werden die Texte heimtückisch lang gezogen. Der AdobePDF-Drucker erstellt zwar das Dokument korrekt, aber Word sendet ab 2010 zerrechnete Bitmaps an den Drucker. Mit Word 2007 für Windows XP funxionierte das PDFerstellen problemlos. Ab Word 2010 habe ich die Qual der Wahl zwischen anständige Bitmaps mit dem PDF-Ersteller oder anständige Vektorgrafiken mit den AdobePDFdrucker. Wer also Vektorgrafiken in seinem Dokument verwendet, sollte einen vektorfähigen Drucker verwenden!
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 28
Die Grafik hat falsche LinienstärkenS im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
176 214 132 156
falsche Linienstärken182
161
160
Jedes Büro plottet mit seiner eigenen CTB. Daher müssen im Makro die Strichstärken entsprechend angepasst werden. PowerWMF nutzt die Friedrich.ctbFolgende Strichstärken sind vordefiniert.
Farbe geänderte Farbe Strichstärkeweiß weiß 2 mittelgelb schwarz 1 dünnmagenta schwarz 1 +1*I dünn (mittel)rot schwarz 1 dünncyan schwarz 2 mittelgrün schwarz 1,5 dünnblau schwarz 3 dickschwarz schwarz 2 +2*I mittel (Fett)dunkel (18;18;18) weiß 3 dicksonstige sonstige 2 mittel
Der Wert I ist bei Modifikation I =1, sonst 0. Man kann also 2 CTBs definieren. Nutzt man die alternative CTB, so werden die Differenzen hinzuaddiert. Die alternative CTB benutzt man, indem man vor dem Start des Makros ein i eintippt.Bei Modifikation R werden alle nulldicken Füller mitteldick, aber die Farben werden nicht geändert.
Dieser Teil des Makros beinhaltet die Strichstärken und die Zahlen werden hier angepasst:'StrichstärkenCTBIf ModR = 0 ThenFor a = 3 To Georekorde If Geoeigenschaften(a, 0) <> 261 And Geoeigenschaften(a, 1) <> 5 And Geoeigenschaften(a, 2) = 0 Then AktFarbe = Chr(Geoeigenschaften(a, 3)) & Chr(Geoeigenschaften(a, 4)) & Chr(Geoeigenschaften(a, 5)) Select Case AktFarbe Case Chr(255) & Chr(255) & Chr(255) 'weiß Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 0 * ModI) 'keine Farbänderung Case Chr(255) & Chr(255) & Chr(0) 'gelb Geoeigenschaften(a, 2) = (1 + Verdicken) * (1 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(255) & Chr(0) & Chr(255) 'magenta Geoeigenschaften(a, 2) = (1 + Verdicken) * (1 + 1 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(255) & Chr(0) & Chr(0) 'rot Geoeigenschaften(a, 2) = (1 + Verdicken) * (1 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(0) & Chr(255) & Chr(255) 'cyan Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 29
Case Chr(0) & Chr(255) & Chr(0) 'grün Geoeigenschaften(a, 2) = (1 + Verdicken) * (1.5 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(0) & Chr(0) & Chr(255) 'blau Geoeigenschaften(a, 2) = (1 + Verdicken) * (3 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(0) & Chr(0) & Chr(0) 'schwarz Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 2 * ModI) 'keine Farbänderung Case Chr(18) & Chr(18) & Chr(18) 'Layerabdecken Geoeigenschaften(a, 2) = (1 + Verdicken) * (3 + 0 * ModI) Geoeigenschaften(a, 3) = 255 Geoeigenschaften(a, 4) = 255 Geoeigenschaften(a, 5) = 255 Case Else Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 0 * ModI) 'keine Farbänderung End Select End IfNext
Die Formel für die Strichstärke lautet:Füllerdicke= (1+Verdicken) * (a + b * ModI)
Dabei sind:a= relative Strichstärke (1= dünn; 2= mittel; 3= dick; 5= fett)b= Differenz der Strichstärke für die alternative CTBModI= 1 für alternative CTB, sonst 0Füllerdicke= Dicke der Linie in der WMF
Verdicken schätzt wie dick die Linien sein müssen, damit die Linien in der WMF weder zu dünn noch zu dick sind. Die Schätzung ist sehr gut, wenn Text in der WMF ist, sonst kann sie um das doppelte daneben liegen.
Als Nutzer passt man die Variablen a und b an.
Die Grafik sieht nach dem Drehen ekelhaft aus
WMF kann man in Word weder drehen noch einaxig skalieren. Beim Drehen wird die Grafik in eine Bitmap verwandelt!!! Die Anzahl der Pixel ist von den Werten in der WMF abhängig. Gehen die Werte bis 2000, dann sind es große Pixel und bei 20000 sind es kleine Pixel. Beim Skalieren in eine Richtung bleibt die Grafik weiterhin vektorisiert, aber der Text wird vergrößert und nicht skaliert. Kleine Pixel können eine PDF extrem aufblähen.
Sim
on
Pie - P
ow
erWM
Fein
füg
en2
.2P
lattenb
eulen
; Kam
pfk
rafttheo
rieW
MF
zerleger; w
ww
.Wo
T-W
MF.d
e
176214
132156
Es fehlen Texte
182 161 160
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 30
Lösung: In AutoCAD drehen. In AutoCAD 2013 können neuerdings auch Ansichtsfenster in 90° Schritten gedreht werden, ohne dass der Text in Polygone zerfällt.
Achtecke werden zu KreiseAutoCAD speichert Kreise und andere runde Objekte als Polygone. Aus einem Kreis wird ein Achteck oder Zwanzigeck. Nach dem Regenerieren hat der Kreis besonders viele Ecken. Einem Achteck sieht man nicht an, ob es vorher mal ein Kreis war. Da Kreise wesentlich öfter auftreten als Achtecke, wandelt das Makro alle Achtecke in Kreise um.Sollten doch mal Achtecke nicht umgewandelt werden, dann sind in der Funxion Polyglätten die Anzahl der Punkte zu erhöhen:
If Punkte > 7 Then
Statt 7 Punkte trägt man 11 ein.
Darstellungsprobleme
Dieser Text wächst oder schrumpft beim Zoomen
Darstellung als Polygone
Link im PDF: www.WoT-WMF.de
Rechtecke liegen nicht auf einer LinieKeine Sorge, das ist nur ein Darstellungsproblem von Word. Der untere und rechte Rand von Reckecken wird 1 Pixel kürzer dargestellt. Wird das Rechteck mit einer Polylinie fortgesetzt, dann sieht es so aus, als ob es da einen Sprung oder eine fette Linie gibt. Beim PDF-Druck erscheint dieser Darstellungsfehler nicht mehr.Die Grafik ist beim Ranzoomen PixelhaftDies ist ein Darstellungsproblem von Word 2013. Drin ist aber immer noch Vektor und beim Drucken sieht es schön aus. Aber: Eine gedrehte Grafik wird wirklich zur Bitmap.
Texte verändern ihre LängeWeitere Darstellungsmängel treten bei langen Texten auf. Beim Zoomen werden diese kürzer oder länger, wie man es von Excel kennt. Man sieht also nicht, wie lang der Text später im portablen Dokumentformat aussieht. Im PDF können also 2 Buchstaben abgeschnitten, obwohl man in Word alles lesen konnte. Hat man in AutoCAD ein Text, der weit in den rechten Rand ragt, dann sollte man vor dem Start ein p eintippen und j vermeiden.
Diagonalen ohne Glättung
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 31
Diagonale schwarze Linien bestehen nur aus schwarzen Pixeln. Graue Pixel werden nicht dazwischen interpoliert. Im Adobereader kann die Darstellung von Geraden eingestellt werden. Sollten in Word doch mal graue Pixel auftreten, dann wurde die Grafik irgendwann mal in eine Bitmap umgewandelt.
Texte decken willkürlich abIst der Wert Textabdecken auf 0 oder nicht definiert, dann decken die Texte in Word nicht ab, aber in Excel decken sie ab (kopiere diese Grafik nach Excel). Bei Irfanview, Paint und anderen Betrachtern herrscht hier auch Uneinigkeit. Bei AutoCAD-WMF ist Textabdecken = 1 und Texte decken nicht ab. Textabdecken = 2 deckt Texte ab.
Dokument mit Links zuballernEinige PDF-Drucker verwandeln jeden Text in einen Link, der wie einer aussieht. In der dritten Zeile des WMF-Stempels kann auch ein Linktext eingetragen werden. Der Link ist oben rechts genauso weiß wie der normale Text, aber man kann ihn in der PDF anklicken. Wer meint, er müsse jede Grafik in seiner Statik mit seiner Firmenwebseite verlinken…
S im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieWM F zerleg er; w w w .W o T -WM F.d e
176 214 132 156
Alles in Ordnung
182
161
160
Die Grafik sieht schön aus und wiegt nur 1324 Byte.
ExtrawünscheEs können bis zu 2 Buchstaben vor dem Start des Makros eingetippt werden. Diese haben folgenden Effekt:r wendet keine CTB an. Nulldicke Füller werden einheitlich dick, aber ändern ihre Farbe nicht.i verwendet eine andere Stifttabelle.j komprimiert die WMF verlustbehaftet. Abdeckungen können fehlerhaft sein.p schneidet die Zeichnung nicht zu.d oder h, um die Strichstärken zu verdoppeln oder halbieren.
Bei Unzufriedenheit mit den Linienstärken kann die Grafik mit d oder h erneut eingefügt werden, um die Linienstärken um 2/3 zu verändern. P vergrößert den Ausschnitt um 10%.
Ist der Cursor rechts von dem Buchstaben, so wird der automatisch während der Ausführung des Makros gestartet. Soll das Makro mit 2 Buchstaben gestartet werden, so müssen diese vorher (mit der Maus) markiert sein.
Also: Man gibt dpein und markiert diese Buchstaben mit der Maus.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 32
(Oder mit der Tastatur markieren:Nach einem Text: Shift halten und 2x Pfeil nach links.Oder bei Zeilenanfang (dieses Beispiel): 2x Pfeil nach links. Shift halten und 2x Pfeil nach rechts. Shift halten und Pfeil nach links.)
Zusammenfassung Heißt die Grafik a.wmf und liegt im Ordner des Worddokumentes, dann wird sie automatisch
gefunden, sonst muss eine Datei ausgewählt werden. Objekte möglichst groß zoomen Anzeige für Linienstärken deaktivieren Der Hintergrund in AutoCAD muss Schwarz, 33-40-48 oder weiß sein CTB einmalig anpassen Maßkettenpunkte müssen rot sein und Achsenpunkte müssen nicht rot sein Truetype-Schriften verwenden Für Texte beachten:
Breitenfaktor ist 1Die DWG wurde bisher noch nie 3D betrachtetDer Text ist oben links nicht zu nah am RandDie Z-Koordinate des Textes ist exakt 0 (also nicht 1,737E-14)
weiße Problemobjekte umfärben WMF in Word nicht drehen
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 33
Wirkungsweise des MakrosDieses Kapitel enthält tiefe Informationen über PowerWMF und dessen Datenkompressions-algorithmus.Der Datenkompressionsalgorithmus setzt sich aus einer geometrischen und einer strukturellen Datenkompression zusammen. Die strukturelle Datenkompression umfasst Datei einlesen, sortieren und Datei neu zusammen bauen. Die geometrische Datenkompression besteht aus 2 Anteile: der eine bearbeitet Polygone selbst und der andere die Interaktion von 2 Polygonen.
strukturelle DatenkompressionDie strukturelle Datenkompression ordnet die Beschreibung der Geometrieobjekte neu an und besteht aus folgende Teilaufgaben
WMF auflösen WMF-Malobjekttabelle neu erstellen verlustbehaftete Datenkompression (optional) Texte sortieren Textabdecken ans Ende stellen WMF neu zusammensetzen
Die strukturelle Datenkompression ist sehr kraftvoll, denn sie reduziert den Speicherbedarf um 50 bis 80%. Die Entropie hingegen sind leider nur kaum. Hier greift die geometrische Datenkompression, die die verbleibende Dateigröße nochmal um 10% bis 50% senkt.
Beispiel: eine 40kB Grafik ist gezippt 10kB großOrginal geometrische Datenkompression
Orginal 40kB.wmf (10kB.zip) 35kB.wmf (8kB.zip)strukturelle Datenkompression 20kB.wmf (9kB.zip) 15kB.wmf (7kB.zip)
geometrische DatenkompressionDie geometrische Datenkompression besteht aus 2 Gruppen. Die eine Gruppe befasst sich mit der Interaktion zwischen 2 Polylinien und die andere Gruppe bearbeitet Polylinien selbst.
Die Interaktionsgruppe besteht aus: doppelte Linien löschen Schraffuren verbinden berührende Schraffuren verbinden überlappende Linien einen berührende Linien verbinden unsichtbare umrandete Farbpolygone und farbige Hohlpolygone verschmelzen
Die Polygongruppe besteht auso Rechtecke erkenneno Ellipsen erkenneno runde Rechtecke erkenneno Ellipsenbögen erkenneno gradlinige Punkte Löscheno dreieckige Vierecke
Die Polygongruppe wird von der Funxion Polyglätten erledigt.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 34
Vorbereitung: WMF-Datei erstellenDer Modellbereich muss schwarz eingestellt sein und nicht dunkelgrau oder hellgelb. Damit die WMF auch Text hat, müssen für den Text diese Bedingungen erfüllt sein:“Text mit Truetypeschriftart; Breitenfaktor ist 1; Die DWG wurde bisher noch nie 3D betrachtet; Der Text ist nicht zu nah am Rand; Die Z-Koordinate des Textes ist 0“. Ist die erste Bedingung nicht erfüllt, so sind in der WMF Linien, die den Text beschreiben. Ist eine der anderen Bedingungen nicht erfüllt, so enthält die WMF eckige Polygonbruchstücke, die die Datei sehr aufblähen. Außerdem ist es wichtig, dass die Linienstärken nicht angezeigt werden. Wird eine WMF erstellt, bei denen die Linienstärken im Modell angezeigt werden, enthält die WMF sehr schmale Polygone mit irgendwelcher Dicke, die nicht gewünscht ist.Markiere die zu exportierenden Objekte und exportiere sie als WMF.
Datei findenDas Makro findet die Datei im Ordner des Worddokumentes, wenn diese a.wmf heißt.Ansonsten öffnet sich der Explorer zum Datei suchen.Modifikationsmöglichkeiten:In Word entscheidet das linke Zeichen darüber, ob die WMF abweichend bearbeitet werden soll. Alternativ können auch 2 Zeichen markiert werden, um 2 Modifikationen zu erreichen. Es gibt folgende Modifikationen.
Nichts ist Standard und wandelt alle Hauptfarben in Schwarz um. r wendet keine CTB an. p schneidet die Zeichnung nicht zu. z schreibt die Berechnungszeit auf. i verwendet eine andere Stifttabelle j komprimiert die WMF verlustbehaftet d und h, um die Strichstärken zu verdoppeln oder halbieren v transmutiert unsichtbar umrandete Polygone in Pinsel
Ab PowerWMF2.3 können bei bereits umgewandelten WMF die Modifikationen d, h und p nachgeholt werden, anstatt dass man die WMF erneut mit AutoCAD erstellen muss. Modifikation d und h ändern die Strichstärke um 2/3. P vergrößert den Ausschnitt um 10%.
WMF auflösen und in Tabelle schreibenGemäß der Dateispezifikation wird der gesamte Inhalt der Datei in eine Tabelle eingelesen. Die Datei wird überflüssig und es wird nur noch an der Tabelle gearbeitet.Es gibt 2 Tabellen. Die eine ist für Texte und die andere für andere (geometrische) Objekte. Die Texttabelle besteht aus den Variablen Textrekord()$, Textfont()$ und Texteigenschaften(;10)%. Die anderen Objekte werden in Georekord()$ mit den Geoeigenschaften(;14)% aufgelistet.
In der Tabelle Geoeigenschaften wird folgendes aufgelistet:0. Typ1. Füllerstil2. Dicke3. Füllerrot4. Füllergrün5. Füllerblau6. Pinselstil
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 35
7. Pinselrot8. Pinselgrün9. Pinselblau
Hilfsvariablen für den Bedarf. Der Inhalt wandelt10. erster PunktX, kleinster PunktX, Füllernummer11. erster PunktY, kleinster PunktY, Pinselnummer12. letzter PunktX, größter PunktX13. letzter PunktY, größter PunktY14. hier war ein Text
In der Tabelle Texteigenschaften wird folgendes aufgelistet:0. Typ1. Rot2. Grün3. Blau4. Textausrichtung5. Textabdecken6. Abdeckrot7. Abdeckgrün8. Abdeckblau9. Zusätzlicher Abstand zwischen den Buchstaben
Hilfsvariablen für den Bedarf. Der Inhalt wandelt10. erster PunktX, kleinster PunktX, Füllernummer
PowerWMF legt Schwerpunkt auf geometrische Objekte. Bitmapobjekte werden nicht gesondert behandelt und nur als Beiwerk mitgeschleppt. Damit gehen möglicherweise Informationen über Bitmaps verloren.
Zuschnitt bestimmenPowerWMF wertet alle Objekte aus und sucht darin nach den größten und kleinsten Koordinaten
Liniendicke ermittelnMit den maximalen Koordinaten wird die Zeichnung zugeschnitten und der Zoom ermittelt (Modifikation p unterdrückt diese Option). Der Zoom richtet sich nach der häufigsten Schriftgröße in der Grafik und welche Schriftart am Cursor in Word ist. Hat die Grafik keinen Text, dann wird gemeckert und die WMFschriftgröße nach dieser Formel berechnet:WMFschriftgröße = 1 + FensterX * WordSchriftgröße / ((Log(Dateilenge) - 5) * 60)Darin geht die maximale X-Koordinate ein und die Dateigröße. Bei kleinen Dateien ist der Text verhältnismäßig zum Fenster sehr groß.Mit der Schriftgröße wird der Zoom berechnet. Dadurch ist der Text in der Grafik genauso groß wie in Word.Anhand des Zooms wird die relative Liniendicke „Verdicken“ berechnet.
Objekte nach obenlinks schiebenWurde die Zeichnung nicht nach oben links geschoben, dann war dort 5 Jahre lang eine breite weiße Fläche. PowerWMF3 hingegen macht das, was der Nutzer früher machte. Alle Objekte
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 36
werden nach oben links geschoben, sodass alle Objekte in der Nähe des Koordinatenursprungs sind. Es entsteht ein perfekter Zuschnitt rund um die Grafik.
Linienfarben umwandelnSchwarze 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 Byte. Die Füller im WMF haben sowohl eine Farbe, als auch eine Stärke.
Die Farben haben folgende relativen Strichstärken und Farben umgewandelt:Farbe geänderte Farbe Strichstärkeweiß weiß 2gelb schwarz 1magenta schwarz 1 +1·Irot schwarz 1 (3)cyan schwarz 2grün schwarz 1,5blau schwarz 3schwarz schwarz 2 +2·Idunkel (18;18;18) weiß 3sonstige sonstige 2
I=1 für Modifikation IModifikation R unterdrückt diese Option
Füllfarben umwandelnFarbige 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. Das Makro wandelt beim wiederholten Einfügen die Farben nicht erneut um, sondern erkennt an dem Schlüsselwort „SimonPie“, dass die Datei bereits umgewandelt wurde. Die Datei wird unverändert bzw. mit Modifikation d, h oder p eingefügt.
Pixel umwandelnJede Maßkette hinterlässt 3 Pixel in der WMF. Sind diese rot (gelb bei Modifikation I), so werden sie entfernt. Jede Strichpunktlinie hinterlässt auch Pixel. Diese werden in Kreislein verwandelt. Bei jedem Pixel, der in einen 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.
Müllhaufen wegkehrenJeder Text wurde von einem gigantischen 250 Byte schweren Müllhaufen zugeschüttet. 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, Texthintergrundoption = abdeckend, Texthintergrundoption = farblos, Textfarbe = schwarz, Textfarbe = Nutztext, Font definieren,
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 37
benutzen, wegwerfen… Dieser Müllberg wird in mehreren Teilschritten weggekehrt. Diese sind:
MText sprengen Füller und Pinsel aussortieren Font recyceln Textfarbe wiederverwerten Texthintergrundoption wiederverwerten nutzlose Objekte um den Text löschen
Während die Müllabfuhr in PowerWMF2.3 sehr aufwendig programmiert war, ist bei PowerWMF3.0 nur noch das MText sprengen übrig geblieben. Der Müll verschwindet durch die strukturelle Datenkompression von selbst.Mtexte werden in Texte umgewandelt, wenn diese nicht den Rand berühren. 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.
umschließendes RechteckUm Schraffuren zu verbinden, ist es gut, wenn in die Eigenschaften das umschließende Rechteck gespeichert ist. Auf dieses wird zugegriffen und überprüft, ob die beiden Polygone überhaupt interagieren können. Z.B. ein Dreieckchen unten und ein Viereck oben haben keine gemeinsamen Punkte. Das umschließende Rechteck spart Rechenzeit, da PowerWMF bei zerbrochenen Texten mehrere Minuten brauchen würde.
Schraffuren verbindenAutoCAD zerschießt alle Schraffuren zu Dreiecke. Diese wurden in PowerWMF2.3 nur 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 Polyglätten diese gegen ein Rechteck aus. Ein Rechteck benötigt nur 14 Byte und die Einsparung liegt bei 26 Byte. Die Entropie sinkt geringfügig. Der neue Algorithmus von PowerWMF3 macht bei Vierecke weiter. Im besten Fall kann eine zersplitterte Schraffur wieder zusammengeflickt werden und mit seiner Umrandung verschmelzen.
berührende Polygone zu überschlagene Polygone verbindenWährend bei Schraffuren verbinden beide Polygone 2 Punkte gemeinsam haben, haben berührende Polygone nur einen Punkt gemeinsam. Es werden die Nachbarpunkte mit einem Kreuz verbunden. Liegt das Kreuz auf dem gemeinsamen Punkt, dann wird dieser gelöscht und beide Polygone zu einem überschlagenen Polygon geeint. Z.B. wenn sich 2 Pfeilspitzendreiecke berühren wird daraus ein überschlagenes Viereck. Die Entropie sinkt spürbar.
Endpunkte speichernWie beim umschließenden Rechteck dient dies dazu, den Rechner zu beschleunigen. Würde
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 38
das Einfügen 3 Sekunden dauern, dann ist dies schon eine unerträgliche Geduldsprobe, die zu gefährlichen Panikklicks führt.
Linien mit der Farbe 80;102;101 in Pfeile verwandelnPolylinien mit der Farbe 77;97;223 in schriftlose Polymaßketten verwandelnunsichtbar umrandete Polygone in Pinsel transmutieren
Damit ich meine Pfeile und Maßketten des WMFzerlegers auch in PowerWMF nutzen kann, müssen diese eine ganz spezielle Farbe haben. Die Pfeile und Maßketten des WMFzerlegers sind extrem speichersparend und die Pfeilgröße passt zur Textgröße. Die Modifikation v ist recht kompliziert. Da werden unsichtbar umrandete Polygone in Pinsel verwandelt. Der Pinsel malt dann alle folgenden Polygone aus. AutoCAD hat den Nachteil, dass es Schraffuren in unsichtbar umrandte Dreiecke zersplittert. Ein Kreis, der rot gefüllt sein soll, wird in der WMF nie ankommen. Deshalb habe ich diese Option eingebaut, damit auch nativ gefüllte Polygone direkt von AutoCAD in Word (ohne den WMFzerleger) möglich sind. Um ein Polygon nativ zu füllen, zeichnet man in AutoCAD eine dreieckige Schraffur und dann die Objete, die damit gefüllt werden soll. In der Zeichenreihenfolge muss die Schraffur, die zum Pinsel wird, unter den Polygonen liegen. Texte stören dazwischen und können den Pinsel vernichten.
doppelte Linien entfernenEs werden alle doppelten Polylinien und Polygone gesucht und gelöscht. Für jede gelöschte Linie werden 16 Byte Luft abgelassen. Doppelte Linien werden nur gelöscht, wenn der Füller der unteren Linie nicht dicker ist. Da dieser Teil so furchtbar langsam ist, werden die Linien in 2 Gruppen eingeteilt: mitteldicke Linien und andere Linien. Weiterhin wird zwischen Linien mit 2 Punkte und mehr Punkte unterschieden. Die Endpunkte werden auch zur Beschleunigung genutzt. Die Variable Geduld ist auf 200 gesetzt, das heißt, dass die beiden Polylinien maximal 200 Objekte auseinander liegen. 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. Entropiereduxion ist daher besser als nur Luft ablassen.
überlappende Linien verbindenÜberlappende Polylinien, die mit dem gleichen Füller gezeichnet sind und 2 Punkte haben, werden durch eine ersetzt. Da der Algorithmus so langsam ist, wird erstmals 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.
Linien zu Polylinien verbindenIn einer WMF gibt es nur Polylinien. Eine Linie besteht aus 2 Punkten. 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.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 39
viereckige Dreiecke behebenAutoCAD erzeugt Polygone, bei denen der Anfangs und Endpunkt gleich sind. Das Problem liegt nicht nur an AutoCAD, sondern auch am Nutzer, der diese Polygone falsch gezeichnet hat. Zum Schließen des Polygons klickt man nicht auf den Endpunkt, sondern man muss ein Befehl zum Schließen verwenden! Ein Dreieck dadurch also 4 Ecken. Dieser Endpunkt ist überflüssig und wird gelöscht und 4 Byte eingespart. Wenn eine Polylinie gleiche Endpunkte hat, dann wird diese in ein durchsichtiges Polygon verwandelt und ein Endpunkt gelöscht.
unsichtbar umrandete Farbpolygone mit durchsichtige Polygone verschmelzenEin gefülltes Rechteck wird von AutoCAD schwer beschädigt. Das Rechteck zerfällt in ein durchsichtiges Polygon, das nur seine Umrandung hat, und in 2 Dreiecke, die nur die Füllung haben. Schraffuren verbinden macht aus den Dreiecken wieder ein Polygon. Sind die beiden Polygone identisch, dann werden sie wieder zu einem verschmolzen, das eine Füllung und eine Umrandung hat. Die Datei wird um ein Polygon kleiner.
Kreise wiederherstellenAutoCAD zerschießt Kreise (und Ellipsen) zu Polygone. Das Makro prüft seit seiner ersten Version alle Polygone, ob diese eigentlich Kreise sind und rekonstruiert diese. Der Speicherbedarf und die Entropie sinken stark. Dieser Vorgang ist verlustbehaftet, da auch alle tatsächlichen Achtecke zu Kreise werden.
Überflüssige Punkte auf Polylinien entfernenUnter bestimmten Bedingungen kommt es vor, dass die Punkte einer Polylinie auf einer Geraden liegen. Für die Darstellung einer Geraden sind nur ein Anfangspunkt und ein Endpunkt erforderlich. Alle Punkte dazwischen können gelöscht werden. Ist verlustbehaftete Modifikation aktiviert, dann ist für das Löschen ein doppelter Abstand erlaubt. Das Punkte löschen ist für schräge Polylinien grundsätzlich eine verlustbehaftete Sache. Durch die Vernichtung von Daten werden Dateigröße und vor allen die Entropie gesenkt.
Polyglätten für andere ObjekteAb der Version 2.2 wird unter der Funxion Polyglätten das Punkte Löschen mit dem Kreise Wiederherstellen gesammelt. Damit ist das Umwandeln von Polylinien in andere Objekte vom Hauptprogramm ausgelagert. Polyglätten erkennt neben Ellipsen auch abgerundete Rechtecke, Bögen und Chords. Polyglätten wird in einem eigenen Kapitel genauer beschrieben. Polyglätten komprimiert die Datei sehr kraftvoll und senkt die Entropie stark.
Textabdecken mitnehmenLagen in der Datei Text und ein weißes Abdecken nebeneinander, dann werden die Abdeckungen gesammelt und ans Ende vor den Texten gestellt. Da die weißen Abdeckungen demselben Füller haben, wird dieser nur einmal gewählt und damit viel Luft abgelassen.
Preader aktualisieren und Setwindow setzenHier wird der Zoom und das Zuschneiden durchgeführt. Außerdem wird die Signatur eingefügt und meine 3 großen Werke: PowerWMFeinfügen3.0; Plattenbeulen; Kampfkrafttheorie
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 40
gewürdigt. Das Programm darf unter der General public Lizenz frei benutzt, kopiert, verändert oder erweitert werden.
In der AutoCAD-WMF erscheint deshalb oben links dieser winzig weiße Text in 3 Zeilen:SimonPie - PowerWMFeinfügen3.0Plattenbeulen; Kampfkrafttheorietrage zwischen die Anführungsstriche deinen Namen einDie dritte Zeile ist dem Schöpfer der Grafik gewidmet und der Text darf in dem Quellcode geändert werden - die anderen beiden Zeilen bitte nicht ändern. Die Texte dürfen gelöscht oder verändert werden, wenn die WMF mit einem anderen Programm nachbearbeitet wird oder für einen höheren Zweck wie z.B. Firmenlogos verwendet wird.
WMF-Malobjekttabelle neu erstellenAutoCAD nimmt einen Füller, malt damit und wirft ihn weg. Das gleiche passiert mit Pinseln und Fonts. In der WMF können diese auch beiseitegelegt werden. Deshalb werden alle Füller, Pinsel und Fonts in der Datei eingesammelt und am Anfang der Datei in einer Federtasche, Tuschkasten und Fontmappe geordnet. Jeder Füller benötigt 16 Byte, jeder Pinsel 14 Byte und jeder Font 56 Byte. Löschen benötigt auch nochmal 8 Byte. Durch das Ordnen wird gewaltig Luft abgelassen.
verlustbehaftete DatenkompressionIst die Modifikation j gewählt, werden alle Objekte nach ihren Füllern sortiert. Somit wird jeder Füller nur einmal in der Hand genommen. Es fallen sehr viele Objektwahlen weg. Jede Objektwahl benötigt 8 Byte. Es wird spürbar viel Luft abgelassen, jedoch auf Kosten der Zeichenreihenfolge. Das was hinten war, kann jetzt vorne sein. Verlustbehaftete Datenkompression ist verlustfrei, wenn alle Objekte schwarz sind und erreicht eine Extrakompression von 10%.Verlustbehaftete Datenkompression erkennt außerdem mehr Ellipsen und löscht mehr Punkte auf einer Geraden.
Texte sortierenDie Texte werden nach ihrem Font sortiert, sodass jeder Font nur einmal angewählt werden muss. Der Algorithmus entspricht der verlustbehafteten Datenkompression, aber da Texte sich nicht gegenseitig verdecken, entsteht keine äußerliche Änderung. Dies spart Dateigröße und ein bisschen Entropie.
Texte ans Ende stellenZwischendurch 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 manuell 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.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 41
Datei neu aufbauenDie WMF wird neu zusammengebaut und der Header korrekt berechnet. Die Datei wird überschrieben und in Word eingefügt.
Versionsunterschiede WoT-WMF: verwandelt Farben in Strichstärken und erkennt Kreise, verbindet Schraffuren,
löscht doppelte Linien und bearbeitet Pixel. Ein primitiver Suchen und Ersetzen Algorithmus. PowerWMF2.0: strukturelle Datenkompression PowerWMF2.1: Grafik an Polylinien zuschneiden; Modifikationsmöglichkeiten; bessere
Liniendicken PowerWMF2.2: Polylinien glätten und Rechtecke erkennen; verlustbehaftete Kompression PowerWMF2.3: Polyglätten mit Ellipsenbögenerkennung; Zuschneiden an Mtexten;
Liniendicke an Schriftgröße festlegen; pdh nachholen PowerWMF3.0 unterscheidet grundlegend zu PowerWMF2.
Während WoT-WMF ein primitiver Suchen und Ersetzenalgorithmus ist, versteht PowerWMF3 den Dateiinhalt. PowerWMF2 ist so ein Zwischending. Durch die vielen Features ist PowerWMF2 an die Grenzen des Machbaren gelangt. Der Code wurde zu einem evolutionär gewaxenen Chaos. Je mehr drin war, desto komplizierter wurde es. Hässlichkeiten traten auf z.B. dass sich in der Variable Pinsel ein Linienstück befindet. Oder an Stelle 0x01fc wurde die Palette erwartet. Da ich viele WMF-Dateien auch per Hand geschrieben habe, konnte ich das Programm WMF-Balken schreiben. Im Gegensatz zum WMF-Balken und WMFzerleger sah der Code von PowerWMF2 total mittelalter aus. Deshalb habe ich PowerWMF3 ohne Polyglätten noch mal völlig neu programmiert. Der Code hat eine klare Struktur, über die ich vor dem Programmieren viel grübelte, was wirklich wichtig ist. Es wird wie im WMFzerleger konsequent an einer Tabelle gearbeitet. In der Tabelle sind die wichtigsten Eigenschaften der Objekte sofort verfügbar. Dadurch wurde möglich, was mit Suchen und Ersetzen einfach nicht ging:
Zuschneiden an allen Objekten keine ungenutzten Füller, Pinsel und Texte in der Datei der Farbbug für unterschiedliche Textgrößen und Farben Grafik rundum zuschneiden besser Schraffuren verbinden unsichtbar und durchsichtig einen Linien in Pfeile und Maßketten verwandeln effizientes Codeschreiben durch mehr Ordnung effizientes Testen, da Objekte nach Belieben umgefärbt werden können effizientes Erweitern für ein zukünftigen Programmfortschritt geringere Abhängigkeit von AutoCAD => höhere Stabilität bei anderen WMFerzeugern
Furchtbar entwürdigend ist, dass ich PowerWMF3 in nur 35 Stunden geschrieben habe. Von einem so großartigen Programm erwartet man einfach mehr als ein Monat Arbeit. Ich vermute, dass die immens hohe Programmiergeschwindigkeit aus meinen großen WMFerfahrung stammt. Zum Anfang waren viel Lesen, Studieren, Probieren und Keineahnungfehler sehr hinderlich.
Einige fragen sich jetzt:Braucht PowerWMF eigentlich AutoCAD?
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 42
Theoretisch kann die WMF-Datei auch mit jedem anderen Programm gezeugt werden und mit PowerWMF in Word eingefügt werden. PowerWMF habe ich allerdings für WMF aus AutoCAD entworfen. Es gibt WMF-Inhalte, die AutoCAD nie benutzt, und PowerWMF behandelt diese standardmäßig. Für WMF aus anderen Programmen habe ich PowerWMF kaum getestet. Bei Inkscape und Flash lief PowerWMF problemlos. Inkscape verschluckte eine Form und bei Flash mussten die Texte horizontal sein. Excel und Corel crashten. Bei Excel wirbelt PowerWMF die Bitmap-Befehle durcheinander. Bei Corel ist der Ursprung nicht bei [0;0].Von daher: keine Garantie, dass PowerWMF bei anderen Programmen funxioniert.
Beispiel der KompressionsleistungBeispielhaft wird an einer Datei gezeigt, welche Kompressionsleistung welcher Programmteil bringt. Da dies während der Entwicklung von PowerWMFeinfügen2 aufgezeichnet wurde, ist die Reihenfolge ungeordnet.
Schritt
Datei-größe
En-tropie
Dichte Verhältnis Differenzen
Orginal3759
0 10121 0,269 1 1Dateigröße Entropie Dichte
WMF Zerlegen2005
6 9392 0,468 0,534 0,928 17534 729 0,042
Schraffuren verbinden1922
4 9229 0,48 0,511 0,912 832 163 0,196
CTB anwenden1902
0 9172 0,482 0,506 0,906 204 57 0,279
Pixel bearbeiten1794
0 8939 0,498 0,477 0,883 1080 233 0,216
weißeTextvierecke1757
2 8895 0,506 0,467 0,879 368 44 0,12
Mtexte sprengen1696
4 8666 0,511 0,451 0,856 608 229 0,377
doppelte Linien löschen1622
4 8556 0,527 0,432 0,845 740 110 0,149
Linien verbinden1598
0 8534 0,534 0,425 0,843 244 22 0,09
überlappende Linien1585
2 8484 0,535 0,422 0,838 128 50 0,391
viereckige Dreiecke1568
8 8414 0,536 0,417 0,831 164 70 0,427
Rechtecke erkennen1530
0 8206 0,536 0,407 0,811 388 208 0,536
Ellipsen erkennen1478
6 7711 0,522 0,393 0,762 514 495 0,963
runde Rechtecke erkennen1468
8 7620 0,519 0,391 0,753 98 91 0,929
Kreisbögen erkennen1452
0 7455 0,513 0,386 0,737 168 165 0,982
Ellipsenbögen erkennen1431
2 7255 0,507 0,381 0,717 208*) 200 0,962
lineare Punkte löschen1424
0 7187 0,505 0,379 0,71 72 68 0,944unsichtbare Polygone 1396 7132 0,511 0,371 0,705 280 55 0,196
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 43
0
berührende Schraffuren1375
2 7048 0,513 0,366 0,696 208 84 0,404
Texte sortieren1365
6 7025 0,514 0,363 0,694 96 23 0,24
verlustbehaftet sortieren1277
6 6931 0,543 0,34 0,685 880 94 0,10724814 3190 0,129
*) Die Testdatei enthielt keine Ellipsenbögen und runde Rechtecke. Daher habe ich so viele Bögen hinzugefügt, wie ich für den Durchschnitt erwarten würde. In meinem Beruf gab es wirklich sehr wenig Bögen, aber bei der Überarbeitung zweier Skripte kamen 180 Bögen vor, von denen 81 Bögen in einer Datei geeint waren. Wie stark welcher Teil komprimiert hängt vom Kontext ab, der darüber entscheidet, welche Inhalte in den Dateien besonders oft vorkommen. Z.B. die Dokumentation der Funxion Polyglätten hat weiiit überdurchschnittlich viele Bögen, runde Rechtecke und Ellipsen in den Grafiken, sodass hier Polyglätten den größten Teil der Kompression ausmacht.
FormelnDichte = Verhältnis = ;
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 44
In dieser Tabelle wird an einem anderen Beispiel gezeigt, wie groß die Datei im Vergleich zu anderen Dateiformaten ist.
Vergleich der AutoCADinhalte in Word2007 eingefügtDateiformat Aussehen Dateigrößeals JPG furchtbar hässlich: JPG-Artefakte an scharfen Kanten.
Verschwommen und Pixelhaft. JPG wurde für Fotos entworfen und nicht für wenig farbige Bilder.
riesig (200 000kB)
als BMP(z.B. Screenshot)
grob Pixelhaftmehr Pixel bedeuten mehr DateigrößeRänder sollten nicht in Word zugeschnitten werden.
mittel (40 000kB)wird in Word als PNG gespeichert.
als PNG Pixelhaft - beim Ranzoomen sieht man nur noch Pixel mittel (30 000kB)als PNG44-Bit Farbtiefe
Pixelhaft16 Farben (erzeugen erfordert Fachwissen)
klein (15 000kB)
als Monochrom PNG
Pixelhaftschwarzweiß (erzeugen erfordert Fachwissen)
klein (10 000kB)
als Tiff mit CCITT Komprimierung
Pixelhaftschwarzweiß (erzeugen erfordert Fachwissen)
klein (8000kB)klein (7000kB) gezippt
als AutoCAD WMFexport
hässlich: Farben, wo keine sein sollen. keine Strichstärken - hässlicher Druck aus PDF. Eckige Ellipsen, Strichpunktlinien ohne Punkte. Lästige Punkte vom Maßketten.schön: Linien sind Pixelfrei, Text ist wirklich Text
mittel (20 000kB)winzig (5000kB) gezippt in WordDatei ist randvoll mit Müll
als AutoCAD WMFexport+Strichstärken
hässlich: Die Strichstärken sind lauter schmale Dreiecke und haben nicht die Dicke, die sie laut CTB haben sollen
groß (80 000kB)mittel (30 000kB) gezipptDatei ist randvoll mit Dreiecken
als AutoCAD WMFexport mit Makro
schön: Linien sind Pixelfrei, Text ist wirklich Text, Kreise sind rund, Rechtecke sind rechteckig, Linien sind schwarz und haben eine Dicke, Man sieht beim Zoomen keine Pixel
klein (7000kB)winzig (4000kB) gezippt
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 45
Mathematische Hintergründe der Funxion PolyglättenPolyglätten macht einen großen Teil der geometrischen Datenkompression aus. In Polyglätten wird eine Polylinie (Typ 805) oder ein Polygon (Typ 804) eingegeben und es kommt vielleicht ein anderer Typ bei raus. Dabei wird das Objekt zuerst überprüft, ob es einer Ellipse ähnelt. Dann wird auf ein rundes Rechteck überprüft, dann auf einem Kreisbogen und zum Schluss auf einem elliptischen Bogen. Wenn das Objekt keinem dieser geometrischen Objekte ähnelt, dann werden auf dem Objekt Punkte gelöscht.
Si m onPi e - Powe r W M Fei nf ügen2. 2Pl at t e nbeu l e n; Kam pf kr a f t t heor i eBi l d 1Polylinie
805
Bogen
2071
Polygon
804
Chord
2096
Polygon
804
Ellipse
1048
Polygon
804
rundes Rechteck
1564
Polylinie
805
Polylinie mit weniger Punkte
Polylinie
805
unveränderte Polylinie
Polylinie
805
805
Eine Polylinie mit sehr vielen Punkten benötigt hohen Speicherbedarf mit sehr großer Entropie. Wird diese durch ein rundes Objekt ersetzt, dann werden Speicherbedarf und Entropie drastisch reduziert. Diese Tabelle zeigt, wie viel wo eingespart wird.Polylinie Wiederhergestelltes ObjektPolygon mit gleichen Endpunkten ein Punkt kommt weg (-4Byte)Viereck (24 Byte) Rechteck (14 Byte)Achteck (40Byte) (In AutoCAD weit raus zoomen und Ansicht regenerieren)
Ellipse (14Byte)
Zwölfeck (56Byte) Ellipse (14Byte)Vor dem Exportieren regeneriert (viel 136Byte) Ellipse (14Byte)unregeneriertes Zwölfeck (56 Byte) rundes Rechteck (18Byte)eckiger Kreisbogen (40Byte) elliptischer Bogen (22Byte)eckiger Kreisbogen (36Byte) eckiger Kreisbogen (36Byte) (Objekt muss
mindestens 8 Punkte haben)Sechseck (32Byte) Sechseck (32Byte)regenerierter Kreisbogen (viel) elliptischer Bogen (22Byte)elliptischer Bogen als Polylinie (sehr viel) Die Anzahl der Punkte ist weitestgehend vom Regenerieren unabhängig
elliptischer Bogen (22Byte)
elliptisches Polygon (sehr viel) Ellipse (14Byte)Man steht also nicht mehr vor dem Dilemma, ob man vor dem Exportieren noch regenerieren soll. Regenerieren bedeutet mehr Genauigkeit mit mehr Speicherbedarf. Polyglätten sorgt für maximale Genauigkeit mit minimalem Speicherbedarf.
Die Punkte minX, maxX, minY und maxY definieren die minimalen und maximalen Koordinaten der Polylinie.Den Extremwerten ist die zugehörige Gegenkoordinate des Punktes zugeordnet (minXzu, maxXzu, minYzu und maxYzu). MinXzu ist also die Y-Koordinate des Punktes des kleinsten X-Wertes.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 46
S im o n P ie - P o w erWM F ein fü g en 2 .2P latten b eu len ; K am p fk raftth eo rieB ild 2
min
X
max
X
(minYzu;minY)
(maxX;maxXzu)
(maxYzu;maxY)
(minX;minXzu)
X
Y
minY
maxY
Weiterhin werden die Punkte Pa(Pax;Pay) und Pe(Pex;Pey) definiert. Pa und Pe sind benachbarte Punkte. Z.B. der dritte und der vierte Punkt. Oder der erste und der letzte Punkt. Es sind also so viele Paare denkbar, wie die Polylinie Punkte hat. Das Paar mit dem größten Abstand heißt Pa und Pe. Meistens ist Pa der Anfangspunkt und Pe der Endpunkt.Der erste Punkte hat die Koordinaten (X(1);Y(1)) und der letzte (X(Punkte);Y(Punkte)).
Si m onPi e - Power WMFei nf ügen2. 3Pl at t enbeul en; Kam pf kr af t t heor i eBi l d 3
max max
PA=P1
PE=PPunkte P1=(X(1);Y(1))
PPunkte=(X(Punkte);Y(Punkte))
PA=(Pax;Pay)
PE=(Pex;Pey)maxY
minY
minX maxX
Um runde Objekte zu erkennen muss die Polylinie mehr als 7 Punkte haben. Ist dies der Fall, dann werden 2 If-Bedingungen nacheinander durchgelaufen. Die erste Bedingung beinhaltet die Ellipsen und runden Rechtecke. Für runde Rechtecke und Ellipsen muss dieses erstmals erfüllt sein:
maxX ≠ minX: Ellipsen müssen eine Länge haben. maxY ≠ minY: Ellipsen müssen eine Breite haben. Kein Punkt der Ellipse ist in der Ecke
des umschließenden Rechtecks Typ = 804: Polylinien kommen für Ellipsen
und runde Rechtecke nicht in FrageS im o n P ie - P o w erW M F ein fü g en 2 .3P latten b eu len ; K am p fk raftth eo rie
minY
maxY
minX maxX
(maxX;maxXzu)(minYzu;minY)
(minX;minXzu)(maxYzu;maxY)
Ecke
S im o n P ie - P o w erWM F ein fü g en 2 .3P latten b eu len ; K am p fk raftth eo rie
805
805
804
804
805
805
1564
1048
PAPE
PAPE
PAPE
PAPE
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 47
Um Ellipsen von Sterne zu unterscheiden muss der maximale Abstand der Punkte untereinander kleiner sein als das 0,35 Fache der Diagonale des umschließenden Rechtecks. Die 0,35 ist erfahrungsgemäß so gewählt. Wählt man z.B. 0,25, dann werden einige Ellipsen nicht erkannt. Bei 0,45 werden Objekte als Ellipsen erkannt, die möglicherweise gar keine Ellipsen sein sollen.
Si m onPi e - Powe r W M Fei nf ügen2. 3Pl at t e nbeul e n; Kam pf kr a f t t heor i e
minY
maxY
minX maxX
PEPA
PAPE
Ellipse Ellipsekeine
max Abstand
max Abstand
Abstand12
Abstand12
Ob es sich bei dem Objekt um eine Ellipse handelt, wird durch die Ellipsenprüfung festgelegt. Bei der Ellipsenprüfung wird für jeden Punkt geprüft, ob der auf der Ellipse liegt, die durch das umschließende Rechteck definiert ist.Ist elliptisch = 0, dann liegt der Punkte genau auf der Ellipse. Elliptisch=1 bedeutet, dass der Punkt ein Ellipsenradius zu weit entfernt liegt. Da in der WMF Zahlen durch ganze Zahlen beschrieben werden, ist es nahezu unmöglich (3²+4²=5² oder 5²+12²=13²), dass alle Punkte exakt auf der Ellipse liegen. Deshalb muss ein Objekt bereits als Ellipse gelten, wenn die Punkte durchschnittlich bis zu 0,05 Ellipsenradien entfernt sind.
elliptisch = elliptisch=0 elliptisch=0,0198 elliptisch=0,0509 elliptisch=0,0572
elliptisch=0,0544 elliptisch=0,1386 elliptisch=0,2156 elliptisch=0,3998
elliptisch²=0 elliptisch²=0,0242 elliptisch²=0,0551 elliptisch²=0,0683
elliptisch²=0,0649 elliptisch²=0,157 elliptisch²=0,2493 elliptisch²=0,4674
X und Y sind die Koordinaten des Einheitskreises. Jeder Punkt des Polygons wird auf eine Einheitskreiskoordinate transformiert.Leider werden mit diesem Kriterium alle Abstände gleich stark gewichtet. Eine Sprechblase ist eine Ellipse, bei der ein Punkt aus der Reihe tanzt. Hat die Sprechblase genügend Punkte, so wird der Fehler kompensiert und die Sprechblase wird fälschlicherweise als Ellipse erkannt. Deshalb werden in der Ellipsenprüfung Ausreißer mit riesigem Abstand quadratisch gewichtet, sodass Objekte mit Ausreißern als solche erhalten bleiben.
elliptisch =
Ist die Ellipsenprüfung bestanden, dann gibt Polyglätten eine Ellipse zurück und endet, ansonsten wird weiter auf runde Rechtecke geprüft.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 48
Es werden diese Maße des runden Rechteckes ermitteltSi m onPi e - Power WMFei nf ügen2. 3Pl at t enbeul en; Kam pf kr af t t heor i e
(x1minY;minY)(minX;Y1minX)
(maxX;Y1maxX)
(minX;Y2minX) (maxX;Y2maxX)
(x2minY;minY)
(x1maxY;maxY) (x2maxY;maxY)X1 X2dx12
dx dx
inneres Rechteck
Y2
Y1
dy12
dydy
Bei dem runden Rechteck werden die geraden Strecken rausgeschnitten. Ein Teil der Punkte des Polygons wird um die Kantenlängen dx12 und dy12 reduziert. Übrig bleiben nur noch die Ausrundungsradien des Rechteckes. Formen diese Radien eine Ellipse, dann ist das Objekt ein rundes Rechteck.
S imo n P ie - P o werWMF ein fü g en 2 .3P latten b eu len ; Kamp fk raftth eo rie
dx dx12 dx
dx dx
dydy
dydy
12dy
Ist die Ellipsenprüfung bestanden, dann gibt Polyglätten ein rundes Rechteck zurück und endet, ansonsten wird weiter auf Kreisbögen geprüft.
Für Kreisbögen und Ellipsenbögen müssen andere Bedingungen erfüllt sein maxX ≠ minX: Ellipsen müssen eine Länge haben. maxY ≠ minY: Ellipsen müssen eine Breite haben. Bei einem Bogen müssen Anfangs- und Endpunkt den größten Abstand unter den Punkten
haben, sonst ist die Polylinie kein Bogen. Ist dies bei einem Chord nicht der Fall, dann sind Pax, Pex, Pay, Pey nicht der erste und der
letzte Punkt des PolygonsKreisbögen sind zwar elliptische Bögen, aber es gibt dennoch 2 Algorithmen. Der Algorithmus für Kreisbögen erkennt Kreisbögen anhand von 3 Punkte. Der Algorithmus für Ellipsenbögen braucht für die Erkennung mindestens einen extremalen X-Wert und einen extremalen Y-Wert. Flache elliptische Bögen werden also nicht erkannt. Da flache elliptische Bögen meist sehr gut durch einen Kreisbogen angenähert werden können, greift hier der Kreisbogenalgorithmus.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 49
Si monPi e - PowerWMFei nfügen2. 3Pl at tenbeulen; Kampfkraft theori e
erkennungKreisbogen-
Bogenelliptischer
erkennungEllipsen-
erkennungKreisbogen-
bogenKreis-
erkennungEllipsen-
AlgorithmenKombi beider
keinChord
nurBögen
Allerdings muss das Objekt immer noch mehr als 7 Punkte haben. Hat man eine sehr wichtige Grafik mit sehr vielen flachen Bögen, dann empfiehlt es sich die Anzahl vorübergehend herunter zu setzen. Allerdings werden dann auch Rechtecke als Ellipsen erkannt, da jeder Punkt des Rechteckes auf einer Ellipse liegt.
Um Bögen von Sterne zu unterscheiden muss der zweit maximale Abstand der Punkte untereinander kleiner sein als das 0,35 Fache der Diagonale des umschließenden Rechtecks. Der maximale Abstand der Punkte untereinander ist bei Bögen bereits zur Bestimmung von Pa und Pe vorgesehen.
S imo n P ie - P o w erWMF ein fü g en 2 .3P latten b eu len ; K amp fk raftth eo rie
max Abstand12
Abstand12
max Abstand
min
X
max
X
minY
maxYPA
PE
Um einen Kreisbogen durch 3 Punkte zu bestimmen, wird irgendein Punkt Pp der Polylinie benötigt. Sind Pa und Pe der Anfang und das Ende der Polylinie, dann wird Pp etwa in der Mitte der Polylinie raus gegriffen.
Das Bestimmen der Kreisgleichung durch 3 Punkte hat mehrere Probleme: Die 3 Punkte liegen auf einer Geraden Der Radius ist zu riesig. Es wird ein gigantischer Kreisbogen „erkannt“, weil alle Punkte der
Polylinie sehr dicht an dem Riesenradius liegen (elliptisch < 0,05). Das umschließende Rechteck des Kreises, auf dem der Kreisbogen liegt, liegt außerhalb des
Integers. Division durch 0
Gegen Riesenradien hilft den Abstand des Punktes Pp zur Geraden Pa-Pe zu prüfen.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 50
Si monPi e - Power WMFei nf ügen2. 3Pl at t enbeul en; Kampfkr aft t heori e
PA
PE
PP
PA
PE
PPbestanden
prüfenRiesenradiusA
bstand
Poly
gon
Ellip
sen-
prüf
ung
Ist der Abstand zu klein, dann ist der Radius zu groß. Flache Bögen haben von Natur aus einen großen Radius. Wann ist ein Radius groß und wann riesig? Die Frage wird so beantwortet. Jedes Objekt hat eine Strichstärke. Wird das Objekt von seiner Liniendicke verdeckt, dann ist der Radius riesig. Die Liniendicke ist proportional zum Wert Kompression, der der Funxion übergeben wurde.
Anschließend kommt die Formel zur Berechnung des Kreismittelpunktes zum Einsatz.Pmy = Pmx = Radius =
Falls Pa und Pe die gleiche X-Koordinate haben, kommt es zu einer 0 im Nenner. Da es 3 Formeln gibt, wie der Mittelpunkt eines Kreises berechnet wird, wird in diesem Fall einfach eine andere Formel genommen.
Nachdem Radius und Mittelpunkt berechnet wurden, wird überprüft, ob alle Punkte auf einem Kreisbogen liegen
Es ist entscheidend, in welcher Reihenfolge die Punkte Pa und Pe eingesetzt werden. Vertauscht man diese, dann wird die andere Seite des Bogens gezeichnet. Die korrekte Seite wird ermittelt, indem der Drehsinn der Polylinie bestimmt wird. Für den Drehsinn werden die ersten beiden Punkte P1 und P2 der Polylinie auf den Einheitskreis transponiert und die Funxion PositiverWinkel gibt den Drehsinn zurück. Da Winkelfunxionen so unzuverlässig viele Wennabfragen benötigen, werden auf diese verzichtet, und stattdessen nur die Wennabfragen benutzt. Die Quadranten sind im rechten Bild definiert.
Ein Winkel dreht positiv, wenn er in mathematisch positiver Richtung dreht. Ist die Drehrichtung anders herum, dann werden die Punkte Pa und Pe vertauscht eingesetzt. Polylinien aus AutoCAD drehen zwar immer in eine Richtung, aber darauf sollte man sich nicht verlassen.
S im o n P ie - P o w erW M F ein fü g en 2 .3P latten b eu len ; K am p fk raftth eo rie
posit
iver
Win
kel
S im o n P ie - P o w erWM F ein fü g en 2 .3P latten b eu len ; K am p fk raftth eo rie
-1; 1
8 ; 0
positiver
23
4
5
67
Drehsinn P1
P2
Y
X
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 51
Ist die Ellipsenprüfung bestanden, dann gibt Polyglätten ein Bogen oder Chord zurück und endet, ansonsten wird weiter auf Ellipsenbögen geprüft. Ist das Objekt eine Polylinie, dann wird ein Bogen zurückgegeben. Bei einem Polygon wird ein Chord zurückgegeben.
Bei der Erkennung eines Ellipsenbogens müssen 2 von 4 Extremwerte (minX, maxX, minY und maxY) bekannt sein. Bekanntsein wird in die Variablen X1, X2, Y1 und Y2 zwischengespeichert. X1 bedeutet, dass minX bekannt ist.
X bekannt= minX oder maxX bekanntY bekannt =minY oder maxY bekannterfolgreiche Ellipsenerkenung = X bekannt und Y bekannt= (minX oder maxX) und (minY oder maxY)
Si monPi e - PowerWMFei nf ügen2. 3Pl at t enbeul en; Kampfkraft t heori e
Ellipsenbogen minX maxX minY maxY
?
?
?
?
?
?
?
?
? ?
? ?
?
?
?
X Y X Y Erkennung
?? ?
? ?
?
? ? ?
?
?
?
?
?
?
?
Haben die Punkte Pa und Pe einen Extremwert, so gilt dieser Extremwert als unbekannt.z.B: Pey= minY. Es können also bis zu 4 Extremwerte unbekannt werden. Sind von einer Koordinate beide Extremwerte unbekannt, so derjenige als wieder bekannt gesetzt, der den größeren Radius bringt.
Si monPi e - PowerWMFei nf ügen2. 3Pl at t enbeul en; Kampfkraft t heori et r age zwi schen di e Anführ ungsst ri che dei nen Namen ei n
Rad
iusY
kein Rad
iusY
Rad
ius ke
inR
adiu
s
PM=(Pmx;Pmy)
PM=(Pmx;Pmy)
(minX;minXzu)(maxYzu;maxY)
(minX;minXzu)(minYzu;minY)(minYzu;minY)
(maxX;maxXzu)
(maxYzu;maxY)
(maxX;maxXzu)
minXzu > maxXzu Y1=1;Y2=0 minXzu < maxXzu Y1=0;Y2=1
richtigerPunkt
falscherPunkt
falscherPunkt
richtigerPunkt
Anhand der Extremwerte wird der Ellipsenmittelpunkt (Pmx; Pmy) ermittelt. Sind entweder beide Extremwerte bekannt oder beide Extremwerte nicht bekannt, werden die zugehörigen Koordinaten gemittelt. Ist nur einer bekannt, dann wird die zugehörige Koordinate dem Radius zugewiesen. Der Radius wird auf die gleiche Weise ermitteltBeispiel: minX und maxX sind bekannt.
Pmy= (minXzu+maxXzu)/2
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 52
RadiusX= (maxX-minX)/2Beispiel: minY ist unbekannt
Pmx= minYzuRadiusY= Wenn minX bekannt, dann maxY- minXzu, sonst maxY-maxXzu
Damit ist der elliptische Bogen beschrieben werden. Bei 3 oder mehr unbekannten Extremwerten wird trotzdem weiter gemacht, in der Hoffnung, dass die Ellipsenprüfung bestanden wird. Bei Halb- und Viertelbögen klappt die Prüfung.
Ist die Ellipsenprüfung bestanden, dann gibt Polyglätten ein Bogen oder Chord zurück und endet, ansonsten wird weiter nach überflüssigen Punkten geprüft. Ist das Objekt eine Polylinie, dann wird ein Bogen zurückgegeben. Bei einem Polygon wird ein Chord zurückgegeben.
Beim Punktelöschen werden immer 3 Punkte untersucht.Wenn der Zwischenpunkt einen zu geringen Abstand von der Geraden hat, dann wird er gelöscht. Es gibt für das Löschen 3 Ausnahmen. Der Zwischenpunkt wird nicht gelöscht,
wenn er eine x- oder y-Koordinaten mit dem Anfangs- xoder Endpunkt gemeinsam hat, um rechtwinkliges Aussehen zu wahren.
wenn er sich außerhalb der beiden Endpunkte befindet, obwohl sein lotrechter Abstand klein ist.
wenn sein vorheriger Punkt gelöscht wurde. Erst im nächsten Durchlauf kann dieser Punkt wieder gelöscht werden, allerdings ist sein Abstand größer geworden. Diese Maßnahme verhindert, dass Rundungen mit seeehr vielen Punkten begradigt werden.
Si m onPi e - Power WMFei nf ügen2. 3Pl at t enbeul en; Kam pf kr af t t heor i e
P1P2
P3Abstand
nichtLöschen
nichtLöschen
gelöschtjetzt nicht Löschen
Polyglätten gibt ein Objekt zurück, das eventuell weniger Punkte hat als vorher. Hat das Objekt nur noch 2 Punkte, dann ist es eine Polylinie.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 53
Inhalt einer WMF-DateiIm Kapitel „Beispiel für Dokumentation“ wurde das äußere Erscheinungsbild mit Grafiken gezeigt und es wurden hässliche Dokumente mit schönen Dokumenten verglichen. In diesen 4 Abschnitten wird hingegen das innere einer WMF-Datei gezeigt. Denn die PowerWMF erzeugen Dateien sind nicht nur äußerlich schön, sondern auch innerlich gesund.Hier wird der Hexdump oder der bildliche Inhalt vor und nach der Anwendung des Makros gezeigt.
Hexdump einer AutoCAD-WMFd7cdc69a000000000000840c7605c00000000000235e010009000003082f00000a000502000000000400000003010800050000000b0200000000050000000c027605840c05020000f7000003000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000003402000003000000350004000000340200000300000035000500000004010d0000000500000002010100000008000000fa0200000000000080808000040000002d010100070000001f0480808000a20102010c00000025030400df0387019f0187019f01a2010201a20110000000250306000201a20102015401fc005401d5005b01d5001001df0310011600000025030900f5031001eb061001eb065b01c4065401bd065401bd06a2012106a20121068701f503870108000000fa0200000000000080808000040000002d01020004000000f0010100080000002503020023011a0123018c0108000000250302009d061a019d068c01080000002503020023011a01df031a010800000025030200f5031a019d061a01080000002503020023011e01df031e010800000025030200f5031e019d061e01080000002503020023018c019f018c01080000002503020023018701df0387010800000025030200f50387019d06870108000000fa0200000000000000ffff00040000002d01010004000000f0010200070000001f0400ffff0016015101070000001f0400ffff005e015101070000001f0400ffff00a6015101070000001f0400ffff00ee015101070000001f0400ffff0036025101070000001f0400ffff007e025101070000001f0400ffff00c6025101070000001f0400ffff000d035101070000001f0400ffff0055035101070000001f0400ffff009d035101070000001f0400ffff00e5035101070000001f0400ffff002d04510108000000250302005101de005101040108000000250302005101280151014c010800000025030200510170015101940108000000250302005101b8015101dc010800000025030200510100025101240208000000250302005101480251016c020800000025030200510190025101b40208000000250302005101d7025101fb02080000002503020051011f035101430308000000250302005101670351018b0308000000250302005101af035101d30308000000250302005101f70351011b04080000002503020051013f045101650408000000fa0200000000000080808000040000002d01020004000000f001010008000000250302007b01dd017b01b50108000000250302002601b5012601df0108000000250302003901a7013901af0108000000250302006701a7016701af0108000000250302002e01af012e01b50108000000250302007101af012e01af0108000000250302007101b5017101af0108000000250302002e01a7012e01a20108000000250302007101a7012e01a70108000000250302007101a2017101a70108000000250302007b01b5012601b50108000000fa0200000000000080808000040000002d01010004000000f0010200080000002503020021068c01f5038c010800000025030200df038c019f018c0108000000fa0200000000000080808000040000002d01020004000000f001010008000000250302004506dd014506b50108000000250302009906b5019906df0108000000250302008606a7018606af0108000000250302005906a7015906af0108000000250302009106af019106b50108000000250302004e06af019106af0108000000250302004e06b5014e06af0108000000250302009106a7019106a20108000000250302004e06a7019106a70108000000250302004e06a2014e06a70108000000250302004506b5019906b50108000000fa0200000000000000ffff00040000002d01010004000000f0010200070000001f0400ffff001e016f06070000001f0400ffff0066016f06070000001f0400ffff00ae016f06070000001f0400ffff00f6016f06070000001f0400ffff003e026f06070000001f0400ffff0086026f06070000001f0400ffff00ce026f06070000001f0400ffff0015036f06070000001f0400ffff005d036f06070000001f0400ffff00a5036f06070000001f0400ffff00ed036f0608000000250302006f06de006f060c0108000000250302006f0630016f06540108000000250302006f0678016f069c0108000000250302006f06c0016f06e40108000000250302006f0608026f062c0208000000250302006f0650026f06740208000000250302006f0698026f06bc0208000000250302006f06df026f06030308000000250302006f0627036f064b0308000000250302006f066f036f06930308000000250302006f06b7036f06db0308000000250302006f06ff036f062d0408000000fa0200000000000080808000040000002d01020004000000f0010100070000001f0480808000a2012106080000002503020021068c019d068c0108000000fa0200000000000000000000040000002d01010004000000f00102001c000000fb0292ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01030007000000fc02000000ffff000000040000002d0104000a000000320aaf001d0102000000313032003200050000000201010000000500000009020100000005000000010201000000040000002d01010004000000f001030007000000fc020000ffffff000000040000002d01030004000000f0010400050000002e01010000001c000000fb021000070000000000bc02000000000102022253797374656d004da91f664d00000a0026008a01000000000400000060c8b016040000002d01040004000000f00102000800000025030200340272033402e50308000000250302006c02e5036c02650408000000250302006c02e5033f00e50308000000250302006c0265043f006504080000002503020000024002000211030800000025030200340272033f0072030800000025030200c1053b02c105d9020800000025030200850537038505ad0308000000250302004d05ad034d052d0408000000250302004d05ad030d07ad0308000000250302004d052d040d072d040800000025030200850537030d07380308000000250302003f0040023f00650408000000250302000f022d030f02720308000000250302000d072d040d073b020800000025030200b405f702b40537030800000025030200000240020002db0108000000250302000002db010801de010e00000025030500fc00de01fd00e3010201e5010601e3010801de010800000025030200fc00de01fc0057010800000025030200fc005701d4005e010800000025030200d4005e01d400e3010800000025030200d400e3010d00e60108000000250302000d00e6010d00400208000000250302000d004002000240021200000025030700b806de01b906e201bb06e401be06e501c106e401c406e201c406df010800000025030200c406df01c4065a010800000025030200c4065a01eb0660010800000025030200eb066001eb06df010800000025030200eb06df01ac07e2010800000025030200ac07e201ac073b020800000025030200ac073b02c1053b020800000025030200c1053b02c105db010800000025030200c105db01b806de010800000025030200000211030f022d030800000025030200b405f702c105d90208000000fa0200000000000000ffff00040000002d01020004000000f00101001c000000fb0292ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010100050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01050007000000fc02000000ffff000000040000002d0106000a000000320aaf003b0602000000323032003200050000000201010000000500000009020100000005000000010201000000040000002d01020004000000f0010500040000002d01030004000000f0010600050000002e0101000000040000002d01040004000000f001010007000000fc020100000000000000040000002d0101003e00000024031d00f6008300f8006f00ff005c0009014b0018013c00290131003c012b005101280065012b007801310089013c0098014b00a2015c00a9016f00ab018300a9019800a201ab009801bc008901ca007801d5006501dc005101de003c01dc002901d5001801ca000901bc00ff00ab00f8009800f60083006e00000024033500140683001506780017066e001a0663001f065900240650002b06470033063f003b063800450633004f062e0059062b00640629006f0628007a06290085062b008f062e0099063300a3063800ab063f00b3064700ba065000c0065900c4066300c7066e00c9067800ca068300c9068e00c7069900c406a400c006ae00ba06b700b306c000ab06c700a306ce009906d4008f06d8008506dc007a06de006f06de006406de005906dc004f06d8004506d4003b06ce003306c7002b06c0002406b7001f06ae001a06a4001706990015068e0014068300040000002d01030008000000fa0200000000000000000000040000002d01050004000000f0010200040000002d0101000e0000002403050064023c030d033c030d0352036402520364023c030e00000024030500640252030d0352030d0369036402690364025203040000002d010300070000001f04000000001803b9021c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000ffff000000040000002d01070010000000320ae6025803060000003131322c3930120012001200090011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f00102001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000ffff000000040000002d0107000f000000320abe025803050000004f4b2046750019001600090013001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f00102000800000025030200ca021803ca021a030a00000025030300b8021d03b7021b03b5021a030a00000025030300bc021a03ba021b03b9021d030800000025030200ca021a03bc021a030800000025030200a8021803a8021a030800000025030200a8021803ca0218030800000025030200a8021a03b5021a030800000025030200ca023703ca023a030a00000025030300b5023703b7023603b80234030a00000025030300b9023403ba023603bc0237030800000025030200ca023703bc0237030a00000025030300a8023703a8023a03ca023a030800000025030200a8023703b50237030800000025030200b8021d03b80234030800000025030200b9021d03b90234030800000025030200c7021a03c70237030800000025030200aa021a03aa02370308000000fa02000000000000ff000000040000002d01020004000000f0010500080000002503020081033c032a033c031200000025030700550325036403250355033c0347032503550325035503ee02ca03ee0208000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200b102ff02b10202030800000025030200c002ff02c00202030800000025030200ad02fd02ad02ff020800000025030200c402fd02c402ff020800000025030200b1020203c00202030800000025030200ad02ff02c402ff020e00000025030500b5021103b6021403b9021503bb021403bd0211030800000025030200b3020f03be020f030800000025030200a8021703a00213030800000025030200b4021103ae0217030800000025030200bd021103c30217030800000025030200a802e202ca02e2020800000025030200ca021803a802180308000000fa0200000000000000ff0000040000002d01020004000000f00105000800000025030200bc02fd02bc02e9020800000025030200b502e902b502fd020800000025030200ae02e902c302e90208000000fa0200000000000000ffff00040000002d01050004000000f00102001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000f
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 54
fff000000040000002d01070010000000320a91001903060000004d313a3130301b0012000900120011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f00102000800000025030200c302fd02c302e2020800000025030200ae02e202ae02fd020800000025030200a802e202a802fd020800000025030200ca02fd02ca02e2020800000025030200b3020203b3020f030800000025030200be020203be020f030800000025030200bc021103bc020f030800000025030200b5021103b5020f030800000025030200a802fd02ca02fd020800000025030200a8021703ca0217030800000025030200a8021703a80218030800000025030200ca021703ca0218030800000025030200b4021103bd02110308000000fa0200000000000000000000040000002d01020004000000f00105001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010500050000002e0118000000050000000201010000000500000004010d000000050000000902000000000500000001020000000008000000fa0200000000000000000000040000002d01060007000000fc020000000000000000040000002d01070021000000320a58001903110000004ce46e67737363686e69747420332d333a002500240024002400200020002000240025000e001200120012002400150024001200050000000201010000000500000009020100000005000000010201000000040000002d01020004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f00105000800000025030200190369000705690008000000fa0200000000000000ffff00040000002d01050004000000f0010200070000001f0400ffff000803b902070000001f0400ffff00c102b902070000001f0400ffff007902b902070000001f0400ffff003102b902070000001f0400ffff00e901b902070000001f0400ffff00a101b902070000001f0400ffff005901b902070000001f0400ffff001201b902070000001f0400ffff000c01fe04070000001f0400ffff005401fe04070000001f0400ffff009c01fe04070000001f0400ffff00e301fe04070000001f0400ffff002b02fe04070000001f0400ffff007302fe04070000001f0400ffff00bb02fe04070000001f0400ffff000303fe041c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000ffff000000040000002d01070009000000320ac600a6020100000061002400050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f00102000800000025030200b9023c03b9021a030800000025030200b902f702b902d3020800000025030200b902af02b9028b020800000025030200b9026702b90243020800000025030200b9021f02b902fb010800000025030200b902d701b902b3010800000025030200b9028f01b9026b010800000025030200b9024701b90224010800000025030200b9020001b902de000800000025030200fe04de00fe04fa000800000025030200fe041e01fe0442010800000025030200fe046601fe048a010800000025030200fe04ae01fe04d1010800000025030200fe04f501fe0419020800000025030200fe043d02fe0461020800000025030200fe048502fe04a9020800000025030200fe04cd02fe04f1020800000025030200fe041503fe0430031c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000ffff000000040000002d01070009000000320ac600ec040100000062032400050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f0010200040000002d0101003600000024031900eb02ab00ea029e00e5029200dd028700d2027f00c6027a00b9027800ab027a009f027f00950287008c02920087029e008602ab008702b9008c02c5009502cf009f02d700ab02dd00b902de00c602dd00d202d700dd02cf00e502c500ea02b900eb02ab0056000000240329003105ab003005a3002e059c002b05940027058d00220587001c05820015057e000e057b0006057900fe047800f6047900ee047b00e7047e00e0048200da048700d5048d00d1049400ce049c00cc04a300cb04ab00cc04b300ce04bb00d104c200d504c900da04cf00e004d500e704d900ee04dc00f604de00fe04de000605de000e05dc001505d9001c05d5002205cf002705c9002b05c2002e05bb003005b3003105ab00040000002d01030008000000fa0200000000000000000000040000002d01020004000000f0010500040000002d0101000e00000024030500a90430035305300353054703a9044703a90430030e00000024030500a90447035305470353055e03a9045e03a9044703040000002d010300070000001f04000000000c03fe0408000000250302000f050c030f050e030c00000025030400fd041103fd041003fc040f03fa040e030c0000002503040002050e0300050f03ff041003ff04110308000000250302000f050e0302050e030800000025030200ed040c03ed040e030800000025030200ed040c030f050c030800000025030200ed040e03fa040e0308000000250302000f052c030f052e030c00000025030400fa042c03fc042c03fd042b03fd0429030c00000025030400ff042903ff042b0300052c0302052c0308000000250302000f052c0302052c030a00000025030300ed042c03ed042e030f052e030800000025030200ed042c03fa042c030800000025030200fd041103fd0429030800000025030200ff041103ff04290308000000250302000d050e030d052c030800000025030200ef040e03ef042c0308000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200f604f402f604f70208000000250302000605f4020605f7020800000025030200f304f102f304f40208000000250302000905f1020905f4020800000025030200f604f7020605f7020800000025030200f304f4020905f4021200000025030700fa040603fb040803fc040903fe040a030005090301050803020506030800000025030200f8040403040504030800000025030200ed040c03e50408030800000025030200f9040603f4040c0308000000250302000205060308050c030800000025030200ed04d7020f05d70208000000250302000f050c03ed040c0308000000fa0200000000000000ff0000040000002d01020004000000f001050008000000250302000105f1020105de020800000025030200fb04de02fb04f1020800000025030200f404de020805de0208000000fa0200000000000000ffff00040000002d01050004000000f0010200070000001f0400ffff000c03ed04070000001f0400ffff000c030f051c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000ffff000000040000002d01070010000000320ada020304060000003131332c3030120012001200090011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f00102001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010200050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01060007000000fc02000000ffff000000040000002d0107000f000000320ab2020604050000004f4b2046750019001600090013001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010600040000002d01030004000000f0010700050000002e0101000000040000002d01040004000000f001020008000000250302000805f1020805d7020800000025030200f404d702f404f1020800000025030200ed04d702ed04f10208000000250302000f05f1020f05d7020800000025030200f804f702f804040308000000250302000405f70204050403080000002503020001050603010504030800000025030200fb040603fb0404030800000025030200ed04f1020f05f1020800000025030200ed040c030f050c030800000025030200f90406030205060308000000fa02000000000000ff000000040000002d01020004000000f001050008000000250302003b04300393043003120000002503070067041a0358041a036704300375041a0367041a036704e302f603e30208000000fa0200000000000000000000040000002d01050004000000f00102000800000025030200ca028f01a8028f010800000025030200ca029201ca028f010800000025030200a8029201a8028f010800000025030200ca02b801a802b8010800000025030200ca02b801ca02b5010800000025030200a802b801a802b5010800000025030200bc02b501ca02b5010800000025030200a802b501b502b5010a00000025030300b502b501b702b401b802b2010800000025030200b5029201a80292010800000025030200ca029201bc0292010800000025030200b902b201b90295010a00000025030300bc029201ba029201b90295010a00000025030300b902b201ba02b401bc02b5010800000025030200b802b201b80295010a00000025030300b8029501b7029201b50292010800000025030200c702b501c70292010800000025030200aa02b501aa02920108000000250302000f058f01ed048f0108000000250302000f0592010f058f010800000025030200ed049201ed048f0108000000250302000f05b801ed04b80108000000250302000f05b8010f05b5010800000025030200ed04b801ed04b50108000000250302000205b5010f05b5010800000025030200ed04b501fa04b5010c00000025030400fa04b501fc04b501fd04b401fd04b2010800000025030200fa049201ed04920108000000250302000f059201020592010800000025030200ff04b201ff0495010c000000250304000205920100059201ff049301ff0495010c00000025030400ff04b201ff04b4010005b5010205b5010800000025030200fd04b201fd0495010c00000025030400fd049501fd049301fc049201fa04920108000000250302000d05b5010d0592010800000025030200ef04b501ef04920108000000fa0200000000000000ff0000040000002d01020004000000f0010500040000002d0101001600000024030900d402d802d302d602d002d502ce02d602cd02d802ce02db02d002dc02d302db02d402d8021600000024030900a402d802a302d602a102d5029e02d6029d02d8029e02db02a102dc02a302db02a402d802040000002d0103000800000025030200ae025b02c3025b0208000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200a8025502ca02550208000000fa0200000000000000ff0000040000002d01020004000000f0010500070000001f0400ff0000da02c3020800000025030200c302ca02ae02da020800000025030200ae02b602c302c6020800000025030200c302a202ae02b2020800000025030200ae028e02c3029e020800000025030200c3027a02ae028a020800000025030200ae026602c30277020800000025030200b8025b02ae0263020800000025030200ae02ca02b102cc020800000025030200b502cf02b702d1020800000025030200ba02d302bc02d5020800000025030200c002d802c302da020800000025030200c302b602c002b8020800000025030200bc02bb02ba02bd020800000025030200b702bf02b502c1020800000025030200b102c402ae02c6020800000025030200ae02a202b102a5020800000025030200b502a702b702a9020800000025030200ba02ac02bc02ad020800000025030200c002b002c302b2020800000025030200c3028e02c00291020800000025030200bc029302ba0295020800000025030200b7029802b50299020800000025030200b1029c02ae029e020800000025030200ae027a02b1027d020800000025030200b5028002b70281020800000025030200ba028402bc0285020800000025030200c0028802c3028a020800000025030200c3026602c00269020800000025030200bc026c02ba026d020800000025030200b7027002b50271020800000025030200b1027402ae0277020800000025030200b9025b02ba025c020800000025030200bd025e02be025f020800000025030200c1026102c302630208000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200c302e202c30255020800000025030200ae02e202ae02550208000000fa0200000000000000ff0000040000002d01020004000000f00105000800000025030200ae02dd02c302dd0208000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200a802e202ca02e2020800000025030200a802e202a80255020800000025030200ca02e202ca02550208000000fa0200000000000000ff0000040000002d01020004000000f00105000800000025030200c302f701c002fa010800000025030200bc02fc01ba02fe010800000025030200b7020102b50202020800000025030200b1020502ae0207020800000025030200c3020702ae02f70108000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200c3020e02c302da010800000025030200ae02da01ae020e020800000025030200ca020e02ca02da010800000025030200a802da01a8020e0208000000fa0200000000000000ff0000040000002d01020004000000f0010500040000002d0101001600000024030900d4020402d3020202d0020102ce020202cd020402ce020602d0020702d3020602d40204021600000024030900a4020402a3020202a10201029e0202029d0204029e020602a1020702a3020602a40204021200000024030700ba020b02b9020a02b8020a02b7020b02b8020c02b9020c02ba020b02040000002d0103000800000025030200c3020702ae02070208000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200a8020e02ca020e0208000000fa0200000000000000ff0000040000002d01020004000000f00105000800000025030200ae02e301b102e6010800000025030200b502e901b702ea010800000025030200ba02ed01bc02ee010800000025030200c002f101c302f4010800000025030200ae02f401c302e30108000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200be02f701be02e3010800000025030200b302f701b302e3010800000025030200b302f701be02f7010800000025030200ae02e301c302e3010800000025030200ca02c801be02c8010800000025030200ca02c501be02c5010800000025030200b202c401bf02c40108000000fa0200000000000000ff0000040000002d01020004000000f00105000800000025030200b202ba01b302bd010800000025030200b502bf01b702c0010800000025030200ba02c001bc02bf010800000025030200be02bd01bf02ba0108000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200bf02c401bf02ba010800000025030200b202c401b202ba010800000025030200be02c401be02da010800000025030200b302c401b302da010800000025030200a802c501a802c8010800000025030200ca02c501ca02c8010800000025030200b302c801a802c80108000000fa0200000000000000ff0000040000002d01020004000000f0010500040000002d0101001200000024030700c702bf01c602be01c502be01c502bf01c502c001c602c001c702bf011200000024030700ad02bf01ac02be01ab02be01ab02bf01ab02c001ac02c001ad02bf01040000002d0103000800000025030200c202bf01c002ba010800000025030200b002bf01b102ba010800000025030200c202bf01c402c2010800000025030200b002bf01ad02c2010800000025030200c702c201c402c2010800000025030200ca02bf01c702c2010800000025030200a802bf01aa02c2010800000025030200a802bf01a802ba010800000025030200ca02ba01ca02bf0108000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200ca02b801ca02ba010800000025030200a802b801a802ba0108000000fa0200000000000000ff0000040000002d01020004000000f00105000800000025030200aa02c201ad02c20108000000fa0200000000000000ffff00040000002d01050004000000f00102000800000025030200a802da01ca02da010800000025030200b302c501a802c5010800000025030200a802ba01ca02ba010800000025030200a802b801ca02b80107000000fc020000000000000000040000002d01020008000000fa0205000100000000000000040000002d0106000a00000024030300a902e001a902f101cc02e0010a00000024030300a902f101cc02e001cc02f10108000000fa02000000000000ff000000040000002d01070004000000f0010500070000001f04333333000e02a802070000001f0433333300b801a802070000001f0433333300b801b9020a00000025030300aa02e101b202e101ac02ef013200000025031700bb02e301bb02e201b902e101b802e101b602e201b502e401b502e701b502ea01b502ed01b602ee01b802ef01b902ef01ba02ee01bb02ed01bc02eb01bc02ea01bb02e801ba02e701b902e601b802e601b602e701b502e801b502ea012600000025031100c602e101c102e101c002e701c102e601c202e601c402e601c502e601c702e801c702ea01c702eb01c702ed01c502ee01c402ef01c202ef01c102ee01c002ee01c002ec0108000000fa0200000000000000ff0000040000002d01050004000000f001070008000000250302000805ec010505ee0108000000250302000205f1010005f3010800000025030200fc04f501fa04f7010800000025030200f704fa01f404fc0108000000250302000805fc01f404ec0108000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200080503020805cf010800000025030200f404cf01f404030208000000250302000f0503020f05cf010800000025030200ed04cf01ed04030208000000fa0200000000000000ff0000040000002d01050004
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 55
000000f0010700040000002d0101001e00000024030d001905f9011905f7011705f6011605f5011405f6011305f7011205f9011305fa011405fc011605fc011705fc011905fa011905f9011e00000024030d00ea04f901e904f701e804f601e604f501e504f601e304f701e304f901e304fa01e504fc01e604fc01e804fc01e904fa01ea04f9011200000024030700ff040002ff04ff01fe04fe01fd04ff01fd040002fe040102ff040002040000002d01020008000000250302000805fc01f404fc0108000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200ed0403020f05030208000000fa0200000000000000ff0000040000002d01050004000000f00107000800000025030200f404d801f704da010800000025030200fa04dd01fc04df0108000000250302000005e1010205e30108000000250302000505e6010805e8010800000025030200f404e8010805d80108000000fa0200000000000000ffff00040000002d01070004000000f001050008000000250302000405f7010405d8010800000025030200f804f701f804d8010800000025030200f804f7010405f7010800000025030200f404d8010805d80108000000250302000f05c8010405c80108000000250302000f05c5010405c5010800000025030200f804c4010405c40108000000fa0200000000000000ff0000040000002d01050004000000f00107000a00000025030300f804ba01f804bc01f904bd010800000025030200fb04bf01fc04c00108000000250302000005c0010105bf010a000000250303000305bd010405bc010405ba0108000000fa0200000000000000ffff00040000002d01070004000000f001050008000000250302000405c4010405ba010800000025030200f804c401f804ba0108000000250302000405c4010405cf010800000025030200f804c401f804cf010800000025030200ed04c501ed04c80108000000250302000f05c5010f05c8010800000025030200f804c801ed04c80108000000fa0200000000000000ff0000040000002d01050004000000f0010700040000002d01010016000000240309000c05bf010c05be010b05be010a05be010a05bf010a05c0010b05c0010c05c0010c05bf011600000024030900f204bf01f204be01f104be01f004be01f004bf01f004c001f104c001f204c001f204bf01040000002d01020008000000250302000705bf010605ba010800000025030200f504bf01f604ba0108000000250302000705bf010a05c2010800000025030200f504bf01f204c20108000000250302000c05c2010a05c20108000000250302000f05bf010c05c2010800000025030200ed04bf01f004c2010800000025030200ed04bf01ed04ba0108000000250302000f05ba010f05bf0108000000fa0200000000000000ffff00040000002d01070004000000f001050008000000250302000f05b8010f05ba010800000025030200ed04b801ed04ba0108000000fa0200000000000000ff0000040000002d01050004000000f00107000800000025030200f004c201f204c20108000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200ed04cf010f05cf010800000025030200f804c501ed04c5010800000025030200ed04ba010f05ba010800000025030200ed04b8010f05b801040000002d0106000a00000024030300ee04d401ee04e5011105d4010a00000024030300ee04e5011105d4011105e50108000000fa02000000000000ff000000040000002d01050004000000f0010700070000001f04333333000302ed04070000001f0433333300b801ed04070000001f0433333300b801fe042e00000025031500f604d801f504d601f404d601f304d601f104d601f004d801ef04dc01ef04df01f004e201f104e301f304e401f504e301f604e201f604e001f604df01f604dd01f504dc01f304db01f104dc01f004dd01ef04df0132000000250317000105d8010005d601ff04d601fd04d601fc04d601fb04d801fa04dc01fa04df01fb04e201fc04e301fd04e401fe04e4010005e3010105e2010105e0010105df010105dd010005dc01fe04db01fd04db01fc04dc01fb04dd01fa04df0124000000250310000b05d6010605d6010605dc010605db010805da010905da010b05db010c05dc010d05de010d05e0010c05e2010b05e3010905e4010805e4010605e3010505e10108000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200a8020e02ca020e0208000000fa0200000000000000ff0000040000002d01050004000000f0010700070000001f0400ff00001302b902070000001f0400ff00001f02c3020800000025030200ae024702b9024f020800000025030200c3021b02c1021a020800000025030200be021802bd0217020800000025030200ba021502b90213020800000025030200c3024702c10248020800000025030200be024b02bd024c020800000025030200ba024e02b8024f020800000025030200ae021b02b90213020800000025030200c3023302ae0243020800000025030200ae021f02c3022f020800000025030200ae022f02b1022d020800000025030200b5022a02b70229020800000025030200ba022602bc0224020800000025030200c0022102c3021f020800000025030200c3024302c00241020800000025030200bc023e02ba023c020800000025030200b7023a02b50238020800000025030200b1023502ae02330208000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200c3020e02c30255020800000025030200ae020e02ae02550208000000fa0200000000000000ff0000040000002d01050004000000f00107000800000025030200ae021402c30214020800000025030200c3024f02ae024f0208000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200a8025502ca0255020800000025030200a8020e02a80255020800000025030200ca020e02ca02550208000000fa0200000000000000ff0000040000002d01050004000000f0010700040000002d0101001e00000024030d001905cd021905cb021705ca021605ca021405ca021305cb021205cd021305cf021405d0021605d0021705d0021905cf021905cd021e00000024030d00ea04cd02e904cb02e804ca02e604ca02e504ca02e304cb02e304cd02e304cf02e504d002e604d002e804d002e904cf02ea04cd02040000002d0102000800000025030200f4044f0208054f0208000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200ed044a020f054a0208000000fa0200000000000000ff0000040000002d01050004000000f0010700070000001f0400ff0000cf02080508000000250302000805bf02f404cf020800000025030200f404ab020805bb02080000002503020008059702f404a7020800000025030200f404830208059302080000002503020008056f02f4047f020800000025030200f4045b0208056b020800000025030200fe044f02f40457020800000025030200f404bf02f704c1020800000025030200fa04c402fc04c50208000000250302000005c8020205c90208000000250302000505cc020805cf0208000000250302000805ab020505ad0208000000250302000205b0020005b1020800000025030200fc04b402fa04b6020800000025030200f704b802f404bb020800000025030200f4049702f70499020800000025030200fa049c02fc049d0208000000250302000005a0020205a20208000000250302000505a4020805a7020800000025030200080583020505850208000000250302000205880200058a020800000025030200fc048c02fa048e020800000025030200f7049102f40493020800000025030200f4046f02f70471020800000025030200fa047402fc04760208000000250302000005780202057a02080000002503020005057d0208057f02080000002503020008055b0205055d02080000002503020002056002000562020800000025030200fc046502fa0466020800000025030200f7046902f4046b020800000025030200fe044f0200055102080000002503020002055302040554020800000025030200060556020805570208000000fa0200000000000000ffff00040000002d01070004000000f001050008000000250302000805d70208054a020800000025030200f404d702f4044a0208000000fa0200000000000000ff0000040000002d01050004000000f00107000800000025030200f404d1020805d10208000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200ed04d7020f05d7020800000025030200ed04d702ed044a0208000000250302000f05d7020f054a020800000025030200ed0403020f05030208000000fa0200000000000000ff0000040000002d01050004000000f0010700070000001f0400ff00000802fe04070000001f0400ff0000140208050800000025030200f4043c02fe04440208000000250302000805100206050f02080000002503020004050d0202050b02080000002503020000050902fe040802080000002503020008053c0206053d02080000002503020004053f0202054002080000002503020000054202fe0444020800000025030200f4041002fe040802080000002503020008052802f40438020800000025030200f4041402080524020800000025030200f4042402f70421020800000025030200fa041f02fc041d02080000002503020000051a02020519020800000025030200050516020805140208000000250302000805380205053502080000002503020002053302000531020800000025030200fc042e02fa042d020800000025030200f7042a02f404280208000000fa0200000000000000ffff00040000002d01070004000000f001050008000000250302000805030208054a020800000025030200f4040302f4044a0208000000fa0200000000000000ff0000040000002d01050004000000f00107000800000025030200f404090208050902080000002503020008054402f404440208000000fa0200000000000000ffff00040000002d01070004000000f00105000800000025030200ed044a020f054a020800000025030200ed040302ed044a0208000000250302000f0503020f054a0208000000fa020000000000000000ff00040000002d01050004000000f00107001c000000fb02d9ff00008403840390010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090012000000320ab60204030700000032327820503430041200120010000900160011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02d9ff00008403840390010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090012000000320aab02d4040700000032327820503430041200120010000900160011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f001070008000000250302009b02f9019b020b0208000000250302009b0222029b02380208000000250302009b024f029b02660208000000250302009b027c029b02930208000000250302009b02a9029b02c00208000000250302009b02d7029b02e8020800000025030200d602fa01d6020b020800000025030200d6022202d60239020800000025030200d6024f02d60266020800000025030200d6027d02d60293020800000025030200d602aa02d602c1020800000025030200d602d702d602e8020800000025030200e104ee01e10400020800000025030200e1041602e1042d020800000025030200e1044402e1045a020800000025030200e1047102e10488020800000025030200e1049e02e104b5020800000025030200e104cb02e104dd0208000000250302001b05ef011b05000208000000250302001b0517021b052d0208000000250302001b0544021b055b0208000000250302001b0571021b05880208000000250302001b059f021b05b50208000000250302001b05cc021b05dd0208000000fa0200000000000000000000040000002d01070004000000f0010500040000002d0101000e00000024030500ee01db01ca01dc01ca01d901ee01d801ee01db01040000002d0102000800000025030200d601d901e101d9010800000025030200d601c701e101c6010800000025030200d601c701d601d9010800000025030200e101c601e101d9010800000025030200ce01c901b102a4010800000025030200cf01d201b302ad010800000025030200b102a401b302ad010800000025030200ce01c901cf01d201040000002d0101000e00000024030500d205db01f605dc01f605d901d205d801d205db01040000002d0102000800000025030200e905d901de05d9010800000025030200e905c701df05c6010800000025030200e905c701e905d9010800000025030200df05c601de05d9010800000025030200f205c9010305a3010800000025030200f005d2010205ab0108000000250302000305a3010205ab010800000025030200f205c901f005d20108000000fa02000000000000ff000000040000002d01050004000000f00107001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d0109000a000000320a24034f0202000000312912000a00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d0109000a000000320a9203580302000000362912000a00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d0109000a000000320a7903300402000000362912000a00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d0109000a000000320a1103620502000000312912000a00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090012000000320ad00116030700000048454220333630041800150016000800120011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090012000000320ac20120040700000048454220333630041800150016000800120011001100050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f0010700070000001f04ff000000bf01ba02070000001f04ff0000003c033203070000001f04ff0000002e038805070000001f04ff000000b601f405070000001f04ff00000092013e05070000001f04ff0000009201f7021c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090009000000320ae80035030100000042292b00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d010900090000003
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 56
20a8a0284010100000043292e00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090009000000320af502a4010100000041292b00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090009000000320af002f9050100000041292b00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090009000000320a9a02fc050100000043292e00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f00107001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700c7b01658b1f17761b1f1772040f377a91f664d040000002d010700050000002e0118000000050000000201010000000500000004010d00000005000000090200ffff000500000001020000000008000000fa0200000000000000ffff00040000002d01080007000000fc02000000ffff000000040000002d01090009000000320af5005d050100000042292b00050000000201010000000500000009020100000005000000010201000000040000002d01050004000000f0010800040000002d01020004000000f0010900050000002e0101000000040000002d01040004000000f001070008000000250302008d021903770219030800000025030200b00229038d0219030800000025030200380387034e0387030800000025030200fb025c0338038703080000002503020071046e035a046e030800000025030200b504520371046e030800000025030200440506035a050603080000002503020004052303440506030800000025030200f802c1010e03c1010800000025030200c302a301f802c1010800000025030200d704b301c004b3010800000025030200f704a101d704b3011000000025030600ba02bf01ba02b501b902ab01b702a201b4029801b1029101120000002503070097026a01930266018c02600183025a017b025501720250016f024f01100000002503060041024601370246012d02480123024a011a024d0113024f011200000025030700eb016a01e8016d01e1017501db017d01d6018601d2018f01d10191011000000025030600c801bf01c801c901c901d301cb01dd01ce01e701d101ee011200000025030700eb011502ef011902f6011f02ff01250207022a0210022f02130230021000000025030600410239024b023802550237025f023502680232026f0230021200000025030700970215029a021202a1020a02a7020202ac02f901b002f001b102ee01100000002503060032033c0332033203300328032e031e032b03140329030d0312000000250307000e03e6020b03e2020303dc02fb02d602f202d102e902cd02e702cc021000000025030600b902c202af02c302a502c4029b02c6029102c9028a02cc0212000000250307006302e6025f02ea025902f1025302f9024e02020349020b0349020d0310000000250306003f023c03400246034102500343025a034602630349026a03120000002503070063029203660295036e029c037602a1037f02a7038802ab038a02ac031000000025030600b902b503c302b503cd02b403d602b103e002af03e702ac0312000000250307000e03920312038e03180386031e037e032303760328036d0329036a030e0000002503050088052e038805220386051503820509037f05000310000000250306006505d8026005d4025605cc024c05c5024005bf023d05be020e000000250305000f05b5020205b502f604b702e904bb02e104be021000000025030600b904d802b504dd02ad04e702a604f102a004fd029f0400030e0000002503050096042e0396043b03980447039c0454039f045d031000000025030600b9048403be048803c8049003d2049703de049d03e1049e030e000000250305000f05a8031c05a7032805a5033405a2033d059e0310000000250306006505840369057f037105760378056b037e0560037f055d030e00000025030500f405b601f305a901f1059c01ee059001ea0587011000000025030600d0056001cc055b01c2055301b7054c01ac054701a90546010e000000250305007a053c016e053d0161053f01550542014c0546011000000025030600250560012005640118056e01110579010c0584010a0587010e000000250305000105b6010205c2010405cf010705db010a05e401100000002503060025050b0229051002330518023e051f02490525024c0526020e000000250305007a052f0287052e0294052c02a0052902a90526021000000025030600d0050b02d5050702dd05fd01e405f201e905e701ea05e4010c000000250304003e0592013e0588013b057f013a057a010c000000250304002d056701250560011d055b0119055a010c0000002503040002055501f8045601ef045801eb045a010c00000025030400d7046701d1046e01cc047601ca047a010c00000025030400c5049201c6049b01c804a401ca04a9010c00000025030400d704bc01de04c301e604c801eb04c9010c000000250304000205ce010b05cd011405cb011905c9010c000000250304002d05bc013305b5013805ad013a05a9011400000025030800f7029201f7028f01f6028b01f6028701f5028301f4028001f3027c01f2027b011400000025030800e5026701e4026601e1026401de026101db025f01d7025d01d4025b01d1025a011400000025030800ba025601b6025601b3025601af025701ab025801a7025901a4025a01a3025a0114000000250308008f0267018e0269018b026c0189026f0187027201850275018302790182027b0114000000250308007d0292017e0296017e029a017f029e017f02a1018002a5018202a9018202aa0114000000250308008f02bd019102bf019302c1019602c4019a02c6019d02c801a002c901a302ca011400000025030800ba02cf01be02cf01c202cf01c602ce01c902cd01cd02cc01d002cb01d102ca011400000025030800e502bd01e602bc01e902b901eb02b601ed02b301ef02b001f102ac01f202aa0108000000250302002303f3002f03f3000800000025030200e30265012303f30008000000250302002f03f3005d03f3000800000025030200bf018a02b4018a020800000025030200f2011c02bf018a02080000002503020088018a02bc018a020800000025030200de010003d201000308000000250302003f023c03de0100030800000025030200a5010003db0100030800000025030200e305fb02ef05fb02080000002503020087051b03e305fb020800000025030200ef05fb022506fb020800000025030200e9059b02f4059b02080000002503020091052d02e9059b020800000025030200f4059b0229069b0208000000250302004c05ff005705ff000800000025030200170559014c05ff0008000000250302005705ff008605ff000800000025030200df031001df031b010800000025030200df032601df0332010800000025030200df033d01df0348010800000025030200df035401df035f010800000025030200df036a01df0375010800000025030200df038101df038c010800000025030200f5031001f5031b010800000025030200f5032601f50332010800000025030200f5033d01f50348010800000025030200f5035401f5035f010800000025030200f5036a01f50375010800000025030200f5038101f5038c01030000000000
Dateiinhalt
10 20
112,90OK Fu
M1:100Längsschnitt 3-3:
a b
113,00OK Fu22
x P40
22x P40
1)
6)6)
1)
HEB 360 HEB 360
B
CA A
C
B
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 57
Hexdump einer AutoCAD-WMF mit PowerWMFdd7cdc69a000000000000af076804c0000000000016540100090000032a1400004b0205020000000008000000fa020000040000008080800008000000fa020000040000000000000008000000fa020000020000000000000008000000fa020500010000000000000008000000fa020000060000000000000007000000fc02000000000000000007000000fc020000ffffff00000007000000fc0201000000000000001c000000fb020a000000000000009001000000000000000054696d6573204e657720526f6d616e00000000000000000000000000000000001c000000fb0292ff00000000000090010000000007020022417269616c204e6172726f7700000000000000000000000000000000000000001c000000fb021000070000000000bc02000000000102022253797374656d00000000000000000000000000000000000000000000000000001c000000fb02d9ff00000000000090010000000007020022417269616c204e6172726f7700000000000000000000000000000000000000001c000000fb02b1ff00000000000090010000000007020022417269616c204e6172726f7700000000000000000000000000000000000000001c000000fb02d9ff00008403840390010000000007020022417269616c204e6172726f77000000000000000000000000000000000000000005000000020101000000050000002e01180000000500000004010d0000000400000003010800050000000b0200000000050000000c026804af07050000000902fffffd00040000002d0108001500000021051e0053696d6f6e506965202d20574d46646174656e6b6f6d7072657373696f6e0a000a001600000021052000506c617474656e6265756c656e3b204b616d70666b726166747468656f72696514000a0018000000210524005a5253205a6965676572747c526f737761677c5365696c65722d496e67656e69657572651e000a00040000002d010000070000001804a4010401a0010001080000002503020023011e01df031e010800000025030200f5031e019d061e011800000025030a0023018701df0387019f0187019f01a2010201a20102015401fc005401d5005b01d5001001df0310011600000025030900f5031001eb061001eb065b01bd065401bd06a2012106a20121068701f50387019d068701040000002d0101000700000018041801530114014f01070000001804600153015c014f01070000001804a8015301a4014f01070000001804f0015301ec014f010700000018043802530134024f01070000001804800253017c024f01070000001804c8025301c4024f010700000018040f0353010b034f010700000018045703530153034f010700000018049f0353019b034f01070000001804e7035301e3034f010700000018042f0453012b044f0108000000250302005101de005101040108000000250302005101280151014c010800000025030200510170015101940108000000250302005101b8015101dc010800000025030200510100025101240208000000250302005101480251016c020800000025030200510190025101b40208000000250302005101d7025101fb02080000002503020051011f035101430308000000250302005101670351018b0308000000250302005101af035101d30308000000250302005101f70351011b04080000002503020051013f0451016504040000002d01000008000000250302003901a7013901af0108000000250302006701a7016701af010c000000250304007101b5017101af012e01af012e01b5010c000000250304007101a2017101a7012e01a7012e01a2010c000000250304007b01dd017b01b5012601b5012601df010c00000025030400df038c0123018c0123011a01df031a0108000000250302008606a7018606af0108000000250302005906a7015906af010c000000250304004e06b5014e06af019106af019106b5010c000000250304004e06a2014e06a7019106a7019106a2010c000000250304004506dd014506b5019906b5019906df01040000002d010100070000001804200171061c016d060700000018046801710664016d06070000001804b0017106ac016d06070000001804f8017106f4016d06070000001804400271063c026d060700000018048802710684026d06070000001804d0027106cc026d060700000018041703710613036d060700000018045f0371065b036d06070000001804a7037106a3036d06070000001804ef037106eb036d0608000000250302006f06de006f060c0108000000250302006f0630016f06540108000000250302006f0678016f069c0108000000250302006f06c0016f06e40108000000250302006f0608026f062c0208000000250302006f0650026f06740208000000250302006f0698026f06bc0208000000250302006f06df026f06030308000000250302006f0627036f064b0308000000250302006f066f036f06930308000000250302006f06b7036f06db0308000000250302006f06ff036f062d04040000002d010000070000001804a4012306a0011f060c00000025030400f5031a019d061a019d068c01f5038c01040000002d0101000a000000250303003f007203340272033402e5030a000000250303000d073803850537038505ad030e000000250305003f0040023f0065046c0265046c02e5033f00e5030e000000250305000d07ad034d05ad034d052d040d072d040d073b022000000025030e00000240020002db010801de010601e3010201e501fd00e301fc00de01fc005701d4005e01d400e3010d00e6010d00400200024002000211031c00000025030c00c105db01b806de01bb06e401c106e401c406e201c4065a01eb066001eb06df01ac07e201ac073b02c1053b02c105db010a00000025030300000211030f022d030f0272030c00000025030400c1053b02c105d902b405f702b4053703040000002d010700070000001804de00ab012800f600070000001804de00ca0628001406070000001b043c03640252030d03070000001b045203640269030d03040000002d0106000700000018041a03bb021603b7020c00000025030400b9023403bc023703ca023703ca023a030e00000025030500ca023a03a8023a03a8023703b5023703b80234031600000025030900b8023403b8021d03b5021a03a8021a03a8021803ca021803ca021a03bc021a03b9021d030800000025030200b9021a03b9023c030800000025030200c7021a03c70237030800000025030200aa021a03aa023703040000002d010200080000002503020081033c032a033c031200000025030700550325036403250355033c0347032503550325035503ee02ca03ee02040000002d0101000c00000025030400b102ff02b1020203c0020203c002ff020c00000025030400ad02fd02ad02ff02c402ff02c402fd020800000025030200a8021703a0021303040000002d0102000800000025030200bc02fd02bc02e9020800000025030200b502e902b502fd020800000025030200ae02e902c302e902040000002d0101000800000025030200c302fd02c302e2020800000025030200ae02e202ae02fd020a00000025030300b3020203b3020f03be020f030800000025030200be020203be020f030800000025030200bc021103bc020f030e00000025030500b5020f03b5021103b9021503bd021103c30217030e00000025030500ca02e202ca02fd02a802fd02a802e202ca02e2020c00000025030400a8021803a8021703ca021703ca0218030a00000025030300bd021103b4021103ae021703080000002503020019036900070569000700000018040a03bb020603b702070000001804c302bb02bf02b7020700000018047b02bb027702b7020700000018043302bb022f02b702070000001804eb01bb02e701b702070000001804a301bb029f01b7020700000018045b01bb025701b7020700000018041401bb021001b7020700000018040e0100050a01fc04070000001804560100055201fc040700000018049e0100059a01fc04070000001804e5010005e101fc040700000018042d0200052902fc04070000001804750200057102fc04070000001804bd020005b902fc04070000001804050300050103fc040800000025030200b902f702b902d3020800000025030200b902af02b9028b020800000025030200b9026702b90243020800000025030200b9021f02b902fb010800000025030200b902d701b902b3010800000025030200b9028f01b9026b010800000025030200b9024701b90224010800000025030200b9020001b902de000800000025030200fe04de00fe04fa000800000025030200fe041e01fe0442010800000025030200fe046601fe048a010800000025030200fe04ae01fe04d1010800000025030200fe04f501fe0419020800000025030200fe043d02fe0461020800000025030200fe048502fe04a9020800000025030200fe04cd02fe04f1020800000025030200fe041503fe043003040000002d010700070000001804de00eb0278008602070000001804de0031057800cb04070000001b043003a90447035305070000001b044703a9045e035305040000002d0106000700000018040e0300050a03fc0410000000250306000f052e03ed042e03ed042c03fc042c03fd042b03fd0429031800000025030a00fd042903fd041003fa040e03ed040e03ed040c030f050c030f050e0302050e03ff041003ff0411030c00000025030400ff041103ff042b030f052c030f052e0308000000250302000d050e030d052c030800000025030200ef040e03ef042c030c00000025030400f604f402f604f7020605f7020605f4020c00000025030400f304f102f304f4020905f4020905f1020800000025030200ed040c03e50408030c00000025030400fa040603fe040a030205060308050c03040000002d01020008000000250302000105f1020105de020800000025030200fb04de02fb04f1020800000025030200f404de020805de02040000002d0101000700000018040e03ef040a03eb040700000018040e0311050a030d0508000000250302000805f1020805d7020800000025030200f404d702f404f1020a00000025030300f804f702f80404030405040308000000250302000405f70204050403080000002503020001050603010504030800000025030200fb040603fb0404030e000000250305000f05d7020f05f102ed04f102ed04d7020f05d7020a0000002503030002050603f9040603f4040c03040000002d01020008000000250302003b04300393043003120000002503070067041a0358041a036704300375041a0367041a036704e302f603e302040000002d0101002000000025030e00a8029201a8028f01ca028f01ca029201ba029201b9029501b902b201bc02b501ca02b501ca02b801a802b801a802b501b502b501b802b2010c00000025030400b802b201b8029501b5029201a80292010800000025030200c702b501c70292010800000025030200aa02b501aa0292012000000025030e00ed049201ed048f010f058f010f05920100059201ff049301ff04b4010f05b5010f05b801ed04b801ed04b501fc04b501fd04b401fd04b2010a00000025030300fd04b201fd049301ed04920108000000250302000d05b5010d0592010800000025030200ef04b501ef049201040000002d010200040000002d010700070000001804dc02d402d502cd02070000001804dc02a402d5029d020800000025030200ae025b02c3025b02040000002d010600070000001804dc02c502d802c1020800000025030200c302ca02ae02da020800000025030200ae02b602c302c6020800000025030200c302a202ae02b2020800000025030200ae028e02c3029e020800000025030200c3027a02ae028a020800000025030200ae026602c30277020800000025030200b8025b02ae0263020800000025030200ae02ca02b102cc020800000025030200b502cf02b702d1020800000025030200ba02d302bc02d5020800000025030200c002d802c302da020800000025030200c302b602c002b8020800000025030200bc02bb02ba02bd020800000025030200b702bf02b502c1020800000025030200b102c402ae02c6020800000025030200ae02a202b102a5020800000025030200b502a702b702a9020800000025030200ba02ac02bc02ad020800000025030200c002b002c302b2020800000025030200c3028e02c00291020800000025030200bc029302ba0295020800000025030200b7029802b50299020800000025030200b1029c02ae029e020800000025030200ae027a02b1027d020800000025030200b5028002b70281020800000025030200ba028402bc0285020800000025030200c0028802c3028a020800000025030200c3026602c00269020800000025030200bc026c02ba026d020800000025030200b7027002b50271020800000025030200b1027402ae0277020800000025030200b9025b02ba025c020800000025030200bd025e02be025f020800000025030200c1026102c30263020800000025030200ae02dd02c302dd02040000002d0101000a00000025030300a802e202a8025502ca025502040000002d0102000800000025030200c302f701c002fa010800000025030200bc02fc01ba02fe010800000025030200b7020102b5020202040000002d0107000700000018040702d4020102cd020700000018040702a40201029d020a00000024030300ba020b02b7020b02b9020c020c00000025030400b1020502ae020702c3020702ae02f7010800000025030200ae02e301b102e6010800000025030200b502e901b702ea010800000025030200ba02ed01bc02ee010800000025030200c002f101c302f4010800000025030200ae02f401c302e301040000002d0101000c00000025030400b302e301b302f701be02f701be02e3010800000025030200ae02e301c302e301040000002d0102000800000025030200b202ba01b302bd010800000025030200b502bf01b702c0010800000025030200ba02c001bc02bf010800000025030200be02bd01bf02ba01040000002d0101000a00000025030300b202c401bf02c401bf02ba010800000025030200b202c401b202ba010800000025030200be02c401be02da010800000025030200b302c401b302da010c00000025030400be02c501ca02c501ca02c801be02c801040000002d0102000c00000024030400c702bf01c502be01c502c001c602c0010c00000024030400ad02bf01ab02be01ab02c001ac02c0010c00000025030400ca02ba01ca02bf01c402c201c002ba010e00000025030500a802ba01a802bf01aa02c201ad02c201b102ba01040000002d0101000e00000025030500ca02da01a802da01a8020e02ca020e02ca02da010c00000025030400b302c501a802c501a802c801b302c8010c00000025030400a802b801a802ba01ca02ba01ca02b801040000002d010300040000002d010600070000001b04e001a902f101cc02040000002d0102000700000018041002aa020c02a602070000001804ba01aa02b601a602070000001804ba01bb02b601b7020a00000025030300aa02e101b202e101ac02ef011a00000025030b00bb02e301bb02e201b602e201b502e401b502ed01bb02ed01bc02eb01bc02ea01b802e601b502e801b502ea011400000025030800c602e101c102e101c002e701c502e601c702e801c702ed01c002ee01c002ec0108000000250302000805ec010505ee0108000000250302000205f1010005f3010800000025030200fc04f501fa04f701040000002d01070010000000240306001905f9011905f7011305f7011305fa011705fc011905fa011000000024030600ea04f901e504f601e304f701e304fa01e804fc01e904fa010e00000024030500ff040002ff04ff01fd04ff01fd040002fe0401020c00000025030400f704fa01f404fc010805fc01f404ec010800000025030200f404d801f704da010800000025030200fa04dd01fc04df0108000000250302000005e1010205e30108000000250302000505e6010805e8010800000025030200f404e8010805d801040000002d0101000c00000025030400f804d801f804f7010405f7010405d8010800000025030200f404d8010805d8010800000025030200f804c4010405c401040000002d0102000a00000025030300f804ba01f804bc01f904bd010800000025030200fb04bf01fc04c00108000000250302000005c0010105bf010a000000250303000305bd010405bc010405ba01040000002d01010008000000250302000405cf010405ba010800000025030200f804cf01f804ba010c000000250304000405c5010f05c5010f05c8010405c801040000002d0102000e000000240305000c05bf010c05be010a05be010a05c0010c05c0010e00000024030500f204bf01f204be01f004be01f004c001f204c0010c000000250304000f05ba010f05bf010a05c2010605ba010c00000025030400ed04ba01ed04bf01f204c201f604ba01040000002d0101000e000000250305000f05cf01ed04cf01ed0403020f0503020f05cf010c00000025030400f804c501ed04c501ed04c801f804c8010c00000025030400ed04b801ed04ba010f05ba010f05b801040000002d010300040000002d010600070000001b04d401ee04e5011105040000002d0102000700000018040502ef040102eb04070000001804ba01ef04b601eb04070000001804ba010005b601fc041600000025030900f604d801f104d601ef04dc01ef04df01f304e401f604e201f604dd01f004dd01ef04df0116000000250309000105d801fc04d601fa04dc01fa04df01fe04e4010105e2010105dd01fb04dd01fa04df0116000000250309000b05d6010605d6010605dc010605db010b05db010d05de010d05e0010805e4010505e1010700000018041502bb021102b7020700000018042102c5021d02c1020800000025030200ae024702b9024f020800000025030200c3021b02c1021a020800000025030200be021802bd0217020800000025030200c3024702c10248020800000025030200be024b02bd024c020800000025030200ba024e02b8024f020a00000025030300ae021b02b9021302ba0215020800000025030200c3023302ae0243020800000025030200ae021f02c3022f020800000025030200ae022f02b1022d020800000025030200b5022a02b70229020800000025030200ba022602bc0224020800000025030200c0022102c3021f020800000025030200c3024302c00241020800000025030200bc023e02ba023c020800000025030200b7023a02b50238020800000025030200b1023502ae023302040000002d0101000800000025030200c302e202c302da010800000025030200ae02da01ae02e202040000002d0102000800000025030200ae021402c30214020800000025030200c3024f02ae024f02040000002d0101000800000025030200a8020e02a80255020800000025030200ca020e02ca02e202040000002d010200040000002d010700070000001804d0021905ca021205070000001804d002ea04ca02e3040800000025030200f4044f0208054f02040000002d010600070000001804d1020a05cd02060508000000250302000805bf02f404cf020800000025030200f404ab020805bb02080000002503020008059702f404a7020800000025030200f404830208059302080000002503020008056f02f4047f020800000025030200f4045b0208056b020800000025030200f404bf02f704c1020800000025030200fa04c402fc04c50208000000250302000005c8020205c90208000000250302000505cc020805cf0208000000250302000
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 58
805ab020505ad0208000000250302000205b0020005b1020800000025030200fc04b402fa04b6020800000025030200f704b802f404bb020800000025030200f4049702f70499020800000025030200fa049c02fc049d0208000000250302000005a0020205a20208000000250302000505a4020805a7020800000025030200080583020505850208000000250302000205880200058a020800000025030200fc048c02fa048e020800000025030200f7049102f40493020800000025030200f4046f02f70471020800000025030200fa047402fc04760208000000250302000005780202057a02080000002503020005057d0208057f02080000002503020008055b0205055d02080000002503020002056002000562020800000025030200fc046502fa0466020800000025030200f7046902f4046b020a0000002503030000055102fe044f02f404570208000000250302000205530204055402080000002503020006055602080557020800000025030200f404d1020805d1020700000018040a0200050602fc0407000000180416020a051202060508000000250302000805100206050f02080000002503020004050d0202050b02080000002503020008053c0206053d02080000002503020004053f02020540020a0000002503030000054202fe044402f4043c020a00000025030300f4041002fe04080200050902080000002503020008052802f40438020800000025030200f4041402080524020800000025030200f4042402f70421020800000025030200fa041f02fc041d02080000002503020000051a02020519020800000025030200050516020805140208000000250302000805380205053502080000002503020002053302000531020800000025030200fc042e02fa042d020800000025030200f7042a02f4042802040000002d01010008000000250302000805d7020805cf010800000025030200f404cf01f404d702040000002d0102000800000025030200f404090208050902080000002503020008054402f4044402040000002d0101000e00000025030500ed040302ed04d7020f05d7020f054a02ed044a0208000000250302000f0503020f054a02040000002d01040008000000250302009b02f9019b020b0208000000250302009b0222029b02380208000000250302009b024f029b02660208000000250302009b027c029b02930208000000250302009b02a9029b02c00208000000250302009b02d7029b02e8020800000025030200d602fa01d6020b020800000025030200d6022202d60239020800000025030200d6024f02d60266020800000025030200d6027d02d60293020800000025030200d602aa02d602c1020800000025030200d602d702d602e8020800000025030200e104ee01e10400020800000025030200e1041602e1042d020800000025030200e1044402e1045a020800000025030200e1047102e10488020800000025030200e1049e02e104b5020800000025030200e104cb02e104dd0208000000250302001b05ef011b05000208000000250302001b0517021b052d0208000000250302001b0544021b055b0208000000250302001b0571021b05880208000000250302001b059f021b05b50208000000250302001b05cc021b05dd02040000002d010100040000002d0107000c00000024030400ee01db01ca01dc01ca01d901ee01d8010e00000025030500e101d901e101c601d601c701d601d901e101d9010e00000025030500b102a401b302ad01cf01d201ce01c901b102a4010c00000024030400d205db01f605dc01f605d901d205d8010e00000025030500de05d901df05c601e905c701e905d901de05d9010e000000250305000305a3010205ab01f005d201f205c9010305a301040000002d0102000a00000025030300b00229038d021903770219030a00000025030300fb025c03380387034e0387030a00000025030300b504520371046e035a046e030a0000002503030004052303440506035a0506030a00000025030300c302a301f802c1010e03c1010a00000025030300f704a101d704b301c004b3010a00000025030300ba02bf01ba02b501b1029101080000002503020097026a016f024f010a00000025030300410246013702460113024f010a00000025030300eb016a01d6018601d10191010a00000025030300c801bf01c801c901d101ee010800000025030200eb011502130230020800000025030200410239026f0230020a0000002503030097021502ac02f901b102ee010a0000002503030032033c033203320329030d030a000000250303000e03e602f202d102e702cc020800000025030200b902c2028a02cc020a000000250303006302e60249020b0349020d030a00000025030300630292037f02a7038a02ac030a00000025030300b902b503c302b503e702ac0308000000250302000e03920329036a030a0000002503030088052e03880522037f0500030a000000250303006505d8024c05c5023d05be020a000000250303000f05b5020205b502e104be020a00000025030300b904d802a604f1029f0400030a0000002503030096042e0396043b039f045d030a00000025030300b9048403d2049703e1049e030a000000250303000f05a8033405a2033d059e030800000025030200650584037f055d030a00000025030300f405b601ee059001ea0587010a00000025030300d0056001b7054c01a90546010a000000250303007a053c01550542014c0546010a0000002503030025056001110579010a05870108000000250302000105b6010a05e4010a0000002503030025050b023e051f024c05260208000000250302007a052f02a90526020a00000025030300d0050b02e405f201ea05e4010a000000250303003e0592013e0588013a057a0108000000250302002d05670119055a01080000002503020002055501eb045a010800000025030200d7046701ca047a010800000025030200c5049201ca04a9010a00000025030300d704bc01e604c801eb04c90108000000250302000205ce011905c90108000000250302002d05bc013a05a9010e00000025030500f7029201f7028f01f6028b01f6028701f2027b010800000025030200e5026701d1025a010a00000025030300ba025601b3025601a3025a0108000000250302008f02670182027b0112000000250307007d0292017e0296017e029a017f029e017f02a1018202a9018202aa0108000000250302008f02bd01a302ca010a00000025030300ba02cf01c202cf01d102ca010800000025030200e502bd01f202aa010a00000025030300e30265012303f3005d03f3000a00000025030300f2011c02bf018a0288018a020c00000025030400a5010003de0100033f023c0349026a030a0000002503030087051b03e305fb022506fb020a0000002503030091052d02e9059b0229069b020a00000025030300170559014c05ff008605ff000800000025030200df031001df031b010800000025030200df032601df0332010800000025030200df033d01df0348010800000025030200df035401df035f010800000025030200df036a01df0375010800000025030200df038101df038c010800000025030200f5031001f5031b010800000025030200f5032601f50332010800000025030200f5033d01f50348010800000025030200f5035401f5035f010800000025030200f5036a01f50375010800000025030200f5038101f5038c01040000002d010000040000002d01000005000000090200000000040000002d01090007000000210502003130af001d0107000000210502003230af003b06040000002d010b0009000000210506003131322c3930e602580309000000210505004f4b20467500be02580309000000210506004d313a31303091001903040000002d010c000f000000210511004ce46e67737363686e69747420332d333a005800190307000000210501006100c600a60207000000210501006200c600ec04040000002d010b0009000000210506003131332c3030da02030409000000210505004f4b20467500b2020604040000002d010d000a000000210507003232782050343000b60204030a000000210507003232782050343000ab02d404040000002d010b000700000021050200312924034f020700000021050200362992035803070000002105020036297903300407000000210502003129110362050a000000210507004845422033363000d00116030a000000210507004845422033363000c2012004040000002d010c0007000000210501004200e8003503070000002105010043008a02840107000000210501004100f502a40107000000210501004100f002f905070000002105010043009a02fc0507000000210501004200f5005d050300000000000d0a
DateiinhaltSimonPie - WMFdatenkompressionPlattenbeulen; Kampfkrafttheorie
10 20
112,90OK Fu
M1:100Längsschnitt 3-3:
a b
113,00OK Fu22
x P40
22x P40
1)
6)6)
1)
HEB 360 HEB 360
B
CA A
C
B
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 59
bildliche Darstellung des HexdumpPlaceableHeader
WMFHeader
FontText
FontText
FontText
Textabdecken
EckigeEllipse
EckigeEllipse
doppelteLinie
doppelteLinie
doppelteLinie
doppelteLinie
überlappendeLinie
überlappendeLinie
schlechtsichtbarePixel
schlechtsichtbarePixel
schlechtsichtbarePixel
2-PunktPolylinien
2-PunktPolylinien
2-PunktPolylinien
2-PunktPolylinien
2-PunktPolylinien
berührendePolylinien
berührendePolylinien
zerrisseneSchraffuren
zerrisseneSchraffuren Polygon
Mapmode ungenutztePalette
viereckigeDreiecke
rechteckigeFünfecke
Polylinie mitZwischenpunkte
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 60
FontText
FontText
FontText
FontText
Textabdecken
Textabdecken
EckigeEllipse
doppelteLinie
doppelteLinie
doppelteLinie
doppelteLinie
überlappendeLinie
überlappendeLinie
überlappendeLinie
schlechtsichtbarePixel
schlechtsichtbarePixel
schlechtsichtbarePixel
schlechtsichtbarePixel
2-PunktPolylinien
2-PunktPolylinien
berührendePolylinien
berührendePolylinien berührende
Polylinien
verbundenePolylinie
verbundenePolylinie
verbundenePolylinie
zerrisseneSchraffuren
Polygon
EckigeEllipse
viereckigeDreiecke
rechteckigeFünfecke
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 61
FontText
FontText
FontText
FontText
FontText
FontText
Textabdecken
Textabdecken
EckigeEllipse
EckigeEllipse
doppelteLinie
doppelteLinie
überlappendeLinie
überlappendeLinie
schlechtsichtbarePixel
schlechtsichtbarePixel
2-PunktPolylinien
2-PunktPolylinien
berührendePolylinien
berührendePolylinien
berührendePolylinien
zerrisseneSchraffurenPolygon
Polygon
Polygon
rechteckigeFünfecke
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 62
EoF
FontText
FontText
FontText
Textabdecken
Textabdecken
EckigeEllipse
EckigeEllipse
EckigeEllipse
EckigeEllipse
doppelteLinie
doppelteLinie
doppelteLinie
überlappendeLinie
überlappendeLinie
überlappendeLinie
überlappendeLinie
überlappendeLinie
überlappendeLinie
schlechtsichtbarePixel
schlechtsichtbarePixel
schlechtsichtbarePixel
schlechtsichtbarePixel
schlechtsichtbarePixel
2-PunktPolylinien
2-PunktPolylinien
berührendePolylinien berührende
Polylinien
verbundenePolylinie
verbundenePolylinie
zerrisseneSchraffuren
Polygon
Polygon
viereckigeDreiecke
Polylinie mitZwischenpunkte
Polylinie mitZwischenpunkte
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 63
bildliche Darstellung des Hexdump mit PowerWMF
PlaceableHeader
WMFHeader
SchriftartenverweiseFont FontFont FontFont Font
RundeEllipse
RundeEllipse
RundeEllipse
RundeEllipse
RundeEllipse
gutsichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
2-PunktPolylinien
2-PunktPolylinien
2-PunktPolylinien
2-PunktPolylinien
2-PunktPolylinien
berührendePolylinien
doppelteLinie
überlappendeLinie
verbundenePolylinie
verbundenePolylinie verbundene
Polylinie
verbundenePolylinie
verbundenePolylinie
teilverbundeneSchraffuren
teilverbundeneSchraffuren
teilverbundeneSchraffuren
2-PunktPolylinien
2-PunktPolylinien
Polygon
Polygon
Polygon
Polygon Polygon
Textabdecken= unsichtbar
Mapmode
dreieckigeDreiecke
dreieckigeDreiecke
rechteckigeRechtecke
rechteckigeRechtecke
Text:Simon Pie
Polylinie ohneZwischenpunkte
Polylinie ohneZwischenpunkte
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 64
EoF
Text Text
Text
TextText TextText TextText
Text TextText TextText TextText
Textabdecken Textabdecken Textabdecken Textabdecken Textabdecken Textabdecken
RundeEllipse
RundeEllipseRunde
Ellipse
RundeEllipse
RundeEllipse
überlappendeLinie
überlappendeLinie
gutsichtbareKreislein
gutsichtbareKreislein gut
sichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
gutsichtbareKreislein
2-PunktPolylinien
2-PunktPolylinien
berührendePolylinien
verbundenePolylinie
verbundenePolylinie
verbundenePolylinie verbundene
Polylinie
verbundenePolylinie
teilverbundeneSchraffuren
teilverbundeneSchraffuren
2-PunktPolylinien
Polygon Polygon
rechteckigeRechtecke
Polylinie ohneZwischenpunkte
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 65
InstallationsanleitungZuerst drückt man Alt 11, um den VBA Editor zu öffnen.
Auf der linken Seite wird der Projektexplorer angezeigt. Fehlt dieser, so klickt man auf Ansicht, dann Projekt-Explorer, oder Strg R. Dort gibt es 2 Möglichkeiten, wo die Makros gespeichert werden können. Die eine ist die Normal.dot und die andere Möglichkeit ist die Makros das Dokument zu speichern. Die Makros sollen in die Normal.dot rein, damit sie in jedem Dokument nutzbar sind. Deshalb Rechtsklick, Einfügen, Modul.
Dann Kopiert man den Code von den Kapiteln Zubehör und Hauptmakro in das rechte weiße Fenster.
Den VBA-Editor kann man nun schließen. Die Makros können nun schon unbequem benutzt werden.
Option Explicit
Function Klammer(ByVal a As String) As Integer'Version vom 20.2.2016If a = "(" ThenKlammer = 1ElseIf a = ")" ThenKlammer = -1ElseIf a = "" ThenKlammer = 17000ElseKlammer = 0End If
End Function
Function Klammer2(ByVal a As String) As Integer
If a = "{" ThenKlammer2 = 1ElseIf a = "}" ThenKlammer2 = -1ElseIf a = "" ThenKlammer2 = 17000ElseKlammer2 = 0End If
End Function
Function Steuerzeichen(ByVal a As String) As Integer
Select Case a
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 66
Dann klickt oben links auf das Symbol und danach auf Wordoptionen unten rechts.
Man klickt links in der Leiste auf Anpassen. Dann klickt man rechts unten neben Tastenkombination Anpassen.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 67
In diesem Fenster scollt man die linke Seite ganz nach unten, bis das Wort Makros zu lesen ist.
Man klickt auf Makros und auf der rechten Seite erscheinen dann die Makros. Dem Makro PowerWMFeinfügen kann nun eine Tastenkombination gegeben werden. Die Makros des Formelumwandlers benötigen auch eine Tastenkombination, damit Word zum schnellen Taschenrechner wird. Fertig.
Folgende Tabelle beschreibt, was welches Makro macht und welches eine Tastenkombination benötigt. Das Tastenkürzel darf frei gewählt werden.Fett markiert sind Makros zum Benutzen und nicht Fett sind Funxionen, die Bestandteile von Makros sind.Makroname Beschreibung Tastenkürzelausrechnen Rechnet das Ergebnis aus Strg+A, 1Checksumme Berechnet die Checksumme des WMF-HeaderDateieinlesen liest eine Datei in einem String einDNApolymerase Wandelt eine Formel von Elementar zu Chick umDNAse Wandelt eine Formel von Chick zu Elementar umFormelwürfel Würfelt eine zufällige große FormelIstZahl prüft, ob ein Zeichen ein Zeichen einer Zahl ist
KKTformelumwandler erhöht das Formellevel Strg++KKTfurmelumwandler senkt das Formellevel Strg+-Klammer; Klammer2 prüft, ob das Zeichen eine Klammer istMakrozählen führt eine Statistik, wie oft welches Makro benutzt wurdePolyglätten Glättet Polylinien und erkennt Ellipsen und abgerundete Rechtecke
PowerWMFeinfügen Titel von diesem DokumentFügt eine WMF-Datei in Word ein und komprimiert diese
Strg+A,6
Reversetranslatase Wandelt eine Formel von Wikipedia zu EQ-Feld umReversetranskriptase Wandelt eine Formel von EQ-Feld zu Chick umRibosom Wandelt eine Formel von EQ-Feld zu Wikipedia umRibozym Erweitert EQ-Felder um große Summen und Quadrate
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 68
RNApolymerase Wandelt eine Formel von Chick zu EQ-Feld umStarten Startet FormelumwandlermakrosSteuerzeichen prüft, ob ein Zeichen eine mathematische Bedeutung hattRNA Entfernt große Summen und Quadrate in EQ-FeldernTyp Ermittelt, welcher Formeltyp markiert ist
vausrechnen verbessertes Ausrechnen, bei dem das Ergebnis daneben geschrieben wird
Strg+A, 2
WmfZahl Wandelt eine Zahl in ein Doppelbyte um, die in der WMF diese Zahl bedeutetWmfZeichen Wandelt ein Doppelbyte in eine Zahl um
Zeicheneinkreisen Kreist ein Zeichen ein Strg+5
Da häufig auch griechische Buchstaben eingetippt werden müssen, klickt man auf Einfügen, dann Symbol. Jedem griechischem Zeichen kann eine Tastenkombination zugewiesen werden.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 69
Der CodeZubehörIm Zubehör sind notwendige Makroteile für PowerWMFeinfügen enthalten. Zusätzlich befindet sich dort der Formelumwandler.
Function Klammer(ByVal a As String) As Integer'Version vom 9.1.2016If a = "(" ThenKlammer = 1ElseIf a = ")" ThenKlammer = -1ElseIf a = "" ThenKlammer = 17000ElseKlammer = 0End IfEnd Function
Function Klammer2(ByVal a As String) As IntegerIf a = "{" ThenKlammer2 = 1ElseIf a = "}" ThenKlammer2 = -1ElseIf a = "" ThenKlammer2 = 17000ElseKlammer2 = 0End IfEnd Function
Function Steuerzeichen(ByVal a As String) As IntegerSelect Case aCase "+", "-", "*", "·", "/", ")", "(", "^", "_", "=", ChrW(8729), ChrW(8211)Steuerzeichen = 1Case ""Steuerzeichen = 17000Case ElseSteuerzeichen = 0End SelectEnd Function
Function IstZahl(ByVal a As String) As IntegerSelect Case aCase "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ","IstZahl = 1Case ""IstZahl = 17000Case ElseIstZahl = 0End SelectEnd Function
Function Typ() As IntegerDim Länge, aktuellZeichen, c, d, e As IntegerDim Formel, Tz As String
If Selection.Fields.Count = 1 Then Formel = Selection.Fields(1).Code Typ = 0 'Elementar (Berechnungsfeld) For c = 1 To 3 Tz = Mid(Formel, c, 3) If Tz = "EQ " Then Typ = 2 'EQ Feld End If Next Exit FunctionEnd If
Formel = SelectionLänge = Len(Formel)For c = 1 To 3 Tz = Mid(Formel, c, 8) If Tz = ":<math> " Then Typ = 3 'Wikipedia Exit Function End If Tz = Mid(Tz, 1, 3)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 70
If Tz = "EQ " Then Typ = 2 'EQ Feld Exit Function End IfNext
d = 0 'elementare Zeichene = 0 'chicke ZeichenFor aktuellZeichen = Länge To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) Select Case Tz Case "^", "_", "*" d = d + 1 Case "²", "³", "·", ChrW(8729) e = e + 1 End SelectNextIf Selection.Font.Superscript = False Thend = d + 0Elsee = e + 1End If
If d = 0 And e = 0 Then Typ = -1 'elementar = chickIf d = 0 And e <> 0 Then Typ = 1 'chickIf d <> 0 And e = 0 Then Typ = 0 'elementarIf d <> 0 And e <> 0 Then Typ = 10 'elementarchick
End Function
Function Starten() As StringDim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As IntegerDim Formel, Tz As String
If Selection.Fields.Count = 1 Then Formel = Selection.Fields(1).Code Else Formel = Selection Länge = Len(Formel) If Länge = 1 Then 'markiert bis zum ende Selection.EndKey Unit:=wdLine, Extend:=wdExtend Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend Formel = Selection Länge = Len(Formel) End If If Länge = 1 Then ' markiert bei Fehlschlag bis zum Tab oder = Selection.HomeKey Unit:=wdLine, Extend:=wdExtend Formel = Selection Länge = Len(Formel) d = 0 For e = Länge To 1 Step -1 Tz = Mid(Formel, e, 1) If Asc(Tz) = 9 Or Asc(Tz) = 61 Then Tz = Mid(Formel, e + 1, 1) If Tz = " " Then d = d - 1 Exit For End If d = d + 1 Next Selection.Collapse Selection.MoveRight Unit:=wdCharacter, Count:=Länge - d Selection.MoveRight Unit:=wdCharacter, Count:=d, Extend:=wdExtend End IfEnd If
Tz = Right(Formel, 1) 'prüft, ob rechts ein Absatz istc = Asc(Tz)If c = 11 Or c = 13 Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend Formel = Selection If Länge - Len(Formel) = -1 Then Länge = Len(Formel) Selection.Collapse Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend End IfEnd IfTz = Left(Formel, 1) 'prüft, ob links ein Absatz istc = Asc(Tz)If c = 11 Or c = 13 Then Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 71
Formel = Selection If Länge - Len(Formel) = -1 Then Länge = Len(Formel) Selection.Collapse Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend End IfEnd If
'Sicherung gegen KlammernKlammersumme = 0Länge = Len(Formel)For aktuellZeichen = 1 To Länge Tz = Mid(Formel, aktuellZeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) + Klammer2(Tz) If Klammersumme < 0 Then Exit ForNextIf Klammersumme <> 0 Thenc = MsgBox("Es sind " & Klammersumme & " Klammern zuviel", vbCritical, "Warnung")Starten = " "Exit FunctionEnd If
Starten = Formel
End Function
Sub ausrechnen()Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As IntegerDim Formel, Tz As String
Application.ScreenUpdating = FalseFormel = Starten()If Formel = " " Then Exit SubFormeltyp = Typ()
c = Makrozählen("KKTausrechnen ")
'Reversetranslatase und RNApolymerase können eine (1) in Klammern haben'Dadurch erzeugen sie ein EQ-Feld ohne Feld und sind damit schneller
'senkt den Formeltyp auf elementarSelect Case Formeltyp Case 3 d = Reversetranslatase(1) + Reversetransskriptase() + DNAse() Case 2 d = Reversetransskriptase() + DNAse() Case 1, 10 d = DNAse() Case 0, -1 d = 0End SelectSelection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _ PreserveFormatting:=FalseSelection.TypeText Text:="= "Selection.Fields.ToggleShowCodesSelection.Fields.Update
Application.ScreenUpdating = True
End Sub
Sub vausrechnen()Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As IntegerDim Formel, Tz As String
Application.ScreenUpdating = FalseFormel = Starten()If Formel = " " Then Exit SubFormeltyp = Typ()
c = Makrozählen("vKKTausrechnen ")
'senkt den Formeltyp auf elementarSelect Case Formeltyp Case 3 d = Reversetranslatase(1) + Reversetransskriptase() + DNAse() Case 2 d = Reversetransskriptase() + DNAse() Case 1, 10 d = DNAse()
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 72
Case 0, -1 d = 0End SelectFormel = SelectionLänge = Len(Formel)Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _ PreserveFormatting:=FalseSelection.TypeText Text:="= "Selection.Fields.ToggleShowCodesSelection.Fields.Update
Selection.TypeText (Formel) & "=" & Chr(32)Selection.MoveLeft Unit:=wdCharacter, Count:=2Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'stellt wahrscheinlich das EQ-Feld wieder herc = 0For aktuellZeichen = Länge - 2 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "/" Then c = 1 Exit For End IfNextIf c = 0 Then For aktuellZeichen = Länge - 3 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 3) If Tz = "0,5" Or Tz = "^1/" Then c = 1 Exit For End If NextEnd IfIf c = 1 Thend = DNApolymerase() + RNApolymerase(0)Elsed = DNApolymerase()End If
Application.ScreenUpdating = True
End Sub
Sub KKTformelumwandler()'erhöht den FormeltypDim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As IntegerDim Formel, Tz As String
Application.ScreenUpdating = FalseFormel = Starten()If Formel = " " Then Exit Sub
c = Makrozählen("KKTformelumwandler+ ")
Formeltyp = Typ()Länge = Len(Formel)Select Case Formeltyp Case -1, 10 d = DNApolymerase() + RNApolymerase(0) Case 1 d = RNApolymerase(0) Case 2 d = Ribosom() Case 3 d = Reversetranslatase(1) + Reversetransskriptase() + DNAse() Case 0 Formel = Selection c = 0 For aktuellZeichen = Länge - 2 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "/" Then c = 1 Exit For End If Next If c = 0 Then For aktuellZeichen = Länge - 3 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 3) If Tz = "0,5" Or Tz = "^1/" Then c = 1 Exit For
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 73
End If Next End If If c = 1 Then d = DNApolymerase() + RNApolymerase(0) Else d = DNApolymerase() End IfEnd SelectApplication.ScreenUpdating = True
End Sub
Sub KKTfurmelumwandler()'senkt den FormeltypDim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As IntegerDim Formel, Tz As String
Application.ScreenUpdating = FalseFormel = Starten()If Formel = " " Then Exit Sub
c = Makrozählen("KKTfurmelumwandler- ")
Formeltyp = Typ()Select Case Formeltyp Case 3 d = Reversetranslatase(0) Case 2 d = Reversetransskriptase() Case 1, 10 d = DNAse() Case 0, -1 d = DNApolymerase() + RNApolymerase(1) + Ribosom()End SelectApplication.ScreenUpdating = True
End Sub
Function Ribozym() As IntegerDim Formel$, Teilformel$, Tz$, Tx As StringDim Länge%, TxLänge%, aktuellZeichen%, Endzeichen%, Klammersumme%, c%, d As IntegerDim Ersetzbar%, Ersetzlänge As IntegerDim Ersetzen As String
'großes QuadratFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge - 3 To 3 Step -1Tz = Mid(Formel, aktuellZeichen, 2)If Tz = "\b" Or Tz = "\B" Then Klammersumme = 1 Endzeichen = aktuellZeichen + 3 While Klammersumme <> 0 Tx = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tx) Endzeichen = Endzeichen + 1 Wend TxLänge = Endzeichen - aktuellZeichen - 4 Teilformel = Mid(Formel, aktuellZeichen + 3, TxLänge) Ersetzbar = 0 For c = 1 To TxLänge - 2 Tx = Mid(Teilformel, c, 3) If Tx = "\f(" Or Tx = "\F(" Then Ersetzbar = Ersetzbar + 1 Next Ribozym = Ersetzbar Ersetzen = "" If Ersetzbar > 0 And Endzeichen < Länge + 1 Then Tx = Mid(Formel, Endzeichen, 1) If Tx = "²" Then Ersetzen = "2" If Tx = "³" Then Ersetzen = "3" If Ersetzen = "" Then If Selection.Characters(Endzeichen).Font.Superscript = True Then Ersetzlänge = 0 For d = Endzeichen To Länge Ersetzlänge = Ersetzlänge + 1 If Selection.Characters(d).Font.Superscript = False Then Ersetzlänge = Ersetzlänge - 1 Exit For End If Selection.Characters(d).Font.Superscript = False
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 74
Next Ersetzen = Selection.Characters(Endzeichen + Ersetzlänge - 1) & ")" Selection.Characters(Endzeichen + Ersetzlänge - 1).InsertBefore Ersetzen Selection.Characters(Endzeichen + Ersetzlänge + 1) = "" Selection.Characters(Endzeichen).InsertBefore "\s\up9(" End If Else Ersetzen = "\s\up9(" & Ersetzen & ")" Selection.Characters(Endzeichen).InsertBefore Ersetzen Selection.Characters(Endzeichen + 9) = "" End If End IfEnd IfNext
'chicke SummeFormel = SelectionLänge = Len(Formel)Ersetzbar = 0Klammersumme = 0For aktuellZeichen = Länge To 3 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = "+" Or Tz = "-" Then If Klammersumme = 0 Then If Selection.Characters(aktuellZeichen).Font.Superscript = False And Selection.Characters(aktuellZeichen).Font.Subscript = False Then Ersetzbar = Ersetzbar + 1 End If End If End IfNextRibozym = Ribozym + ErsetzbarIf Ersetzbar > 2 Then Ersetzen = Selection.Characters(Länge) & "))" Selection.Characters(Länge).InsertBefore Ersetzen Selection.Characters(Länge + 3) = "" For aktuellZeichen = Länge To 3 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = "+" Or Tz = "-" Then If Klammersumme = 0 Then If Selection.Characters(aktuellZeichen).Font.Superscript = False And Selection.Characters(aktuellZeichen).Font.Subscript = False Then If Tz = "+" Then Selection.Characters(aktuellZeichen) = ";" d = 0 ElseIf Tz = "-" Then Selection.Characters(aktuellZeichen).InsertBefore ";" d = 1 End If Tx = Mid(Formel, aktuellZeichen + 1, 1) If Tx = " " Then Selection.Characters(aktuellZeichen + 1 + d) = "" Tx = Mid(Formel, aktuellZeichen - 1, 1) If Tx = " " Then Selection.Characters(aktuellZeichen - 1) = "" End If End If End If Next Selection.Characters(4).InsertBefore "\b(\A(" Selection.Characters(4).InsertBefore ChrW(931) d = Selection.Characters(4).Font.Size d = d * 2 Selection.Characters(4).Font.Size = dEnd If
End Function
Function tRNA() As IntegerDim Formel$, Teilformel$, Tz$, Tx As StringDim Länge%, TxLänge%, aktuellZeichen%, Endzeichen%, Klammersumme%, c%, d As IntegerDim Ersetzbar%, Ersetzlänge As IntegerDim Ersetzen As String
'große Summe entfernenIf Selection.Characters(4) = ChrW(931) ThenFormel = SelectionLänge = Len(Formel) Selection.Characters(Länge) = "" Selection.Characters(Länge - 1) = ""Tx = Mid(Formel, 5, 6)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 75
If Tx = "\b(\A(" Then Klammersumme = 0 For aktuellZeichen = Länge To 3 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = ";" Then If Klammersumme = -2 Then If Selection.Characters(aktuellZeichen).Font.Superscript = False And Selection.Characters(aktuellZeichen).Font.Subscript = False Then Tx = Mid(Formel, aktuellZeichen + 1, 1) If Tx = "-" Then Selection.Characters(aktuellZeichen) = "" Else Selection.Characters(aktuellZeichen) = "+" End If End If End If End If Next For c = 1 To 7 Selection.Characters(4) = "" NextEnd IfEnd If
'große Quadrate entfernenFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge - 8 To 3 Step -1 Tz = Mid(Formel, aktuellZeichen, 7) If Tz = "\s\up9(" Then Tz = Mid(Formel, aktuellZeichen + 7, 2) If Tz = "2)" Then Selection.Characters(aktuellZeichen + 7) = "²" Selection.Characters(aktuellZeichen + 8) = "" ElseIf Tz = "3)" Then Selection.Characters(aktuellZeichen + 7) = "³" Selection.Characters(aktuellZeichen + 8) = "" Else Klammersumme = 1 For c = aktuellZeichen + 7 To Länge Tx = Mid(Formel, c, 1) Klammersumme = Klammersumme + Klammer(Tx) If Klammersumme = 0 Then Exit For Else Selection.Characters(c).Font.Superscript = True End If Next Selection.Characters(c) = "" End If For c = 1 To 7 Selection.Characters(aktuellZeichen) = "" Next End IfNext
End Function
Function DNApolymerase() As Integer'Elementar zu chickDim Länge, Verkürzung, Endzeichen, aktuellZeichen, Klammersumme, c, d As IntegerDim Zeichen, Formel, Tz As String
DNApolymerase = 1
'Tauscht ^2 und ^3 gegen ² und ³ ausFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge - 1 To 2 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "^" ThenZeichen = Mid(Formel, aktuellZeichen + 2, 1)If IstZahl(Zeichen) = 0 Then If Selection.Characters(aktuellZeichen + 1) = "2" Then Selection.Characters(aktuellZeichen) = "²" Selection.Characters(aktuellZeichen + 1) = "" ElseIf Selection.Characters(aktuellZeichen + 1) = "3" Then Selection.Characters(aktuellZeichen) = "³" Selection.Characters(aktuellZeichen + 1) = "" End If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 76
End IfEnd IfNext
' Ersetzt * durch ·Formel = SelectionLänge = Len(Formel)aktuellZeichen = 1For aktuellZeichen = Länge - 1 To 2 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "*" ThenSelection.Characters(aktuellZeichen) = "·"End IfNext
'stellt hochtiefaktuellZeichen = 1For aktuellZeichen = Länge - 1 To 2 Step -1Verkürzung = 0Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "^" Then d = 1 ElseIf Tz = "_" Then d = -1 Else d = 0End IfIf d <> 0 Then Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = " " Then Selection.Characters(aktuellZeichen + 1) = "" Formel = Selection Tz = Mid(Formel, aktuellZeichen + 1, 1) End If Selection.Characters(aktuellZeichen) = "" '+1 im string If Tz = "(" Then Klammersumme = 1 Selection.Characters(aktuellZeichen) = "" While Klammersumme > 0 If d = 1 Then Selection.Characters(aktuellZeichen).Font.Superscript = True ElseIf d = -1 Then Selection.Characters(aktuellZeichen).Font.Subscript = True End If aktuellZeichen = aktuellZeichen + 1 Verkürzung = Verkürzung + 1 Tz = Mid(Formel, aktuellZeichen + 2, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = "^" Then Selection.Characters(aktuellZeichen).InsertBefore Tz d = 0 ElseIf Tz = "_" Then Selection.Characters(aktuellZeichen).InsertBefore Tz d = 0 End If Wend Selection.Characters(aktuellZeichen) = "" aktuellZeichen = aktuellZeichen - Verkürzung Else 'Tz <> "(" Tz = Mid(Formel, aktuellZeichen + 1, 1) c = 0 While c = 0 If d = 1 Then Selection.Characters(aktuellZeichen).Font.Superscript = True Else Selection.Characters(aktuellZeichen).Font.Subscript = True End If aktuellZeichen = aktuellZeichen + 1 Verkürzung = Verkürzung + 1 Tz = Mid(Formel, aktuellZeichen + 1, 1) c = Steuerzeichen(Tz) If Tz = "²" Or Tz = "³" Then c = 1 If Tz = "" Then c = 1 End If Wend aktuellZeichen = aktuellZeichen - Verkürzung End IfEnd IfNext
End Function
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 77
Function DNAse() As Integer'Chick zu elementarDim Länge, aktuellZeichen As IntegerDim c, d, Endzeichen As IntegerDim Zeichen, Formel, Tz As String
DNAse = 1
d = Selection.Fields.CountIf d = 1 ThenSelection.Fields.ToggleShowCodesSelection.Fields(1).Code.SelectLänge = Selection.Characters.CountWith Selection .Cut .MoveRight Unit:=wdCharacter, Count:=1 .TypeBackspace .TypeBackspace .Paste .MoveLeft Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtendEnd With Formel = Selection Länge = Länge - 2 Tz = Mid(Formel, Länge, 1) If Tz = " " Then Selection.Characters(Länge) = "" End If Tz = Mid(Formel, 1, 1) If Tz = "Q" Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End If c = tRNA()End If
Formel = SelectionLänge = Len(Formel)For c = 1 To 3 Tz = Mid(Formel, c, 3) If Tz = "EQ " Then d = 1 'EQ Feld ohne Feld und es werden {} statt () verwendet End IfNext
' Ersetzt · durch *aktuellZeichen = 2For aktuellZeichen = 2 To Länge - 1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "·" Or Tz = ChrW(8729) ThenSelection.Characters(aktuellZeichen) = "*"End IfNext
'Ersetzt ²³ durch ^2^3For aktuellZeichen = Länge To 1 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "²" ThenSelection.Characters(aktuellZeichen).InsertBefore ("^2")Selection.Characters(aktuellZeichen + 2) = ""ElseIf Tz = "³" ThenSelection.Characters(aktuellZeichen).InsertBefore ("^3")Selection.Characters(aktuellZeichen + 2) = ""End IfNext
'Entstellt hochFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge To 1 Step -1 If Selection.Characters(aktuellZeichen).Font.Superscript = True Then Endzeichen = aktuellZeichen c = 0 While Selection.Characters(aktuellZeichen).Font.Superscript = True c = c + Steuerzeichen(Selection.Characters(aktuellZeichen)) Selection.Characters(aktuellZeichen).Font.Superscript = False aktuellZeichen = aktuellZeichen - 1 Wend If d = 1 Then If Endzeichen - aktuellZeichen = 1 Then Selection.Characters(aktuellZeichen).InsertAfter ("^") Else
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 78
Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore ("}") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("^{") End If Else If c > 0 Then Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore (")") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("^(") Else Selection.Characters(aktuellZeichen).InsertAfter ("^") End If End If End IfNext
'Entstellt tiefFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge To 1 Step -1 If Selection.Characters(aktuellZeichen).Font.Subscript = True Then Endzeichen = aktuellZeichen c = 0 While Selection.Characters(aktuellZeichen).Font.Subscript = True c = c + Steuerzeichen(Selection.Characters(aktuellZeichen)) Selection.Characters(aktuellZeichen).Font.Subscript = False aktuellZeichen = aktuellZeichen - 1 Wend If d = 1 Then If Endzeichen - aktuellZeichen = 1 Then Selection.Characters(aktuellZeichen).InsertAfter ("_") Else Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore ("}") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("_{") End If Else If c > 0 Then Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore (")") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("_(") Else Selection.Characters(aktuellZeichen).InsertAfter ("_") End If End If End IfNext
End Function
Function RNApolymerase(ByVal Hemmung As Integer) As Integer'Chick zu EQDim Länge, Widerherstellen, Verkürzung, aktuellZeichen, aktuellZeichen2, Klammersumme As IntegerDim c, d, e, Endzeichen, Azeichen, Tausch As IntegerDim Zeichen, Formel, Tz As String
RNApolymerase = 1
'bearbeitet QuadratwurzelnLänge = Len(Selection)Formel = SelectionaktuellZeichen = LängeaktuellZeichen2 = Länge - 4For aktuellZeichen = Länge To 3 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "5" ThenTz = Mid(Formel, aktuellZeichen - 1, 1)If Tz = "," ThenIf Selection.Characters(aktuellZeichen - 2).Font.Superscript = True ThenIf Selection.Characters(aktuellZeichen - 2) = "0" Then If aktuellZeichen = Länge Then e = 1 ElseIf Selection.Characters(aktuellZeichen + 1).Font.Superscript = False Then
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 79
e = 1 Else e = 0 End IfIf e = 1 ThenIf Selection.Characters(aktuellZeichen - 3).Font.Superscript = True ThenIf Selection.Characters(aktuellZeichen - 3) = "^" ThenSelection.Characters(aktuellZeichen - 3) = ""aktuellZeichen = aktuellZeichen - 1End IfEnd IfEnd IfIf e = 1 ThenSelection.Characters(aktuellZeichen - 2) = ""Formel = SelectionTz = Mid(Formel, aktuellZeichen - 3, 1)If Tz = ")" Then Selection.Characters(aktuellZeichen - 2) = "" Selection.Characters(aktuellZeichen - 2) = "" Klammersumme = -1 aktuellZeichen2 = aktuellZeichen - 4 While Klammersumme <> 0 Tz = Mid(Formel, aktuellZeichen2, 1) Klammersumme = Klammersumme + Klammer(Tz) aktuellZeichen2 = aktuellZeichen2 - 1 Wend If aktuellZeichen2 < 2 Then Widerherstellen = Len(Selection) + 3 Selection.Characters(aktuellZeichen2 + 1) = "\r(;" If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Else If Selection.Characters(aktuellZeichen2 - 1) = "\" Then Widerherstellen = Len(Selection) + 4 Selection.Characters(aktuellZeichen2 - 1).InsertBefore ("\r(;") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Selection.Characters(aktuellZeichen).InsertAfter (")") aktuellZeichen = aktuellZeichen + 2 Else Selection.Characters(aktuellZeichen2 + 1) = "\r(;" End If End IfElse c = 0 aktuellZeichen2 = aktuellZeichen - 3 Selection.Characters(aktuellZeichen - 2) = ")" Selection.Characters(aktuellZeichen - 1) = "" Selection.Characters(aktuellZeichen - 2).Font.Superscript = False While c = 0 Tz = Mid(Formel, aktuellZeichen2, 1) c = Steuerzeichen(Tz) aktuellZeichen2 = aktuellZeichen2 - 1 If aktuellZeichen2 = 0 Then c = 1 End If Wend If aktuellZeichen2 = 0 Then Selection.Characters(1).InsertBefore ("\r(;") Else Selection.Characters(aktuellZeichen2 + 1).InsertAfter ("\r(;") End IfEnd IfEnd IfEnd IfEnd IfEnd IfEnd IfIf aktuellZeichen2 = 0 ThenExit ForEnd IfNext
'bearbeitet WurzelnLänge = Len(Selection)Formel = SelectionaktuellZeichen = Länge - 2For aktuellZeichen = Länge - 2 To 2 Step -1c = 0Tausch = 0
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 80
Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "1" ThenTz = Mid(Formel, aktuellZeichen + 1, 1)If Tz = "/" ThenIf Selection.Characters(aktuellZeichen).Font.Superscript = True ThenIf Selection.Characters(aktuellZeichen - 1).Font.Superscript = False Then While c = 0 If Länge < aktuellZeichen + Tausch + 2 Then c = 1 ElseIf Selection.Characters(aktuellZeichen + Tausch + 2).Font.Superscript = False Then c = 1 Else c = 0 End If Tausch = Tausch + 1 Wend Tausch = Tausch - 1 Selection.Characters(aktuellZeichen) = "" Selection.Characters(aktuellZeichen) = ")" Selection.Characters(aktuellZeichen).Font.Superscript = False Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = ")" Then Selection.Characters(aktuellZeichen) = "" Klammersumme = -1 aktuellZeichen2 = aktuellZeichen - 2 While Klammersumme <> 0 Tz = Mid(Formel, aktuellZeichen2, 1) Klammersumme = Klammersumme + Klammer(Tz) aktuellZeichen2 = aktuellZeichen2 - 1 Wend If aktuellZeichen2 < 2 Then Widerherstellen = Len(Selection) + 2 Selection.Characters(aktuellZeichen2 + 1) = "\r(" If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Else If Selection.Characters(aktuellZeichen2 - 1) = "\" Then aktuellZeichen2 = aktuellZeichen2 - 2 Widerherstellen = Len(Selection) + 3 Selection.Characters(aktuellZeichen2 + 1) = "\r(\" If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Selection.Characters(aktuellZeichen + 2).InsertAfter (")") aktuellZeichen = aktuellZeichen + 2 Else Selection.Characters(aktuellZeichen2 + 1) = "\r(" End If End If aktuellZeichen = aktuellZeichen + 2 d = 1 For d = 1 To Tausch Selection.Characters(aktuellZeichen2 + 3).InsertAfter (Selection.Characters(aktuellZeichen + Tausch - 1)) Selection.Characters(aktuellZeichen + Tausch) = "" Next Selection.Characters(aktuellZeichen2 + 3 + Tausch).InsertAfter (";") Else aktuellZeichen2 = aktuellZeichen - 2 c = 0 If aktuellZeichen2 <> 0 Then While c = 0 Tz = Mid(Formel, aktuellZeichen2, 1) c = Steuerzeichen(Tz) If Tz = ";" Then c = 1 End If aktuellZeichen2 = aktuellZeichen2 - 1 If aktuellZeichen2 = 0 Then c = 1 End If Wend End If Widerherstellen = Len(Selection) + 2 If aktuellZeichen2 = 0 Then Selection.Characters(1).InsertBefore ("\r(") aktuellZeichen2 = aktuellZeichen2 - 1 Else Selection.Characters(aktuellZeichen2 + 1).InsertAfter ("\r(") End If aktuellZeichen = aktuellZeichen + 3
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 81
If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If d = 1 For d = 1 To Tausch Selection.Characters(aktuellZeichen2 + 4).InsertAfter (Selection.Characters(aktuellZeichen + Tausch)) Selection.Characters(aktuellZeichen + Tausch + 1) = "" Next Selection.Characters(aktuellZeichen2 + 4 + Tausch).InsertAfter (";") End IfEnd IfFormel = SelectionEnd IfEnd IfEnd IfNext
'Wandelt Brüche umLänge = Len(Selection)aktuellZeichen = Länge - 1For aktuellZeichen = Länge - 1 To 2 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "/" Then If Selection.Characters(aktuellZeichen + 1) = " " Then Selection.Characters(aktuellZeichen + 1) = "" Länge = Länge - 1 End If If Selection.Characters(aktuellZeichen - 1) = " " Then Selection.Characters(aktuellZeichen - 1) = "" aktuellZeichen = aktuellZeichen - 1 Länge = Länge - 1 End If Formel = Selection'bearbeitet die rechte Seite'345/54334-123 -> 0) 345/54334)-123'345/54334 -> 0) 345/54334)'345/5433^34 -> 0) 345/5433^34)'345/(3+5) -> -0 345/3+5)'243/(4*6) -> -0 243/4*6)'345/(3+5)^4 -> 0) 345/(3+5)^4)'354/\r(;23) -> 0) 354/\r(;23))'354/\r(;23)^56 -> 0) 354/\r(;23)56^)Verkürzung = 0Tz = Mid(Formel, aktuellZeichen + 1, 1)If Tz = "-" ThenaktuellZeichen = aktuellZeichen + 1Verkürzung = 1 'berücksichtigt nevatives VorzeichenEnd IfTz = Mid(Formel, aktuellZeichen + 1, 1)If Tz = "(" Then e = 1 ElseIf Tz = "\" Then 'geändert e = 2 'e entscheidet, wo klammern gesetzt werden Else e = 0End If 'aktuellzeichen = / oder -If e <> 0 Then If e = 2 Then Endzeichen = aktuellZeichen + 3 Else Endzeichen = aktuellZeichen + 1 End If Klammersumme = 1 While Klammersumme <> 0 Endzeichen = Endzeichen + 1 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) Wend c = 0 d = 0 'd= hochtiefstellung If Endzeichen < Länge Then While c = 0 Endzeichen = Endzeichen + 1 If Endzeichen > Länge Then c = 1 ElseIf Selection.Characters(Endzeichen).Font.Superscript = True Then c = 0 d = 1 ElseIf Selection.Characters(Endzeichen).Font.Subscript = True Then c = 0 d = -1
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 82
ElseIf Selection.Characters(Endzeichen) = "²" Then c = 0 d = 2 ElseIf Selection.Characters(Endzeichen) = "³" Then c = 0 d = 2 Else c = 1 End If Wend End If Endzeichen = Endzeichen - 1 If d <> 0 Or e = 2 Then Selection.Characters(Endzeichen - 1).InsertAfter ("))") Selection.Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) Selection.Characters(Endzeichen + 2) = "" If d = 1 Then Selection.Characters(Endzeichen).Font.Superscript = True ElseIf d = -1 Then Selection.Characters(Endzeichen).Font.Subscript = True ElseIf d = 2 Then Selection.Characters(Endzeichen).Font.Subscript = False Selection.Characters(Endzeichen).Font.Superscript = False End If Selection.Characters(Endzeichen + 1).Font.Subscript = False Selection.Characters(Endzeichen + 1).Font.Superscript = False Else Selection.Characters(aktuellZeichen + 1) = "" End IfElse Endzeichen = aktuellZeichen c = 0 While c = 0 Endzeichen = Endzeichen + 1 If Endzeichen > Länge Then c = 1 Else Tz = Mid(Formel, Endzeichen, 1) If Tz = ";" Then c = 1 Else c = Steuerzeichen(Tz) End If End If Wend If Endzeichen > Länge - 1 Then Endzeichen = Endzeichen - 1 Else If Selection.Characters(Endzeichen) = "(" And Selection.Characters(Endzeichen - 2) = "\" Then Endzeichen = Endzeichen - 3 Else Endzeichen = Endzeichen - 1 End If End If If Endzeichen = Länge Then If Selection.Characters(Endzeichen).Font.Subscript = True Then With Selection .Characters(Endzeichen - 1).InsertAfter ("))") .Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) .Characters(Endzeichen).Font.Subscript = True .Characters(Endzeichen + 1).Font.Subscript = False .Characters(Endzeichen + 1).Font.Superscript = False .Characters(Endzeichen + 2) = "" End With ElseIf Selection.Characters(Endzeichen).Font.Superscript = True Then With Selection .Characters(Endzeichen - 1).InsertAfter ("))") .Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) .Characters(Endzeichen).Font.Superscript = True .Characters(Endzeichen + 1).Font.Superscript = False .Characters(Endzeichen + 1).Font.Subscript = False .Characters(Endzeichen + 2) = "" End With Else With Selection .Characters(Endzeichen - 1).InsertAfter ("))") .Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) .Characters(Endzeichen + 2) = "" .Characters(Endzeichen).Font.Superscript = False .Characters(Endzeichen).Font.Subscript = False .Characters(Endzeichen + 1).Font.Superscript = False .Characters(Endzeichen + 1).Font.Subscript = False
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 83
End With End If Else Selection.Characters(Endzeichen).InsertAfter (")") Selection.Characters(Endzeichen + 1).Font.Subscript = False Selection.Characters(Endzeichen + 1).Font.Superscript = False End IfEnd If 'aktuellzeichen wird wieder /aktuellZeichen = aktuellZeichen - Verkürzung'bearbeitet die linke Seite und berücksichtigt folgende Fälle'345/dfg (0 \F(345;dfg)'2+354/wer (0 2+\F(354;wer)'(2+345)/rzt 0- \F(2+345;rzt)'3+(2+345)/rzt 0- 3+\F(2+345;rzt)'24^3/46 (0 \F(24^3;46)'(3+23)^54/234 (0 \F((3+23)^54;234)'\r(;354)/234 (0 \F(\r(;354);234)'\r(;354)^0,23/234 (0 \F(\r(;354)^0,23;234)'\o(L;\s\up4(_))/4365 (0 \F(\o(L;\s\up4(_));4365)'\o(L;\s\up4(_))_as/4365 (0 \F(\o(L;\s\up4(_))_as;4365)'\s\up4(_)/4365 (0 \F(\s\up4(_);4365)'4*6/45 (0 \F(4*6;45)'2+(3+8)*5/123 (0 2+\F((3+8)*5;123)'2+5*(3+8)/21 (0 2+\F(5*(3+8);21)'(2+5)*(7+s)/afd (0 \F((2+5)*(7+s);afd) extra'4*64/asd (0 \F(4*64;asd)'\r(;354)*sfd/234 (0 \F(\r(;354)*sfd;234)'3sd(345+sfd)/234 (0 \F(3sd(345+sfd);234) irreversibel für Reversetranskriptase'4/34*465/vbn (0 \F(\F(4;34)*465;vbn)'4+3*(4/(3+34)) (0 4+3*(\F(4;3+34)) extra'(345/465)^(1/234) (0 \r(234;\F(345;465)) extraSelection.Characters(aktuellZeichen) = ";"Formel = Selectionc = 0d = 0e = 0Azeichen = aktuellZeichenKlammersumme = 0While c = 0 Azeichen = Azeichen - 1 Tz = Mid(Formel, Azeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Klammer(Tz) <> 0 And Klammersumme = 0 Then d = d + 1 'Prüft, ob zwischen den Klammern weitere Klammern enthalten sind End If If Azeichen = 1 Then c = 1 'berücksichtigt selbstständig negative Vorzeichen am Anfang If Klammersumme = 1 Then Azeichen = Azeichen + 1 Else If Tz = "+" And Klammersumme = 0 Then c = 1 Azeichen = Azeichen + 1 End If If (Tz = ";" Or Tz = "=") And Klammersumme = 0 Then c = 1 'Berücksichtigt, ob der Bruch sich z.B. in einer Wurzel befindet Azeichen = Azeichen + 1 End If If (Tz = "-" Or Tz = ChrW(8211)) And Klammersumme = 0 Then If Selection.Characters(Azeichen).Font.Superscript = False Then c = 1 Azeichen = Azeichen + 1 End If End If If Klammersumme = 1 Then c = 1 Azeichen = Azeichen + 1 End If End If 'Azeichen = beginn des BruchesWendIf Selection.Characters(Azeichen) = "(" And d < 2 And Selection.Characters(aktuellZeichen - 1) = ")" Then Selection.Characters(aktuellZeichen - 1) = "" If Azeichen = 1 Then Länge = Len(Selection) Selection.Characters(1).InsertBefore ("\F") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Else Selection.Characters(Azeichen).InsertBefore ("\F") End IfElse
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 84
If Azeichen = 1 Then Länge = Len(Selection) Selection.Characters(1).InsertBefore ("\F(") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Else Selection.Characters(Azeichen).InsertBefore ("\F(") End IfEnd IfFormel = SelectionLänge = Len(Formel)End If ' gehört zu If Tz = "/" ThenNext
'erkennt große klammernLänge = Len(Selection)Formel = SelectionaktuellZeichen = Länge - 2c = 0d = 0e = 0For aktuellZeichen = Länge - 2 To 1 Step -1Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "(" Then Azeichen = aktuellZeichen - 2 If aktuellZeichen < 3 Then d = 1 ElseIf Selection.Characters(Azeichen) = "\" Then d = 0 Else e = 0 While e = 0 If Steuerzeichen(Selection.Characters(Azeichen + 1)) = 1 Then e = 1 d = 1 ElseIf Selection.Characters(Azeichen + 1) = "\" Then e = 1 d = 0 End If If Azeichen < 1 Then e = 1 d = 1 End If Azeichen = Azeichen - 1 Wend End If If d = 1 Then d = 0 Endzeichen = aktuellZeichen + 1 Klammersumme = 1 While Klammersumme <> 0 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) Endzeichen = Endzeichen + 1 Wend Endzeichen = Endzeichen - 1 e = aktuellZeichen For e = aktuellZeichen To Endzeichen Tz = Mid(Formel, e, 1) If Tz = "\" Then d = 1 End If Next End If If d = 1 Then If Azeichen < 0 Then Länge = Len(Selection) Selection.Characters(aktuellZeichen).InsertBefore ("\b") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Else Selection.Characters(aktuellZeichen).InsertBefore ("\b") End If End If End IfNext
Länge = Len(Selection) + 3Selection.Characters(1).InsertBefore ("EQ ")If Len(Selection) = 1 Then
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 85
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtendEnd If
If Hemmung = 1 ThenElsec = Ribozym()Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _PreserveFormatting:=FalseSelection.Fields.UpdateSelection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtendEnd If
End Function
Function Reversetransskriptase() As Integer'EQ zu ChickDim Länge, aktuellZeichen, Klammersumme, Tausch As IntegerDim c, d, e, Endzeichen, Azeichen As IntegerDim Zeichen, Formel, Tz As String
Reversetransskriptase = 1
'Options.SmartCutPaste = Truec = Selection.Fields.CountIf c = 1 Then Selection.Fields.ToggleShowCodes Selection.Fields(1).Code.Select Länge = Selection.Characters.Count With Selection .Cut .MoveRight Unit:=wdCharacter, Count:=1 .TypeBackspace .TypeBackspace .Paste .MoveLeft Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend End With Formel = Selection Länge = Länge - 2 Tz = Mid(Formel, Länge, 1) If Tz = " " Then Selection.Characters(Länge) = "" End If Tz = Mid(Formel, 1, 1) If Tz = "Q" Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End If c = tRNA()End If
If Selection.Characters(1) = " " ThenIf Selection.Characters(2) = " " ThenSelection.Characters(2) = ""End IfEnd If
Formel = Selection'\B entfernenLänge = Len(Formel)For aktuellZeichen = Länge - 3 To 4 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "B" Or Tz = "b" Then Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = "\" Then Selection.Characters(aktuellZeichen) = "" Selection.Characters(aktuellZeichen - 1) = "" End IfEnd IfNext
'\F umwandelnFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge - 3 To 4 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "F" Or Tz = "f" ThenTz = Mid(Formel, aktuellZeichen - 1, 1)If Tz = "\" Then Formel = Selection Länge = Len(Formel) Endzeichen = aktuellZeichen + 1 Klammersumme = 1
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 86
While Klammersumme <> 0 'aktuellzeichen = F Endzeichen = Endzeichen + 1 'Endzeichen = letzte Klammer) Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Selection.Characters(Endzeichen) = ";" And Klammersumme = 1 Then Azeichen = Endzeichen 'Azeichen = ; End If Wend 'entfernt Leerzeichen If Selection.Characters(Azeichen + 1) = " " Then Selection.Characters(Azeichen + 1) = "" Endzeichen = Endzeichen - 1 Formel = Selection End If If Selection.Characters(Azeichen - 1) = " " Then Selection.Characters(Azeichen - 1) = "" Endzeichen = Endzeichen - 1 Azeichen = Azeichen - 1 Formel = Selection End If 'bearbeitet die rechte Seite e = 0 For c = Azeichen + 2 To Endzeichen Tz = Mid(Formel, c, 1) Select Case Tz 'Selection.Characters(c) Case "+", "-", "*", "·", "/", ChrW(8729) e = 0 Exit For Case Else e = 1 End Select Next If e = 1 Then Selection.Characters(Endzeichen) = "" Else Selection.Characters(Azeichen).InsertAfter ("(") End If Selection.Characters(Azeichen) = "/" 'Bearbeitet die linke Seite e = 0 '+3 berücksichtigt negative Vorzeichen For c = aktuellZeichen + 3 To Azeichen - 1 Tz = Mid(Formel, c, 1) Select Case Tz 'Selection.Characters(c) Case "+", "-" e = 1 Exit For Case Else e = 0 ' Klammer entfernen End Select Next If e = 1 Then If Selection.Characters(aktuellZeichen + 2) = "(" Then e = 0 ElseIf Selection.Characters(aktuellZeichen + 2) = "-" And Selection.Characters(aktuellZeichen + 3) = "(" Then e = 0 Else e = 1 'Klammer hinzufügen End If End If If e = 1 Then With Selection.Characters(Azeichen) .InsertBefore (")") .Font.Superscript = False .Font.Superscript = False End With Else Selection.Characters(aktuellZeichen + 1) = "" End If Selection.Characters(aktuellZeichen) = "" Selection.Characters(aktuellZeichen - 1) = ""End IfEnd IfNext
'\R umwandelnFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge - 3 To 4 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "R" Or Tz = "r" ThenTz = Mid(Formel, aktuellZeichen - 1, 1)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 87
If Tz = "\" Then Formel = Selection Endzeichen = aktuellZeichen + 1 Klammersumme = 1 While Klammersumme <> 0 'aktuellzeichen = R Endzeichen = Endzeichen + 1 'Endzeichen = letzte Klammer) Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = ";" And Klammersumme = 1 Then Azeichen = Endzeichen 'Azeichen = ; End If Wend 'entfernt Leerzeichen If Selection.Characters(Azeichen + 1) = " " Then Selection.Characters(Azeichen + 1) = "" Endzeichen = Endzeichen - 1 Formel = Selection End If If Selection.Characters(Azeichen - 1) = " " Then Selection.Characters(Azeichen - 1) = "" Endzeichen = Endzeichen - 1 Azeichen = Azeichen - 1 Formel = Selection End If e = 0 Tausch = 0 For c = Azeichen + 1 To Endzeichen Tz = Mid(Formel, c, 1) Select Case Tz Case "+", "-", "*", "·", "/", ChrW(8729), ChrW(8211) e = 1 '1= Klammer hinzufügen Exit For Case Else If Selection.Characters(c).Font.Superscript = True Or Selection.Characters(c).Font.Subscript = True Then If Selection.Characters(aktuellZeichen).Font.Superscript = True Then e = 0 Selection.Characters(Endzeichen).InsertBefore ("^") Endzeichen = Endzeichen + 1 Else e = 1 End If Exit For Else e = 0 End If End Select Next If aktuellZeichen = Azeichen - 2 Then If e = 1 Then' Berücksichtigt folgende Fälle'EQ \r(;123) ->-- 123^0,5'EQ \r(;123+4*(234)-123) ->00 (123+4*(234)-123)^0,5'EQ \r(;\s\up1(4)) ->-- \s\up1(4)^0,5'EQ \r(;-354) ->00 (-354)^0,5'EQ \r(;(354-34)^0,4) ->00 ((354-34)^0,4)^0,5'EQ \r(;(354-34)_0,4) ->00 ((354-34)_0,4)^0,5 With Selection .Characters(Endzeichen).InsertBefore (")0,5") .Characters(Endzeichen + 4) = "" .Characters(Endzeichen).Font.Superscript = False .Characters(Endzeichen).Font.Subscript = False .Characters(Endzeichen + 1).Font.Superscript = True .Characters(Endzeichen + 2).Font.Superscript = True .Characters(Endzeichen + 3).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen + 1) = "" .Characters(aktuellZeichen - 1) = "" End With Else With Selection .Characters(Endzeichen).InsertBefore ("0,5") .Characters(Endzeichen + 3) = "" .Characters(Endzeichen).Font.Superscript = True .Characters(Endzeichen + 1).Font.Superscript = True .Characters(Endzeichen + 2).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen - 1) = "" End With End If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 88
Else Tausch = Azeichen - aktuellZeichen - 2 c = 0 For d = 1 To Tausch If Steuerzeichen(Selection.Characters(aktuellZeichen + 1 + d)) = 1 Then If Klammer(Selection.Characters(aktuellZeichen + 1 + d)) = 0 Then c = 1 'erzeugt eine Klammer; irreversibel für RNA-Polymerase End If End If Next If c = 1 Then Selection.Characters(Azeichen).InsertBefore (")") Selection.Characters(aktuellZeichen + 1).InsertAfter ("(") Tausch = Tausch + 2 Endzeichen = Endzeichen + 2 Azeichen = Azeichen + 2 End If For d = 1 To Tausch With Selection .Characters(Endzeichen).InsertBefore (Selection.Characters(aktuellZeichen + 2)) .Characters(Endzeichen).Font.Superscript = True .Characters(aktuellZeichen + 2) = "" End With Next Selection.Characters(Endzeichen) = "" If e = 1 Then With Selection .Characters(Endzeichen - Tausch).InsertBefore "1/" .Characters(Endzeichen - Tausch - 1).InsertAfter (")") .Characters(Endzeichen - Tausch + 1).Font.Superscript = True .Characters(Endzeichen - Tausch + 2).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen + 1) = "" .Characters(aktuellZeichen - 1) = "" End With Else With Selection .Characters(Endzeichen - Tausch).InsertBefore "1/" '& Selection.Characters(Endzeichen - Tausch) .Characters(Endzeichen - Tausch).Font.Superscript = True .Characters(Endzeichen - Tausch + 1).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen - 1) = "" End With End If End IfEnd IfEnd IfNext
For c = 1 To 3 'ganz zum schlussIf Selection.Characters(c) = "E" Or Selection.Characters(c) = "e" ThenIf Selection.Characters(c + 1) = "Q" Or Selection.Characters(c + 1) = "q" ThenIf Selection.Characters(c + 2) = " " Then If c = 1 Then Länge = Len(Selection) - 3 End If Selection.Characters(c + 2).Delete Selection.Characters(c + 1).Delete Selection.Characters(c).Delete If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Exit ForEnd IfEnd IfEnd IfNext
End Function
Function Ribosom() As Integer'EQ zu WikipediaDim Länge, aktuellZeichen, Klammersumme, Tausch As IntegerDim c, d, e, Endzeichen, Azeichen As IntegerDim Zeichen, Formel, Tz, Schriftart, Schriftart2 As String
Ribosom = 1
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 89
c = DNAse()Formel = SelectionLänge = Len(Formel)Tz = Mid(Formel, Länge, 1) & "</math>"Selection.Characters(Länge).InsertBefore (Tz)Selection.Characters(Länge + 8) = ""Tz = Mid(Formel, 1, 1)If Tz = " " Then Selection.Characters(1) = ":<math>" d = 1 Tz = Mid(Formel, 2, 1) Else Selection.Characters(1).InsertBefore (":<math>") d = 0End IfLänge = Länge - d + 14If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtendEnd IfIf Tz = "e" Or Tz = "E" Then Selection.Characters(8) = "" Selection.Characters(8) = "" Else Tz = Mid(Formel, 3, 1) If Tz = "e" Or Tz = "E" Then Selection.Characters(9) = "" Selection.Characters(9) = "" End IfEnd If
'große KlammernFormel = SelectionLänge = Len(Formel)For aktuellZeichen = Länge - 7 To 8 Step -1Tz = Mid(Formel, aktuellZeichen, 3)If Tz = "\b(" Or Tz = "\B(" Then Klammersumme = 1 Endzeichen = aktuellZeichen + 3 While Klammersumme <> 0 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) Endzeichen = Endzeichen + 1 Wend Selection.Characters(Endzeichen - 1).InsertBefore ("\right") Selection.Characters(aktuellZeichen + 1) = "left" Formel = SelectionEnd IfNext
'BrücheLänge = Len(Formel)For aktuellZeichen = Länge - 7 To 8 Step -1Tz = Mid(Formel, aktuellZeichen, 3)If Tz = "\f(" Or Tz = "\F(" Then Klammersumme = 1 Endzeichen = aktuellZeichen + 3 While Klammersumme <> 0 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = ";" And Klammersumme = 1 Then Azeichen = Endzeichen End If Endzeichen = Endzeichen + 1 Wend 'aktuellZeichen= \ Azeichen= ; Endzeichen-1 =) Selection.Characters(Endzeichen - 1) = "}" Selection.Characters(Azeichen) = "}{" Selection.Characters(aktuellZeichen + 2) = "frac{" Selection.Characters(aktuellZeichen + 1) = "" Formel = SelectionEnd IfNext
'WurzelnLänge = Len(Formel)For aktuellZeichen = Länge - 7 To 8 Step -1Tz = Mid(Formel, aktuellZeichen, 3)If Tz = "\r(" Or Tz = "\R(" Then Klammersumme = 1 Endzeichen = aktuellZeichen + 3 While Klammersumme <> 0 Tz = Mid(Formel, Endzeichen, 1)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 90
Klammersumme = Klammersumme + Klammer(Tz) If Tz = ";" And Klammersumme = 1 Then Azeichen = Endzeichen End If Endzeichen = Endzeichen + 1 Wend 'aktuellZeichen= \ Azeichen= ; Endzeichen-1 =) If Azeichen = aktuellZeichen + 3 Then Selection.Characters(Endzeichen - 1) = "}" Selection.Characters(aktuellZeichen + 3) = "" Selection.Characters(aktuellZeichen + 1) = "s" Selection.Characters(aktuellZeichen + 2) = "qrt{" Else Selection.Characters(Endzeichen - 1) = "}" Selection.Characters(Azeichen) = "]{" Selection.Characters(aktuellZeichen + 1) = "s" Selection.Characters(aktuellZeichen + 2) = "qrt[" End If Formel = SelectionEnd IfNext
'Sonderzeichen UnicodeLänge = Len(Formel)For aktuellZeichen = Länge - 7 To 8 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) Select Case AscW(Tz) Case 42 Selection.Characters(aktuellZeichen) = "\cdot " Case 44 Selection.Characters(aktuellZeichen) = "{,}" Case 183 Selection.Characters(aktuellZeichen) = "\cdot " Case 186 Selection.Characters(aktuellZeichen) = "^\circ " Case 196 Selection.Characters(aktuellZeichen) = "\ddot{A}" Case 214 Selection.Characters(aktuellZeichen) = "\ddot{O}" Case 216 Selection.Characters(aktuellZeichen) = "\varnothing " Case 220 Selection.Characters(aktuellZeichen) = "\ddot{U}" Case 228 Selection.Characters(aktuellZeichen) = "\ddot{a}" Case 246 Selection.Characters(aktuellZeichen) = "\ddot{o}" Case 248 Selection.Characters(aktuellZeichen) = "\varnothing " Case 252 Selection.Characters(aktuellZeichen) = "\ddot{u}" Case 913 Selection.Characters(aktuellZeichen) = "\Alpha " Case 914 Selection.Characters(aktuellZeichen) = "\Beta " Case 915 Selection.Characters(aktuellZeichen) = "\Gamma " Case 916 Selection.Characters(aktuellZeichen) = "\Delta " Case 917 Selection.Characters(aktuellZeichen) = "\Epsilon " Case 918 Selection.Characters(aktuellZeichen) = "\Zeta " Case 919 Selection.Characters(aktuellZeichen) = "\Eta " Case 920 Selection.Characters(aktuellZeichen) = "\Theta " Case 921 Selection.Characters(aktuellZeichen) = "\Iota " Case 922 Selection.Characters(aktuellZeichen) = "\Kappa " Case 923 Selection.Characters(aktuellZeichen) = "\Lambda " Case 924 Selection.Characters(aktuellZeichen) = "\Mu " Case 925 Selection.Characters(aktuellZeichen) = "\Nu " Case 926 Selection.Characters(aktuellZeichen) = "\Omicron " Case 927 Selection.Characters(aktuellZeichen) = "\Xi " Case 928
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 91
Selection.Characters(aktuellZeichen) = "\Pi " Case 929 Selection.Characters(aktuellZeichen) = "\Rho " Case 931 Selection.Characters(aktuellZeichen) = "\Sigma " Case 932 Selection.Characters(aktuellZeichen) = "\Tau " Case 933 Selection.Characters(aktuellZeichen) = "\Upsilon " Case 934 Selection.Characters(aktuellZeichen) = "\Phi " Case 935 Selection.Characters(aktuellZeichen) = "\Chi " Case 936 Selection.Characters(aktuellZeichen) = "\Psi " Case 937 Selection.Characters(aktuellZeichen) = "\Omega " Case 945 Selection.Characters(aktuellZeichen) = "\alpha " Case 946 Selection.Characters(aktuellZeichen) = "\beta " Case 947 Selection.Characters(aktuellZeichen) = "\gamma " Case 948 Selection.Characters(aktuellZeichen) = "\delta " Case 949 Selection.Characters(aktuellZeichen) = "\epsilon " Case 950 Selection.Characters(aktuellZeichen) = "\zeta " Case 951 Selection.Characters(aktuellZeichen) = "\eta " Case 952 Selection.Characters(aktuellZeichen) = "\theta " Case 953 Selection.Characters(aktuellZeichen) = "\iota " Case 954 Selection.Characters(aktuellZeichen) = "\kappa " Case 955 Selection.Characters(aktuellZeichen) = "\lambda " Case 956 Selection.Characters(aktuellZeichen) = "\mu " Case 957 Selection.Characters(aktuellZeichen) = "\nu " Case 958 Selection.Characters(aktuellZeichen) = "\xi " Case 959 Selection.Characters(aktuellZeichen) = "\omicron " Case 960 Selection.Characters(aktuellZeichen) = "\pi " Case 961 Selection.Characters(aktuellZeichen) = "\rho " Case 962 Selection.Characters(aktuellZeichen) = "\varsigma " Case 963 Selection.Characters(aktuellZeichen) = "\sigma " Case 964 Selection.Characters(aktuellZeichen) = "\tau " Case 965 Selection.Characters(aktuellZeichen) = "\upsilon " Case 966 Selection.Characters(aktuellZeichen) = "\phi " Case 967 Selection.Characters(aktuellZeichen) = "\chi " Case 968 Selection.Characters(aktuellZeichen) = "\Psi " Case 969 Selection.Characters(aktuellZeichen) = "\omega " Case 8729 Selection.Characters(aktuellZeichen) = "\cdot " Case 8734 Selection.Characters(aktuellZeichen) = "\infty " Case 8776 Selection.Characters(aktuellZeichen) = "\approx " Case 8804 Selection.Characters(aktuellZeichen) = "\le " Case 8805 Selection.Characters(aktuellZeichen) = "\ge " End SelectNext
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 92
'Schriftart SymbolSchriftart = Selection.Font.NameFormel = SelectionLänge = Len(Formel)d = 0If Schriftart = "" Then d = 1 Schriftart = Selection.Characters(Länge).Font.Name If Schriftart = "Symbol" Then Schriftart = Selection.Characters(1).Font.Name If Schriftart = "Symbol" Then For c = 2 To Länge - 1 Schriftart = Selection.Characters(c).Font.Name If Schriftart <> "Symbol" Then Exit For Next End If End IfEnd IfIf d = 1 Or Schriftart = "Symbol" Then 'verhindert BremseFor aktuellZeichen = Länge To 1 Step -1If Selection.Characters(aktuellZeichen).Font.Name = "Symbol" Then Tz = Mid(Formel, aktuellZeichen, 1) e = AscW(Tz) e = e Mod 256 If e < 0 Then e = e + 256 If e < 64 Then Selection.Characters(aktuellZeichen) = Chr(e) End If Selection.Characters(aktuellZeichen).Font.Name = Schriftart Select Case e Case 65 Selection.Characters(aktuellZeichen) = "\Alpha " Case 66 Selection.Characters(aktuellZeichen) = "\Beta " Case 67 Selection.Characters(aktuellZeichen) = "\Chi " Case 68 Selection.Characters(aktuellZeichen) = "\Delta " Case 69 Selection.Characters(aktuellZeichen) = "\Epsilon " Case 70 Selection.Characters(aktuellZeichen) = "\Phi " Case 71 Selection.Characters(aktuellZeichen) = "\Gamma " Case 72 Selection.Characters(aktuellZeichen) = "\Eta " Case 73 Selection.Characters(aktuellZeichen) = "\Iota " Case 74 Selection.Characters(aktuellZeichen) = "\vartheta " Case 75 Selection.Characters(aktuellZeichen) = "\Kappa " Case 76 Selection.Characters(aktuellZeichen) = "\Lambda " Case 77 Selection.Characters(aktuellZeichen) = "\Mu " Case 78 Selection.Characters(aktuellZeichen) = "\Nu " Case 79 Selection.Characters(aktuellZeichen) = "\Omicron " Case 80 Selection.Characters(aktuellZeichen) = "\Pi " Case 81 Selection.Characters(aktuellZeichen) = "\Theta " Case 82 Selection.Characters(aktuellZeichen) = "\Rho " Case 83 Selection.Characters(aktuellZeichen) = "\Sigma " Case 84 Selection.Characters(aktuellZeichen) = "\Tau " Case 85 Selection.Characters(aktuellZeichen) = "\Upsilon " Case 86 Selection.Characters(aktuellZeichen) = "\varsigma " Case 87 Selection.Characters(aktuellZeichen) = "\Omega " Case 88 Selection.Characters(aktuellZeichen) = "\Xi " Case 89 Selection.Characters(aktuellZeichen) = "\Psi " Case 90
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 93
Selection.Characters(aktuellZeichen) = "\Zeta " Case 97 Selection.Characters(aktuellZeichen) = "\alpha " Case 98 Selection.Characters(aktuellZeichen) = "\beta " Case 99 Selection.Characters(aktuellZeichen) = "\chi " Case 100 Selection.Characters(aktuellZeichen) = "\delta " Case 101 Selection.Characters(aktuellZeichen) = "\epsilon " Case 102 Selection.Characters(aktuellZeichen) = "\phi " Case 103 Selection.Characters(aktuellZeichen) = "\gamma " Case 104 Selection.Characters(aktuellZeichen) = "\eta " Case 105 Selection.Characters(aktuellZeichen) = "\iota " Case 106 Selection.Characters(aktuellZeichen) = "\kappa " Case 107 Selection.Characters(aktuellZeichen) = "\lambda " Case 108 Selection.Characters(aktuellZeichen) = "\mu " Case 109 Selection.Characters(aktuellZeichen) = "\nu " Case 110 Selection.Characters(aktuellZeichen) = "\omicron " Case 111 Selection.Characters(aktuellZeichen) = "\pi " Case 112 Selection.Characters(aktuellZeichen) = "\theta " Case 113 Selection.Characters(aktuellZeichen) = "\rho " Case 114 Selection.Characters(aktuellZeichen) = "\sigma " Case 115 Selection.Characters(aktuellZeichen) = "\tau " Case 116 Selection.Characters(aktuellZeichen) = "\upsilon " Case 117 Selection.Characters(aktuellZeichen) = "\varpi " Case 118 Selection.Characters(aktuellZeichen) = "\omega " Case 119 Selection.Characters(aktuellZeichen) = "\xi " Case 120 Selection.Characters(aktuellZeichen) = "\psi " Case 121 Selection.Characters(aktuellZeichen) = "\zeta " Case 163 Selection.Characters(aktuellZeichen) = "\le " Case 165 Selection.Characters(aktuellZeichen) = "\infty " Case 176 Selection.Characters(aktuellZeichen) = "^\circ " Case 177 Selection.Characters(aktuellZeichen) = "\pm " Case 179 Selection.Characters(aktuellZeichen) = "\ge " Case 187 Selection.Characters(aktuellZeichen) = "\approx " Case 198 Selection.Characters(aktuellZeichen) = "\varnothing " Case 213 Selection.Characters(aktuellZeichen) = "\Pi " Case 229 Selection.Characters(aktuellZeichen) = "\Sigma " End SelectEnd IfNextEnd If
'bearbeitet LambdaquerFormel = SelectionLänge = Len(Formel)
For aktuellZeichen = Länge - 20 To 8 Step -1 Tz = Mid(Formel, aktuellZeichen, 3)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 94
If Tz = "\o(" Then c = 0 Tz = Mid(Formel, aktuellZeichen + 3, 11) If Tz = "\lambda ;¯)" Or Tz = "¯;\lambda )" Then c = 1: d = 0 Tz = Mid(Formel, aktuellZeichen + 3, 19) If Tz = "\lambda ;\s\up1(¯))" Or Tz = "\s\up1(¯);\lambda )" Then c = 1: d = 1 If c = 1 Then With Selection .Characters(aktuellZeichen + 2) = "v" .Characters(aktuellZeichen + 3) = "e" .Characters(aktuellZeichen + 4) = "r" .Characters(aktuellZeichen + 5) = "l" .Characters(aktuellZeichen + 6) = "i" .Characters(aktuellZeichen + 7) = "n" .Characters(aktuellZeichen + 8) = "e" .Characters(aktuellZeichen + 9) = "{" .Characters(aktuellZeichen + 10) = "\" .Characters(aktuellZeichen + 11) = "l" .Characters(aktuellZeichen + 12) = "a" End With If d = 0 Then Selection.Characters(aktuellZeichen + 13) = "mbda }" Else With Selection .Characters(aktuellZeichen + 13) = "m" .Characters(aktuellZeichen + 14) = "b" .Characters(aktuellZeichen + 15) = "d" .Characters(aktuellZeichen + 16) = "a" .Characters(aktuellZeichen + 17) = " " .Characters(aktuellZeichen + 18) = "}" .Characters(aktuellZeichen + 19) = "" .Characters(aktuellZeichen + 19) = "" .Characters(aktuellZeichen + 19) = "" End With End If End If End IfNext
End Function
Function Reversetranslatase(ByVal Hemmung As Integer) As Integer'Wikipedia zu EQDim Länge, aktuellZeichen, Klammersumme, Tausch As IntegerDim c, d, e, Endzeichen, Verkürzung, Azeichen As IntegerDim Zeichen, Formel, Tz, Tt, Symbol, Schriftart, Schriftart2 As String
Reversetranslatase = 1
Formel = SelectionLänge = Len(Formel)
For aktuellZeichen = Länge - 9 To 7 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "\" Then c = 1 Endzeichen = 1 While c = 1 Tt = Mid(Formel, aktuellZeichen + Endzeichen, 1) If Tt <> "" Then d = Asc(Tt) Else d = 63 End If If (d > 64 And d < 91) Or (d > 96 And d < 123) Then c = 1 Endzeichen = Endzeichen + 1 ElseIf d = 123 Then Endzeichen = Endzeichen + 3 c = 0 Else c = 0 End If Wend Tt = Mid(Formel, aktuellZeichen + 1, Endzeichen - 1) e = 1 Select Case Tt Case "cdot" Symbol = ChrW(183) Case "circ" Symbol = ChrW(186)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 95
aktuellZeichen = aktuellZeichen - 1 Case "ddot{A}" Symbol = ChrW(196) Case "ddot{O}" Symbol = ChrW(214) Case "ddot{U}" Symbol = ChrW(220) Case "ddot{a}" Symbol = ChrW(228) Case "ddot{o}" Symbol = ChrW(246) Case "varnothing" Symbol = ChrW(248) Case "ddot{u}" Symbol = ChrW(252) Case "Alpha" Symbol = ChrW(913) Case "Beta" Symbol = ChrW(914) Case "Gamma" Symbol = ChrW(915) Case "Delta" Symbol = ChrW(916) Case "Epsilon" Symbol = ChrW(917) Case "Zeta" Symbol = ChrW(918) Case "Eta" Symbol = ChrW(919) Case "Theta" Symbol = ChrW(920) Case "Iota" Symbol = ChrW(921) Case "Kappa" Symbol = ChrW(922) Case "Lambda" Symbol = ChrW(923) Case "Mu" Symbol = ChrW(924) Case "Nu" Symbol = ChrW(925) Case "Omicron" Symbol = ChrW(926) Case "Xi" Symbol = ChrW(927) Case "Pi" Symbol = ChrW(928) Case "Rho" Symbol = ChrW(929) Case "Sigma" Symbol = ChrW(931) Case "Tau" Symbol = ChrW(932) Case "Upsilon" Symbol = ChrW(933) Case "Phi" Symbol = ChrW(934) Case "Chi" Symbol = ChrW(935) Case "Psi" Symbol = ChrW(936) Case "Omega" Symbol = ChrW(937) Case "alpha" Symbol = ChrW(945) Case "beta" Symbol = ChrW(946) Case "gamma" Symbol = ChrW(947) Case "delta" Symbol = ChrW(948) Case "epsilon" Symbol = ChrW(949) Case "zeta" Symbol = ChrW(950) Case "eta" Symbol = ChrW(951) Case "theta" Symbol = ChrW(952) Case "iota" Symbol = ChrW(953)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 96
Case "kappa" Symbol = ChrW(954) Case "lambda" Symbol = ChrW(955) Case "mu" Symbol = ChrW(956) Case "nu" Symbol = ChrW(957) Case "xi" Symbol = ChrW(958) Case "omicron" Symbol = ChrW(959) Case "pi" Symbol = ChrW(960) Case "rho" Symbol = ChrW(961) Case "varsigma" Symbol = ChrW(962) Case "sigma" Symbol = ChrW(963) Case "tau" Symbol = ChrW(964) Case "upsilon" Symbol = ChrW(965) Case "phi" Symbol = ChrW(966) Case "chi" Symbol = ChrW(967) Case "Psi" Symbol = ChrW(968) Case "omega" Symbol = ChrW(969) Case "infty" Symbol = ChrW(8734) Case "approx" Symbol = ChrW(8776) Case "ungleich" Symbol = ChrW(8800) Case "le" Symbol = ChrW(8804) Case "ge" Symbol = ChrW(8805) Case Else e = 0 End Select If e = 1 Then If d = 32 Then Formel = Mid(Formel, 1, aktuellZeichen - 1) & Symbol & Mid(Formel, aktuellZeichen + Endzeichen + 1) Else Formel = Mid(Formel, 1, aktuellZeichen - 1) & Symbol & Mid(Formel, aktuellZeichen + Endzeichen) End If End IfEnd IfNext
'KommaLänge = Len(Formel)For aktuellZeichen = Länge - 9 To 7 Step -1Tz = Mid(Formel, aktuellZeichen, 3)If Tz = "{,}" ThenFormel = Mid(Formel, 1, aktuellZeichen - 1) & "," & Mid(Formel, aktuellZeichen + 3)End IfNext
'overlineLänge = Len(Formel)For aktuellZeichen = Länge - 17 To 7 Step -1 '77Tz = Mid(Formel, aktuellZeichen, 10)If Tz = "\overline{" Then Tt = Mid(Formel, aktuellZeichen + 11, 1) If Tt = "}" Then Mid(Formel, aktuellZeichen + 2, 8) = "(\s\up1(" Mid(Formel, aktuellZeichen + 11, 1) = ")" Formel = Mid(Formel, 1, aktuellZeichen + 9) & "¯);" & Mid(Formel, aktuellZeichen + 10) End IfEnd IfNext
'bearbeitet WurzelnLänge = Len(Formel)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 97
For aktuellZeichen = Länge - 14 To 7 Step -1Tz = Mid(Formel, aktuellZeichen, 5)If Tz = "\sqrt" Then Formel = Mid(Formel, 1, aktuellZeichen) & "r(" & Mid(Formel, aktuellZeichen + 5) Endzeichen = aktuellZeichen + 3 Tz = Mid(Formel, Endzeichen, 1) If Tz = "[" Then Formel = Mid(Formel, 1, Endzeichen - 1) & Mid(Formel, Endzeichen + 1) While Tz <> "]" Endzeichen = Endzeichen + 1 Tz = Mid(Formel, Endzeichen, 1) If Tz = "" Then Tz = "]" Wend Formel = Mid(Formel, 1, Endzeichen - 1) & Mid(Formel, Endzeichen + 1) Tz = Mid(Formel, Endzeichen, 1) End If If Tz = "{" Then Mid(Formel, Endzeichen, 1) = ";" Klammersumme = 1 While Klammersumme > 0 Endzeichen = Endzeichen + 1 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer2(Tz) Wend Mid(Formel, Endzeichen, 1) = ")" End IfEnd IfNext
'BrücheLänge = Len(Formel)For aktuellZeichen = Länge - 17 To 7 Step -1Tz = Mid(Formel, aktuellZeichen, 5)If Tz = "\frac" Then Mid(Formel, aktuellZeichen + 5, 1) = "(" Formel = Mid(Formel, 1, aktuellZeichen + 1) & Mid(Formel, aktuellZeichen + 5) Klammersumme = 1 Endzeichen = aktuellZeichen + 2 While Klammersumme > 0 Endzeichen = Endzeichen + 1 Klammersumme = Klammersumme + Klammer2(Mid(Formel, Endzeichen, 1)) Wend Klammersumme = 1 If Mid(Formel, Endzeichen + 1, 1) = "{" Then Formel = Mid(Formel, 1, Endzeichen - 1) & ";" & Mid(Formel, Endzeichen + 2) While Klammersumme > 0 Endzeichen = Endzeichen + 1 Klammersumme = Klammersumme + Klammer2(Mid(Formel, Endzeichen, 1)) Wend Mid(Formel, Endzeichen, 1) = ")" Else c = MsgBox("Fehler im Bruch der Formel", vbCritical) Formel = Mid(Formel, 1, Endzeichen - 1) & ";fehlt)" & Mid(Formel, Endzeichen + 1) End IfEnd IfNext
'große KlammernLänge = Len(Formel)For aktuellZeichen = Länge - 13 To 7 Step -1Tz = Mid(Formel, aktuellZeichen, 6)If Tz = "\right" Then Formel = Mid(Formel, 1, aktuellZeichen - 1) & Mid(Formel, aktuellZeichen + 6)End IfIf Tz = "\left(" Then Formel = Mid(Formel, 1, aktuellZeichen - 1) & "\b" & Mid(Formel, aktuellZeichen + 5)End IfNext
'^2 ^3Länge = Len(Formel)For aktuellZeichen = Länge - 8 To 8 Step -1Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "^" Then Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = "2" Then Formel = Mid(Formel, 1, aktuellZeichen - 1) & "²" & Mid(Formel, aktuellZeichen + 2) ElseIf Tz = "3" Then Formel = Mid(Formel, 1, aktuellZeichen - 1) & "³" & Mid(Formel, aktuellZeichen + 2) End IfEnd If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 98
Next
Länge = Len(Formel)Formel = "EQ " & Mid(Formel, 9, Länge - 15)Länge = Länge - 12Selection.TypeText FormelSelection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'stellt hochtief von DNApolymerase mit {} statt ()aktuellZeichen = 1For aktuellZeichen = Länge To 5 Step -1Verkürzung = 0Tz = Mid(Formel, aktuellZeichen, 1)If Tz = "^" Then d = 1 ElseIf Tz = "_" Then d = -1 Else d = 0End IfIf d <> 0 Then Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = " " Then Selection.Characters(aktuellZeichen + 1) = "" Formel = Selection Tz = Mid(Formel, aktuellZeichen + 1, 1) End If Selection.Characters(aktuellZeichen) = "" '+1 im string If Tz = "{" Then Klammersumme = 1 Selection.Characters(aktuellZeichen) = "" While Klammersumme > 0 If d = 1 Then Selection.Characters(aktuellZeichen).Font.Superscript = True ElseIf d = -1 Then Selection.Characters(aktuellZeichen).Font.Subscript = True End If aktuellZeichen = aktuellZeichen + 1 Verkürzung = Verkürzung + 1 Tz = Mid(Formel, aktuellZeichen + 2, 1) Klammersumme = Klammersumme + Klammer2(Tz) If Tz = "^" Then Selection.Characters(aktuellZeichen).InsertBefore Tz d = 0 ElseIf Tz = "_" Then Selection.Characters(aktuellZeichen).InsertBefore Tz d = 0 End If Wend Selection.Characters(aktuellZeichen) = "" aktuellZeichen = aktuellZeichen - Verkürzung Else 'Tz <> "{" Tz = Mid(Formel, aktuellZeichen + 1, 1) c = Steuerzeichen(Tz) While c = 0 If d = 1 Then Selection.Characters(aktuellZeichen).Font.Superscript = True Else Selection.Characters(aktuellZeichen).Font.Subscript = True End If aktuellZeichen = aktuellZeichen + 1 Verkürzung = Verkürzung + 1 Tz = Mid(Formel, aktuellZeichen + 1, 1) c = Steuerzeichen(Tz) If Tz = "" Or Tz = ";" Then c = 1 End If Wend aktuellZeichen = aktuellZeichen - Verkürzung End IfEnd IfNext
If Hemmung = 1 ThenElsec = Ribozym()Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _PreserveFormatting:=FalseSelection.Fields.UpdateSelection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtendEnd If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 99
End Function
Sub Formelwürfel()Dim a, b, c, d, e, durch, Steuer As IntegerDim Klammersumme, Zusatzlänge, Länge, aktuellZeichen As IntegerDim X, Y, Formel, Tz As StringDim Ort(3), Position(255) As Integer
Application.ScreenUpdating = Falsec = Makrozählen("Formelwürfel ")
For d = 1 To 20 'Anzahl der Formeln
Selection.TypeText ("2")Zusatzlänge = 0durch = 0c = 200 'Komplexitzität der FormelKlammersumme = 0For b = 1 To ca = Int((122 - 32 + 1) * Rnd + 32)X = Chr(a)If Steuer = 0 Then For e = 1 To 4 If Steuerzeichen(X) = 0 Then a = Int((122 - 32 + 1) * Rnd + 32) X = Chr(a) End If If X = "!" Or X = "§" Or X = "%" Then Exit For End If If X = "+" Or X = "j" Or X = "#" Or X = "&" Or X = "$" Then X = "/" Exit For End If NextElse If a < 60 Then a = a + 20 X = Chr(a) Steuer = 0 End IfEnd IfIf a = 41 And Klammersumme = 0 Thena = 40End IfIf a > 65 And a < 122 ThenIf Int(4 * Rnd) = 3 Thena = a + 848End IfEnd IfX = ChrW(a)If b = 1 And (X = "^" Or X = "_") ThenX = "1"End IfIf X = "(" ThenKlammersumme = Klammersumme + 1ElseIf X = ")" ThenKlammersumme = Klammersumme - 1End IfIf X = "!" Or X = "§" Or X = "%" Or X = "." Or X = "@" Then If Klammersumme > 0 Then X = Chr(Int((122 - 98) * Rnd + 97)) & ")^0,5+" Zusatzlänge = Zusatzlänge + 6 Klammersumme = Klammersumme - 1 Else X = "^0,5-" Zusatzlänge = Zusatzlänge + 4 End IfElseIf X = ":" Or X = ";" Then Selection.MoveLeft Unit:=wdCharacter, Count:=1 If Steuerzeichen(Selection.Characters(1)) = 0 Then X = "^(1/" & Chr(Int((122 - 98) * Rnd + 97)) & ")" Zusatzlänge = Zusatzlänge + 5 Else X = "*" End If Selection.MoveRight Unit:=wdCharacter, Count:=1ElseIf X = "\" ThenX = "+"ElseIf X = "j" Or X = "#" Or X = "&" Or X = "$" ThenX = "/"ElseIf X = "=" Then
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 100
If Klammersumme = 0 Then X = "(" Klammersumme = Klammersumme + 1 Else X = ")" Klammersumme = Klammersumme - 1 End IfEnd IfIf X = "/" Or X = "*" Then If durch = 1 Then X = "-" End If If X = "/" And durch = 0 Then durch = 1 End IfEnd IfIf X = "+" Or X = "-" Thendurch = 0End If
If b = c ThenIf X = "^" Or X = "_" ThenX = "j"End IfEnd If
If X = "/" ThenX = Chr(Int((122 - 98) * Rnd + 97)) & X & Chr(Int((122 - 98) * Rnd + 97))Zusatzlänge = Zusatzlänge + 2End If
Selection.TypeText (X)X = Left(X, 1)Steuer = Steuerzeichen(X)Next
If Klammersumme > 0 ThenFor b = 1 To KlammersummeSelection.TypeText (")")NextEnd If
Selection.MoveLeft Unit:=wdCharacter, Count:=c + Zusatzlänge + Klammersumme + 1, Extend:=wdExtend
a = DNApolymerase()a = RNApolymerase(1)
'baut große Objekte herumFor c = 1 To 5 'Anzahl der großen Objekte Formel = Selection Länge = Len(Formel) X = "" Klammersumme = 0 aktuellZeichen = 3 e = 0 While aktuellZeichen < Länge aktuellZeichen = aktuellZeichen + 1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "\" Then aktuellZeichen = aktuellZeichen + 2 Tz = Mid(Formel, aktuellZeichen, 1) End If If Tz = "(" Then Klammersumme = 1 aktuellZeichen = aktuellZeichen + 1 Tz = Mid(Formel, aktuellZeichen, 1) While Klammersumme > 0 Klammersumme = Klammersumme + Klammer(Tz) aktuellZeichen = aktuellZeichen + 1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "(" And Klammersumme = 0 Then Klammersumme = 1 aktuellZeichen = aktuellZeichen + 1 Tz = Mid(Formel, aktuellZeichen, 1) End If If Tz = "\" And Klammersumme = 0 Then Klammersumme = 1 aktuellZeichen = aktuellZeichen + 3 Tz = Mid(Formel, aktuellZeichen, 1) End If Wend End If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 101
e = e + 1 Position(e) = aktuellZeichen X = X & Tz Wend e = Len(X)
a = Int(Rnd() * 4 + 1) If c = 1 Then a = 4 Ort(1) = Int(Rnd() * (e + 1) + 1) Ort(2) = Int(Rnd() * (e + 1) + 1) If Ort(1) = Ort(2) Then Ort(2) = Ort(1) + 1 If Ort(2) < Ort(1) Then Ort(0) = Ort(1) ' Ort 1 ist kleiner Ort(1) = Ort(2) Ort(2) = Ort(0) End If If Ort(2) > e Then Position(Ort(2)) = Länge Ort(1) = Ort(1) - 1 If Ort(1) = 0 Then Ort(1) = 1 End If If Ort(2) - Ort(1) = 1 Then If Position(Ort(2)) - Position(Ort(1)) = 1 Then If Ort(1) > 2 Then Ort(1) = Ort(1) \ 2 + 1 End If End If If a = 3 Or a = 4 Then Ort(3) = (Ort(2) + Ort(1)) \ 2 If Ort(3) = Ort(1) Then a = 2 If Ort(2) = Ort(3) Then a = 1 If Ort(2) - e = 2 Then a = 1 End IfX = X If a = 1 Then 'Ort 2 = Ende, Ort 1 = Anfang und Ort 3 = Mitte Selection.Characters(Position(Ort(2))).InsertBefore (")") Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue Selection.Characters(Position(Ort(1))).InsertAfter ("\B(") 'a Selection.Characters(Position(Ort(1))).Font.Color = wdColorSkyBlue End If If a = 2 Then Selection.Characters(Position(Ort(2))).InsertBefore (")") Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue Selection.Characters(Position(Ort(1))).InsertAfter ("\r(;") 'a Selection.Characters(Position(Ort(1))).Font.Color = wdColorSkyBlue End If If a = 3 Or a = 4 Then Selection.Characters(Position(Ort(2))).InsertBefore (")") Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue If Selection.Characters(Position(Ort(3))) = "+" Then Selection.Characters(Position(Ort(3))) = ";" Selection.Characters(Position(Ort(3))).Font.Color = wdColorSkyBlue Else Selection.Characters(Position(Ort(3))).InsertAfter (";") 'a Selection.Characters(Position(Ort(3)) + 1).Font.Color = wdColorSkyBlue End If Selection.Characters(Position(Ort(1))).InsertAfter ("\F(") 'a Selection.Characters(Position(Ort(1)) + 1).Font.Color = wdColorSkyBlue End IfNext
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _PreserveFormatting:=FalseSelection.Fields.UpdateSelection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection = "Fehler" Thend = d + 1End If
Selection.MoveDown Unit:=wdLine, Count:=1Selection.TypeParagraphSelection.MoveUp Unit:=wdLine, Count:=1
NextApplication.ScreenUpdating = True
End Sub
Public Function Dateieinlesen(ByVal Dateiname As String) As String Dim f As Integer
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 102
Dim DateiInhalt As String If Dir$(Dateiname, vbNormal) <> "" Then f = FreeFile Open Dateiname For Binary As #f DateiInhalt = Space$(LOF(f)) Get #f, , DateiInhalt Close #f End If Dateieinlesen = DateiInhaltEnd Function
Function Makrozählen(ByVal Makroeintrag As String) As Integer Dim Makrodatei As String Dim Makrodateiort As String Dim ii%, iia%, Li%, f As Integer Dim Ordner As String Dim Ttxt As String Dim Anzal As Variant Ordner = "C:\0D" Makrodateiort = Ordner & "\Makroz.txt" Makrodatei = Dateieinlesen(Makrodateiort) If Makrodatei = "" Then Makrodatei = "Bild einfügen :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "WMF einfügen :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "PowerWMFeinfügen :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "KKTausrechnen :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "vKKTausrechnen :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "KKTformelumwandler+ :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "KKTfurmelumwandler- :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "Formelwürfel :0" & Chr(13) & Chr(10) Makrodatei = Makrodatei & "Zeichen einkreisen :0" & Chr(13) & Chr(10) If Dir(Ordner, vbDirectory) = "" Then MkDir (Ordner) End If End If Li = Len(Makrodatei) If Right(Makrodatei, 2) = Chr(13) & Chr(10) Then Li = Li - 2 Makrodatei = Left(Makrodatei, Li) End If For ii = 1 To Li Ttxt = Mid(Makrodatei, ii, Len(Makroeintrag)) If Ttxt = Makroeintrag Then Exit For Next ii = ii + Len(Makroeintrag) + 1 iia = ii Ttxt = Mid(Makrodatei, ii, 1) While IstZahl(Ttxt) = 1 ii = ii + 1 Ttxt = Mid(Makrodatei, ii, 1) Wend Anzal = Mid(Makrodatei, iia, ii - iia) Anzal = Anzal + 1 Makrodatei = Left(Makrodatei, iia - 1) & Anzal & Right(Makrodatei, Li - ii + 1) f = FreeFile Open Makrodateiort For Output As #f Print #f, Makrodatei Close #f Makrozählen = Anzal
End Function
Sub Zeicheneinkreisen()Dim Zeichenwert, Länge, c, d, e As IntegerDim Zeichen As String
c = Makrozählen("Zeichen einkreisen ")Zeichen = Selectiond = Asc(Zeichen)If d = 11 Or d = 13 Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtendZeichen = Selectiond = Asc(Zeichen)If d = 11 Or d = 13 Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtendZeichen = SelectionLänge = Len(Zeichen)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 103
Zeichenwert = Asc(Zeichen)
c = 0If (Zeichenwert > 48 And Zeichenwert < 58) And Länge = 1 Then Zeichenwert = Zeichenwert + 9263 c = 1End IfIf (Zeichenwert > 64 And Zeichenwert < 91) And Länge = 1 Then Zeichenwert = Zeichenwert + 9333 c = 1End IfIf (Zeichenwert > 96 And Zeichenwert < 123) And Länge = 1 Then Zeichenwert = Zeichenwert + 9327 c = 1End If
If Länge = 2 Then Select Case Zeichen Case "10": Zeichenwert = 9321: c = 1 Case "11": Zeichenwert = 9322: c = 1 Case "12": Zeichenwert = 9323: c = 1 Case "13": Zeichenwert = 9324: c = 1 Case "14": Zeichenwert = 9325: c = 1 Case "15": Zeichenwert = 9326: c = 1 Case "16": Zeichenwert = 9327: c = 1 Case "17": Zeichenwert = 9328: c = 1 Case "18": Zeichenwert = 9329: c = 1 Case "19": Zeichenwert = 9330: c = 1 Case "20": Zeichenwert = 9331: c = 1 End SelectEnd IfIf c = 1 Then Selection.TypeText ChrW(Zeichenwert)End Sub
'WMFzerlegerFunction WmfZahl(ByVal a As String) As LongWmfZahl = Asc(Mid(a, 1, 1)) + Asc(Mid(a, 2, 1)) * 256&If WmfZahl > 32767 Then WmfZahl = WmfZahl - 65536End FunctionFunction RekordZahl(ByVal Rekord$, Doppelbyte%) As LongDim tx As Stringtx = Mid(Rekord, Doppelbyte * 2 - 1, 2)RekordZahl = Asc(Mid(tx, 1, 1)) + Asc(Mid(tx, 2, 1)) * 256&If RekordZahl > 32767 Then RekordZahl = RekordZahl - 65536End FunctionFunction WmfZeichen(ByVal a As Long) As StringIf a < 0 Then a = a + 65536WmfZeichen = Chr(a Mod 256) & Chr(a \ 256)End FunctionFunction WmfPunkt(ByVal X As Long, ByVal Y As Long) As StringIf X < 0 Then X = X + 65536WmfPunkt = Chr(X Mod 256) & Chr(X \ 256)If Y < 0 Then Y = Y + 65536WmfPunkt = WmfPunkt & Chr(Y Mod 256) & Chr(Y \ 256)End FunctionFunction WmfBiPunkt(ByVal x1&, ByVal y1&, ByVal x2&, ByVal y2&) As StringIf x1 < 0 Then x1 = x1 + 65536 'WmfBiPunkt = 4 x WmfzeichenWmfBiPunkt = Chr(x1 Mod 256) & Chr(x1 \ 256)If y1 < 0 Then y1 = y1 + 65536WmfBiPunkt = WmfBiPunkt & Chr(y1 Mod 256) & Chr(y1 \ 256)If x2 < 0 Then x2 = x2 + 65536WmfBiPunkt = WmfBiPunkt & Chr(x2 Mod 256) & Chr(x2 \ 256)If y2 < 0 Then y2 = y2 + 65536WmfBiPunkt = WmfBiPunkt & Chr(y2 Mod 256) & Chr(y2 \ 256)End FunctionFunction LinieZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%) As StringLinieZeichnen = Chr(8) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(805) & Chr(2) & Chr(0)LinieZeichnen = LinieZeichnen & WmfBiPunkt(x1, y1, x2, y2)End FunctionFunction BiLinieZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal x3%, ByVal y3%) As StringBiLinieZeichnen = Chr(10) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(805) & Chr(3) & Chr(0)BiLinieZeichnen = BiLinieZeichnen & WmfBiPunkt(x1, y1, x2, y2) & WmfPunkt(x3, y3)End FunctionFunction TriLinieZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal x3%, ByVal y3%, ByVal x4%, ByVal y4%) As StringTriLinieZeichnen = Chr(12) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(805) & Chr(4) & Chr(0)TriLinieZeichnen = TriLinieZeichnen & WmfBiPunkt(x1, y1, x2, y2) & WmfBiPunkt(x3, y3, x4, y4)End FunctionFunction DreieckZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal x3%, ByVal y3%) As StringDreieckZeichnen = Chr(10) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(804) & Chr(3) & Chr(0)DreieckZeichnen = DreieckZeichnen & WmfBiPunkt(x1, y1, x2, y2) & WmfPunkt(x3, y3)End Function
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 104
Function ViereckZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal x3%, ByVal y3%, ByVal x4%, ByVal y4%) As StringViereckZeichnen = Chr(12) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(804) & Chr(4) & Chr(0)ViereckZeichnen = ViereckZeichnen & WmfBiPunkt(x1, y1, x2, y2) & WmfBiPunkt(x3, y3, x4, y4)End FunctionFunction RechteckZeichnen(ByVal y1%, ByVal x1%, ByVal y2%, ByVal x2%) As StringDim minX%, maxX%, minY%, maxY As IntegerIf y1 > y2 Then maxY = y1: minY = y2 Else maxY = y2: minY = y1If x1 > x2 Then maxX = x1: minX = x2 Else maxX = x2: minX = x1RechteckZeichnen = Chr(7) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(1051)RechteckZeichnen = RechteckZeichnen & WmfBiPunkt(maxY, maxX, minY, minX)End FunctionFunction EllipseZeichnen(ByVal y1%, ByVal x1%, ByVal y2%, ByVal x2%) As StringDim minX%, maxX%, minY%, maxY As IntegerIf y1 > y2 Then maxY = y1: minY = y2 Else maxY = y2: minY = y1If x1 > x2 Then maxX = x1: minX = x2 Else maxX = x2: minX = x1EllipseZeichnen = Chr(7) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(1048)EllipseZeichnen = EllipseZeichnen & WmfBiPunkt(maxY, maxX, minY, minX)End FunctionFunction RundesRechteckZeichnen(ByVal r%, ByVal y1%, ByVal x1%, ByVal y2%, ByVal x2%) As StringDim minX%, maxX%, minY%, maxY As IntegerIf y1 > y2 Then maxY = y1: minY = y2 Else maxY = y2: minY = y1If x1 > x2 Then maxX = x1: minX = x2 Else maxX = x2: minX = x1RundesRechteckZeichnen = Chr(9) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(1564)RundesRechteckZeichnen = RundesRechteckZeichnen & WmfPunkt(r, r) & WmfBiPunkt(maxY, maxX, minY, minX)End FunctionFunction PolylinieZeichnen(ByVal Punkte As String) As StringDim a As Integera = Len(Punkte) / 4PolylinieZeichnen = WmfBiPunkt(2 * a + 4, 0, 805, a) & PunkteEnd FunctionFunction PolygonZeichnen(ByVal Punkte As String) As StringDim a As Integera = Len(Punkte) / 4PolygonZeichnen = WmfBiPunkt(2 * a + 4, 0, 804, a) & PunkteEnd FunctionFunction TextZeichnen(ByVal Text$, ByVal y1%, ByVal x1%) As StringDim Länge As IntegerLänge = Len(Text)If Länge = 0 Then Exit FunctionTextZeichnen = WmfZeichen(1313) & Chr(Länge) & Chr(0)If Länge Mod 2 = 1 Then Länge = Länge + 1: Text = Text & Chr(0)TextZeichnen = WmfZeichen(6 + Länge / 2) & Chr(0) & Chr(0) & TextZeichnen & Text & WmfPunkt(y1, x1)End FunctionFunction ObjektWählen(ByVal Nummer%) As StringObjektWählen = Chr(4) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(301) & WmfZeichen(Nummer)End FunctionFunction PinselErstellen(ByVal rot%, ByVal grün%, ByVal blau%) As StringPinselErstellen = Chr(7) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(764) & Chr(0) & Chr(0)PinselErstellen = PinselErstellen & Chr(rot) & Chr(grün) & Chr(blau) & Chr(0) & Chr(0) & Chr(0)End FunctionFunction FüllerErstellen(ByVal Dicke%, ByVal rot%, ByVal grün%, ByVal blau%) As StringFüllerErstellen = Chr(8) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(762) & Chr(0) & Chr(0)FüllerErstellen = FüllerErstellen & WmfZeichen(Dicke) & Chr(0) & Chr(0) & Chr(rot) & Chr(grün) & Chr(blau) & Chr(0)End FunctionFunction FontErstellen(ByVal Dicke%, ByVal Winkel%) As StringDim a As IntegerFontErstellen = Chr(28) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(763) & WmfZeichen(Dicke)FontErstellen = FontErstellen & Chr(0) & Chr(0) & WmfZeichen(Winkel) & Chr(0) & Chr(0) & WmfZeichen(400) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0)FontErstellen = FontErstellen & "Times New Roman"For a = 1 To 17 FontErstellen = FontErstellen & Chr(0)NextEnd FunctionFunction BogenZeichnen(ByVal pax&, ByVal pay&, ByVal ppx&, ByVal ppy&, ByVal pex&, ByVal pey&) As StringDim pmx#, pmy#, dx#, px#, py#, Radius As Double
If pex <> pax Then px = ppx ^ 2 - pax ^ 2 + ppy ^ 2 - pay ^ 2 py = pex ^ 2 - pax ^ 2 + pey ^ 2 - pay ^ 2 pmy = px * (pex - pax) - py * (ppx - pax) dx = (ppy - pay) * (pex - pax) - (pey - pay) * (ppx - pax) pmy = 0.5 * pmy / dx pmx = (py - 2 * pmy * (pey - pay)) / (2 * pex - 2 * pax)Else px = pex ^ 2 - pax ^ 2 + pey ^ 2 - pay ^ 2 py = ppx ^ 2 - pax ^ 2 + ppy ^ 2 - pay ^ 2 pmy = px * (ppx - pax) - py * (pex - pax) dx = (pey - pay) * (ppx - pax) - (ppy - pay) * (pex - pax)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 105
pmy = 0.5 * pmy / dx pmx = (py - 2 * pmy * (ppy - pay)) / (2 * ppx - 2 * pax)End IfRadius = Sqr((pay - pmy) ^ 2 + (pax - pmx) ^ 2)BogenZeichnen = Chr(11) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(2071)If PositiverWinkel(pax - pmx, pay - pmy, ppx - pmx, ppy - pmy) Then BogenZeichnen = BogenZeichnen & WmfBiPunkt(pay, pax, pey, pex) Else BogenZeichnen = BogenZeichnen & WmfBiPunkt(pey, pex, pay, pax)End IfBogenZeichnen = BogenZeichnen & WmfBiPunkt(pmy - Radius, pmx - Radius, pmy + Radius, pmx + Radius)
End Function
Function BogenPfeilZeichnen(ByVal pax&, ByVal pay&, ByVal ppx&, ByVal ppy&, ByVal pex&, ByVal pey&, ByVal pg%) As StringDim pmx#, pmy#, dx#, px#, py#, Radius#, Winkel As DoubleDim xa#, ya#, xb#, yb As Double
If pex <> pax Then px = ppx ^ 2 - pax ^ 2 + ppy ^ 2 - pay ^ 2 py = pex ^ 2 - pax ^ 2 + pey ^ 2 - pay ^ 2 pmy = px * (pex - pax) - py * (ppx - pax) dx = (ppy - pay) * (pex - pax) - (pey - pay) * (ppx - pax) pmy = 0.5 * pmy / dx pmx = (py - 2 * pmy * (pey - pay)) / (2 * pex - 2 * pax)Else px = pex ^ 2 - pax ^ 2 + pey ^ 2 - pay ^ 2 py = ppx ^ 2 - pax ^ 2 + ppy ^ 2 - pay ^ 2 pmy = px * (ppx - pax) - py * (pex - pax) dx = (pey - pay) * (ppx - pax) - (ppy - pay) * (pex - pax) pmy = 0.5 * pmy / dx pmx = (py - 2 * pmy * (ppy - pay)) / (2 * ppx - 2 * pax)End IfRadius = Sqr((pay - pmy) ^ 2 + (pax - pmx) ^ 2)BogenPfeilZeichnen = Chr(11) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(2071)If PositiverWinkel(pax - pmx, pay - pmy, ppx - pmx, ppy - pmy) Then BogenPfeilZeichnen = BogenPfeilZeichnen & WmfBiPunkt(pay, pax, pey, pex) Else BogenPfeilZeichnen = BogenPfeilZeichnen & WmfBiPunkt(pey, pex, pay, pax)End IfBogenPfeilZeichnen = BogenPfeilZeichnen & WmfBiPunkt(pmy - Radius, pmx - Radius, pmy + Radius, pmx + Radius)
BogenPfeilZeichnen = BogenPfeilZeichnen & Chr(10) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(804) & Chr(3) & Chr(0)BogenPfeilZeichnen = BogenPfeilZeichnen & WmfPunkt(pax, pay)If pmx - pax = 0 Then If pmy > pay Then Winkel = 1.5708 Else Winkel = -1.5708Else If pmx - pax < 0 Then Winkel = 3.1416 Else Winkel = 0 Winkel = Winkel + Atn((pmy - pay) / (pmx - pax))End IfIf PositiverWinkel(pax - pmx, pay - pmy, ppx - pmx, ppy - pmy) Then Winkel = Winkel + 1.5708 + 0.5 * pg / Radius Else Winkel = Winkel - 1.5708 - 0.5 * pg / RadiusEnd If
xa = pax - pg * Cos(Winkel - Atn(0.5)) / 0.895ya = pay - pg * Sin(Winkel - Atn(0.5)) / 0.895xb = pax - pg * Cos(Winkel + Atn(0.5)) / 0.895yb = pay - pg * Sin(Winkel + Atn(0.5)) / 0.895BogenPfeilZeichnen = BogenPfeilZeichnen & WmfBiPunkt(xa, ya, xb, yb)
End Function
Function PfeilspitzeZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal Pfeilspitze%) As StringDim Wert As DoubleDim xa%, ya%, xb%, yb%, pg As IntegerDim Linienlänge As Double
Linienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)If Linienlänge > 7 Then pg = Pfeilspitze If Linienlänge / 3 < Pfeilspitze Then pg = Linienlänge / 3 End If PfeilspitzeZeichnen = Chr(10) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(804) & Chr(3) & Chr(0) PfeilspitzeZeichnen = PfeilspitzeZeichnen & WmfPunkt(x2, y2) If x2 - x1 = 0 Then
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 106
If y2 > y1 Then Wert = 1.5708 Else Wert = -1.5708 Else If x2 - x1 < 0 Then Wert = 3.1416 Else Wert = 0 Wert = Wert + Atn((y2 - y1) / (x2 - x1)) End If xa = x2 - pg * Cos(Wert - Atn(0.5)) / 0.895 ya = y2 - pg * Sin(Wert - Atn(0.5)) / 0.895 xb = x2 - pg * Cos(Wert + Atn(0.5)) / 0.895 yb = y2 - pg * Sin(Wert + Atn(0.5)) / 0.895 PfeilspitzeZeichnen = PfeilspitzeZeichnen & WmfBiPunkt(xa, ya, xb, yb)Else PfeilspitzeZeichnen = ""End If
End Function
Function MaßPfeilspitzeZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal Pfeilspitze%) As StringDim dx%, dy%, pg As IntegerDim Linienlänge As Double
Linienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)If Linienlänge > 7 Then pg = Pfeilspitze If Linienlänge / 3 < Pfeilspitze Then pg = Linienlänge / 3 End If MaßPfeilspitzeZeichnen = PfeilspitzeZeichnen(x1, y1, x2, y2, Pfeilspitze) dx = (y2 - y1) / Linienlänge * pg dy = (x1 - x2) / Linienlänge * pg MaßPfeilspitzeZeichnen = MaßPfeilspitzeZeichnen & LinieZeichnen(Int(x2 - dx), Int(y2 - dy), Int(x2 + dx), Int(y2 + dy))Else MaßPfeilspitzeZeichnen = ""End If
End Function
Function BiMaßPfeilspitzeZeichnen(ByVal xL%, ByVal yL%, ByVal xR%, ByVal yR%, ByVal xM%, ByVal yM%, ByVal Pfeilspitze%) As StringDim Wert As DoubleDim dx%, dy%, PgL%, PgR As IntegerDim xa%, ya%, xb%, yb As IntegerDim LinienlängeL#, LinienlängeR As Double
LinienlängeL = Sqr((xM - xL) ^ 2 + (yM - yL) ^ 2)LinienlängeR = Sqr((xR - xM) ^ 2 + (yR - yM) ^ 2)
If LinienlängeL > 7 And LinienlängeR > 7 Then PgL = Pfeilspitze PgR = Pfeilspitze If LinienlängeL / 3 < Pfeilspitze Then PgL = LinienlängeL / 3 If LinienlängeR / 3 < Pfeilspitze Then PgR = LinienlängeR / 3 If LinienlängeL < LinienlängeR Then dx = (yM - yL) / LinienlängeL * PgL dy = (xL - xM) / LinienlängeL * PgL Else dx = (yR - yM) / LinienlängeR * PgR dy = (xM - xR) / LinienlängeR * PgR End If BiMaßPfeilspitzeZeichnen = LinieZeichnen(Int(xM - dx), Int(yM - dy), Int(xM + dx), Int(yM + dy)) If xR - xL = 0 Then If yR > yL Then Wert = 1.5708 Else Wert = -1.5708 Else If xR - xL < 0 Then Wert = 3.1416 Else Wert = 0 Wert = Wert + Atn((yR - yL) / (xR - xL)) End If xa = xM - PgL * Cos(Wert - Atn(0.5)) / 0.895 ya = yM - PgL * Sin(Wert - Atn(0.5)) / 0.895 xb = xM - PgL * Cos(Wert + Atn(0.5)) / 0.895 yb = yM - PgL * Sin(Wert + Atn(0.5)) / 0.895 BiMaßPfeilspitzeZeichnen = BiMaßPfeilspitzeZeichnen & Chr(12) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(804) & Chr(4) & Chr(0) BiMaßPfeilspitzeZeichnen = BiMaßPfeilspitzeZeichnen & WmfBiPunkt(xa, ya, xb, yb) xa = xM + PgR * Cos(Wert - Atn(0.5)) / 0.895 ya = yM + PgR * Sin(Wert - Atn(0.5)) / 0.895 xb = xM + PgR * Cos(Wert + Atn(0.5)) / 0.895 yb = yM + PgR * Sin(Wert + Atn(0.5)) / 0.895 BiMaßPfeilspitzeZeichnen = BiMaßPfeilspitzeZeichnen & WmfBiPunkt(xb, yb, xa, ya)Else BiMaßPfeilspitzeZeichnen = ""End If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 107
End Function
Function Linieüberschreiben(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal Pfeilspitze%, ByVal Text As String) As StringDim Linienlänge As DoubleDim xt#, yt#, dx#, dy As DoubleDim Texthochschieben#, Textlinksschieben As DoubleDim Textlänge As Double
Linienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)If Text <> "" And Linienlänge > 1 Then xt = x1 / 2 + x2 / 2 yt = y1 / 2 + y2 / 2 Textlänge = Zahllänge(Text) * Pfeilspitze * 0.7 Textlinksschieben = Textlänge / 2 If Textlänge < Linienlänge Then If Textlänge < Linienlänge - 2 * Pfeilspitze Then Texthochschieben = 1.75 * Pfeilspitze Else Texthochschieben = 2 * Pfeilspitze End If Else If Linienlänge / 3 < Pfeilspitze Then Texthochschieben = 2 * Pfeilspitze Else Texthochschieben = 2.25 * Pfeilspitze End If End If xt = xt + (Texthochschieben * (y2 - y1) + Textlinksschieben * (x1 - x2)) / Linienlänge yt = yt + (Texthochschieben * (x1 - x2) + Textlinksschieben * (y1 - y2)) / Linienlänge Linieüberschreiben = TextZeichnen(Text, yt, xt)ElseLinieüberschreiben = ""End If
End Function
Function PfeilZeichnen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal Pfeilspitze%) As StringDim Linienlänge As DoubleLinienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)If Linienlänge > 1 Then PfeilZeichnen = LinieZeichnen(x1, y1, x2, y2) & PfeilspitzeZeichnen(x1, y1, x2, y2, Pfeilspitze) Else PfeilZeichnen = ""End IfEnd Function
Function Vermaßen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal Pfeilspitze%, ByVal Text As String) As StringDim Linienlänge As Double
Linienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)If Linienlänge > 7 Then Vermaßen = LinieZeichnen(x1, y1, x2, y2) Vermaßen = Vermaßen & MaßPfeilspitzeZeichnen(x1, y1, x2, y2, Pfeilspitze) Vermaßen = Vermaßen & MaßPfeilspitzeZeichnen(x2, y2, x1, y1, Pfeilspitze) Else Vermaßen = ""End IfVermaßen = Vermaßen & Linieüberschreiben(x1, y1, x2, y2, Pfeilspitze, Text)
End Function
Function BiVermaßen(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal x3%, ByVal y3%, ByVal Pfeilspitze%, ByVal Text1 As String, ByVal Text2 As String) As StringDim Linienlänge As Double
Linienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)If Linienlänge > 7 Then BiVermaßen = LinieZeichnen(x1, y1, x2, y2) BiVermaßen = BiVermaßen & MaßPfeilspitzeZeichnen(x3, y3, x2, y2, Pfeilspitze) BiVermaßen = BiVermaßen & MaßPfeilspitzeZeichnen(x3, y3, x1, y1, Pfeilspitze) BiVermaßen = BiVermaßen & BiMaßPfeilspitzeZeichnen(x1, y1, x2, y2, x3, y3, Pfeilspitze) Else BiVermaßen = ""End IfBiVermaßen = BiVermaßen & Linieüberschreiben(x1, y1, x3, y3, Pfeilspitze, Text1)BiVermaßen = BiVermaßen & Linieüberschreiben(x3, y3, x2, y2, Pfeilspitze, Text2)
End Function
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 108
Function Polymaßkette(ByVal x1%, ByVal y1%, ByVal x2%, ByVal y2%, ByVal Beschriftung$, ByRef Werte())Dim Texte As IntegerDim Text() As StringDim xa#, ya#, xb#, yb#, xc#, yc As DoubleDim pg%, a%, b%, Länge As IntegerDim tx As StringDim Linienlänge As Double
Linienlänge = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)Texte = Werte(0)ReDim Text(Texte)pg = Werte(Texte)Länge = Len(Beschriftung)b = 1For a = 1 To Länge tx = Mid(Beschriftung, a, 1) If tx = ";" Then b = b + 1 If b > Texte Then Exit For Else Text(b) = Text(b) & tx End IfNext
If Texte = 1 Then xb = x2: yb = y2 Else xb = x1 + (x2 - x1) / Linienlänge * Werte(1) yb = y1 + (y2 - y1) / Linienlänge * Werte(1)End IfPolymaßkette = LinieZeichnen(x1, y1, x2, y2) & MaßPfeilspitzeZeichnen(xb, yb, x1, y1, pg)
xb = x1: yb = y1For a = 1 To Texte - 1 xa = xb: ya = yb xb = x1 + (x2 - x1) / Linienlänge * Werte(a) yb = y1 + (y2 - y1) / Linienlänge * Werte(a) If a = Texte - 1 Then xc = x2: yc = y2 Else xc = x1 + (x2 - x1) / Linienlänge * Werte(a + 1) yc = y1 + (y2 - y1) / Linienlänge * Werte(a + 1) End If Polymaßkette = Polymaßkette & BiMaßPfeilspitzeZeichnen(xa, ya, xc, yc, xb, yb, pg) & Linieüberschreiben(xa, ya, xb, yb, pg, Text(a))NextPolymaßkette = Polymaßkette & Linieüberschreiben(xb, yb, x2, y2, pg, Text(a)) & MaßPfeilspitzeZeichnen(xb, yb, x2, y2, pg)
End FunctionFunction Zahllänge(ByVal Zahl As String) As DoubleDim a%, b As IntegerDim tx As StringDim Länge As Double
b = Len(Zahl)Länge = bFor a = 1 To b tx = Mid(Zahl, a, 1) Select Case tx Case "-": Länge = Länge - 0.3 Case ".", ",", " ", ";": Länge = Länge - 0.5 Case "^", "_": Länge = Länge - 1 End SelectNextZahllänge = LängeEnd Function
Function WMFheader(ByVal Inhalt As String) As StringDim Objekte%, Objektgröße As IntegerDim a&, Maxrecord&, Dateigröße As LongDim Header As StringDim b%, c%, d As IntegerDim tx As String
Dateigröße = Len(Inhalt) / 2Maxrecord = 7Objekte = 0
While a < Dateigröße Objektgröße = WmfZahl(Mid(Inhalt, 2 * a + 1, 2)) b = WmfZahl(Mid(Inhalt, 2 * a + 5, 2))
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 109
If Maxrecord < Objektgröße Then Maxrecord = Objektgröße Objekte = Objekte + 1 a = a + Objektgröße If Objektgröße = 0 Then a = Dateigröße + 1 If b = 0 Then a = Dateigröße + 1Wend
Header = Chr(1) & Chr(0) & Chr(9) & Chr(0) & Chr(0) & Chr(3)Dateigröße = Dateigröße + 12 'Header und EoFa = Dateigröße Mod 256Dateigröße = Dateigröße \ 256b = Dateigröße Mod 256Dateigröße = Dateigröße \ 256c = Dateigröße Mod 256Dateigröße = Dateigröße \ 256d = Dateigröße Mod 256Header = Header & Chr(a) & Chr(b) & Chr(c) & Chr(d) & WmfZeichen(Objekte)Header = Header & WmfZeichen(Maxrecord) & Chr(0) & Chr(0) & Chr(0) & Chr(0)WMFheader = HeaderEnd Function
Function Punkteinvertieren(Punktstring As String) As StringDim a%, Punkte As IntegerDim Koordinaten As String Punkte = Len(Punktstring) \ 4 For a = 1 To Punkte Koordinaten = Mid(Punktstring, a * 4 - 3, 4) & Koordinaten Next Punkteinvertieren = KoordinatenEnd Function
Function Polygonfläche(Punktstring As String) As LongDim a%, Punkte As IntegerDim X() As LongDim Y() As LongDim Fläche As Long'berechnet die doppelte PolygonflächePunkte = Len(Punktstring) \ 4ReDim X(Punkte)ReDim Y(Punkte)For a = 1 To Punkte X(a) = RekordZahl(Punktstring, a * 2 - 1) Y(a) = RekordZahl(Punktstring, a * 2)NextFläche = X(Punkte) * Y(1) - Y(Punkte) * X(1)For a = 1 To Punkte - 1 Fläche = Fläche + X(a) * Y(a + 1) - Y(a) * X(a + 1)NextPolygonfläche = FlächeEnd Function
Function Checksumme(ByVal Preader As String) As IntegerDim w(16) As IntegerDim a%, b%, Wert As Integer
w(0) = 1: w(1) = 0: w(2) = 0: w(3) = 0w(4) = 1: w(5) = 0: w(6) = 0: w(7) = 0w(8) = 1: w(9) = 1: w(10) = 1: w(11) = 0w(12) = 1: w(13) = 0: w(14) = 1: w(15) = 0
For b = 3 To 10 Wert = WmfZahl(Mid(Preader, b * 2 - 1, 2)) For a = 0 To 15 If Wert Mod 2 = 1 Then w(a) = w(a) + 1 Wert = Wert \ 2 NextNext
If w(15) Mod 2 = 1 Then Wert = -1 Else Wert = 0For a = 14 To 0 Step -1 Wert = Wert * 2 If w(a) Mod 2 = 1 Then Wert = Wert + 1Next
Checksumme = WertEnd Function
Function PositiverWinkel(ByVal x1 As Double, ByVal y1 As Double, ByVal x2 As Double, ByVal y2 As Double) As BooleanDim Quadrant1 As IntegerDim Quadrant2 As IntegerDim dx#, dy As Double
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 110
If x1 > 0 And y1 > 0 Then Quadrant1 = 2If x1 < 0 And y1 > 0 Then Quadrant1 = 4If x1 < 0 And y1 < 0 Then Quadrant1 = 6If x1 > 0 And y1 < 0 Then Quadrant1 = 8If x1 > 0 And y1 = 0 Then Quadrant1 = 1If x1 = 0 And y1 > 0 Then Quadrant1 = 3If x1 < 0 And y1 = 0 Then Quadrant1 = 5If x1 = 0 And y1 < 0 Then Quadrant1 = 7
If x2 > 0 And y2 > 0 Then Quadrant2 = 2If x2 < 0 And y2 > 0 Then Quadrant2 = 4If x2 < 0 And y2 < 0 Then Quadrant2 = 6If x2 > 0 And y2 < 0 Then Quadrant2 = 8If x2 > 0 And y2 = 0 Then Quadrant2 = 1If x2 = 0 And y2 > 0 Then Quadrant2 = 3If x2 < 0 And y2 = 0 Then Quadrant2 = 5If x2 = 0 And y2 < 0 Then Quadrant2 = 7
'Drehung von 350° ist Drehung von 10° in die andere RichtungIf Quadrant1 = 8 Then If Quadrant2 = 1 Or Quadrant2 = 2 Then Quadrant1 = 0End IfIf Quadrant2 = 8 Then If Quadrant1 = 1 Or Quadrant1 = 2 Then Quadrant2 = 0End If
If Quadrant2 > Quadrant1 Then PositiverWinkel = TrueElseIf Quadrant2 < Quadrant1 Then PositiverWinkel = FalseElse dx = Abs(x1 - x2) dy = Abs(y1 - y2) If dy > dx Then Select Case Quadrant1 Case 2 If y2 > y1 Then PositiverWinkel = True Else PositiverWinkel = False Case 4 If y2 < y1 Then PositiverWinkel = True Else PositiverWinkel = False Case 6 If y2 < y1 Then PositiverWinkel = True Else PositiverWinkel = False Case 8 If y2 > y1 Then PositiverWinkel = True Else PositiverWinkel = False End Select Else Select Case Quadrant1 Case 2 If x2 < x1 Then PositiverWinkel = True Else PositiverWinkel = False Case 4 If x2 < x1 Then PositiverWinkel = True Else PositiverWinkel = False Case 6 If x2 > x1 Then PositiverWinkel = True Else PositiverWinkel = False Case 8 If x2 > x1 Then PositiverWinkel = True Else PositiverWinkel = False End Select End IfEnd If
End Function
Function Polyglätten(ByVal Polylinie As String, ByVal Kompression As Double) As String'Version vom 13.9.2016Dim x1%, x2%, x3%, y1%, y2%, y3%, i%, Punkte As IntegerDim minX&, minY&, maxX&, maxY As LongDim minXzu&, minYzu&, maxXzu&, maxYzu As LongDim pax&, ppx&, pex&, pay&, ppy&, pey As LongDim pmx#, pmy#, Überlauf As DoubleDim dx#, dy#, mx#, my#, dx12#, dx13#, dx23#, dy12#, dy13#, dy23#, elliptisch As DoubleDim Hilfstext$, tx As StringDim MaxAbstand#, MaxAbstand2#, Abstand#, Abstand12#, Abstand13#, Abstand23 As DoubleDim x1minY#, x2minY#, y1maxX#, y2maxX#, x1maxY#, x2maxY#, y1minX#, y2minX As DoubleDim px#, py#, Radius#, RadiusX#, RadiusY As DoubleDim NeuPunkte%, PunkteLöschen%, Ecke As IntegerDim X() As LongDim Y() As LongDim Z() As LongDim Xe() As LongDim Ye() As Long
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 111
Dim Ze() As LongDim Abstende() As DoubleDim Typ As Integer
Typ = RekordZahl(Polylinie, 3)Punkte = RekordZahl(Polylinie, 4)If Punkte = 2 Then Typ = 805 Mid(Polylinie, 5, 2) = WmfZeichen(Typ) Polyglätten = Polylinie Exit FunctionEnd IfReDim X(Punkte)ReDim Y(Punkte)ReDim Z(Punkte)ReDim Xe(Punkte)ReDim Ye(Punkte)ReDim Ze(Punkte)ReDim Abstende(Punkte)X(1) = RekordZahl(Polylinie, 5)Y(1) = RekordZahl(Polylinie, 6)Z(1) = 1NeuPunkte = 1'doppelte Punkte löschenFor i = 2 To Punkte X(i) = WmfZahl(Mid(Polylinie, 4 * i + 5, 2)) Y(i) = WmfZahl(Mid(Polylinie, 4 * i + 7, 2)) Z(i) = 1 If X(i) = X(i - 1) And Y(i) = Y(i - 1) Then PunkteLöschen = PunkteLöschen + 1 Else NeuPunkte = NeuPunkte + 1 X(NeuPunkte) = X(i) Y(NeuPunkte) = Y(i) End IfNextPunkte = Punkte - PunkteLöschen
If X(1) = X(Punkte) And Y(1) = Y(Punkte) Then i = 1 Else i = 0If i = 1 And Typ = 804 Then Punkte = Punkte - 1: i = 0'Rechtecke erkennenIf Punkte = 4 And Typ = 804 Then If X(1) = X(2) Or X(2) = X(3) Then x1 = X(1) If X(3) = X(4) Or X(4) = X(1) Then x2 = X(3) If Y(1) = Y(2) Or Y(2) = Y(3) Then y1 = Y(1) If Y(3) = Y(4) Or Y(4) = Y(1) Then y2 = Y(3) If y1 > y2 Then maxY = y1: minY = y2 Else maxY = y2: minY = y1 If x1 > x2 Then maxX = x1: minX = x2 Else maxX = x2: minX = x1 Polyglätten = Chr(7) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(1051) Polyglätten = Polyglätten & WmfBiPunkt(maxY, maxX, minY, minX) Exit Function End If End If End If End IfEnd If
If Punkte > 7 And i = 0 Then'Kreise und runde Rechtecke suchen und durch WMF-Objekte ersetzenminX = X(1): maxX = X(1)minY = Y(1): maxY = Y(1)minXzu = Y(1): maxXzu = Y(1)minYzu = X(1): maxYzu = X(1)MaxAbstand = Sqr((X(1) - X(Punkte)) ^ 2 + (Y(1) - Y(Punkte)) ^ 2)Abstende(1) = MaxAbstandpax = X(1)pay = Y(1)pex = X(Punkte)pey = Y(Punkte)'maximale Koordinaten ermitteln mit zugehöriger PunktkordinateFor i = 2 To Punkte x1 = X(i - 1) y1 = Y(i - 1) x2 = X(i) y2 = Y(i) Abstand = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2) Abstende(i) = Abstand If Abstand > MaxAbstand Then
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 112
MaxAbstand = Abstand pax = x2 pay = y2 pex = x1 pey = y1 End If If X(i) > maxX Then maxX = X(i): maxXzu = Y(i) If X(i) < minX Then minX = X(i): minXzu = Y(i) If Y(i) > maxY Then maxY = Y(i): maxYzu = X(i) If Y(i) < minY Then minY = Y(i): minYzu = X(i)NextMaxAbstand2 = 0For i = 1 To Punkte If Abstende(i) > MaxAbstand2 And Abstende(i) < MaxAbstand Then MaxAbstand2 = Abstende(i) End IfNextEcke = 0For i = 1 To Punkte If X(i) = maxX And Y(i) = maxY Then Ecke = 1 If X(i) = minX And Y(i) = maxY Then Ecke = 1 If X(i) = maxX And Y(i) = minY Then Ecke = 1 If X(i) = minX And Y(i) = minY Then Ecke = 1NextIf maxX <> minX And maxY <> minY And Ecke = 0 And Typ = 804 Then 'Ellipsen und runde Rechtecke Abstand12 = Sqr((maxX - minX) ^ 2 + (maxY - minY) ^ 2) 'Ellipsen Reparieren If MaxAbstand / Abstand12 < 0.35 Then 'Bedingung gegen Sterne elliptisch = 0 For i = 1 To Punkte 'wie dicht die Punkte der Ellipse liegen px = (2 * X(i) - maxX - minX) / (maxX - minX) py = (2 * Y(i) - maxY - minY) / (maxY - minY) elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next elliptisch = Sqr(elliptisch / Punkte) If elliptisch < 0.05 Then Typ = 1048 Polyglätten = Chr(7) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(Typ) & WmfBiPunkt(maxY, maxX, minY, minX) Exit Function End If End If 'runde Rechtecke wiederherstellen x1minY = minYzu x2minY = x1minY x1maxY = maxYzu x2maxY = x1maxY y1maxX = maxXzu y2maxX = y1maxX y1minX = minXzu y2minX = y1minX For i = 1 To Punkte If Y(i) = minY Then If x1minY > X(i) Then x1minY = X(i) If x2minY < X(i) Then x2minY = X(i) ElseIf Y(i) = maxY Then If x1maxY > X(i) Then x1maxY = X(i) If x2maxY < X(i) Then x2maxY = X(i) End If If X(i) = maxX Then If y1maxX > Y(i) Then y1maxX = Y(i) If y2maxX < Y(i) Then y2maxX = Y(i) ElseIf X(i) = minX Then If y1minX > Y(i) Then y1minX = Y(i) If y2minX < Y(i) Then y2minX = Y(i) End If Next x1 = (x1minY + x1maxY) / 2 'Koordinaten des inneren Rechteckes y1 = (y1minX + y1maxX) / 2 x2 = (x2minY + x2maxY) / 2 y2 = (y2minX + y2maxX) / 2 dx12 = x2 - x1 dy12 = y2 - y1 dx = maxX - minX - dx12 'Ausrundungsdurchmesser dy = maxY - minY - dy12 If dx > 0 And dy > 0 Then elliptisch = 0 For i = 1 To Punkte If X(i) > x1 Then Xe(i) = X(i) - dx12 Else Xe(i) = X(i) If Y(i) > y1 Then Ye(i) = Y(i) - dy12 Else Ye(i) = Y(i) Next For i = 1 To Punkte 'wie dicht die Punkte der Ellipse liegen
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 113
px = (2 * Xe(i) - maxX + dx12 - minX) / (maxX - dx12 - minX) py = (2 * Ye(i) - maxY + dy12 - minY) / (maxY - dy12 - minY) elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next elliptisch = Sqr(elliptisch / Punkte) If dx12 > 0 Or dy12 > 0 Then If elliptisch < 0.07 Then Typ = 1564 Polyglätten = Chr(9) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(Typ) Polyglätten = Polyglätten & WmfZeichen(dy) & WmfZeichen(dx) & WmfBiPunkt(maxY, maxX, minY, minX) Exit Function End If End If End IfEnd If 'Ellipsen und runde RechteckeIf maxX <> minX And maxY <> minY Then 'Kreisbögen und Kreischords erkennen Abstand12 = Sqr((X(1) - X(Punkte)) ^ 2 + (Y(1) - Y(Punkte)) ^ 2) If Abstand12 = MaxAbstand Or Typ = 804 Then Abstand23 = Sqr((maxX - minX) ^ 2 + (maxY - minY) ^ 2) If MaxAbstand2 / Abstand23 < 0.35 Then If Abstand12 <> MaxAbstand Then i = 1 ppx = X(i) ppy = Y(i) If ppx = pax Then i = 3 If ppy = pay Then i = 3 Else i = Punkte \ 2 End If ppx = X(i) ppy = Y(i) 'prüfen, ob der Radius nicht zu riesig wird dx12 = ppx - pax dx13 = pex - pax dy12 = pay - ppy dy13 = pey - pay Abstand = Abs((dx12 * dy13 + dy12 * dx13) / Sqr(dx13 ^ 2 + dy13 ^ 2)) 'senkrechter Abstand If Abstand > 2 * Kompression Then If pex <> pax Then px = ppx ^ 2 - pax ^ 2 + ppy ^ 2 - pay ^ 2 'Hilfsterme py = pex ^ 2 - pax ^ 2 + pey ^ 2 - pay ^ 2 'gegen zwischenzeitlichen pmy = px * (pex - pax) - py * (ppx - pax) 'Integerüberlauf dx = (ppy - pay) * (pex - pax) - (pey - pay) * (ppx - pax) 'Kreismittelpunkt pmy = 0.5 * pmy / dx pmx = (py - 2 * pmy * (pey - pay)) / (2 * pex - 2 * pax) Else px = pex ^ 2 - pax ^ 2 + pey ^ 2 - pay ^ 2 'Hilfsterme py = ppx ^ 2 - pax ^ 2 + ppy ^ 2 - pay ^ 2 'gegen zwischenzeitlichen pmy = px * (ppx - pax) - py * (pex - pax) 'Integerüberlauf dx = (pey - pay) * (ppx - pax) - (ppy - pay) * (pex - pax) 'Kreismittelpunkt pmy = 0.5 * pmy / dx pmx = (py - 2 * pmy * (ppy - pay)) / (2 * ppx - 2 * pax) End If Radius = Sqr((pay - pmy) ^ 2 + (pax - pmx) ^ 2) Überlauf = Radius If Abs(pmx - Radius) > Überlauf Then Überlauf = Abs(pmx - Radius) If Abs(pmx + Radius) > Überlauf Then Überlauf = Abs(pmx + Radius) If Abs(pmy - Radius) > Überlauf Then Überlauf = Abs(pmy - Radius) If Abs(pmy + Radius) > Überlauf Then Überlauf = Abs(pmy + Radius) If Abs(pmx - pmx + 2 * Radius) > Überlauf Then Überlauf = Abs(pmx - pmx + 2 * Radius) If Abs(pmy - pmy + 2 * Radius) > Überlauf Then Überlauf = Abs(pmy - pmy + 2 * Radius) If Überlauf < 32767 Then x1 = pmx - Radius y1 = pmy - Radius x2 = pmx + Radius y2 = pmy + Radius elliptisch = 0 For i = 1 To Punkte px = (2 * X(i) - x2 - x1) / (x2 - x1) py = (2 * Y(i) - y2 - y1) / (y2 - y1) elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next elliptisch = Sqr(elliptisch / Punkte) * 2 * Radius / Abstand12 If elliptisch < 0.01 Then If Typ = 805 Then Typ = 2071 Else Typ = 2096 Polyglätten = Chr(11) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(Typ) If PositiverWinkel(X(1) - pmx, Y(1) - pmy, X(2) - pmx, Y(2) - pmy) Then Polyglätten = Polyglätten & WmfBiPunkt(pay, pax, pey, pex) Else Polyglätten = Polyglätten & WmfBiPunkt(pey, pex, pay, pax)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 114
End If Polyglätten = Polyglätten & WmfBiPunkt(y1, x1, y2, x2) Exit Function End If End If End If 'If Abstand > 2 * Kompression Then 'Elliptische Bögen erkennen x1 = 1 x2 = 1 y1 = 1 y2 = 1 If maxY = pay Or maxY = pey Then y2 = 0 If minY = pay Or minY = pey Then y1 = 0 If maxX = pax Or maxX = pex Then x2 = 0 If minX = pax Or minX = pex Then x1 = 0 'Einen Punkt bei Drittelellipsen bekannt machen. If x1 = 0 And x2 = 0 Then If y1 = 1 And y2 = 0 Then If minXzu > maxXzu Then x1 = 1 Else x2 = 1 End If If y1 = 0 And y2 = 1 Then If minXzu < maxXzu Then x1 = 1 Else x2 = 1 End If End If If y1 = 0 And y2 = 0 Then If x1 = 1 And x2 = 0 Then If minYzu > maxYzu Then y1 = 1 Else y2 = 1 End If If x1 = 0 And x2 = 1 Then If minYzu < maxYzu Then y1 = 1 Else y2 = 1 End If End If If y1 = 0 And y2 = 0 And x1 = 0 And x2 = 0 Then 'exakte Viertellipsen berechnen mit Radius und Mittelpunkt RadiusX = maxX - minX RadiusY = maxY - minY pmy = minY pmx = minX elliptisch = 0 For i = 1 To Punkte px = (X(i) - pmx) / RadiusX py = (Y(i) - pmy) / RadiusY elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next If elliptisch > 0.05 Then pmy = maxY elliptisch = 0 For i = 1 To Punkte px = (X(i) - pmx) / RadiusX py = (Y(i) - pmy) / RadiusY elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next If elliptisch > 0.05 Then pmx = maxX elliptisch = 0 For i = 1 To Punkte px = (X(i) - pmx) / RadiusX py = (Y(i) - pmy) / RadiusY elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next If elliptisch > 0.05 Then pmy = minY End If End If End If 'Mittelpunkt berechnen If x1 = 1 And x2 = 1 Then pmy = 0.5 * (maxXzu + minXzu) If x1 = 1 And x2 = 0 Then pmy = minXzu If x1 = 0 And x2 = 1 Then pmy = maxXzu If y1 = 1 And y2 = 1 Then pmx = 0.5 * (maxYzu + minYzu) If y1 = 1 And y2 = 0 Then pmx = minYzu If y1 = 0 And y2 = 1 Then pmx = maxYzu 'Radius berechnen If x1 = 1 And x2 = 1 Then RadiusX = 0.5 * (maxX - minX) If x1 = 1 And x2 = 0 Then If y1 = 1 Then RadiusX = minYzu - minX Else RadiusX = maxYzu - minX End If If x1 = 0 And x2 = 1 Then If y1 = 1 Then RadiusX = maxX - minYzu Else RadiusX = maxX - maxYzu End If If y1 = 1 And y2 = 1 Then RadiusY = 0.5 * (maxY - minY) If y1 = 1 And y2 = 0 Then If x1 = 1 Then RadiusY = minXzu - minY Else RadiusY = maxXzu - minY
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 115
End If If y1 = 0 And y2 = 1 Then If x1 = 1 Then RadiusY = maxY - minXzu Else RadiusY = maxY - maxXzu End If If RadiusX > RadiusY Then Überlauf = RadiusY Else Überlauf = RadiusX If Abs(pmx - RadiusX) > Überlauf Then Überlauf = Abs(pmx - RadiusX) If Abs(pmx + RadiusX) > Überlauf Then Überlauf = Abs(pmx + RadiusX) If Abs(pmy - RadiusY) > Überlauf Then Überlauf = Abs(pmy - RadiusY) If Abs(pmy + RadiusY) > Überlauf Then Überlauf = Abs(pmy + RadiusY) If RadiusX <> 0 And RadiusY <> 0 And Überlauf < 32767 Then elliptisch = 0 For i = 1 To Punkte px = (X(i) - pmx) / RadiusX py = (Y(i) - pmy) / RadiusY elliptisch = elliptisch + (Sqr(px ^ 2 + py ^ 2) - 1) ^ 2 Next elliptisch = Sqr(elliptisch / Punkte) If elliptisch < 0.05 Then If Typ = 805 Then Typ = 2071 Else Typ = 2096 Polyglätten = Chr(11) & Chr(0) & Chr(0) & Chr(0) & WmfZeichen(Typ) If PositiverWinkel(X(1) - pmx, Y(1) - pmy, X(2) - pmx, Y(2) - pmy) Then Polyglätten = Polyglätten & WmfBiPunkt(pay, pax, pey, pex) Else Polyglätten = Polyglätten & WmfBiPunkt(pey, pex, pay, pax) End If Polyglätten = Polyglätten & WmfBiPunkt(pmy - RadiusY, pmx - RadiusX, pmy + RadiusY, pmx + RadiusX) Exit Function End If End If End If 'If MaxAbstand2 / Abstand23 < 0.25 Then End If 'If Abstand12 = MaxAbstand Or Typ = 804 ThenEnd IfEnd If
PunkteLöschen = 1While PunkteLöschen = 1 'Löscht evtl. jeden zweiten Punkt solange, bis es nichts mehr zu Löschen gibt PunkteLöschen = 0 For i = 3 To Punkte x1 = X(i - 2) y1 = Y(i - 2) x2 = X(i - 1) y2 = Y(i - 1) x3 = X(i) y3 = Y(i) dx12 = x2 - x1 dy13 = y3 - y1 dy12 = y1 - y2 dx13 = x3 - x1 dx23 = x3 - x2 dy23 = y3 - y2 Abstand12 = Sqr(dx12 ^ 2 + dy12 ^ 2) 'gewöhnlicher Abstand Abstand13 = Sqr(dx13 ^ 2 + dy13 ^ 2) Abstand23 = Sqr(dx23 ^ 2 + dy23 ^ 2) If dx13 = 0 And dy13 = 0 Then Abstand = 2 * Kompression Else Abstand = Abs((dx12 * dy13 + dy12 * dx13) / Sqr(dx13 ^ 2 + dy13 ^ 2)) 'senkrechter Abstand End If '3 Ausnahmen für das Punktlöschen If Abstand13 < Abstand12 Or Abstand13 < Abstand23 Then Abstand = Abstand + Kompression If dy13 = dy12 Xor dy13 = dy23 Then Abstand = Abstand + Kompression If dx13 = dx12 Xor dx13 = dx23 Then Abstand = Abstand + Kompression If Abstand < Kompression Then If Z(i - 2) = 1 Then 'jeden zweiten Punkt evtl. löschen Z(i - 1) = 0 PunkteLöschen = 1 End If End If Next NeuPunkte = 0 For i = 1 To Punkte If Z(i) <> 0 Then NeuPunkte = NeuPunkte + 1 X(NeuPunkte) = X(i) Y(NeuPunkte) = Y(i) Z(NeuPunkte) = 1 End If Next Punkte = NeuPunkte If NeuPunkte = 2 Then PunkteLöschen = 0
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 116
Wend
Hilfstext = ""For i = 1 To Punkte If Z(i) = 1 Then Hilfstext = Hilfstext & WmfPunkt(X(i), Y(i))Next
Punkte = Len(Hilfstext) / 4If Punkte = 2 Then tx = WmfZeichen(805) Else tx = Mid(Polylinie, 5, 2)Polyglätten = WmfZeichen(2 * Punkte + 4) & Chr(0) & Chr(0) & tx & WmfZeichen(Punkte) & Hilfstext
End Function
'HauptmakroSub PowerWMF()'Version 3.0 vom 16.9.2016Dim Georekord() As StringDim Geoeigenschaften() As IntegerDim Georekord2() As StringDim Geoeigenschaften2() As IntegerDim Textrekord() As StringDim Textfont() As StringDim Texteigenschaften() As IntegerDim Textrekord2() As StringDim Textfont2() As StringDim Texteigenschaften2() As IntegerDim Georekorde&, Textrekorde As LongDim AktFüllerstil%, AktFüllerdicke%, AktFüllerrot%, AktFüllergrün%, AktFüllerblau As IntegerDim AktPinselstil%, AktPinselrot%, AktPinselgrün%, AktPinselblau As IntegerDim AktFont$, AktPinsel$, AktFüller$, AktFarbe As StringDim AktFontnummer%, AktPinselnummer%, AktFüllernummer As IntegerDim AktTextrot%, AktTextgrün%, AktTextblau As IntegerDim AktTextalign%, AktTextabdecken%, AktSetcharextra As IntegerDim AktTextrotabdecken%, AktTextgrünabdecken%, AktTextblauabdecken As IntegerDim a&, b&, c&, d&, e&, f&, i&, j&, k&, Summe As LongDim rot%, grün%, blau As IntegerDim Typ%, Maltyp As IntegerDim Rekord$, Poly$, Poly2$, Poly3$, Malrekord As StringDim Dateiname$, WoT$, WoTschrift$, Dateiinhalt$, Federtasche As StringDim weißeTextvierecke As StringDim OO$, OOOO As StringDim Modifikation As StringDim ModI%, ModR%, ModDH%, ModP%, ModZ%, ModJ%, ModV As IntegerDim Dateilenge&, Textlenge&, Texthöhe&, Rekordlenge&, Lenge As LongDim Hilfstext$, Teiltext$, tx As StringDim Preader$, Header As StringDim WMFtabelle(255) As StringDim Liniennummer() As IntegerDim Liniennummer2() As IntegerDim Maxrekord&, WMFrekorde As LongDim MovetoX, MovetoY As IntegerDim x1#, y1#, x2#, y2#, x3#, y3#, x4#, y4#, Winkel#, Zahl As DoubleDim minX%, minY%, maxX%, maxY As IntegerDim xs#, ys#, m1#, m2 As DoubleDim X%, Y%, FensterX%, FensterY, Fenster0X%, Fenster0Y As IntegerDim Verdicken%, Zoom As IntegerDim letzteFüllernummer%, letztePinselnummer%, letzteFontnummer As IntegerDim AnzahlPunkte%, AnzahlPunkte2%, Prüfobjekte%, Prüfobjekte2%, Polygone%, Geduld As IntegerDim Punkt1$, Punkt2$, Punkt3$, Punkt4 As StringDim Fleche1&, Fleche2&, Fleche3 As LongDim WordSchriftgröße#, WMFschriftgröße%, Pfeilgröße As IntegerDim Zahlen() As IntegerDim Farbe As StringDim Startzeit, Zeit As SingleDim Werte()
Startzeit = TimerModifikation = SelectionIf Len(Modifikation) <> 2 Then Selection.MoveLeft Unit:=wdCharacter, Count:=1End Ifa = Makrozählen("PowerWMFeinfügen ")OO = Chr(0) & Chr(0)OOOO = OO & OOGeduld = 200 'mit mehr Geduld kann mehr Kompression möglich sein'Modifikationsmöglichkeiten:'r:keine CTB'z:Berechnungszeit untersuchen'p:nicht an Polylinien zuschneiden'i:alternative CTB
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 117
'j:verlustbehaftet in Zeichenreihenfolge'h,d: halbe oder doppelte Linienstärken'Pixel nicht zu Kreislein, sondern als Füllung im Playback Device ContentModifikation = SelectionModDH = 2Teiltext = Left(Modifikation, 1)If Teiltext = "r" Then ModR = 1If Teiltext = "z" Then ModZ = 1If Teiltext = "p" Then ModP = 1If Teiltext = "i" Then ModI = 1If Teiltext = "j" Then ModJ = 1If Teiltext = "d" Then ModDH = 4If Teiltext = "h" Then ModDH = 1If Teiltext = "v" Then ModV = 1If Len(Modifikation) = 2 Then Teiltext = Right(Modifikation, 1) If Teiltext = "r" Then ModR = 1 If Teiltext = "z" Then ModZ = 1 If Teiltext = "p" Then ModP = 1 If Teiltext = "i" Then ModI = 1 If Teiltext = "j" Then ModJ = 1 If Teiltext = "d" Then ModDH = 4 If Teiltext = "h" Then ModDH = 1 If Teiltext = "v" Then ModV = 1End If
'Datei suchen und einlesenDateiname = ActiveDocument.Path & "\a.wmf"Dateiinhalt = Dateieinlesen(Dateiname)If Dateiinhalt = "" Then Dim Ordner As FileDialog Set Ordner = Application.FileDialog(msoFileDialogFilePicker) With Ordner .Title = "PowerWMFeinfügen3.0" .AllowMultiSelect = False .ButtonName = "Einfügen" .Filters.Clear .Filters.Add "Windows Metafile", "*.WMF" Select Case .Show Case (-1) Dateiname = Ordner.SelectedItems(1) Dateiinhalt = Dateieinlesen(Dateiname) Case Else Exit Sub End Select End With Set Ordner = NothingEnd IfDateilenge = Len(Dateiinhalt)k = WmfZahl(Mid(Dateiinhalt, 1, 2))If k = -12841 Then Preader = Mid(Dateiinhalt, 1, 22) Header = Mid(Dateiinhalt, 23, 18) Dateiinhalt = Right(Dateiinhalt, Dateilenge - 40) Dateilenge = Dateilenge - 40 Else Preader = "" Header = Mid(Dateiinhalt, 1, 18) Dateiinhalt = Right(Dateiinhalt, Dateilenge - 18) Dateilenge = Dateilenge - 19End If
'bereits Datei umgewandelte wird nur nachbearbeitetFor i = 41 To 2000 Step 2 Teiltext = Mid(Dateiinhalt, i, 8) If Teiltext = "SimonPie" Then Dateiinhalt = Preader & Header & Dateiinhalt 'Zoom vergrößern If ModP = 1 And Preader <> "" Then FensterX = WmfZahl(Mid(Preader, 11, 2)) * 11 \ 10 FensterY = WmfZahl(Mid(Preader, 13, 2)) * 11 \ 10 If FensterX < 32000 And FensterY < 32000 Then Mid(Preader, 11, 2) = WmfZeichen(FensterX) Mid(Preader, 13, 2) = WmfZeichen(FensterY) Rekord = Chr(5) & Chr(0) & OO & WmfZeichen(524) 'Fenster aktualisieren For j = 41 To Dateilenge Step 2 Teiltext = Mid(Dateiinhalt, j, 6) If Teiltext = Rekord Then Mid(Dateiinhalt, j + 6, 4) = WmfPunkt(FensterY, FensterX) Exit For End If Next
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 118
End If End If 'd oder h nachhohlen If ModDH = 4 Or ModDH = 1 Then AktFüller = Chr(8) & Chr(0) & OO & Chr(250) & Chr(2) AktPinsel = Chr(7) & Chr(0) & OO & Chr(252) & Chr(2) For j = 41 To Dateilenge Step 2 Teiltext = Mid(Dateiinhalt, j, 6) If Teiltext = AktFüller Then a = WmfZahl(Mid(Dateiinhalt, j + 8, 2)) If ModDH = 4 Then If a < 8000 Then a = a * 3 \ 2 If a = 1 Then a = 2 ElseIf ModDH = 1 Then If a > 1 Then a = a * 2 \ 3 End If Mid(Dateiinhalt, j + 8, 2) = WmfZeichen(a) ElseIf Teiltext = AktPinsel Then Exit For End If Next End If Mid(Preader, 21, 2) = WmfZeichen(Checksumme(Preader)) Mid(Dateiinhalt, 1, 22) = Preader If Modifikation = "r" Or Modifikation = "z" Or Modifikation = "p" Or Modifikation = "v" Then Selection.Delete Unit:=wdCharacter, Count:=1 ElseIf Modifikation = "i" Or Modifikation = "j" Or Modifikation = "d" Or Modifikation = "h" Then Selection.Delete Unit:=wdCharacter, Count:=1 ElseIf Len(Modifikation) = 2 Then Selection.Delete Unit:=wdCharacter, Count:=1 Else Selection.MoveRight Unit:=wdCharacter, Count:=1 End If If ModDH = 4 Or ModDH = 1 Or ModP = 1 Then f = FreeFile Open Dateiname For Output As #f Print #f, Dateiinhalt Close #f End If Selection.InlineShapes.AddPicture FileName:=Dateiname Exit Sub End IfNext
'MeckernIf Dateilenge > 300000 Then a = MsgBox("Makro ist für sehr große Datein nicht geeignet", vbOKCancel) If a = 2 Then Exit SubEnd IfMaxrekord = WmfZahl(Mid(Header, 15, 2)) * 65536 + WmfZahl(Mid(Header, 13, 2))If Maxrekord > 32767 Then a = MsgBox("Die WMF beinhaltet ein unzulässig großes Objekt." & Chr(13) & Chr(10) & "Erlaubte Länge = 32767" & Chr(13) & Chr(10) & "vorhandene Länge = " & Maxrekord, vbCritical) Exit SubEnd If
'Tabellengröße schätzeni = 1: Georekorde = 3: Textrekorde = 1While i < Dateilenge - 4 Rekordlenge = WmfZahl(Mid(Dateiinhalt, i, 2)) Typ = WmfZahl(Mid(Dateiinhalt, i + 4, 2)) i = i + Rekordlenge * 2 If Rekordlenge = 0 Then i = Dateilenge If Typ = 0 Then i = Dateilenge Select Case Typ Case 522, 561, 1313, 2610 Georekorde = Georekorde + 1 Textrekorde = Textrekorde + 1 Case 0, 30, 53, 55, 247, 258, 260, 261, 264, 295, 301, 302, 313, 322, 496, 505, 513, 521, 523, 524, 532, 564, 762, 763, 764, 1078, 1791 'nichts tun Case Else Georekorde = Georekorde + 1 End SelectWendReDim Georekord(Georekorde + 1) As StringReDim Geoeigenschaften(Georekorde + 1, 14) As IntegerReDim Textrekord(Textrekorde + 1) As StringReDim Textfont(Textrekorde + 1) As StringReDim Texteigenschaften(Textrekorde + 1, 10) As IntegerReDim Georekord2(Georekorde + 1) As StringReDim Geoeigenschaften2(Georekorde + 1, 14) As Integer
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 119
ReDim Textrekord2(Textrekorde + 1) As StringReDim Textfont2(Textrekorde + 1) As StringReDim Texteigenschaften2(Textrekorde + 1, 10) As IntegerReDim Liniennummer(Georekorde)
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("starten") Selection.TypeParagraphEnd If
'WMF auflösen und in Tabelle schreibenAktFüllerstil = 0: AktFüllerdicke = 0: AktFüllerrot = 0: AktFüllergrün = 0: AktFüllerblau = 0AktPinselstil = 0: AktPinselrot = 0: AktPinselgrün = 0: AktPinselblau = 0AktFont = "": AktPinsel = "": AktFüller = ""AktTextrot = 0: AktTextgrün = 0: AktTextblau = 0AktTextalign = 0: AktTextabdecken = 0: AktSetcharextra = 0AktTextrotabdecken = 0: AktTextgrünabdecken = 0: AktTextblauabdecken = 0i = 1: Georekorde = 3: Textrekorde = 1While i < Dateilenge - 4 Rekordlenge = WmfZahl(Mid(Dateiinhalt, i, 2)) Rekord = Mid(Dateiinhalt, i, Rekordlenge * 2) Typ = RekordZahl(Rekord, 3) i = i + Rekordlenge * 2 If Rekordlenge = 0 Then i = Dateilenge If Typ = 0 Then i = Dateilenge Select Case Typ Case 295 'gespeicherter Playback Content a = MsgBox("RestoreDC wird nicht ünterstützt.", vbCritical) Exit Sub Case 523, 524, 53, 55, 261, 30, 313, 1078, 564, 260 'Palettenzubehör 'nichts tun Case 762, 763, 764, 322, 505, 1791, 247 'Malobjekte If Typ = 763 Then b = 0 For a = 26 To 56 tx = Mid(Rekord, a, 1) If Asc(tx) = 0 Then b = 1 If b = 1 Then Mid(Rekord, a, 1) = Chr(0) End If Next End If For a = 0 To 255 If WMFtabelle(a) = "" Then WMFtabelle(a) = Rekord Exit For End If Next Case 496 'Objektlöschen a = RekordZahl(Rekord, 4) WMFtabelle(a) = "" Case 301 'Objektwählen a = RekordZahl(Rekord, 4) Malrekord = WMFtabelle(a) Maltyp = RekordZahl(Malrekord, 3) Select Case Maltyp Case 762 'Füller AktFüller = Malrekord AktFüllerstil = RekordZahl(Malrekord, 4) If AktFüllerstil = 5 Then AktFüllerdicke = 0 AktFüllerrot = 0 AktFüllergrün = 0 AktFüllerblau = 0 Else AktFüllerdicke = RekordZahl(Malrekord, 5) AktFüllerrot = Asc(Mid(Malrekord, 13, 1)) AktFüllergrün = Asc(Mid(Malrekord, 14, 1)) AktFüllerblau = Asc(Mid(Malrekord, 15, 1)) End If Case 763 'Font AktFont = Malrekord Case 764 'Pinsel AktPinsel = Malrekord AktPinselstil = RekordZahl(Malrekord, 4) AktPinselrot = Asc(Mid(Malrekord, 9, 1)) AktPinselgrün = Asc(Mid(Malrekord, 10, 1)) AktPinselblau = Asc(Mid(Malrekord, 11, 1)) End Select Case 264 'Settextcharextra AktSetcharextra = RekordZahl(Rekord, 4)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 120
Case 521 'Textfarbe AktTextrot = Asc(Mid(Rekord, 7, 1)) AktTextgrün = Asc(Mid(Rekord, 8, 1)) AktTextblau = Asc(Mid(Rekord, 9, 1)) Case 302 'Textalign AktTextalign = RekordZahl(Rekord, 4) Case 258 'Textabdecken AktTextabdecken = RekordZahl(Rekord, 4) Case 513 'Textabdeckenfarbe AktTextrotabdecken = Asc(Mid(Rekord, 7, 1)) AktTextgrünabdecken = Asc(Mid(Rekord, 8, 1)) AktTextblauabdecken = Asc(Mid(Rekord, 9, 1)) Case 532 'Moveto MovetoY = RekordZahl(Rekord, 4) MovetoX = RekordZahl(Rekord, 5) Case 531 'Linieto Y = RekordZahl(Rekord, 4) X = RekordZahl(Rekord, 5) Rekord = LinieZeichnen(MovetoX, MovetoY, X, Y) MovetoY = Y MovetoX = X Typ = 805 Georekord(Georekorde) = Rekord Geoeigenschaften(Georekorde, 0) = Typ Geoeigenschaften(Georekorde, 1) = AktFüllerstil Geoeigenschaften(Georekorde, 2) = AktFüllerdicke Geoeigenschaften(Georekorde, 3) = AktFüllerrot Geoeigenschaften(Georekorde, 4) = AktFüllergrün Geoeigenschaften(Georekorde, 5) = AktFüllerblau Geoeigenschaften(Georekorde, 6) = AktPinselstil Geoeigenschaften(Georekorde, 7) = AktPinselrot Geoeigenschaften(Georekorde, 8) = AktPinselgrün Geoeigenschaften(Georekorde, 9) = AktPinselblau Georekorde = Georekorde + 1 Case 561, 522, 1313, 2610 'Text Geoeigenschaften(Georekorde, 0) = 261 'Markieren, dass hier ein Text war Geoeigenschaften(Georekorde, 14) = 261 Georekorde = Georekorde + 1 Textrekord(Textrekorde) = Rekord Textfont(Textrekorde) = AktFont Texteigenschaften(Textrekorde, 0) = Typ Texteigenschaften(Textrekorde, 1) = AktTextrot Texteigenschaften(Textrekorde, 2) = AktTextgrün Texteigenschaften(Textrekorde, 3) = AktTextblau Texteigenschaften(Textrekorde, 4) = AktTextalign Texteigenschaften(Textrekorde, 5) = AktTextabdecken Texteigenschaften(Textrekorde, 6) = AktTextrotabdecken Texteigenschaften(Textrekorde, 7) = AktTextgrünabdecken Texteigenschaften(Textrekorde, 8) = AktTextblauabdecken Texteigenschaften(Textrekorde, 9) = AktSetcharextra Textrekorde = Textrekorde + 1 Case 1055 Georekord(Georekorde) = Rekord Geoeigenschaften(Georekorde, 0) = Typ Geoeigenschaften(Georekorde, 1) = AktFüllerstil Geoeigenschaften(Georekorde, 2) = AktFüllerdicke Geoeigenschaften(Georekorde, 3) = AktFüllerrot Geoeigenschaften(Georekorde, 4) = AktFüllergrün Geoeigenschaften(Georekorde, 5) = AktFüllerblau Geoeigenschaften(Georekorde, 6) = AktPinselstil Geoeigenschaften(Georekorde, 7) = AktPinselrot Geoeigenschaften(Georekorde, 8) = AktPinselgrün Geoeigenschaften(Georekorde, 9) = AktPinselblau Georekorde = Georekorde + 1 Case Else 'alle anderen Objekte Georekord(Georekorde) = Rekord Geoeigenschaften(Georekorde, 0) = Typ Geoeigenschaften(Georekorde, 1) = AktFüllerstil Geoeigenschaften(Georekorde, 2) = AktFüllerdicke Geoeigenschaften(Georekorde, 3) = AktFüllerrot Geoeigenschaften(Georekorde, 4) = AktFüllergrün Geoeigenschaften(Georekorde, 5) = AktFüllerblau Geoeigenschaften(Georekorde, 6) = AktPinselstil Geoeigenschaften(Georekorde, 7) = AktPinselrot Geoeigenschaften(Georekorde, 8) = AktPinselgrün Geoeigenschaften(Georekorde, 9) = AktPinselblau Georekorde = Georekorde + 1 End SelectWend
If ModZ = 1 Then Zeit = (Timer - Startzeit)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 121
Selection.TypeText (Zeit) & Chr(9) & ("einlesen") Selection.TypeParagraphEnd If
If Textrekorde = 1 Then a = MsgBox("Die Grafik enthält keine Texte.", vbOKCancel, "Problemgrafik") If a = 2 Then Exit SubEnd If
'FensterX und FensterY bestimmen; zuschneiden an GeoobjekteFensterX = -1: FensterY = -1Fenster0X = 32767: Fenster0Y = 32767X = -1: Y = -1: x4 = 32767: y4 = 32767For i = 3 To Georekorde Typ = Geoeigenschaften(i, 0) Select Case Typ Case 1048, 1051, 2071, 2074, 2096 Y = RekordZahl(Georekord(i), 4) X = RekordZahl(Georekord(i), 5) y2 = RekordZahl(Georekord(i), 6) x2 = RekordZahl(Georekord(i), 7) If y2 > Y Then y4 = Y: Y = y2 Else y4 = y2 If x2 > X Then x4 = X: X = x2 Else x4 = x2 Case 1564 Y = RekordZahl(Georekord(i), 6) X = RekordZahl(Georekord(i), 7) y2 = RekordZahl(Georekord(i), 8) x2 = RekordZahl(Georekord(i), 9) If y2 > Y Then y4 = Y: Y = y2 Else y4 = y2 If x2 > X Then x4 = X: X = x2 Else x4 = x2 Case 1049, 1055 Y = RekordZahl(Georekord(i), 6) X = RekordZahl(Georekord(i), 7) x4 = X: y4 = Y Case 1352 Y = RekordZahl(Georekord(i), 7) X = RekordZahl(Georekord(i), 8) x4 = X: y4 = Y Case 1565 y4 = RekordZahl(Georekord(i), 8) x4 = RekordZahl(Georekord(i), 9) Y = y4 + RekordZahl(Georekord(i), 6) X = x4 + RekordZahl(Georekord(i), 7) Case 1336 AnzahlPunkte = (RekordZahl(Georekord(i), 1) - RekordZahl(Georekord(i), 4) - 4) / 2 tx = Right(Georekord(i), AnzahlPunkte * 4) X = RekordZahl(tx, 1) Y = RekordZahl(tx, 2) x4 = X: y4 = Y For a = 2 To AnzahlPunkte x1 = RekordZahl(tx, a * 2 - 1) y1 = RekordZahl(tx, a * 2) If x1 > X Then X = x1 If y1 > Y Then Y = y1 If x1 < x4 Then x4 = x1 If y1 < y4 Then y4 = y1 Next Case 805, 804 AnzahlPunkte = RekordZahl(Georekord(i), 4) X = RekordZahl(Georekord(i), 5) Y = RekordZahl(Georekord(i), 6) x4 = X: y4 = Y For a = 2 To AnzahlPunkte x1 = RekordZahl(Georekord(i), a * 2 + 3) y1 = RekordZahl(Georekord(i), a * 2 + 4) If x1 > X Then X = x1 If y1 > Y Then Y = y1 If x1 < x4 Then x4 = x1 If y1 < y4 Then y4 = y1 Next End Select If Y > FensterY Then FensterY = Y If X > FensterX Then FensterX = X If y4 < Fenster0Y Then Fenster0Y = y4 If x4 < Fenster0X Then Fenster0X = x4NextFor i = 1 To Textrekorde 'zuschneiden an Texte Typ = Texteigenschaften(i, 0) Select Case Typ Case 2610 Y = RekordZahl(Textrekord(i), 4) X = RekordZahl(Textrekord(i), 5)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 122
Winkel = RekordZahl(Textfont(i), 7) / 573 Textlenge = RekordZahl(Textrekord(i), 6) Texthöhe = Abs(RekordZahl(Textfont(i), 4)) AktTextalign = Texteigenschaften(i, 4) Zahl = RekordZahl(Textrekord(i), 7) If Zahl Mod 16 = 0 Then Zahl = 0 Else Zahl = 8 Teiltext = Mid(Textrekord(i), 15 + Zahl, Textlenge) If RekordZahl(Textrekord(i), 7) = 0 And Textlenge < RekordZahl(Textrekord(i), 1) Then k = Textlenge + Textlenge Mod 2 Lenge = WmfZahl(Mid(Textrekord(i), 15 + k, 2)) For b = 2 To Textlenge Lenge = Lenge + WmfZahl(Mid(Textrekord(i), 13 + k + 2 * b, 2)) Next Else Lenge = Textlenge * Texthöhe * 0.4 End If Case 1313 tx = Right(Textrekord(i), 4) Y = RekordZahl(tx, 1) X = RekordZahl(tx, 2) Textlenge = RekordZahl(Textrekord(i), 4) Texthöhe = Abs(RekordZahl(Textfont(i), 4)) Lenge = Textlenge * Texthöhe * 0.4 Teiltext = Mid(Textrekord(i), 9, Textlenge) AktTextalign = Texteigenschaften(i, 4) End Select If Typ = 2610 Or Typ = 1313 Then Select Case AktTextalign Case 2, 10, 26 'rechts x1 = X - Cos(Winkel) * Lenge y1 = Y + Sin(Winkel) * Lenge x2 = X y2 = Y Case 6, 14, 30 'mitte x1 = X - Cos(Winkel) * Lenge / 2 y1 = Y + Sin(Winkel) * Lenge / 2 x2 = X + Cos(Winkel) * Lenge / 2 y2 = Y - Sin(Winkel) * Lenge / 2 Case Else 'links x1 = X y1 = Y x2 = X + Cos(Winkel) * Lenge y2 = Y - Sin(Winkel) * Lenge End Select If AktTextalign < 8 Then x3 = x1 - Sin(Winkel) * Texthöhe y3 = y1 + Cos(Winkel) * Texthöhe x4 = x2 - Sin(Winkel) * Texthöhe y4 = y2 + Cos(Winkel) * Texthöhe Else c = 0: d = 0 For a = 1 To Textlenge tx = Mid(Teiltext, a, 1) Select Case tx Case "Ä", "Ö", "Ü", "'" c = 1 Case "p", "q", "g", "j", "§", "(", ")", "Q", ",", ";" d = 1 End Select Next x1 = x1 + (0.3 * d) * Sin(Winkel) * Texthöhe y1 = y1 + (0.3 * d) * Cos(Winkel) * Texthöhe x2 = x2 + (0.3 * d) * Sin(Winkel) * Texthöhe y2 = y2 + (0.3 * d) * Cos(Winkel) * Texthöhe x3 = x1 - (0.8 + 0.3 * d + 0.2 * c) * Sin(Winkel) * Texthöhe y3 = y1 - (0.8 + 0.3 * d + 0.2 * c) * Cos(Winkel) * Texthöhe x4 = x2 - (0.8 + 0.3 * d + 0.2 * c) * Sin(Winkel) * Texthöhe y4 = y2 - (0.8 + 0.3 * d + 0.2 * c) * Cos(Winkel) * Texthöhe End If If x1 > FensterX Then FensterX = x1: Texteigenschaften(i, 10) = 2 If y1 > FensterY Then FensterY = y1: Texteigenschaften(i, 10) = 2 If x2 > FensterX Then FensterX = x2: Texteigenschaften(i, 10) = 2 If y2 > FensterY Then FensterY = y2: Texteigenschaften(i, 10) = 2 If x3 > FensterX Then FensterX = x3: Texteigenschaften(i, 10) = 2 If y3 > FensterY Then FensterY = y3: Texteigenschaften(i, 10) = 2 If x4 > FensterX Then FensterX = x4: Texteigenschaften(i, 10) = 2 If y4 > FensterY Then FensterY = y4: Texteigenschaften(i, 10) = 2 If x1 < Fenster0X Then Fenster0X = x1 If y1 < Fenster0Y Then Fenster0Y = y1 If x2 < Fenster0X Then Fenster0X = x2 If y2 < Fenster0Y Then Fenster0Y = y2 If x3 < Fenster0X Then Fenster0X = x3
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 123
If y3 < Fenster0Y Then Fenster0Y = y3 If x4 < Fenster0X Then Fenster0X = x4 If y4 < Fenster0Y Then Fenster0Y = y4 'Texteigenschaften(i, 10) = 2 verhindert Mtext sprengen End IfNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("zuschneiden") Selection.TypeParagraphEnd If
'Verdicken und Zoom bestimmenWordSchriftgröße = Selection.Font.SizeReDim Zahlen(2000)For a = 1 To Textrekorde If Textfont(a) <> "" Then b = Abs(RekordZahl(Textfont(a), 4)) If b < 2001 Then Zahlen(b) = Zahlen(b) + 1 End If End IfNextb = 0: c = 0For a = 1 To 2000 If Zahlen(a) > b Then b = Zahlen(a) WMFschriftgröße = a End IfNextFensterX = FensterX - Fenster0XFensterY = FensterY - Fenster0YIf WMFschriftgröße = 0 Then WMFschriftgröße = 1 + FensterX * WordSchriftgröße / ((Log(Dateilenge) - 5) * 60) If FensterY > FensterX Then WMFschriftgröße = WMFschriftgröße * 2End IfPfeilgröße = WMFschriftgröße * 5 / 9Zoom = WMFschriftgröße / WordSchriftgröße * 72Verdicken = ModDH * Zoom \ 360If FensterX < 32000 Then FensterX = FensterX + 2 + 6 * VerdickenIf FensterY < 32000 Then FensterY = FensterY + 2 + 6 * VerdickenFenster0X = Fenster0X - 2 - 3 * VerdickenFenster0Y = Fenster0Y - 2 - 3 * Verdicken
'Objekte nach obenlinks schiebenZahl = (Fenster0X / FensterX) * (Fenster0Y / FensterY)If Zahl > 0.004 And ModP = 0 Then For i = 1 To Textrekorde Typ = Texteigenschaften(i, 0) Select Case Typ Case 1313 Punkt1 = Right(Textrekord(i), 4) Rekordlenge = RekordZahl(Textrekord(i), 1) Y = RekordZahl(Punkt1, 1) - Fenster0Y X = RekordZahl(Punkt1, 2) - Fenster0X Mid(Textrekord(i), Rekordlenge * 2 - 3, 4) = WmfPunkt(Y, X) Case 2610 Y = RekordZahl(Textrekord(i), 4) - Fenster0Y X = RekordZahl(Textrekord(i), 5) - Fenster0X Mid(Textrekord(i), 7, 4) = WmfPunkt(Y, X) End Select Next For i = 3 To Georekorde Typ = Geoeigenschaften(i, 0) Select Case Typ Case 1048, 1051 Y = RekordZahl(Georekord(i), 4) - Fenster0Y X = RekordZahl(Georekord(i), 5) - Fenster0X y2 = RekordZahl(Georekord(i), 6) - Fenster0Y x2 = RekordZahl(Georekord(i), 7) - Fenster0X tx = WmfBiPunkt(Y, X, y2, x2) Mid(Georekord(i), 7, 8) = tx Case 2071, 2074, 2096 AnzahlPunkte = 4 Rekord = Left(Georekord(i), 6) For b = 1 To AnzahlPunkte Punkt1 = Mid(Georekord(i), 3 + 4 * b, 4) X = WmfZahl(Right(Punkt1, 2)) - Fenster0X Y = WmfZahl(Left(Punkt1, 2)) - Fenster0Y Rekord = Rekord & WmfPunkt(Y, X) Next
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 124
Georekord(i) = Rekord Case 1564 Y = WmfZahl(Mid(Georekord(i), 11, 2)) - Fenster0Y X = WmfZahl(Mid(Georekord(i), 13, 2)) - Fenster0X y2 = WmfZahl(Mid(Georekord(i), 15, 2)) - Fenster0Y x2 = WmfZahl(Mid(Georekord(i), 17, 2)) - Fenster0X tx = WmfBiPunkt(Y, X, y2, x2) Mid(Georekord(i), 11, 8) = tx Case 1049, 1055 Y = RekordZahl(Georekord(i), 6) - Fenster0Y X = RekordZahl(Georekord(i), 7) - Fenster0X Mid(Georekord(i), 11, 4) = WmfPunkt(Y, X) Case 1352 Y = RekordZahl(Georekord(i), 7) - Fenster0Y X = RekordZahl(Georekord(i), 8) - Fenster0X Mid(Georekord(i), 13, 4) = WmfPunkt(Y, X) Case 1565 Y = RekordZahl(Georekord(i), 8) - Fenster0Y X = RekordZahl(Georekord(i), 9) - Fenster0X Mid(Georekord(i), 15, 4) = WmfPunkt(Y, X) Case 1336 Rekordlenge = RekordZahl(Georekord(i), 1) AnzahlPunkte = (Rekordlenge - RekordZahl(Georekord(i), 4) - 4) / 2 tx = Right(Georekord(i), AnzahlPunkte * 4) Rekord = Left(Georekord(i), Rekordlenge * 2 - AnzahlPunkte * 4) For a = 1 To AnzahlPunkte X = RekordZahl(tx, a * 2 - 1) - Fenster0X Y = RekordZahl(tx, a * 2) - Fenster0Y Rekord = Rekord & WmfPunkt(X, Y) Next Georekord(i) = Rekord Case 805, 804 AnzahlPunkte = RekordZahl(Georekord(i), 4) Rekord = Left(Georekord(i), 8) For b = 1 To AnzahlPunkte Punkt1 = Mid(Georekord(i), 5 + 4 * b, 4) X = WmfZahl(Left(Punkt1, 2)) - Fenster0X Y = WmfZahl(Right(Punkt1, 2)) - Fenster0Y Rekord = Rekord & WmfPunkt(X, Y) Next Georekord(i) = Rekord End Select Next Else FensterX = FensterX + Fenster0X FensterY = FensterY + Fenster0YEnd If
'StrichstärkenCTBIf ModR = 0 ThenFor a = 3 To Georekorde If Geoeigenschaften(a, 0) <> 261 And Geoeigenschaften(a, 1) <> 5 And Geoeigenschaften(a, 2) = 0 Then AktFarbe = Chr(Geoeigenschaften(a, 3)) & Chr(Geoeigenschaften(a, 4)) & Chr(Geoeigenschaften(a, 5)) Select Case AktFarbe Case Chr(255) & Chr(255) & Chr(255) 'weiß Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 0 * ModI) 'keine Farbänderung Case Chr(255) & Chr(255) & Chr(0) 'gelb Geoeigenschaften(a, 2) = (1 + Verdicken) * (1 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(255) & Chr(0) & Chr(255) 'magenta Geoeigenschaften(a, 2) = (1 + Verdicken) * (1 + 1 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(255) & Chr(0) & Chr(0) 'rot Geoeigenschaften(a, 2) = (1 + Verdicken) * (1 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(0) & Chr(255) & Chr(255) 'cyan Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(0) & Chr(255) & Chr(0) 'grün Geoeigenschaften(a, 2) = (1 + Verdicken) * (1.5 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 125
Case Chr(0) & Chr(0) & Chr(255) 'blau Geoeigenschaften(a, 2) = (1 + Verdicken) * (3 + 0 * ModI) Geoeigenschaften(a, 3) = 0 Geoeigenschaften(a, 4) = 0 Geoeigenschaften(a, 5) = 0 Case Chr(0) & Chr(0) & Chr(0) 'schwarz Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 2 * ModI) 'keine Farbänderung Case Chr(18) & Chr(18) & Chr(18) 'Layerabdecken Geoeigenschaften(a, 2) = (1 + Verdicken) * (3 + 0 * ModI) Geoeigenschaften(a, 3) = 255 Geoeigenschaften(a, 4) = 255 Geoeigenschaften(a, 5) = 255 Case Else Geoeigenschaften(a, 2) = (1 + Verdicken) * (2 + 0 * ModI) 'keine Farbänderung End Select End IfNext'PinselCTBFor a = 3 To Georekorde If Geoeigenschaften(a, 0) <> 261 And Geoeigenschaften(a, 6) <> 1 Then AktFarbe = Chr(Geoeigenschaften(a, 7)) & Chr(Geoeigenschaften(a, 8)) & Chr(Geoeigenschaften(a, 9)) Select Case AktFarbe Case Chr(255) & Chr(255) & Chr(255) 'weiß 'keine Farbänderung Case Chr(255) & Chr(255) & Chr(0) 'gelb Geoeigenschaften(a, 7) = 0 Geoeigenschaften(a, 8) = 0 Geoeigenschaften(a, 9) = 0 Case Chr(255) & Chr(0) & Chr(255) 'magenta Geoeigenschaften(a, 7) = 0 Geoeigenschaften(a, 8) = 0 Geoeigenschaften(a, 9) = 0 Case Chr(255) & Chr(0) & Chr(0) 'rot Geoeigenschaften(a, 7) = 0 Geoeigenschaften(a, 8) = 0 Geoeigenschaften(a, 9) = 0 Case Chr(0) & Chr(255) & Chr(255) 'cyan Geoeigenschaften(a, 7) = 0 Geoeigenschaften(a, 8) = 0 Geoeigenschaften(a, 9) = 0 Case Chr(0) & Chr(255) & Chr(0) 'grün Geoeigenschaften(a, 7) = 0 Geoeigenschaften(a, 8) = 0 Geoeigenschaften(a, 9) = 0 Case Chr(0) & Chr(0) & Chr(255) 'blau Geoeigenschaften(a, 7) = 0 Geoeigenschaften(a, 8) = 0 Geoeigenschaften(a, 9) = 0 Case Chr(0) & Chr(0) & Chr(0) 'schwarz Geoeigenschaften(a, 7) = 255 Geoeigenschaften(a, 8) = 255 Geoeigenschaften(a, 9) = 255 Case Chr(18) & Chr(18) & Chr(18) 'Layerabdecken Geoeigenschaften(a, 7) = 255 Geoeigenschaften(a, 8) = 255 Geoeigenschaften(a, 9) = 255 Case Chr(33) & Chr(40) & Chr(48) 'zensurschwarz Geoeigenschaften(a, 7) = 255 Geoeigenschaften(a, 8) = 255 Geoeigenschaften(a, 9) = 255 Case Else 'nichts End Select End IfNext'TextCTBFor a = 1 To Textrekorde If Texteigenschaften(a, 0) <> 261 Then AktFarbe = Chr(Texteigenschaften(a, 1)) & Chr(Texteigenschaften(a, 2)) & Chr(Texteigenschaften(a, 3)) Select Case AktFarbe Case Chr(255) & Chr(255) & Chr(255) 'weiß 'keine Farbänderung Case Chr(255) & Chr(255) & Chr(0) 'gelb Texteigenschaften(a, 1) = 0 Texteigenschaften(a, 2) = 0 Texteigenschaften(a, 3) = 0 Case Chr(255) & Chr(0) & Chr(255) 'magenta Texteigenschaften(a, 1) = 0 Texteigenschaften(a, 2) = 0
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 126
Texteigenschaften(a, 3) = 0 Case Chr(255) & Chr(0) & Chr(0) 'rot Texteigenschaften(a, 1) = 0 Texteigenschaften(a, 2) = 0 Texteigenschaften(a, 3) = 0 Case Chr(0) & Chr(255) & Chr(255) 'cyan Texteigenschaften(a, 1) = 0 Texteigenschaften(a, 2) = 0 Texteigenschaften(a, 3) = 0 Case Chr(0) & Chr(255) & Chr(0) 'grün Texteigenschaften(a, 1) = 0 Texteigenschaften(a, 2) = 0 Texteigenschaften(a, 3) = 0 Case Chr(0) & Chr(0) & Chr(255) 'blau Texteigenschaften(a, 1) = 0 Texteigenschaften(a, 2) = 0 Texteigenschaften(a, 3) = 0 Case Chr(0) & Chr(0) & Chr(0) 'schwarz 'nichts Case Else 'nichts End Select End IfNextElse 'keine CTB For a = 3 To Georekorde If Geoeigenschaften(a, 2) = 0 And Geoeigenschaften(a, 1) <> 5 Then Geoeigenschaften(a, 2) = 2 * (1 + Verdicken) End If NextEnd If 'If ModR = 0 Then
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("CTB") Selection.TypeParagraphEnd If
'Polygone in Füllungen verwandelnIf ModV = 1 Then For a = 3 To Georekorde - 1 Typ = Geoeigenschaften(a, 0) If Typ = 804 Then rot = Geoeigenschaften(a, 7) grün = Geoeigenschaften(a, 8) blau = Geoeigenschaften(a, 9) AktPinselstil = Geoeigenschaften(a + 1, 6) AktPinselrot = Geoeigenschaften(a + 1, 7) AktPinselgrün = Geoeigenschaften(a + 1, 8) AktPinselblau = Geoeigenschaften(a + 1, 9) If Geoeigenschaften(a, 1) = 5 Then Geoeigenschaften(a, 0) = 261 Georekord(a) = "" For b = a + 1 To Georekorde If AktPinselstil = Geoeigenschaften(b, 6) And AktPinselrot = Geoeigenschaften(b, 7) And AktPinselgrün = Geoeigenschaften(b, 8) And AktPinselblau = Geoeigenschaften(b, 9) Then Geoeigenschaften(b, 6) = 0 Geoeigenschaften(b, 7) = rot Geoeigenschaften(b, 8) = grün Geoeigenschaften(b, 9) = blau Else If Geoeigenschaften(b, 0) <> 261 Then Exit For End If Next End If End If NextEnd If
'Pixel in Kreislein verwandelnIf ModI = 1 Then Farbe = Chr(255) & Chr(255) & Chr(0) Else Farbe = Chr(255) & Chr(0) & Chr(0)End IfFor a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) If Typ = 1055 Then AktFarbe = Mid(Georekord(a), 7, 3) If AktFarbe = Farbe Then Georekord(a) = "" Geoeigenschaften(a, 0) = 261
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 127
Else Y = RekordZahl(Georekord(a), 6) X = RekordZahl(Georekord(a), 7) k = 1 + Verdicken Geoeigenschaften(a, 0) = 1048 Georekord(a) = EllipseZeichnen(Y - k, X - k, Y + k, X + k) End If End IfNext
'Mtexte sprengenFor a = 1 To Textrekorde Typ = Texteigenschaften(a, 0) If Typ = 2610 Then b = RekordZahl(Textrekord(a), 7) If b = 0 And Texteigenschaften(a, 10) <> 2 Then Y = RekordZahl(Textrekord(a), 4) X = RekordZahl(Textrekord(a), 5) Textlenge = RekordZahl(Textrekord(a), 6) Teiltext = Mid(Textrekord(a), 15, Textlenge) Texteigenschaften(a, 0) = 1313 Textrekord(a) = TextZeichnen(Teiltext, Y, X) End If End IfNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("Pixel und Mtext") Selection.TypeParagraphEnd If
Summe = 0: Polygone = 0If FensterY > FensterX Then c = FensterY Else c = FensterXFor a = 3 To Georekorde 'Polygone bekommen umschließendes Rechteck als Eigenschaft um PowerWMF zu beschleunigen Typ = Geoeigenschaften(a, 0) If Typ = 804 Then 'für berührende Schraffuren AnzahlPunkte = RekordZahl(Georekord(a), 4) Poly = Right(Georekord(a), AnzahlPunkte * 4) minX = RekordZahl(Poly, 1) minY = RekordZahl(Poly, 2) maxX = minX maxY = minY For i = 2 To AnzahlPunkte X = RekordZahl(Poly, i * 2 - 1) Y = RekordZahl(Poly, i * 2) If X > maxX Then maxX = X If X < minX Then minX = X If Y > maxY Then maxY = Y If Y < minY Then minY = Y Next Geoeigenschaften(a, 10) = minX Geoeigenschaften(a, 11) = minY Geoeigenschaften(a, 12) = maxX Geoeigenschaften(a, 13) = maxY 'zum Meckern bei Buchstabenbruchstücke b = maxX - minX d = maxY - minY If b < d Then b = d Zahl = b / c If Zahl < 0.02 Then Summe = Summe + AnzahlPunkte Polygone = Polygone + 1 End If End IfNextb = Textrekorde - 1If Polygone - 3 * b > 100 Then a = MsgBox("Die Grafik enthält eine große Menge an Polygönchen. Möglicherweise handelt es sich um Buchstabenbruchstücke oder zersplitterte Schraffuren." _ & Chr(13) & Chr(10) & "Anzahl der Polygönchen:" & Polygone _ & Chr(13) & Chr(10) & "Anzahl der Polygonecken:" & Summe _ & Chr(13) & Chr(10) & "Anzahl der Texte:" & b _ , vbOKCancel, "Problemgrafik") If a = 2 Then Exit SubEnd If
'Schraffuren verbindenPrüfobjekte = -1For i = 3 To Georekorde
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 128
If Geoeigenschaften(i, 0) = 804 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = i End IfNextFor i = 0 To Prüfobjekte Poly = Georekord(Liniennummer(i)) AnzahlPunkte = RekordZahl(Poly, 4) Poly = Right(Poly, AnzahlPunkte * 4) Fleche1 = Abs(Polygonfläche(Poly)) For j = i + 1 To Prüfobjekte If j - i > Geduld Then Exit For If Geoeigenschaften(Liniennummer(i), 1) <> 5 Then Exit For b = 0: f = 0 For c = 6 To 9 If Geoeigenschaften(Liniennummer(i), c) <> Geoeigenschaften(Liniennummer(j), c) Then b = 1 Next If Geoeigenschaften(Liniennummer(j), 1) <> 5 Then b = 1 If Geoeigenschaften(Liniennummer(i), 10) > Geoeigenschaften(Liniennummer(j), 12) Then b = 1 If Geoeigenschaften(Liniennummer(j), 10) > Geoeigenschaften(Liniennummer(i), 12) Then b = 1 If Geoeigenschaften(Liniennummer(i), 11) > Geoeigenschaften(Liniennummer(j), 13) Then b = 1 If Geoeigenschaften(Liniennummer(j), 11) > Geoeigenschaften(Liniennummer(i), 13) Then b = 1 If b <> 1 Then Poly2 = Georekord(Liniennummer(j)) AnzahlPunkte2 = RekordZahl(Poly2, 4) Poly2 = Right(Poly2, AnzahlPunkte2 * 4) Fleche2 = Abs(Polygonfläche(Poly2)) For a = 1 To AnzahlPunkte For b = 1 To AnzahlPunkte2 Punkt1 = Left(Poly, 4) Punkt2 = Right(Poly, 4) Punkt3 = Left(Poly2, 4) Punkt4 = Right(Poly2, 4) If Punkt1 = Punkt3 And Punkt2 = Punkt4 Then Poly2 = Punkteinvertieren(Poly2) tx = Punkt3: Punkt3 = Punkt4: Punkt4 = tx End If If Punkt1 = Punkt4 And Punkt2 = Punkt3 Then Poly2 = Right(Poly2, (AnzahlPunkte2 - 1) * 4) Poly2 = Left(Poly2, (AnzahlPunkte2 - 2) * 4) Poly3 = Poly & Poly2 Fleche3 = Abs(Polygonfläche(Poly3)) c = Fleche3 - Fleche2 - Fleche1 x1 = Abs(c) / (Abs(Fleche3) + Abs(Fleche2) + Abs(Fleche1)) If x1 < 0.01 Then Georekord(Liniennummer(j)) = PolygonZeichnen(Poly3) Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 If Geoeigenschaften(Liniennummer(i), 10) < Geoeigenschaften(Liniennummer(j), 10) Then Geoeigenschaften(Liniennummer(j), 10) = Geoeigenschaften(Liniennummer(i), 10) If Geoeigenschaften(Liniennummer(i), 11) < Geoeigenschaften(Liniennummer(j), 11) Then Geoeigenschaften(Liniennummer(j), 11) = Geoeigenschaften(Liniennummer(i), 11) If Geoeigenschaften(Liniennummer(i), 12) > Geoeigenschaften(Liniennummer(j), 12) Then Geoeigenschaften(Liniennummer(j), 12) = Geoeigenschaften(Liniennummer(i), 12) If Geoeigenschaften(Liniennummer(i), 13) > Geoeigenschaften(Liniennummer(j), 13) Then Geoeigenschaften(Liniennummer(j), 13) = Geoeigenschaften(Liniennummer(i), 13) f = 1 End If End If If f = 1 Then Exit For tx = Left(Poly2, 4) Poly2 = Right(Poly2, (AnzahlPunkte2 - 1) * 4) & tx Next If f = 1 Then Exit For tx = Left(Poly, 4) Poly = Right(Poly, (AnzahlPunkte - 1) * 4) & tx Next If f = 1 Then Exit For End If NextNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("Schraffuren verbinden") Selection.TypeParagraphEnd If
'berührende Polygone zu überschlagene Polygone verbindenPrüfobjekte = -1ReDim Liniennummer(Georekorde)For i = 3 To Georekorde
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 129
If Geoeigenschaften(i, 0) = 804 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = i End IfNextFor i = 0 To Prüfobjekte Poly = Georekord(Liniennummer(i)) AnzahlPunkte = RekordZahl(Poly, 4) Poly = Right(Poly, AnzahlPunkte * 4) For j = i + 1 To Prüfobjekte If j - i > Geduld Then Exit For b = 0: f = 0 For a = 1 To 9 If Geoeigenschaften(Liniennummer(i), a) <> Geoeigenschaften(Liniennummer(j), a) Then b = 1 Next If Geoeigenschaften(Liniennummer(i), 10) > Geoeigenschaften(Liniennummer(j), 12) Then b = 1 If Geoeigenschaften(Liniennummer(j), 10) > Geoeigenschaften(Liniennummer(i), 12) Then b = 1 If Geoeigenschaften(Liniennummer(i), 11) > Geoeigenschaften(Liniennummer(j), 13) Then b = 1 If Geoeigenschaften(Liniennummer(j), 11) > Geoeigenschaften(Liniennummer(i), 13) Then b = 1 If b = 0 Then Poly2 = Georekord(Liniennummer(j)) AnzahlPunkte2 = RekordZahl(Poly2, 4) Poly2 = Right(Poly2, AnzahlPunkte2 * 4) For a = 1 To AnzahlPunkte For b = 1 To AnzahlPunkte2 If Right(Poly, 4) = Right(Poly2, 4) Then c = 0: d = 0: xs = 4 x1 = RekordZahl(Poly, 1) y1 = RekordZahl(Poly, 2) x2 = RekordZahl(Poly2, 1) y2 = RekordZahl(Poly2, 2) x3 = RekordZahl(Poly, AnzahlPunkte * 2 - 3) y3 = RekordZahl(Poly, AnzahlPunkte * 2 - 2) x4 = RekordZahl(Poly2, AnzahlPunkte2 * 2 - 3) y4 = RekordZahl(Poly2, AnzahlPunkte2 * 2 - 2) X = RekordZahl(Poly, AnzahlPunkte * 2 - 1) Y = RekordZahl(Poly, AnzahlPunkte * 2) Zahl = Sqr((X - x1) ^ 2 + (Y - y1) ^ 2) - Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2) If Zahl > 0 Then Exit For If x1 = x2 Then d = 1 If x3 = x4 Then d = 1 If d = 0 Then m1 = (y2 - y1) / (x2 - x1) m2 = (y4 - y3) / (x4 - x3) If Abs(m2 - m1) > 0.1 Then xs = (y3 - y1 + m1 * x1 - m2 * x3) / (m1 - m2) ys = m1 * (xs - x1) + y1 xs = Abs(xs - X) ys = Abs(ys - Y) End If End If If xs < 3 And ys < 3 Then c = 1 Else If x1 = x4 Then Exit For If x3 = x2 Then Exit For m1 = (y4 - y1) / (x4 - x1) m2 = (y2 - y3) / (x2 - x3) If Abs(m2 - m1) < 0.1 Then Exit For xs = (y3 - y1 + m1 * x1 - m2 * x3) / (m1 - m2) ys = m1 * (xs - x1) + y1 xs = Abs(xs - X) ys = Abs(ys - Y) If xs < 3 And ys < 3 Then c = 2 End If If c <> 0 Then Geoeigenschaften(Liniennummer(i), 0) = 261 Georekord(Liniennummer(i)) = "" Poly = Left(Poly, AnzahlPunkte * 4 - 4) Poly2 = Left(Poly2, AnzahlPunkte2 * 4 - 4) If c = 1 Then Poly2 = Punkteinvertieren(Poly2) Poly3 = Poly & Poly2 Georekord(Liniennummer(j)) = PolygonZeichnen(Poly3) If Geoeigenschaften(Liniennummer(i), 10) < Geoeigenschaften(Liniennummer(j), 10) Then Geoeigenschaften(Liniennummer(j), 10) = Geoeigenschaften(Liniennummer(i), 10) If Geoeigenschaften(Liniennummer(i), 11) < Geoeigenschaften(Liniennummer(j), 11) Then Geoeigenschaften(Liniennummer(j), 11) = Geoeigenschaften(Liniennummer(i), 11) If Geoeigenschaften(Liniennummer(i), 12) > Geoeigenschaften(Liniennummer(j), 12) Then Geoeigenschaften(Liniennummer(j), 12) = Geoeigenschaften(Liniennummer(i), 12) If Geoeigenschaften(Liniennummer(i), 13) > Geoeigenschaften(Liniennummer(j), 13) Then Geoeigenschaften(Liniennummer(j), 13) = Geoeigenschaften(Liniennummer(i), 13) f = 1
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 130
Exit For End If End If tx = Left(Poly2, 4) Poly2 = Right(Poly2, (AnzahlPunkte2 - 1) * 4) & tx Next tx = Left(Poly, 4) Poly = Right(Poly, (AnzahlPunkte - 1) * 4) & tx If f = 1 Then Exit For Next End If If f = 1 Then Exit For NextNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("behrührende Polygone") Selection.TypeParagraphEnd If
For a = 3 To Georekorde 'Polylinien bekommen ihre Endpunkte als Eigenschaft um PowerWMF zu beschleunigen Typ = Geoeigenschaften(a, 0) If Typ = 805 Or Typ = 804 Then AnzahlPunkte = RekordZahl(Georekord(a), 4) Poly = Right(Georekord(a), AnzahlPunkte * 4) Geoeigenschaften(a, 10) = RekordZahl(Poly, 1) 'x1 Geoeigenschaften(a, 11) = RekordZahl(Poly, 2) 'y1 Geoeigenschaften(a, 12) = RekordZahl(Poly, AnzahlPunkte * 2 - 1) 'x2 Geoeigenschaften(a, 13) = RekordZahl(Poly, AnzahlPunkte * 2) 'y2 'für doppelte Linien Löschen und überlappende Linien End IfNext
'Linien mit der Farbe 80;102;101 in Pfeile verwandelnFor a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) If Typ = 805 Then AnzahlPunkte = RekordZahl(Georekord(a), 4) If AnzahlPunkte = 2 Then If Geoeigenschaften(a, 3) = 80 And Geoeigenschaften(a, 4) = 102 And Geoeigenschaften(a, 5) = 101 Then x1 = Geoeigenschaften(a, 10) y1 = Geoeigenschaften(a, 11) x2 = Geoeigenschaften(a, 12) y2 = Geoeigenschaften(a, 13) If x1 + Pfeilgröße / 2 > FensterX Then FensterX = x1 + Pfeilgröße / 2 If y1 + Pfeilgröße / 2 > FensterY Then FensterY = y1 + Pfeilgröße / 2 If x2 + Pfeilgröße / 2 > FensterX Then FensterX = x2 + Pfeilgröße / 2 If y2 + Pfeilgröße / 2 > FensterY Then FensterY = y2 + Pfeilgröße / 2 Georekord(a) = PfeilZeichnen(x1, y1, x2, y2, Pfeilgröße) Geoeigenschaften(a, 0) = 100 For b = 3 To 9 Geoeigenschaften(a, b) = 0 Next End If End If End IfNext'Polylinien mit der Farbe 77;97;223 in schriftlose Polymaßketten verwandelnFor a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) If Typ = 805 Then If Geoeigenschaften(a, 3) = 77 And Geoeigenschaften(a, 4) = 97 And Geoeigenschaften(a, 5) = 223 Then AnzahlPunkte = RekordZahl(Georekord(a), 4) x1 = Geoeigenschaften(a, 10) y1 = Geoeigenschaften(a, 11) x2 = Geoeigenschaften(a, 12) y2 = Geoeigenschaften(a, 13) If x1 + Pfeilgröße > FensterX Then FensterX = x1 + Pfeilgröße If y1 + Pfeilgröße > FensterY Then FensterY = y1 + Pfeilgröße If x2 + Pfeilgröße > FensterX Then FensterX = x2 + Pfeilgröße If y2 + Pfeilgröße > FensterY Then FensterY = y2 + Pfeilgröße ReDim Werte(AnzahlPunkte - 1) Werte(0) = AnzahlPunkte - 1 Werte(AnzahlPunkte - 1) = Pfeilgröße For b = 2 To AnzahlPunkte - 1 x3 = RekordZahl(Georekord(a), 2 * b + 3) y3 = RekordZahl(Georekord(a), 2 * b + 4) Werte(b - 1) = Sqr((x3 - x1) ^ 2 + (y3 - y1) ^ 2)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 131
Next Georekord(a) = Polymaßkette(x1, y1, x2, y2, "", Werte) Geoeigenschaften(a, 0) = 104 For b = 3 To 9 Geoeigenschaften(a, b) = 0 Next End If End IfNext
'Polylinien glättenk = 1 + Verdicken * (1 + ModJ) / 2For i = 3 To Georekorde Typ = Geoeigenschaften(i, 0) If Typ = 804 Or Typ = 805 Then Georekord(i) = Polyglätten(Georekord(i), k) Geoeigenschaften(i, 0) = RekordZahl(Georekord(i), 3) End IfNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("Polyglätten") Selection.TypeParagraphEnd If
'doppelte Linien löschenFor e = 0 To 1 ' e=0 to 1 unterteilt die Linien in 2 Gruppen: 2+2*Verdichen oder andere Prüfobjekte = -1 For a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) If Typ = 805 Then AnzahlPunkte = RekordZahl(Georekord(a), 4) If AnzahlPunkte = 2 Then If Geoeigenschaften(a, 2) = 2 + 2 * Verdicken Xor e = 1 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = a End If End If End If Next For i = 0 To Prüfobjekte x1 = Geoeigenschaften(Liniennummer(i), 10) y1 = Geoeigenschaften(Liniennummer(i), 11) x2 = Geoeigenschaften(Liniennummer(i), 12) y2 = Geoeigenschaften(Liniennummer(i), 13) For j = i + 1 To Prüfobjekte If j - i > Geduld Then Exit For x3 = Geoeigenschaften(Liniennummer(j), 10) y3 = Geoeigenschaften(Liniennummer(j), 11) x4 = Geoeigenschaften(Liniennummer(j), 12) y4 = Geoeigenschaften(Liniennummer(j), 13) c = 0 If x1 = x3 And y1 = y3 And x2 = x4 And y2 = y4 Then c = 1 If x2 = x3 And y2 = y3 And x1 = x4 And y1 = y4 Then c = 1 If c = 1 Then If Geoeigenschaften(Liniennummer(j), 2) >= Geoeigenschaften(Liniennummer(i), 2) Then Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 Exit For End If End If Next Next 'doppelte Polylinien mehr als 2 Punkte löschen Prüfobjekte = -1 For a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) If Typ = 805 Or Typ = 804 Then AnzahlPunkte = RekordZahl(Georekord(a), 4) If AnzahlPunkte > 2 Then If Geoeigenschaften(a, 2) = 2 + 2 * Verdicken Xor e = 1 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = a End If End If End If Next For i = 0 To Prüfobjekte x1 = Geoeigenschaften(Liniennummer(i), 10) y1 = Geoeigenschaften(Liniennummer(i), 11) x2 = Geoeigenschaften(Liniennummer(i), 12)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 132
y2 = Geoeigenschaften(Liniennummer(i), 13) For j = i + 1 To Prüfobjekte If j - i > Geduld Then Exit For x3 = Geoeigenschaften(Liniennummer(j), 10) y3 = Geoeigenschaften(Liniennummer(j), 11) x4 = Geoeigenschaften(Liniennummer(j), 12) y4 = Geoeigenschaften(Liniennummer(j), 13) c = 0 If x1 = x3 And y1 = y3 And x2 = x4 And y2 = y4 Then c = 1 If x2 = x3 And y2 = y3 And x1 = x4 And y1 = y4 Then c = 1 If c = 1 Then If Georekord(Liniennummer(i)) = Georekord(Liniennummer(j)) Then If Geoeigenschaften(Liniennummer(j), 2) >= Geoeigenschaften(Liniennummer(i), 2) Then If Geoeigenschaften(Liniennummer(j), 6) = 0 Then Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 Exit For End If End If End If End If Next NextNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("doppelte Linien") Selection.TypeParagraphEnd If
'überlappende Linien verbindenPrüfobjekte = -1For a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) If Typ = 805 Then AnzahlPunkte = RekordZahl(Georekord(a), 4) If AnzahlPunkte = 2 Then x1 = Geoeigenschaften(a, 10) y1 = Geoeigenschaften(a, 11) x2 = Geoeigenschaften(a, 12) y2 = Geoeigenschaften(a, 13) If x1 = x2 Or x1 = x2 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = a End If End If End IfNextFor i = 0 To Prüfobjekte x1 = Geoeigenschaften(Liniennummer(i), 10) y1 = Geoeigenschaften(Liniennummer(i), 11) x2 = Geoeigenschaften(Liniennummer(i), 12) y2 = Geoeigenschaften(Liniennummer(i), 13) For j = i + 1 To Prüfobjekte If j - i > Geduld Then Exit For b = 0 For a = 1 To 5 If Geoeigenschaften(Liniennummer(i), a) <> Geoeigenschaften(Liniennummer(j), a) Then b = 1 Next If b = 0 Then x3 = Geoeigenschaften(Liniennummer(j), 10) y3 = Geoeigenschaften(Liniennummer(j), 11) x4 = Geoeigenschaften(Liniennummer(j), 12) y4 = Geoeigenschaften(Liniennummer(j), 13) If x1 = x2 And x2 = x3 And x3 = x4 Then If y2 > y1 Then a = y1: b = y2 Else b = y1: a = y2 If y3 > b Then b = y3 If y4 > b Then b = y4 If y3 < a Then a = y3 If y4 < a Then a = y4 c = Abs(y1 - y2) + Abs(y3 - y4) + a - b If c > 0 Then Georekord(Liniennummer(j)) = LinieZeichnen(x1, a, x1, b) Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 Geoeigenschaften(Liniennummer(j), 10) = x1 Geoeigenschaften(Liniennummer(j), 11) = a Geoeigenschaften(Liniennummer(j), 12) = x1 Geoeigenschaften(Liniennummer(j), 13) = b Exit For End If
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 133
ElseIf y1 = y2 And y2 = y3 And y3 = y4 Then If x2 > x1 Then a = x1: b = x2 Else b = x1: a = x2 If x3 > b Then b = x3 If x4 > b Then b = x4 If x3 < a Then a = x3 If x4 < a Then a = x4 c = Abs(x1 - x2) + Abs(x3 - x4) + a - b If c > 0 Then Georekord(Liniennummer(j)) = LinieZeichnen(a, y1, b, y1) Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 Geoeigenschaften(Liniennummer(j), 10) = a Geoeigenschaften(Liniennummer(j), 11) = y1 Geoeigenschaften(Liniennummer(j), 12) = b Geoeigenschaften(Liniennummer(j), 13) = y1 Exit For End If End If End If NextNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("überlappende Linien") Selection.TypeParagraphEnd If
'Linien zu Polylinien verbindenFor e = 0 To 1 Prüfobjekte = -1 For a = 3 To Georekorde If Geoeigenschaften(a, 0) = 805 Then If Geoeigenschaften(a, 2) = 2 + 2 * Verdicken Xor e = 1 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = a End If End If Next For i = 0 To Prüfobjekte Poly = Georekord(Liniennummer(i)) AnzahlPunkte = RekordZahl(Poly, 4) Poly = Right(Poly, AnzahlPunkte * 4) x1 = Geoeigenschaften(Liniennummer(i), 10) y1 = Geoeigenschaften(Liniennummer(i), 11) x2 = Geoeigenschaften(Liniennummer(i), 12) y2 = Geoeigenschaften(Liniennummer(i), 13) For j = i + 1 To Prüfobjekte If j - i > Geduld Then Exit For b = 0 For a = 1 To 5 If Geoeigenschaften(Liniennummer(i), a) <> Geoeigenschaften(Liniennummer(j), a) Then b = 1 Next x3 = Geoeigenschaften(Liniennummer(j), 10) y3 = Geoeigenschaften(Liniennummer(j), 11) x4 = Geoeigenschaften(Liniennummer(j), 12) y4 = Geoeigenschaften(Liniennummer(j), 13) c = 0 If x2 = x3 And y2 = y3 Then c = 1 ElseIf x1 = x3 And y1 = y3 Then c = 1 ElseIf x2 = x4 And y2 = y4 Then c = 1 ElseIf x1 = x4 And y1 = y4 Then c = 1 End If If b = 0 And c = 1 Then Poly2 = Georekord(Liniennummer(j)) AnzahlPunkte2 = RekordZahl(Poly2, 4) Poly2 = Right(Poly2, AnzahlPunkte2 * 4) If x2 = x3 And y2 = y3 Then ElseIf x1 = x3 And y1 = y3 Then Poly = Punkteinvertieren(Poly) ElseIf x2 = x4 And y2 = y4 Then Poly2 = Punkteinvertieren(Poly2) ElseIf x1 = x4 And y1 = y4 Then Poly = Punkteinvertieren(Poly) Poly2 = Punkteinvertieren(Poly2) End If Poly3 = Left(Poly, AnzahlPunkte * 4 - 4) & Poly2 Georekord(Liniennummer(i)) = ""
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 134
Geoeigenschaften(Liniennummer(i), 0) = 261 Georekord(Liniennummer(j)) = PolylinieZeichnen(Poly3) Geoeigenschaften(Liniennummer(j), 10) = RekordZahl(Poly3, 1) Geoeigenschaften(Liniennummer(j), 11) = RekordZahl(Poly3, 2) b = AnzahlPunkte + AnzahlPunkte2 - 1 Geoeigenschaften(Liniennummer(j), 12) = RekordZahl(Poly3, b * 2 - 1) Geoeigenschaften(Liniennummer(j), 13) = RekordZahl(Poly3, b * 2) Exit For End If Next NextNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("linien verbinden") Selection.TypeParagraphEnd If
'geschlossene Polylinien in Polygone verwandelnFor i = 3 To Georekorde Typ = Geoeigenschaften(i, 0) If Typ = 804 Or Typ = 805 Then AnzahlPunkte = RekordZahl(Georekord(i), 4) Poly = Right(Georekord(i), AnzahlPunkte * 4) Punkt1 = Left(Poly, 4) Punkt2 = Right(Poly, 4) If Punkt1 = Punkt2 Then Poly = Left(Poly, AnzahlPunkte * 4 - 4) Georekord(i) = PolygonZeichnen(Poly) If Typ = 805 Then Geoeigenschaften(i, 0) = 804 Geoeigenschaften(i, 6) = 1 Geoeigenschaften(i, 7) = 0 Geoeigenschaften(i, 8) = 0 Geoeigenschaften(i, 9) = 0 End If End If End IfNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("viereckige Dreiecke") Selection.TypeParagraphEnd If
'Polylinien nochmal glättenk = 1 + Verdicken * (1 + ModJ) / 2For i = 1 To Georekorde Typ = Geoeigenschaften(i, 0) If Typ = 804 Or Typ = 805 Then Georekord(i) = Polyglätten(Georekord(i), k) Geoeigenschaften(i, 0) = RekordZahl(Georekord(i), 3) End IfNext
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("Polyglätten") Selection.TypeParagraphEnd If
'unsichtbar umrandete Farbpolygone mit sichtbar umrandete Luftpolygone verschmelzenReDim Liniennummer2(Georekorde)Prüfobjekte = -1: Prüfobjekte2 = -1For a = 3 To Georekorde If Geoeigenschaften(a, 0) = 804 Then If Geoeigenschaften(a, 1) = 5 And Geoeigenschaften(a, 6) <> 1 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = a End If If Geoeigenschaften(a, 6) = 1 And Geoeigenschaften(a, 1) <> 5 Then Prüfobjekte2 = Prüfobjekte2 + 1 Liniennummer2(Prüfobjekte2) = a End If End IfNextFor i = 0 To Prüfobjekte Poly = Georekord(Liniennummer(i)) AnzahlPunkte = RekordZahl(Poly, 4) Poly = Right(Poly, AnzahlPunkte * 4)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 135
For j = 0 To Prüfobjekte2 Poly2 = Georekord(Liniennummer2(j)) AnzahlPunkte2 = RekordZahl(Poly2, 4) Poly2 = Right(Poly2, AnzahlPunkte2 * 4) d = 0 If AnzahlPunkte = AnzahlPunkte2 Then For c = 1 To AnzahlPunkte If Poly = Poly2 Or Poly = Punkteinvertieren(Poly2) Then Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 Geoeigenschaften(Liniennummer2(j), 6) = Geoeigenschaften(Liniennummer(i), 6) Geoeigenschaften(Liniennummer2(j), 7) = Geoeigenschaften(Liniennummer(i), 7) Geoeigenschaften(Liniennummer2(j), 8) = Geoeigenschaften(Liniennummer(i), 8) Geoeigenschaften(Liniennummer2(j), 9) = Geoeigenschaften(Liniennummer(i), 9) d = 1 Exit For End If tx = Right(Poly2, 4) Poly2 = tx & Left(Poly2, AnzahlPunkte2 * 4 - 4) Next If d = 1 Then Exit For End If NextNext'andere ObjektePrüfobjekte = -1: Prüfobjekte2 = -1For a = 3 To Georekorde Select Case Geoeigenschaften(a, 0) Case 2074, 2096, 1048, 1051, 1564 If Geoeigenschaften(a, 1) = 5 And Geoeigenschaften(a, 6) <> 1 Then Prüfobjekte = Prüfobjekte + 1 Liniennummer(Prüfobjekte) = a End If If Geoeigenschaften(a, 6) = 1 And Geoeigenschaften(a, 1) <> 5 Then Prüfobjekte2 = Prüfobjekte2 + 1 Liniennummer2(Prüfobjekte2) = a End If End SelectNextFor i = 0 To Prüfobjekte For j = 0 To Prüfobjekte2 If Georekord(Liniennummer(i)) = Georekord(Liniennummer2(j)) Then Georekord(Liniennummer(i)) = "" Geoeigenschaften(Liniennummer(i), 0) = 261 Geoeigenschaften(Liniennummer2(j), 6) = Geoeigenschaften(Liniennummer(i), 6) Geoeigenschaften(Liniennummer2(j), 7) = Geoeigenschaften(Liniennummer(i), 7) Geoeigenschaften(Liniennummer2(j), 8) = Geoeigenschaften(Liniennummer(i), 8) Geoeigenschaften(Liniennummer2(j), 9) = Geoeigenschaften(Liniennummer(i), 9) End If NextNext
'Textabdecken mitnehmenFor a = 3 To Georekorde Typ = Geoeigenschaften(a, 0) e = Geoeigenschaften(a, 14) If Typ = 261 And e = 261 Then Typ = Geoeigenschaften(a - 1, 0) If Typ = 804 Or Typ = 1051 Then AktFüllerstil = Geoeigenschaften(a - 1, 1) AktPinselrot = Geoeigenschaften(a - 1, 7) AktPinselgrün = Geoeigenschaften(a - 1, 8) AktPinselblau = Geoeigenschaften(a - 1, 9) b = AktPinselrot + AktPinselblau + AktPinselblau If AktFüllerstil = 5 And b = 765 Then weißeTextvierecke = weißeTextvierecke & Georekord(a - 1) Georekord(a - 1) = "" Geoeigenschaften(a - 1, 0) = 261 End If End If End IfNextIf weißeTextvierecke <> "" Then Geoeigenschaften(Georekorde, 0) = 999 Geoeigenschaften(Georekorde, 1) = 5 Geoeigenschaften(Georekorde, 2) = 0 Geoeigenschaften(Georekorde, 3) = 0 Geoeigenschaften(Georekorde, 4) = 0 Geoeigenschaften(Georekorde, 5) = 0 Geoeigenschaften(Georekorde, 6) = 0 Geoeigenschaften(Georekorde, 7) = 255 Geoeigenschaften(Georekorde, 8) = 255
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 136
Geoeigenschaften(Georekorde, 9) = 255 Georekord(Georekorde) = weißeTextvierecke Else Geoeigenschaften(Georekorde, 0) = 261End If
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("Textabdecken schieben") Selection.TypeParagraphEnd If
'Preader aktualisieren und Setwindow setzenIf ModP = 0 Then Preader = WmfPunkt(52695, 39622) & OOOO & OO & WmfPunkt(FensterX, FensterY) & WmfZeichen(Zoom) & OOOO Preader = Preader & WmfZeichen(Checksumme(Preader))End IfX = RekordZahl(Preader, 6)Y = RekordZahl(Preader, 7)Georekord(0) = WmfZeichen(5) & OO & WmfZeichen(523) & WmfPunkt(0, 0)Geoeigenschaften(0, 0) = 523Georekord(1) = WmfZeichen(5) & OO & WmfZeichen(524) & WmfPunkt(Y, X)Geoeigenschaften(1, 0) = 524'signaturWoTschrift = WmfZeichen(28) & OO & WmfZeichen(763) & WmfZeichen(5 * (Verdicken + 1)) & OOOO & OO & WmfZeichen(400) & OOOO & OOOOWoTschrift = WoTschrift & "Times New Roman"For a = 1 To 17 WoTschrift = WoTschrift & Chr(0)NextWoT = WmfZeichen(5) & WmfBiPunkt(0, 521, -1, 255) & WmfBiPunkt(4, 0, 301, 0)k = 5 * (Verdicken + 1)'cc-by-sa Dieser Teil schreibt meinen Namen (SimonPie) in die Datei und es ist nicht erlaubt diesen zu ändernWoT = WoT & WmfBiPunkt(21, 0, 1313, 30) & "SimonPie - PowerWMFeinfügen3.0" & WmfZeichen(k) & WmfZeichen(k)WoT = WoT & WmfBiPunkt(22, 0, 1313, 32) & "Plattenbeulen; Kampfkrafttheorie" & WmfZeichen(2 * k) & WmfZeichen(k)'Dieses Makro darf beliebig kopiert und kostenlos benutzt werden, aber mein Name muss genannt werden'Die dritte Zeile WoT = WoT & TextZeichnen("...") darf geändert werdenWoT = WoT & TextZeichnen("Torsionsskript Institut Stahlbau", 3 * k, k) & WmfZeichen(5) & WmfBiPunkt(0, 521, 0, 0)Georekord(2) = WoTGeoeigenschaften(2, 0) = 999
'WMF-Tabelle neu erstellen'Welche Objekte zu wählen sind, wird in die Objekteigenschaften geschrieben (Platz 10; 11 und 10)AktFüllerstil = 0: AktFüllerdicke = 0: AktFüllerrot = 0: AktFüllergrün = 0: AktFüllerblau = 0AktPinselstil = 0: AktPinselrot = 0: AktPinselgrün = 0: AktPinselblau = 0AktFont = "": AktPinsel = "": AktFüller = ""AktTextrot = 0: AktTextgrün = 0: AktTextblau = 0AktTextalign = 0: AktTextabdecken = 0: AktSetcharextra = 0AktTextrotabdecken = 0: AktTextgrünabdecken = 0: AktTextblauabdecken = 0For a = 1 To 255 WMFtabelle(a) = ""NextWMFtabelle(0) = WoTschriftb = 0For a = 0 To Georekorde 'Lückenlöschen in Geoobjekte If Geoeigenschaften(a, 0) <> 261 And Geoeigenschaften(a, 0) <> 0 Then Georekord(b) = Georekord(a) For c = 0 To 14 Geoeigenschaften(b, c) = Geoeigenschaften(a, c) Next b = b + 1 End IfNextGeorekorde = b - 1AktFüllernummer = -1For a = 0 To Georekorde 'Füller ermitteln c = 0 If Geoeigenschaften(a, 1) <> AktFüllerstil Then c = 1: AktFüllerstil = Geoeigenschaften(a, 1) If Geoeigenschaften(a, 2) <> AktFüllerdicke Then c = 1: AktFüllerdicke = Geoeigenschaften(a, 2) If Geoeigenschaften(a, 3) <> AktFüllerrot Then c = 1: AktFüllerrot = Geoeigenschaften(a, 3) If Geoeigenschaften(a, 4) <> AktFüllergrün Then c = 1: AktFüllergrün = Geoeigenschaften(a, 4) If Geoeigenschaften(a, 5) <> AktFüllerblau Then c = 1: AktFüllerblau = Geoeigenschaften(a, 5) If c = 1 Then AktFüller = WmfZeichen(8) & OO & WmfBiPunkt(762, AktFüllerstil, AktFüllerdicke, 0) AktFüller = AktFüller & Chr(AktFüllerrot) & Chr(AktFüllergrün) & Chr(AktFüllerblau) & Chr(0) For d = 0 To 255 If WMFtabelle(d) = "" Then
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 137
WMFtabelle(d) = AktFüller AktFüllernummer = d If d > letzteFüllernummer Then letzteFüllernummer = d Exit For ElseIf WMFtabelle(d) = AktFüller Then AktFüllernummer = d Exit For End If Next End If Geoeigenschaften(a, 10) = AktFüllernummerNextAktPinselnummer = -1For a = 0 To Georekorde 'Pinsel ermitteln c = 0 If Geoeigenschaften(a, 6) <> AktPinselstil Then c = 1: AktPinselstil = Geoeigenschaften(a, 6) If Geoeigenschaften(a, 7) <> AktPinselrot Then c = 1: AktPinselrot = Geoeigenschaften(a, 7) If Geoeigenschaften(a, 8) <> AktPinselgrün Then c = 1: AktPinselgrün = Geoeigenschaften(a, 8) If Geoeigenschaften(a, 9) <> AktPinselblau Then c = 1: AktPinselblau = Geoeigenschaften(a, 9) If c = 1 Then AktPinsel = WmfZeichen(7) & OO & WmfPunkt(764, AktPinselstil) AktPinsel = AktPinsel & Chr(AktPinselrot) & Chr(AktPinselgrün) & Chr(AktPinselblau) & Chr(0) & OO For d = letzteFüllernummer To 255 If WMFtabelle(d) = "" Then WMFtabelle(d) = AktPinsel AktPinselnummer = d If d > letztePinselnummer Then letztePinselnummer = d Exit For ElseIf WMFtabelle(d) = AktPinsel Then AktPinselnummer = d Exit For End If Next End If Geoeigenschaften(a, 11) = AktPinselnummerNextb = 0For a = 0 To Textrekorde 'Lückenlöschen in Texte If Texteigenschaften(a, 0) <> 261 And Texteigenschaften(a, 0) <> 0 Then Textrekord(b) = Textrekord(a) Textfont(b) = Textfont(a) For c = 0 To 10 Texteigenschaften(b, c) = Texteigenschaften(a, c) Next b = b + 1 End IfNextTextrekorde = b - 1AktFontnummer = -1AktFont = ""For a = 0 To Textrekorde 'Font ermitteln If AktFont <> Textfont(a) Then AktFont = Textfont(a) For d = letztePinselnummer To 255 If WMFtabelle(d) = "" Then WMFtabelle(d) = AktFont AktFontnummer = d If d > letzteFontnummer Then letzteFontnummer = d Exit For ElseIf WMFtabelle(d) = AktFont Then AktFontnummer = d Exit For End If Next End If Texteigenschaften(a, 10) = AktFontnummerNextFor a = 0 To 255 If WMFtabelle(a) = "" Then Exit For Federtasche = Federtasche & WMFtabelle(a)Next
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("WMF-Tabelle") Selection.TypeParagraphEnd If
'nach Füllern sortieren für verlustbehaftete KompressionIf ModJ = 1 Then c = 3 For b = 0 To letztePinselnummer
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 138
For a = 3 To Georekorde - 1 If Geoeigenschaften(a, 10) = b Then Georekord2(c) = Georekord(a) For i = 0 To 11 Geoeigenschaften2(c, i) = Geoeigenschaften(a, i) Next c = c + 1 End If Next Next For a = 3 To Georekorde - 1 Georekord(a) = Georekord2(a) For i = 0 To 11 Geoeigenschaften(a, i) = Geoeigenschaften2(a, i) Next NextEnd If'Texte sortierenc = 0For b = letztePinselnummer + 1 To letzteFontnummer For a = 0 To Textrekorde If Texteigenschaften(a, 10) = b Then Textrekord2(c) = Textrekord(a) Textfont2(c) = Textfont(a) For i = 0 To 10 Texteigenschaften2(c, i) = Texteigenschaften(a, i) Next c = c + 1 End If NextNextFor a = 0 To Textrekorde Textrekord(a) = Textrekord2(a) Textfont(a) = Textfont2(a) For i = 0 To 10 Texteigenschaften(a, i) = Texteigenschaften2(a, i) NextNext
'WMF neu aufbauenAktFüllerstil = 0: AktFüllerdicke = 0: AktFüllerrot = 0: AktFüllergrün = 0: AktFüllerblau = 0AktPinselstil = 0: AktPinselrot = 0: AktPinselgrün = 0: AktPinselblau = 0AktFont = "": AktPinsel = "": AktFüller = ""AktTextrot = 0: AktTextgrün = 0: AktTextblau = 0AktTextalign = 0: AktTextabdecken = 0: AktSetcharextra = 0AktTextrotabdecken = 0: AktTextgrünabdecken = 0: AktTextblauabdecken = 0AktFontnummer = -1: AktPinselnummer = -1: AktFüllernummer = -1Dateiinhalt = "" 'zuerst GeometrieFor a = 0 To Georekorde Typ = Geoeigenschaften(a, 0) Select Case Typ Case 1048, 1336, 1051, 1564, 2074, 2096, 804, 999, 100, 101, 102, 104 If Geoeigenschaften(a, 10) <> AktFüllernummer Then AktFüllernummer = Geoeigenschaften(a, 10) Dateiinhalt = Dateiinhalt & ObjektWählen(AktFüllernummer) End If If Geoeigenschaften(a, 11) <> AktPinselnummer Then AktPinselnummer = Geoeigenschaften(a, 11) Dateiinhalt = Dateiinhalt & ObjektWählen(AktPinselnummer) End If Case 2071, 805 'nur Füller If Geoeigenschaften(a, 10) <> AktFüllernummer Then AktFüllernummer = Geoeigenschaften(a, 10) Dateiinhalt = Dateiinhalt & ObjektWählen(AktFüllernummer) End If Case 1565, 1049, 1352, 552, 299, 1065 'nur Pinsel If Geoeigenschaften(a, 11) <> AktPinselnummer Then AktPinselnummer = Geoeigenschaften(a, 11) Dateiinhalt = Dateiinhalt & ObjektWählen(AktPinselnummer) End If End Select Dateiinhalt = Dateiinhalt & Georekord(a)NextHilfstext = "" 'dann TexteFor a = 0 To Textrekorde If Texteigenschaften(a, 10) <> AktFontnummer Then AktFontnummer = Texteigenschaften(a, 10) Hilfstext = Hilfstext & ObjektWählen(AktFontnummer) End If If Texteigenschaften(a, 1) <> AktTextrot Or Texteigenschaften(a, 2) <> AktTextgrün Or Texteigenschaften(a, 3) <> AktTextblau Then AktTextrot = Texteigenschaften(a, 1)
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 139
AktTextgrün = Texteigenschaften(a, 2) AktTextblau = Texteigenschaften(a, 3) Hilfstext = Hilfstext & WmfZeichen(5) & OO & WmfZeichen(521) & Chr(AktTextrot) & Chr(AktTextgrün) & Chr(AktTextblau) & Chr(0) End If If Texteigenschaften(a, 5) <> 1 Then If Texteigenschaften(a, 6) <> AktTextrotabdecken Or Texteigenschaften(a, 7) <> AktTextgrünabdecken Or Texteigenschaften(a, 8) <> AktTextblauabdecken Then AktTextrotabdecken = Texteigenschaften(a, 6) AktTextgrünabdecken = Texteigenschaften(a, 7) AktTextblauabdecken = Texteigenschaften(a, 8) Hilfstext = Hilfstext & WmfZeichen(5) & OO & WmfZeichen(513) & Chr(AktTextrotabdecken) & Chr(AktTextgrünabdecken) & Chr(AktTextblauabdecken) & Chr(0) End If End If If Texteigenschaften(a, 5) <> AktTextabdecken Then AktTextabdecken = Texteigenschaften(a, 5) Hilfstext = Hilfstext & WmfZeichen(4) & OO & WmfZeichen(258) & WmfZeichen(AktTextabdecken) End If If Texteigenschaften(a, 4) <> AktTextalign Then AktTextalign = Texteigenschaften(a, 4) Hilfstext = Hilfstext & WmfZeichen(4) & OO & WmfZeichen(302) & WmfZeichen(AktTextalign) End If If Texteigenschaften(a, 9) <> AktSetcharextra Then AktSetcharextra = Texteigenschaften(a, 4) Hilfstext = Hilfstext & WmfZeichen(4) & OO & WmfZeichen(264) & WmfZeichen(AktSetcharextra) End If Hilfstext = Hilfstext & Textrekord(a)NextDateiinhalt = Federtasche & Dateiinhalt & HilfstextHeader = WMFheader(Dateiinhalt)
If ModZ = 1 Then Zeit = (Timer - Startzeit) Selection.TypeText (Zeit) & Chr(9) & ("zusammenbauen") Selection.TypeParagraphEnd If
If Modifikation = "r" Or Modifikation = "z" Or Modifikation = "p" Or Modifikation = "v" Then Selection.Delete Unit:=wdCharacter, Count:=1 ElseIf Modifikation = "i" Or Modifikation = "j" Or Modifikation = "d" Or Modifikation = "h" Then Selection.Delete Unit:=wdCharacter, Count:=1 ElseIf Len(Modifikation) = 2 Then Selection.Delete Unit:=wdCharacter, Count:=1 Else Selection.MoveRight Unit:=wdCharacter, Count:=1End If
Dateiinhalt = Preader & Header & Dateiinhalt & Chr(3) & Chr(0) & OOOOf = FreeFileOpen Dateiname For Output As #fPrint #f, DateiinhaltClose #fSelection.InlineShapes.AddPicture FileName:=Dateiname
End Sub
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 140
Der FormelumwandlerMit dem Formelumwandler können in Word Formeln erstellt und auch ausgerechnet werden.
Es wird zwischen 4 Arten unterschieden, wie Formeln dargestellt werden können.ElementarAls Multiplikationszeichen wird der Stern * verwendet. Hoch- oder tiefgestellte Zeichen sind nicht hoch oder tiefgestellt, sondern haben ein ^ oder _ davor. Die Wurzel wird mit ( )^0,5 dargestellt und Bruche haben den senkrechten Bruchstrich /. Elementar dargestellte Formeln haben meist viele Klammern. Griechische Buchstaben und Sonderzeichen werden unterstützt. Die Formel ist eine Zeile hoch. Word und Excel verstehen elementare Formeln.z.B. (1/2+5*(3/4))^0,5
SchickAnstelle von * wird · verwendet und es gibt hoch und tiefgestellte Zeichen. Verschiedene Schriftarten sind möglich. Für den Bruch gibt es weiterhin den senkrechten Bruchstrich /. Wurzel wird mit ( )0,5 dargestellt. Die Formel ist eine Zeile hoch.z.B. (1/2+5·(3/4))0,5
EQ-FeldDas EQ-Feld stellt eine Formel in WinWord dar. EQ-Felder gibt es seit Windows 3.1, während der Formeleditor später kam. Formeln, die ein EQ-Feld sind, werden nicht mit dem Doppelklick bearbeitet, sondern mit Feldtasten, wie F9 (aktualisieren), Strg F9(Feld erstellen) und Shift F9 (Feld anzeigen).Brüche werden mit dem horizontalen Strich getrennt und die Wurzel umschließt mit dem Wurzelzeichen die Zahlen. Kammern können über mehrere Zeilen sein. Die Formel kann mehrere Zeilen hoch sein und benötigt weniger Klammern.z.B. EQ \r(;\F(1;2)+5·\b(\F(3;4))) =
WikipediaDiese Formeln sehen gegenüber EQ-Formeln wesentlich punkvoller aus. Der Code ist länger und ist vollständig mit der Tastatur eingebbar. Griechische Buchstaben werden durch lange Zeichenketten dargestellt. Hoch und Tiefstellen geht mit ^ und _.z.B. :<math> \sqrt{\frac{1}{2}+5\cdot \left(\frac{3}{4}\right)}</math>
Die FormelmakrosDer elementare Formeltyp lässt sich am schnellsten eingeben und benötigt kein Codewissen. Genau hier setzen die Makros an.Es gibt 6 Funxionen, die das Formellevel herauf setzen oder senken.
WikipediaRibosom Reversetranslatase
EQ-FeldRNA-Polymerase Reversetranskriptase
ChickDNA-Polymerase DNAse
Elementar
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 141
Diese werden 2 Prozeduren geeint. Die eine erhöht das Level und die andere senkt es.1. KKTformelumwandler wandelt nach oben.2. KKTfurmelumwandler wandelt nach unten.
Beiden Prozeduren sollte ein Tastenkürzel zugewiesen werden. Die Makros unterstützen Brüche, Wurzeln, Klammern und Potenzen. Nicht enthalten sind Integrale, Überschreiben, Überstreichen, Semikolon, Backslash und ein nachfolgendes Mal oder Bruchstrich nach einem Bruchstrich. Damit werden 95% aller Formeln in Statiken erfasst.So gibt man eine elementare Formel ein, drückt auf die Taste und schon hat man eine besser aussehende Formel.
In Word gibt es weiterhin ein Berechnungsfeld. Dazu drückt man Strg F9 und beginnt dieses nicht mit EQ sondern mit =. Mit Shift F9 klappt man das Feld auf und zu. Aber zuerst muss man F9 drücken, um es zu aktualisieren, weil sonst nichts angezeigt wird. Mit F9 rechnet Word aus, was in dem Feld drin steht. Z.B. 2+5= 7Das Makro Ausrechnen benutzt 3 der 6 Funktionen, um das Formellevel aus Elementar zu senken. Anschließend wird ein = davor gesetzt und in ein Berechnungsfeld umgewandelt. Auf diese Weise lässt sich auch ausrechnen, was man in den Formeln geschrieben hat. Der Taschenrechner wird erspart. Dem Makro lässt sich ein Tastenkürzel zuweisen.Bei dem anderen Makro vAusrechnen wird das Ergebnis erstellt und die Ausgangsformel links daneben hin kopiert und bis zu 2 mal hochgewandelt. Zwischen Formel und Ergebnis wird ein = und ein Tabstopp eingetippt. Soll anstelle des Tabstopps ein Leerzeichen hin, so ist folgende Codezeile im Makro Sub vausrechnen()Selection.TypeText (Formel) & "=" & Chr(9)
gegen diese aus zu tauschen.Selection.TypeText (Formel) & "=" & Chr(32)
Es gibt 3 Möglichkeiten, wie der umzuwandelnde Teil markiert werden kann.1. Der umzuwandelnde Teil wird mit der Maus markiert und das Makro ausgeführt. Das Makro
wandelt den markierten Text um.fu= (L·f+U·fd)/(L+U)Diese Variante ist am einleuchtesten.
2. Das letzte Zeichen wurde eingetippt und rechts daneben blinkt der Cursor. Das Makro wird gestartet. Das Makro markiert alle Zeichen links davon, bis es auf das linke Zeilenende, ein Tab oder ein = trifft. Die Formel wird umgewandelt.fu= (L·f+U·fd)/(L+U)fu= (L·f+U·fd)/(L+U)Diese Variante eignet sich gut, wenn man Formeln hintereinander weg schreibt.
3. Der Cursor blinkt mitten in der Zeile und man startet das Makro. Alles rechts davon wird vom Makro markiert.fu= (L·f+U·fd)/(L+U)fu= (L·f+U·fd)/(L+U)
ZusammenfassungKKTformelumwandler wandelt nach oben.(5,25+7)^0,5 (5,25+7)0,5
KKTfurmelumwandler wandelt nach unten.
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 142
(5,25+7)0,5 (5,25+7)^0,5
Ausrechnen rechnet die Formel aus3,5
vAusrechnen rechnet die Formel aus und schreibt das Ergebnis daneben hin = 3,5
BeispieleBerechnen
D= = 0,29geD = = 0,0 (Die Nachkommastellen müssen manuell nachbearbeitet werden)s = = = 5,78ges= = =
4,29gL neu = = 93,8 LK= fa·La·Aa·a² +fe·Le·Ae·e²+ a·e·Le·AaK= 0,5·0·0,8·117²+ 0,85·20·7·6²+ 117·6·20·0,8= 0,0+ 4284+ 11232K= 0+ 4284+ 11232= 15516 Mal
FormelnU= N= f=K/(A·N²)= fu= gLd= K= fa·La·Aa·a² +fe·Le·Ae·e²+ e·Le·Aa·a
HerleitenK‘(j)= 0+ 0 -e·d·Lc/c+ Ac·h + e·W·h/c -2·e·d·j·h/c K‘(j)=00= -e·d·Lc/c+ Ac·h + e·W·h/c -2·e·d·j·h/c ·c/e0= -d·Lc+ Ac·h·c/e + W·h -2·d·j·h /h0= -d·Lc/h+ Ac·c/e + W -2·d·j +2·d·j2·d·j= -d·Lc/h+ Ac·c/e + W Sortieren2·d·j= W-d·Lc/h+ Ac·c/e /(2·d)j=
verbesserte EQ-FelddarstellungDer Formelumwandler passt die Darstellung der Formeln in EQ-Feldern an. Steht ein Quadrat hinter einem eingeklammerten Bruch, so würde dies standardmäßig so aussehen:
X2= Der Formelumwandler ersetzt ² durch eine höher gesetzte 2.
X2=
Besteht eine Formel aus sehr vielen Summanden, so werden diese in einer übersichtlichen Summe gesammelt.
K/A= =
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 143
Das kann der Formelumwandler nichtsin(30)= !Syntaxfehler, 30
Ausrechnen ist nur dort möglich, wo Word auch rechnen kann. Word versteht kein Sinus und Logarithmus, aber Max, Min und Int.
10·Int(3,4)= 30
Mit dem Formelumwandler können keine komplexen Formeln, die über die Grundrechenarten hinausgehen, erstellt werden. Dies betrifft Matrizen, Integrale und übereinanderliegende Zeichen.
K = = Array=F=
Diese Formeln können leider nur manuell mit sehr großem Aufwand eingegeben werden. Verwendet man EQ-Felder und den Formeleditor, dann passt die Schrift nicht. Mit Strg+F9 kann man sich den Code des Feldes anschauen. Dies sieht dann so aus (Ohne EQ-Feld):
K = { EQ \I(0;L;gA(L)·dL) }= { EQ \I\su(0;N;tK) }Array= { EQ \b\bc\[(\A(1;2;3) \A(4;5;6) \A(7;8;9)) }F= { EQ \F(a\o(1;²);b\o(2;²)) }
fu=Soll der Bruch 1/N nebeneinander stehen, so muss dies manuell geschehen. Außerdem werden alle Faktoren in den Nenner geschrieben.
fu=
e= Sind die Formeln groß, sinkt die Wahrscheinlichkeit, dass sie richtig umgewandelt werden. In diesem Fall kommt alles in den Nenner, was mit einem Mal verbunden ist. So würde diese Formel mit dem Makro aussehen:
e= Es kann vorkommen, dass die Formel auch gar nicht funxioniert.
e=
In einigen Fällen kann die Formel repariert werden, indem sie mit Shift F9 geöffnet und der Absatz entfernt wird.
Der Formelumwandler wurde nicht dafür entwickelt, dass nach einem Bruchstrich ein Mal oder Bruchstrich kommt.
4*4/4/4= = 1Deshalb sollte man die Formel so schreiben
4*4/(4*4)= = 1
LizenzenMein Name Simon Pie sollte bei Benutzung irgendwo erwähnt werden. Er wird normalerweise in die AutocadWMF hineingeschrieben.
Dieses Dokument unterliegt der Creative Commons Lizenz cc-by-sa
Free Software
WoTWMFPowerWMFeinfügen3.0 Simon Pie
Simo nP ie - P owerW MFeinfügen2.3Plattenbeulen; Kampfkraft th eorieCreat ive Co mmons cc-by -sa cc-by-sa Seite 144
und die zugehörigen Programme PowerWMF und Formelumwandler unterliegt der GNU GPLv3.
BildnachweiseFotos: Ausm InternetEMF-Grafiken: selbst gemaltWMF-Grafiken: selbst geschrieben mit WMFzerlegerWMF-Grafiken: selbst gezeichnet, PowerWMF und mit WMFzerleger poliert