tmontaigu / CloudCompare-PythonRuntime

Python plugin for CloudCompare
54 stars 15 forks source link

assign attributes to columns during import #105

Closed Ellana17 closed 3 months ago

Ellana17 commented 3 months ago

Bonjour, Je voudrais créer un script python qui s'exécute dès qu'un fichier est importé dans CloudCompare et qui permet de donner les attributs correspondant au nom des colonnes du fichier importé : si la colonne a pour nom "X" alors elle obtient l'attribut "coord. X", les noms des colonnes importées étant toujours les mêmes.

Pour l'instant j'ai des idées de code :


import pycc

def process_new_file(filename):
    # Charger le nuage de points
    with pycc.open(filename) as cloud:
        # Obtenir la ligne d'en-tête
        header_row = cloud.data[0]

        # Attribuer des propriétés en fonction des noms d'en-tête
        for i, header_name in enumerate(header_row):
            if header_name == "Type OP":
                ?
            elif header_name == "x":
                ?

        # Enregistrer le nuage de points modifié
        cloud.save(filename)

# Enregistrer le script comme rappel pour l'événement "file_loaded"
pycc.register_callback("file_loaded", process_new_file)

Que dois-je changer/ajouter ? Et quelle est la démarche pour qu'il s'exécute automatiquement Résultat désiré : image

Merci d'avance

tmontaigu commented 3 months ago

C'est pas possible, il n'y a pas de systeme de callback pour executer du code custom dès qu'un fichier est ouvert, en plus ici on parle d'un truc possible uniquement sur les fichiers csv et cloud compare est capable de lire bien plus de type que ça

Il est peut etre possible d'exposer une fonction qui permets de lire un CSV et de customizer comment interpreter les colonnes, mais c'est pas super simple

Le plus simple serait de faire un script python qui change le header des CSV pour que les noms de colonnes soit standardisee avec celles de CloudCompare

Ellana17 commented 3 months ago

Même si je change le nom des colonnes du CSV pour qu'ils soient les mêmes que dans CloudCompare, CloudCompare ne fait pas le lien. Tant pis je vais jouer sur l'emplacement des colonnes, merci.