CloudCompare-PythonRuntime icon indicating copy to clipboard operation
CloudCompare-PythonRuntime copied to clipboard

add vectors x y z

Open Ellana17 opened this issue 1 year ago • 3 comments

Bonjour,

Je souhaiterai créer en python un petit programme qui affiche le point (0,0,0) ainsi que les vecteurs x,y et z partant de ce point. Dans CloudCompare, lors de l'import d'un fichier, Nx, Ny et Nz sont des "types de données" qui peuvent être choisit. Comment les choisir en python ?

Merci d'avance

Ellana17 avatar Jul 30 '24 07:07 Ellana17

Lors de l'import d'un fichier (quel format) il est possible de specifier un point d'origine et les vecteur de bases ?

tmontaigu avatar Aug 01 '24 22:08 tmontaigu

J'utilise cloudcompare pour afficher plusieurs nuages de points avec la vibration comme valeurs pour l'échelle de couleur. Comme il n'est pas possible de définir une échelle globale (define a color scale #113 ) j'ai ajouté dans mon script python un calcul des valeurs min/max "générales" et j'ai ajouté à la fin de chaque fichier 2 lignes avec le min et le max aux coordonnées (0,0,0). Il y a donc p=2x"nb de nuages" points (0,0,0) qui se retrouvent "tout seuls" et j'aimerai rajouter des vecteurs X,Y,Z sur ces points pour qu'on comprennent qu'il ne s'agit pas d'usinage mais de l'origine de la pièce (les coordonnées des nuages de points étant selon la "position origine pièce").

La solution serait donc d'importer (ou de créer directement en python) le fichier csv suivant : image

Mais comment faire pour que lors de l'import/ l'utilisation des données dans python Nx,Ny et Nz soient considérés comme des vecteurs : image

et si possible que la case "Draw" soit cochée automatiquement image

Importé "à la main", le fichier donne ça (avec une modification de "length"): image

Ellana17 avatar Aug 02 '24 13:08 Ellana17

import numpy as np
import pycc

cc = pycc.GetInstance()

x = np.array([0, 0, 0])
y = np.array([0, 0, 0])
z = np.array([0, 0, 0])

normals = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])
print(normals[:, 0], normals[:, 1], normals[:, 2])

pc = pycc.ccPointCloud(x, y, z)
pc.reserveTheNormsTable()
pc.addNormals(normals[:, 0], normals[:, 1], normals[:, 2])
pc.setName("origin")
# pc.showNormalsAsLines(True) # Not yet possible
cc.addToDB(pc)
cc.updateUI()

Ce bout de code va creer un point cloud qui va creer un point a l'origine avec les normals comme vecteurs de base, avec la case draw coche. Mais le normales ne sont visible que l'lorsque l'on bouge la vue 🤔

Est ce que ca s'approche de ce qui est voulu ?

tmontaigu avatar Aug 09 '24 07:08 tmontaigu

Désolé de répondre si tard, j'étais en vacances. J'ai testé le programme et j'ai un problème : la case draw ne s'est pas cochée automatiquement. De plus j'aimerai modifier le "length" pour que les vecteurs soient plus visibles. Peut-on le faire directement en python ? Le problème des vecteurs qui n'apparaissent que quand on tourne la vue peut être due au "Near clipping depth" (ctrl+molette) qu'il faut ramener à 0.

Ellana17 avatar Aug 22 '24 07:08 Ellana17

Le nouvelle version comprise dans l'installeur contient la fonction pour avoir la case draw choché en faisant pc.showNormalsAsLines(True)

Par contre je ne sais pas comment augmenter la talle des vecteurs

tmontaigu avatar Aug 25 '24 10:08 tmontaigu