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:
-
Die erste Funktion speichert das Raster nach einer Rasterberechnung, wobei der Dateiname die berechnete Variante enthält.
-
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.