Source file: /~heha/hs/sch2cgm/sch2wmf.zip/sch2wmf.txt

SCH2WMF:	Konvertiert Schaltpläne und Boards zu Windows Metafiles.
Status:		einsatzfähig, laufende Bugfixes (u.a. weil ich es selbst verwende)
Voraussetzung:	Eagle 4.11 (keine Mehrsprachunterstützung, keine GROUP-Selektionsauswahl)
		oder höher (dann weitere Features)

Die entstehende Metadatei vom Board enthält wahrheitsgetreue Größeninformation
und kann, 1:1 verarbeitet, zur Herstellung maßstabsgetreuer
Platinenlayouts, Bestückungsdrucke usw. verwendet werden.
Beim Schaltplan hingegen ist eine leichte Vergrößerung für optimale Lesbarkeit
bei 1:1-Darstellung im Internet Explorer voreingestellt.
Die Metadatei ist unter Windows 3.1 bis 10 verarbeitbar.
Die Verarbeitbarkeit unter Linux und MacOS kann nicht garantiert werden.

Semitransparenz wird über Rasteroperationskodes (ROP) generiert.
Die Farbverknüpfung erfolgt dabei genauso wie damals bei Eagle für DOS
durch die Beschränktheit der VGA-Grafikkarte im 16-Farben-Modus.
Dieses Verhalten wird seit Windows 2.0 mitgeschleppt.

Gegenüber „echter“ Alpha-Transparenz, implementiert ab Eagle 5,
ergeben sich „falsche“ Mischfarben.
Jedoch ist die visuelle Wahrnehmbarkeit deutlich günstiger durch die
höhere mögliche Farbsättigung und mehr Kontrast.


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

Im Normalfall sind keine Kommandozeilen-Argumente nötig;
die automatischen Vorgaben ergeben ein optimales Konvertierungsergebnis.

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.
Der Dateiname darf "*" sein, um den Standard-Dateinamen auszuwählen.
Dieser ist:
* <eaglename>.wmf für Schaltpläne
* <eaglename>-<seitennummer>.wmf für mehrseitige Schaltpläne (AllPages=1)
* <eaglename>t.wmf für Boards von der Oberseite (Flipped=0) **
* <eaglename>b.wmf für gespiegelte Boards von der Unterseite (Flipped=1) **
Damit kommen sich Schaltpläne und Boards nicht in die Quere.
Ohne Dateinamen erscheint der Datei-Auswahl-Dialog.
** Endet der Dateiname auf einen Buchstaben, wird ein "-" eingefügt.

Alle gegebenen Argumente sind Dialog-Vorgaben.
Wenn kein Dialog erscheint (d=0), sind dies Programm-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
Scale		s	1*		Absichtlich „falsche“ Ausgabeskalierung, gut für
				<f>	Total Commander (F3) und Internet Explorer
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
				2	gespiegelt an X-Achse
				4	Rotiert 90° nach links
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	1		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.8		Bögen mit flachen Enden über dieses Breite:Radius-Verhältnis
				<f>	durch Polygone interpolieren, 0.0 = alle, 2.0 = keine
					>1.9 entspricht Tortenstück, wird gesondert behandelt
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 aktuellen Raster-Einheiten
					(also Zoll, mm, mil oder µm; s. Grid oder Ansicht->Raster)
	

* - Die Vorgabe ist von anderen Vorgaben abhängig:
Scale:		Bei Schaltplan ist die Vorgabe 1,388 (720 dpi), günstigere Darstellung
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
Vector:		Werden nicht darstellbare Zeichen detektiert (etwa IBM-Rahmenzeichen),
		ist die Vorgabe "V".
		Werden in Symbol-Schriftart darstellbare Zeichen detektiert (etwa das Ohm-Zeichen),
		wird die Vorgabe von der Proportional-Schriftart kopiert, typischerweise "A".

Hinweis zu PaletteType:
Die Kombination PaletteType=3 und Trans=1 erzeugt eine Ausgabe von
Komplementärfarben auf weißem Grund. (Ausprobieren!)
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 PCL, PostScript oder PDF ist damit unbefriedigend,
ist eine Unzulänglichkeit im jeweiligen Windows-Druckertreiber.
Ein Ausdruck „als Bild“ kann hierbei Abhilfe schaffen.
Eine solche Einstellung bewirkt das Rendern über Windows-GDI
und die Ausgabe einer herkömmlichen Bitmap zum Drucker.
Wie es mit Adobe Acrobat läuft, konnte nicht festgestellt werden.

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.

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.
10 µm ist immer noch für ca. 30 cm große Leiterplatten geeignet.

Hinweis zu Group:
Die interaktive Ausgaberegionsauswahl erfolgt mittels (temporärem, deckenden)
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.


Beispiele:
* Dateiauswahl-Standarddialog übergehen, Standarddatei speichern
	"run sch2wmf *"
* Vollautomatischer Betrieb
	"run sch2wmf d=0 *"
* Alle möglichen Einstellmöglichkeiten anzeigen
	"run sch2wmf d=2"

Alternativen:
WMF-Grafiken machen Probleme im neuen Winword (*.docx),
beim Ausdrucken auf PCL- und PostScript-Druckern
sowie beim Konvertieren in PDF.
Auch wird es von keinem Browser mehr unterstützt.
Entweder man bleibt bei *.doc (das Umbenennen genügt bereits,
um alle Darstellungsprobleme zu lösen),
oder man benutzt SVG-basierte Vektorgrafik.
EMF (aus sch2emf) ist keine Alternative.
Von mir gibt es das XSLT-Skript (Stylesheet) eagle2svg.xsl,
welches Eagle-Dateien (ab Version 6, also XML) in SVG umwandelt.
Da moderne Office-Programme Browser-Technologien enthalten,
kann das Skript dazu verwendet werden,
direkt eingebundene oder verlinkte Schaltpläne/Boards darzustellen.
Das heißt, es wird kein Konverter benötigt, sondern das Programm
„weiß“ wie man Eagle-Dateien darstellt.
Um Eagle4/5-Dateien in XML umzuwandeln habe ich ein PHP-Skript
eagle2eagle.php geschrieben.


henni, 170322
Detected encoding: ASCII (7 bit)8