#-------------------------------------------------------------------------
# automatischer Workflow für die Vorverarbeitung einer las/laz-Datei  mit CloudCompare
#
# Arbeitsschritte:
#   1. Subsample - Punktdichte verringern
#   2. NOISE FILTER - Isolierte Punkte/Inseln entfernen
#
# zur Benutzung muss die Variable "cloudComprePath" korrekt gesetzt werden!
# 
# Die Ausgabedatei wird in dem Verzeichnis gespeichert, in dem sich dieses Skript befindet!
#-------------------------------------------------------------------------

import subprocess
from tkinter import Tk
from tkinter.filedialog import askopenfilename

# die Punktwolken Datei, die verarbeitet wird bestimmen
Tk().withdraw() 
filename = askopenfilename()
print("Datei: " + filename)

# Name der Ausgabedatei
outname = filename.rsplit('/', 1)[-1].rsplit('.', 1)[0] + "_processed.laz"
outname = outname.replace(" ", "_")

# Wo ist CloudCompare auf diesem Rechner gespeichert?
cloudComprePath = "C:\Program Files\CloudCompare\CloudCompare.exe"


#----- Variablen für die Verarbeitungstools -----

# minimale Distanz zwischen zwei Punkten (in Meter)
subSampleDistance = "0.01" 
# Radius für Suche nach Nachbarn (in Meter)
noiseRadius = "0.02"

# Verarbeitungsbefehl
command = [
    cloudComprePath,
    "-O", filename,
    "-SS", "SPATIAL", subSampleDistance,
    "-NOISE", "RADIUS", noiseRadius,  "REL", "1.0", "RIP", 
    "-C_EXPORT_FMT", "LAS",
    "-SAVE_CLOUDS", "FILE", outname 
]

subprocess.run(command)

print("Verarbeitung fertig - Datei exportiert")
input("")
