Create Revit Line using Revit API and Python

Hi everybody

In order to learn how to use Revit API I thought to create a simple line, the line is created inside dynamo but not displayed in Revit Interface…why and what I should do to display it??


Here my code:

import sys
import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument


TransactionManager.Instance.EnsureInTransaction(doc)

PT1 = XYZ(0,0,0)
PT2 = XYZ(15,0,0)
Line = Line.CreateBound(PT1, PT2)
TransactionManager.Instance.TransactionTaskDone()

OUT = Line

Thanks.

A line in Revit is just a geometry type, not an element. The elements you see in a model are either a ModelCurve or a DetailCurve. You have to create a curve element from a line/curve.

1 Like

@Nick_Boyts

I created my line using NewModelCurve Methode, but my line length is measured in feet and I want it to be in meter so how to convert it?

Here my code:

import sys
import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference('RevitNodes')

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

origin = XYZ(0,0,0)
norm = XYZ(1,0,0)
plane = Plane.CreateByNormalAndOrigin(norm, origin)

TransactionManager.Instance.EnsureInTransaction(doc)

sketch = SketchPlane.Create(doc, plane)
PT1 = XYZ(0,0,0)
PT2 = XYZ(0,20,0)
curve = Line.CreateBound(PT1, PT2)
Line = doc.Create.NewModelCurve(curve, sketch)

TransactionManager.Instance.TransactionTaskDone()

OUT = Line

Thanks.

It should use your project units. You can change these or include a conversion in your code.

@Nick_Boyts

No it didn’t take my project units which is in meters…so hwo to add conversion in my code?

Thanks

Hello, here is a possible addition

import sys
import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference('RevitNodes')

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

#to convert point
def feet_to_m(a,b,c):
    k=0.3048
    return XYZ(a/k,b/k,c/k)

origin = XYZ(0,0,0)
norm = XYZ(1,0,0)
plane = Plane.CreateByNormalAndOrigin(norm, origin)

TransactionManager.Instance.EnsureInTransaction(doc)

sketch = SketchPlane.Create(doc, plane)
PT1 = feet_to_m(0,0,0)
PT2 = feet_to_m(0,40,0)
curve = Line.CreateBound(PT1, PT2)
Line = doc.Create.NewModelCurve(curve, sketch)

TransactionManager.Instance.TransactionTaskDone()

OUT = Line

Cordially
christian.stan

2 Likes

I just mean mathematically convert the units. This post has a well thought-out solution to match project units.

@christian.stan

It’s work fine :+1:

Thanks.

1 Like