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: 08.04.2021 11:42:03 (erstmals erstellt 05.10.2020)