RevitPythonShell: Create Points

<<< Return to Nathan's Revit API Notebook

Introduction

Points are the easiest type of geometry to define (of course!). There are two variable types to be aware of when creating a point…

  1. XYZ Variable: A variable for storing x, y, z coordinates and defining vectors.
  2. Reference Point Variable: Uses XYZ to create a visible reference point in space.

Single Point

The following code uses variables x, y, and z to define an XYZ variable. A reference point is then created using doc.FamilyCreate.NewReferencePoint()

The code creates a single point in the Mass family at the coordinate 10,10,0

import clr
clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI') 
from Autodesk.Revit.DB import * 
 
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document
 
t = Transaction(doc, 'create a single reference point')
 
t.Start()
 
#define x, y, and z variables
x = 10
y = 10
z = 0
 
#declare a XYZ variable
myXYZ = XYZ(x,y,z)
 
#use XYZ to define a reference point
refPoint = doc.FamilyCreate.NewReferencePoint(myXYZ)
 
t.Commit()
 
__window__.Close()
RPS-Points-CreatePoint.jpg

Row of Points

We can create a row of points by incrementing coordinate values using a for loop

import clr
clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI') 
from Autodesk.Revit.DB import * 
 
doc = __revit__.ActiveUIDocument.Document
 
t = Transaction(doc, 'create a row of reference points')
 
t.Start()
 
#use for loop variable i to increment x and y
for i in range(0,10):
    x = i * 10
    y = i * 10
    z = 0 
 
    myXYZ = XYZ(x,y,z)
    refPoint = doc.FamilyCreate.NewReferencePoint(myXYZ)
 
t.Commit()
 
__window__.Close()
RPS-Points-CreatePointRow.jpg

Grid of Points

We can create a grid of points by incrementing coordinate values within a nested for loop

import clr
clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI') 
from Autodesk.Revit.DB import * 
 
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document
 
t = Transaction(doc, 'create a grid of reference points')
 
t.Start()
 
for i in range(0,10):
    #use a nested for loop variable j to increment x by i and y by j.
    for j in range(0,10):
        x = i * 10
        y = j * 10
        z = 0 
 
        myXYZ = XYZ(x,y,z)
        refPoint = doc.FamilyCreate.NewReferencePoint(myXYZ)
 
t.Commit()
 
__window__.Close()
RPS-Points-CreatePointGrid.jpg

Sine Wave Points

The point array can have even more complexity to it by changing variable z with a sine and cosine formula. Please note the import of the math library to use these functions.

import clr
import math
clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI') 
from Autodesk.Revit.DB import * 
 
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document
 
t = Transaction(doc, 'create wave points')
 
t.Start()
 
for i in range(0,30):
    for j in range(0,30):
        x = i * 10
        y = j * 10
        #changing z position according to cosine and sine formula
        z = (10*math.cos(i)) + (10*math.sin(j))
 
        myXYZ = XYZ(x,y,z)
        refPoint = doc.FamilyCreate.NewReferencePoint(myXYZ)
 
t.Commit()
 
__window__.Close()
RPS-Points-CreatePointWave.jpg
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License