﻿SCH2WMF:	Konvertiert Schaltpläne und Boards zu Windows Metafiles.
Status:		einsatzfähig, laufende Bugfixes
Voraussetzung:	Eagle 4.11 (keine Mehrsprachunterstützung, keine GROUP-Selektionsauswahl)
Hinweis:	Upgrade zu Eagle 5.x ist _nicht_ geplant, dafür soll SCH2EMF herhalten.

Dialog

Der Dialog ist so gemacht, dass vorher Informationen über den Schaltplan
oder das Board eingesammelt werden und dann nur jene Optionen zur Auswahl
gestellt werden, die überhaupt relevant sind.
Beispielsweise erscheint nichts über die (komplizierte!) Ersetzung bei
schraffierten Layern, wenn gerade keine schraffierten Layer sichtbar sind.
Die Ersetzungsvorgänge bügeln WMF-typische Limits aus
(die es bei EMF zumeist nicht gibt).

Kommandozeilen-Argumente für sch2wmf

sch2wmf akzeptiert Argumente im AWK-Stil, also <Variable>=<Wert>,
sowie genau einen Dateinamen.
Daraus folgt, als Einschränkung wie bei AWK, dass der Dateiname kein "="
enthalten darf.
Erscheint der Dialog, sind dies Dialog-Vorgaben.

======Variable======	=====Werte=====	Bedeutung
lang		kurz	Vorgabe	möglich

Debug			0		zum Debuggen von sch2wmf.ulp
				0	keine Debugausgabe
				1	Kreise am Text-Ursprung ausgeben
WMF-Unit		25.4		Einheit (1 Inkrement) in WMF-Datei
				<f>	Angabe als Gleitpunktzahl, in µm pro Inkrement
MinWidth		50.8		Minimale Linienbreite für alle Ersetzungsvorgänge
				<f>	Angabe als Gleitpunktzahl, in µm
PaletteType	p	*		Ausgabe-Palette (Option->User-Interface)
				0	schwarzweiß
				1	bunt auf weiß
				2	bunt auf schwarz
				3	bunt auf farbig
HatchType	h	*		Schraffierte Layer ausgeben
				0	ausgemalt
				1	mit Windows-Schraffur (transparent)
				2	mit Bitmap-Schraffur (deckend, wie Eagle)
AllPages	a	0		Mehrseitige Schaltpläne
				0	nur aktuelle Seite ausgeben
				1	alle Seiten in nummerierten Dateien
Flipped		f	*		Spiegelverkehrte Ausgabe (nur Board)
				0	nicht gespiegelt
				1	gespiegelt (an Y-Achse)
Trans		t	*		Pseudotransparente Ausgabe (wie Eagle)
				0	Layer deckend
				1	Layer pseudotransparent (außer LastLayers)
OutBkgnd	b	*		Hintergrund-Flächenfüllung ausgeben
				0	nein (Freiflächen sind transparent)
				1	ja (Freiflächen in Hintergrundfarbe)
DoNegate	n	0		Negationsstriche wie Eagle 5
				0	keine Negationsstriche
				1	Texte mit "!" entsprechend umwandeln
LineReplace	l	1		Schraffierte Linien durch Polygone ersetzen
				0	nein (Linien schraffierter Layer erscheinen ausgemalt)
				1	ja (gilt auch für Bögen: aufwändig!)
				2	ja, auch für Polygonränder (aufwändig)
FlatArcReplace	c	0		Bögen mit flachen Enden durch Polygone ersetzen
				0	nein (erscheinen mit runden Enden)
				1	ja (aufwändig, viele Stützstellen)
PiecedReplace		1		Gestrichelte Linienausgabe
				0	Windows-Strichelung verwenden
				1	dito, aber durch Polygone ersetzte Linien eagle-stricheln
				2	alles eagle-stricheln (aufwändig)
Dialog		d	1		Dialog-Erscheinungsbild
				0	Kein Dialog! Mit Dateiname ist das ULP vollautomatisch.
				1	Einfacher Dialog
				2	Kompletter Dialog
LastLayers	y	""		Zuletzt auszugebende Layer (stets deckend)
				<s>	als Zeichenkette wie bei psselect
Vector		V	"Ab"		Schriftersetzung für Vektor-Schriftart
Proportional	P	"A"		Schriftersetzung für Proportional-Schriftart
Fixed		F	"C"		Schriftersetzung für Fixed-Schriftart
				<s>	Langform: /(Vector|Arial|Courier|Times)(,b?i?)?/
				<s>	Kurzform: /[VACT][,bi]*/ (Lies als regulärer Ausdruck!)
CheckRipupPoly	r	1		Prüfung auf nicht geRATSNESTe Signal-Polygone
				0	keine Prüfung (solche Polygone werden nicht ausgegeben)
				1	Prüfung beim ULP-Start
Group		g	""		Auswahlrechteck (statt ganzer Schaltplan / ganzes Board)
				d,d,d,d	links,oben,rechts,unten in WMF-Einheiten (siehe WMF-Unit)
	

