i changed the code to match with your suggestion
here is the full code
import Metashape
def place_corner_markers(chunk):
"""Place des marqueurs aux coins de la bounding box pour les coins supérieurs avant."""
region = chunk.region
T = chunk.transform.matrix
# Taille, centre et rotation de la bounding box
size = region.size
center = region.center
R = region.rot
# Coordonnées locales pour les coins supérieurs avant de la bounding box
front_top_left_local = Metashape.Vector([-0.5 * size.x, 0.5 * size.y, 0.5 * size.z])
front_top_right_local = Metashape.Vector([0.5 * size.x, 0.5 * size.y, 0.5 * size.z])
# Transformation en coordonnées globales (géocentriques) puis projection en CRS du chunk
front_top_left_global = chunk.crs.project(T.mulp(center + R * front_top_left_local))
front_top_right_global = chunk.crs.project(T.mulp(center + R * front_top_right_local))
# Ajout des marqueurs pour chaque coin en utilisant les coordonnées projetées
marker_left = chunk.addMarker()
marker_left.reference.location = front_top_left_global
marker_left.label = "Front Top Left"
marker_right = chunk.addMarker()
marker_right.reference.location = front_top_right_global
marker_right.label = "Front Top Right"
print("Marqueurs ajoutés aux coins supérieurs avant de la bounding box (en CRS).")
return marker_left, marker_right
def create_line_from_markers(chunk, marker_left, marker_right):
"""Créer une polyligne en utilisant les positions exactes des marqueurs spécifiés."""
# Utiliser les positions exactes des marqueurs projetées en CRS
point1 = marker_left.reference.location
point2 = marker_right.reference.location
# Vérifier et initialiser les shapes si nécessaire
if not chunk.shapes:
chunk.shapes = Metashape.Shapes()
chunk.shapes.crs = chunk.crs # Définit le système de coordonnées des shapes sur celui du chunk
# Créer un groupe pour la ligne
group = chunk.shapes.addGroup()
group.label = "Front Top Edge"
# Créer la polyligne en utilisant les coordonnées CRS des marqueurs
shape = chunk.shapes.addShape()
shape.geometry = Metashape.Geometry.LineString([point1, point2])
shape.label = "Front Top Edge Line"
shape.group = group
print("La polyligne alignée sur les marqueurs a été créée avec succès.")
# Exécution des fonctions
doc = Metashape.app.document
chunk = doc.chunk
if chunk:
marker_left, marker_right = place_corner_markers(chunk)
create_line_from_markers(chunk, marker_left, marker_right)
else:
print("Aucun chunk trouvé dans le document.")
it's working by using this it is possible by resizing the bounding box to match multiple measured profiles thanks to the exact same start and end point, with a georeferenced project it's perfect and i tried with an other one in local projection it's not working.