Script Python Rhino pour déplacer, retourner et modifier l'échelle d'une série d'objets aléatoirement pour simuler une disposition naturelle. Equivalent d'un "scatter" en un clic et avec une série d'objet déjà présents sur la scène. La fonction est compatible avec les objets VRScene.
#! python 3
import rhinoscriptsyntax as rs
import random
objects = rs.GetObjects("Select objects to randomize")
if objects:
#options
varianceMoveX = rs.GetReal("Move variance in X", 0)
varianceMoveY = rs.GetReal("Move variance in Y", 0)
varianceMoveZ = rs.GetReal("Move variance in Z", 0)
varianceRotate = rs.GetReal("Rotate variance (Z vector) in degrees", 0, 0, 360)
varianceScale = rs.GetReal("Scale 3D variance in percentage", 0, 0, 100)
scaleFromBottom = rs.GetString("Scale base point located at the bottom of the object ?", "Yes", ["Yes", "No"])
variables = [varianceMoveX, varianceMoveY, varianceMoveZ, varianceRotate, varianceScale, scaleFromBottom]
all_variables_not_none = all(v is not None for v in variables)
if all_variables_not_none:
rs.EnableRedraw(False) #disables preview
for obj in objects:
valueMoveX = random.uniform(-1,1) * varianceMoveX
valueMoveY = random.uniform(-1,1) * varianceMoveY
valueMoveZ = random.uniform(-1,1) * varianceMoveZ
valueRotate = random.uniform(-1,1) * varianceRotate
valueScale = (random.uniform(-1,1) * (varianceScale/100)) + 1
if valueMoveX !=0 or valueMoveY !=0 or valueMoveZ !=0:
rs.MoveObject(obj, rs.CreateVector(valueMoveX, valueMoveY, valueMoveZ))
bbox = rs.BoundingBox(obj, None, True)
bboxCentroid = rs.PointDivide(rs.PointAdd(bbox[1], bbox[7]), 2.0)
bboxCentroidBottom = rs.PointDivide(rs.PointAdd(bbox[1], bbox[3]), 2.0)
centroid = bboxCentroid
if scaleFromBottom == "Yes":
centroid = bboxCentroidBottom
if bbox:
if valueRotate != 0:
rs.RotateObject(obj, centroid, valueRotate)
if valueScale != 1:
rs.ScaleObject(obj, centroid, (valueScale, valueScale, valueScale))
else:
print("Could not create bounding box for one object, rotate and scale will not be performed")
rs.EnableRedraw(True) #reactivates preview
else:
print("Error while defining parameters")
else:
print("No object selected")
Fonctionnalité intégrée à la dernière version de Jester (0.0.5).