Zum Inhalt

LUA-Events

Mit Lua-Events ist es möglich, Callback-Funktionen aufzurufen, die in der Datei "cnaevent.lua" definiert wurden. Callback-Funktionen sind Funktionen, die aufgerufen werden, nachdem ein bestimmter Befehl in CadnaA durch den Anwender ausgelöst wurde. Ein Beispiel wäre, dass CadnaA nach einer Rasterberechnung das Raster automatisch mit einem bestimmten Dateinamen speichert.

Die Datei "cnaevent.lua" muss im demselben Pfadverzeichnis wie die Datei CADNAA.INI abgelegt werden (Pfad: C:\Users\USERNAME\AppData\Local\Datakustik\CadnaA). Erzeugen und editieren Sie die Datei cnaevent.lua mit einem Lua-Editor (z.B. LuaEdit).

Gegenwärtig stehen folgende Callback-Funktionen zur Verfügung:

Funktion Parameter
Load Filename
LoadTile Filename, Rectangle (left,top,right,bottom), RadMax
Save Filename
SaveTile Filename
ChangeVariant -
CalcGrid -
CalcImm -

Lua-Events haben nur einen Parameter (init). Der Anwender kann diesen Parameter nicht selbst übergeben, da dies durch CadnaA selbst erfolgt indem das Lua-Event aufgerufen wird mit

  • init>0 vor der CadnaA-Funktion und
  • init<=0 nach der CadnaA-Funktion.

Beispiel

Nachfolgendes Beispiel weist zwei Funktionen als CadnaA-Lua-Events auf:

  1. Die erste Funktion speichert das Raster nach einer Rasterberechnung, wobei der Dateiname die berechnete Variante enthält.

  2. Die zweite Funktion exportiert nach einer Immissionspunkt-Berechnung die Berechnungsergebnisse für jeden Immissionspunkt und für alle Zielgrößen in eine Textdatei, wobei der Dateiname ebenfalls die berechnete Variante enthält.

-- cnaevent.lua
function cnaevent.CalcGrid(init)
    if init > 0 then    
        -- execute this part before any grid is calculated
    else    
        -- execute this part after any grid is calculated
        gridname= cna.run_macro("#(File,LPN)").."_".. cna.run_macro("#(Variante)").. ".cnr"     cna.save_grid(gridname)
        cna.redraw()
    end
end`

function cnaevent.CalcImm(init) 
    if init > 0 then    
        -- execute this part before any receiver is calculated
    else    
        -- execute this part after any receiver is calculated
        filename= cna.run_macro("#(File,LPN)").."_results_".. 
        cna.run_macro("#(Variante)").. ".txt"   
        local file = io.open(filename, "w") 
        for imm in cna.tables.imm:all() do
            file:write(imm.ID .. " " .. imm.LP1 .. " " .. imm.LP2 .. " " .. imm.LP3 .. " " .. imm.LP4 .. "\n")  
        end 
        file:close()
    end
end

Makro-Befehle für Lua-Events

Über die CadnaA-spezifischen Lua-Befehle hinaus sind innerhalb von Lua-Events auch CadnaA-Makro-Befehle auf Basis von Schlüsselworten verwendbar (siehe Kapitel 3 - Schlüsselworte im Handbuch „Attribute, Variablen und Schlüsselworte“).

Grundsätzlich sind alle Schlüsselworte innerhalb von Lua-Events verwendbar, aber nicht alle machen notwendigerweise Sinn in diesem Zusammenhang.

Hinweis

Makro-Befehle können nicht nur in Lua-Events, sondern auch in normalen Lua-Skripts verwendet werden.

Beispiele

Syntax Bedeutung
cna.run_macro("#(File,LPN)") führt zur Ausgabe des Dateinamens mit den Parametern LPN (siehe File im Handbuch „Attribute, Variablen und Schlüsselworte“)
cna.run_macro("#(Variante)") führt zur Ausgabe der Kurz-Bezeichnung der Variante (siehe Variante im Handbuch „Attribute, Variablen und Schlüsselworte“)
cna.run_macro("#(GLK,SetSTW,3)") setzt die Stockwerksnummer der Gebäudelärmkarte auf 3

Ausführen

Aktivieren Sie die Option „Lua-Events verwenden“ im Dialog Sonstiges (Menü Eigenschaften) und beenden Sie anschließend CadnaA. Nach einem Neustart werden die in der Datei "cnaevent.lua" vorhandenen Funktionen ausgeführt, nachdem eine der in dieser Datei verwendeten Callback-Funktionen ausgelöst wurde.

Weitere Informationen

  • Lua-Events werden immer aufgerufen, sofern die Datei "cnaevent.lua" vorhanden ist und die Option „LUA-Events verwenden“ im Dialog Sonstiges (Menü Eigenschaften) aktiviert ist.
  • Jegliche Änderungen an der Datei "cnaevent.lua" werden erst nach einem Neustart von CadnaA wirksam. Das heißt, dass eine Änderung in der Datei "cnaevent.lua" alleine keine Veränderung bei der Ausführung verursacht.
  • CadnaA gibt keine Fehlermeldungen aus (z.B. wegen Syntaxfehlern in der Datei "cnaevent.lua"). CadnaA funktioniert dann wie gewohnt, nur ohne Verwendung der Lua-Events. Zur Syntaxprüfung empfiehlt es sich daher, die Lua-Funktionen während der Entwicklung innerhalb eines Lua-Skriptes zu testen, das über Menü Extras|Lua-Skripte ausführen aufgerufen werden kann.