1) Download and install Python (for your Revit version) and Vasari from https://code.google.com/p/revitpythonshell/
2) Start Revit, load the scene with the Family Instances you want to randomize
3) Select an instance of the Family Instance you want to randomize
3) In the AddIn tab, click the new Interactive Python Shell button
4) Copy and paste the following code into the lower window
import clr
import System
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document
transaction = Transaction(doc, 'Randomize family instance rotation')
transaction.Start()
seed = 215
rand = System.Random(seed)
# Get the current selection
selection = __revit__.ActiveUIDocument.Selection.Elements
if selection.Size != 1:
print "A single family instance must be selected"
else:
for item in selection:
currentElement = item
print "Current Selection = " + currentElement.Name
collector = FilteredElementCollector(doc)
collector.OfClass(FamilyInstance)
famtypeitr = collector.GetElementIdIterator()
famtypeitr.Reset()
count = 0
for item in famtypeitr:
famtypeID = item
faminst = doc.GetElement(famtypeID)
if faminst.Name == currentElement.Name:
# Setup the rotation axis
p1 = faminst.Location.Point;
p2 = XYZ(p1.X, p1.Y, p1.Z + 10);
rotationAxis = app.Create.NewLine(p1, p2, True)
# Apply a random rotation
faminst.Location.Rotate(rotationAxis, rand.Next(0, 360) * 180 / 3.14159);
count += 1
print "Randomised " + str(count) + " family instances of " + currentElement.Name
transaction.Commit()
5) Click the Run button in the lower window toolbar
All the instances should now be randomly rotated between 0 and 360 degrees. You can modify the above code to limit the random rotate, etc.
No comments:
Post a Comment