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()

15/10/24 : Fonctionnalité ajoutée à Jester 0.3


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.

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

alsace europe