* - Die Vorgabe ist von anderen Vorgaben abhängig:
PaletteType:	Je nach aktueller Eagle-Einstellung
HatchType:	bei Schaltplan ausgefüllt (also = 0),
		bei komplexen Eagle-Schraffuren = 2 (nur Board wird geprüft)
Flipped:	Bei Vorhandensein von bPlace und Abwesenheit von tPlace = 1,
		sonst 0
Trans,
OutBkgnd:	Je nach PaletteType, dass es wie in Eagle aussieht

Hinweis zu PaletteType:
Die Kombination PaletteType=3 und Trans=1 erzeugt eine Ausgabe von
Komplementärfarben auf weißem Grund.
Das ergibt ein gutes Ergebnis für Boards, die bunt-auf-schwarz entwickelt
und bunt-auf-weiß ausgedruckt werden sollen
(und man sich das Erstellen geeigneter Paletten ersparen möchte).
Der Ausdruck via PDF ist damit unbefriedigend, ist ein Windows-Fehler.

Die Kombination PaletteType=0 und Trans=1 hat nur sichtbare Wirkung
bei Bitmap-Schraffur, diese wird transparent.

Überhaupt erfolgt eine korrekte Ausgabe auf Drucker bei Trans=1
anscheinend nur bei GDI-Druckern.
Bei PCL, PDF und PostScript wird alles deckend, Windows-Schraffuren
erscheinen sauber, aber zu groß, Bitmap-Schraffuren dagegen grobpixlig.
Hier müsste der Windows-Postscript-Druckertreiber verbessert werden.
Wie es mit Adobe Acrobat läuft, konnte nicht festgestellt werden.

Hinweis zu String-Eingaben:
Diese sind stets ohne "" anzugeben!
Es gibt keine Eingaben, die Leerzeichen erfordern.

Hinweis zu LastLayers:
Korrekte Angaben sind "25,27", "25-28" oder auch "28-25,52,51".
Nicht sichtbare Layer werden trotzdem nicht ausgegeben;
es erfolgt keine Prüfung, ob die angegebenen Layer gerade sichtbar sind.

Hinweis zu FlatArcReplace:
Bögen mit flachen Enden, die so eine so große Linienbreite haben,
dass sie wie Kuchenstücke erscheinen, werden stets als Kuchenstück (Pie)
ausgegeben. Damit entfallen auch alle Schraffur-Probleme.

Hinweis zu LineReplace, FlatArcReplace, PiecedReplace:
Diese Kompromisslösungen entfallen mit der Ausgabe SCH2EMF.
Allerdings fehlen beim SCH2EMF die dünnen Begrenzungslinien um
schraffierte Striche herum.

Hinweis zu WMF-Unit:
Mit der Vorgabe 25.4 µm ist ein WMF-Inkrement genau 1 mil groß.
Die maximale Schaltplan- und Boardgröße ist damit 83 cm.
Für metrisch entwickelte Boards (zunehmend wegen metrischer Beinabstände
moderner SMD-Schaltkreise) wäre ein metrisches WMF-Inkrement passender,
um Zaunslatteneffekte bei starker Vergrößerung zu minimieren.

Hinweis zu Group:
Die interaktive Ausgaberegionsauswahl erfolgt mittels (temporärem)
Rechteck im Layer NETS (91) bzw. DIMENSION (20).
Die Auswahl mittels der Eagle-Funktion GROUP ist aus ULP-Dateien
nicht abfragbar (erst ab Eagle 5).
Ausgewählt werden ganze Bauelemente (an ihrem Ursprung)
mitsamt ihrer Texte >NAME und >VALUE, egal ob geSMASHt oder nicht.
Sonstige Texte werden anhand ihres Ursprungs ausgewählt.
Bei Linien („Wires“), Rechtecken und Polygonen genügt es,
wenn mindestens ein Eckpunkt im Auswahlrechteck liegt.
Punkte auf dem Auswahlrechteck-Rand werden mit erfasst.
Das Auswahlrechteck selbst wird natürlich /nicht/ ausgegeben!
Es werden die Grenzen der entstehenden WMF-Datei entsprechend gesetzt.
Das Clipping (herausstehender Linien, Polygone, Texte usw.)
muss der WMF-Importeur übernehmen.
Bekannte Seiteneffekte:
* Das Einsetzen der Grafik in Microsoft Word erfolgt korrekt;
  beim Bearbeiten der Grafik sieht man die herausstehenden Linien usw.
* Der WMF-Betrachter des Total Commander 6.xx skaliert die Grafik im
  Anzeigefenster auf herausstehende Linien (die aber korrekt geclippt
  werden und damit gar nicht zu sehen sind); man denkt, das WMF sei größer.
Mit der Ausgaberegionsauswahl kann man auch ganz gut ganze Boards
ausgeben, bei der unsichtbare Layer, bspw. MEASURE, eine Menge Platz
um die Leiterplatte herum reservieren. Ein gleichartiger Automatismus
innerhalb SCH2WMF ist schwieriger realisierbar (BoundingBox-Problem).
Das gleiche gilt sinngemäß für „mehrseitige“ Riesen-Schaltpläne
mit der Freeware-Version von Eagle, die einseitig sind und mehrere
Zeichnungsrahmen beinhalten.

henni, 081014
