Script
Das Script-Attribut hat eine gewisse Sonderrolle. Entgegen der anderen Vektorelemente wird dieses nicht auf einen bestimmten Geometrietyp angewandet, sondern auf alle Zeilen der Datenquelle.
Als Scriptsprache haben wir uns hier für Lua entschieden. Einen schönen Überblick über die Sprache finden Sie im Lua-Manual .
Es gibt z.Z. keine Unterstützung für die WinRT Plattform der COM basierten Funktionen, d.h. es ist derzeit nicht in PacknGo verwendbar
Wir haben den Fokus vorerst auf die Verwendung von COM Objekten gelegt.
Beachten Sie hierbei, dass Iwan7 als 64-Bit Prozess läuft, d.h. die verwendeten COM Objekte müssen auch in einer 64Bit Version registriert sein.
Eigenschaften
Das Script-Objekt habt nur zwei Eigenschaften:
required: (optional) eine kommagetrennte Liste der Spaltennamen aus der Datenquelle, die das Script vermutlich verwenden will.
scriptBody: Der Lua Code als Text.
Da in Lua Zeichenketten auch mit einfachen Hochkomma geschrieben werden können, kann auf das Escapen der Zeichenbegrenzer verzichtet werden.
Lua - Iwan7 spezifische Objekte und Methoden
Iwan stellt folgende Objekte und Methoden zur Verfügung. Alle Namen sind case-sensitiv.
lib: iwan
Methoden
void writeTrace(string) : Schreibt eine Nachricht in das TraceFile mit der Stufe "TraceInfo".
iwan.writeTrace('Hallo, Welt');
Point2D centroid(geom) : Gibt den Schwerpunkt einer Geometrie zurück.
centerPt = iwan.centroid(renderer.currentGeometry()); x = centerPt.x; y = centerPt.y;
int32 convertColor(string,ColorFormat): Konvertiert einen Farbwert in ganzzahliges Format.
String ist ein Farbwert, wie er in Iwan verwendet wird. Z.B. Farbname, Webschreibweise (#ff...), rgb(r,g,b), rgba etc.
ColorFormat ein Enumerationstyp mit folgenden Werten:
- ARGB - RGB mit Alpha (255 = nicht durchscheinend)
- ChartDir - wie ARGB, aber Alpha 0 = nicht durchscheinend
Wenn nicht angegeben, ist der Standardwert ChartDir.
chartDirStyle = iwan.convertColor("red(0.5)",iwan.ColorFormat.ChartDir); chartDirStyle = iwan.convertColor("rgba(255,255,255,0.5)"); argb = iwan.convertColor("#ff0000",iwan.ColorFormat.ARGB);
Objekte
ComObject : Erstellt und kapselt Aufrufe an COM-Objekte
ComObject new(String) Erstellt eine neue Instanz mit der angegebenen Prog-Id
cd = iwan.comObject.new('ChartDirector.API');
Variant : Kapselt den internen Variant-Datentyp
- string toString() Gibt den Wert als Text aus.
- int toInt() Konvertiert den Wert in int64.
- double toFloat() Konvertiert den Wert in double.
- geom toGeom() Konvertiert den Wert in eine Geometrie.
Wenn die Konvertierung nicht durchgeführt werden kann, wird ein Fehler ausgelöst.
lib: renderer
Methoden
int getOrdinal(string) : Gibt den Spaltenindex für die Spalte mit dem übergebenen Namen zurück.
idx = renderer.getOrdinal('jahr_2020');
Variant getValue(int) : Gibt der Wert der Spalte mit dem angegebenem Index zurück.
val = renderer.getValue(idx); val = val.toInt();
geom currentGeometry() : Ruft die aktuelle Hauptgeometrie ab.
geom = renderer.currentGeometry();
double meter2Pixel(double) : Konvertiert eine Meter-Angabe in Pixel
double pixel2Meter(double) : Konvertiert eine Pixel-Angabe in Meter
double mapunits2Pixel(double) : Konvertiert Karteneinheit in Pixel
double pixel2Mapunits(double) : Pixel in Karteneinheiten
void drawBitmap(Point2D,double,double,bytes): Zeichnet das Bild aus Bytes an die Kartenposition Point2D mit der angegebenen Breite und Höhe.
renderer.drawBitmap(centerPt,pixelSize,pixelSize,bitmapBytes);
Beispiel
Die folgenden Ausführungen stellen wir anhand eines Beispiel für die Darstellung von Diagrammen in der Karte unter Verwendung des ChartDirector vor.
Die spezifischen COM Objekte und deren Methoden sind unter https://www.advsofteng.com/doc/cdcom.htm dokumentiert. Die Beispiele dort verwenden Visual Basic als Sprache, d.h. die Syntax kann nicht eins-zu-eins übernommen werden, das sollte aber kein unüberwindbare Hürde darstellen.
unordered {
script::diag [mapscale6 < 4000]
{
require:COL1,COL2,COL3;
script-body:"
centerPt = iwan.centroid(renderer.currentGeometry());
pixelSize = renderer.mapunits2Pixel(20);
-- pro Script (d.h. für den gesamten Zeichenvorgang) nur
-- eine Instanz des COM-Objektes erstellen
if cd == nil then
cd = iwan.ComObject.new('ChartDirector.API');
end
-- pro Zeile eine neue Instanz des Charts erstellen
c = cd:XYChart(pixelSize, pixelSize);
c:setPlotArea(30, 20, pixelSize-30, pixelSize-40);
c:setBackground(iwan.convertColor("red(0.5)",iwan.ColorFormat.ChartDir));
x = c:xAxis();
x:setLabelStyle('Arial',7);
y = c:yAxis();
y:setLabelStyle('Arial',7);
data = {85, 156, 179.5, 211, 123};
labels = { 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'};
c:addBarLayer(data);
x:setLabels(labels);
bitmapBytes = c:makeChart2(0);
renderer.drawBitmap(centerPt,pixelSize,pixelSize,bitmapBytes);
";
}
}
Zuletzt geändert: 20.09.2024 07:22:06 (erstmals erstellt 05.10.2020)