n°50
Retrouver tous les objets d'un calque sur Rhino
Rhino3D, Python
17 mai 2024

Script Python pour Rhino 8 qui ajoute une pastille sur tous les objets d'un calque spécifique, y compris les blocks et objets à l'intérieur de blocks. Utile lorsque l'on a des objets intégrés dans des sucessions de blocks et que l'on n'arrive plus à les retrouver ...

Le script est adaptable également pour qui chercher à calculer les centres de tous les objets d'une scène, y compris ceux à l'intérieurs de blocks.

Où ce sont cachés les objets du calque rouge ?
Où ce sont cachés les objets du calque rouge ?
#! python 3

import rhinoscriptsyntax as rs
import Rhino

def dotIt(obj,centroid):
    objLayer = rs.ObjectLayer(obj)
    if objLayer == targetLayer:
        rs.AddTextDot("Here!",centroid)

def getBlockOrigin(block):
    irefObj = rs.coercerhinoobject(block)
    idef = irefObj.InstanceDefinition
    blockOrigin = irefObj.InsertionPoint
    return blockOrigin

def getCentroid(obj): #cannot be directly applied to a block
    bb=rs.BoundingBox(obj)
    if bb:
        centroid = ((bb[0]+bb[6])/2)
    return centroid

def loopBlock(block, origin):
    blockOrigin = getBlockOrigin(block) + origin

    blockCentroid = origin + getCentroid(block)
    dotIt(block,blockCentroid)

    objectsInBlock = rs.BlockObjects(rs.BlockInstanceName(block))
    for obj in objectsInBlock:
        if rs.ObjectType(obj) != 4096: #is not a block
            objCentroid = blockOrigin + getCentroid(obj)
            dotIt(obj,objCentroid)
        else:
            loopBlock(obj, blockOrigin)

targetLayer = rs.GetLayer()
objs = rs.AllObjects(include_lights=False, include_grips=False)

if objs:
    for obj in objs:
        if rs.ObjectType(obj) == 4096: #is a block
           loopBlock(obj, Rhino.Geometry.Point3d.Origin)
        else:
            dotIt(obj,getCentroid(obj))
else:
    print("Could not select all objects.")

rs.Redraw()

c. héraud-louisadat

architecte & développeur
67200 Strasbourg
heraud-arobase-laponies-point-fr

*1992, Strasbourg.

Diplômé d'état en 2016 de l'ENSA Paris-Malaquais et de la RWTH Aachen et habilité à maîtrise d'oeuvre en nom propre (HMONP) en 2019, j'ai travaillé pour diverses agences d'architecture à Paris et Berlin puis fait de la recherche en histoire de l'art sur l'architecture Heimatschutz. J'ai fondé l'agence Atkinson-Héraud Architectes en 2023 avec Isabelle Atkinson-Evans. Je développe également des applications pour le Web et la 3D. Vous pouvez par ailleurs consulter l'archive net art des travaux laponies.fr ainsi que la carte des bonnes adresses.

Amis, famille et blogroll : Anaïs Héraud-Louisadat, Héraud–Baumann, Till Baumann, Antoine Le Dreff, Station Zéro, BALT.

alsace europe