tmontaigu / CloudCompare-PythonRuntime

Python plugin for CloudCompare
55 stars 15 forks source link

Select scalar field displayed from python #109

Closed Ellana17 closed 5 months ago

Ellana17 commented 5 months ago

Bonjour, J'ai le script suivant qui m'affiche les nuages de points et les "scalar fields" disponible mais par défaut aucun "scalar fields" n'est actif et les points s'affichent blanc. Comment afficher les points avec un "scalar fields" actif par défaut ?

def cloud(l1,l2,T,en_tete,idx_sf,output_file_T):
         point_cloud=pycc.ccPointCloud(T[l1:l2,1].astype(pycc.PointCoordinateType), T[l1:l2,2].astype(pycc.PointCoordinateType), T[l1:l2,3].astype(pycc.PointCoordinateType))
         for l in range(len(idx_sf)):
                  idx = point_cloud.addScalarField(en_tete[idx_sf[l]], T[l1:l2,idx_sf[l]])
                  point_cloud.getScalarField(point_cloud.getScalarFieldIndexByName(en_tete[idx_sf[l]])).computeMinAndMax()
                  #if en_tete[idx_sf[l]]=="F(mm/s)":
                  #          point_cloud.setActiveScalarField(point_cloud.getScalarField(point_cloud.getScalarFieldIndexByName(en_tete[idx_sf[l]])))
         point_cloud.setName(output_file_T) 
         CC.addToDB(point_cloud)

les lignes avec # m'ont été proposées par Gemini quand je lui ai demandé une solution, mais CloudCompare me dit que la fonction "setActiveScalarField" n'existe pas, est-ce vrai ?

Merci d'avance

tmontaigu commented 5 months ago

Les IA c'est tres fort pour haluciner des trucs

If faut utilser point_cloud.setCurrentDisplayedScalarField(index)

Ellana17 commented 5 months ago

J'ai testé avec cette fonction mais j'ai un problème : les points restent blancs même si dans les paramètres un scalar fields est considéré "actif": image

Pour obtenir les points en couleurs, je dois sélectionner un autre scalar field puis revenir sur celui désiré image

tmontaigu commented 5 months ago

Il faut probablement aussi appeler computeMinAndMax()

Apparemment c'est deja fait

Ellana17 commented 5 months ago

même chose quand j'ajoute "point_cloud.showSFColorsScale(True)", l'échelle n'apparait que si je change un scalar field même si la case est cochée grâce au script

tmontaigu commented 5 months ago

Ok, il faut appeler pc.showSF(True)

Un exmple complet donne

# Create and add a new scalar field
idx = pc.addScalarField("Intensity")
scalar_field = pc.getScalarField(idx)

#Change the values
sfArray = pc.getScalarField(idx).asArray()
sfArray[:] = [0, 1, 2, 3, 4]

# Make it so the scalar field is displayed
scalar_field.computeMinAndMax()
pc.setCurrentDisplayedScalarField(idx)
pc.showSF(True)

# Optional: choose the color scale d
scale = pycc.ccColorScalesManager.GetDefaultScale(
    pycc.ccColorScalesManager.YELLOW_BROWN
)
scalar_field.setColorScale(scale)
Ellana17 commented 5 months ago

Merci, j'appelais "point_cloud.showSFColorsScale(True)" à la place.