Hello
an example with a wall
import clr
import sys
import math
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
def getFaceloop(wall):
lstref = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Interior)
for ref in lstref:
face = wall.GetGeometryObjectFromReference(ref)
edgLoopArr = face.EdgeLoops
for lstEdg in edgLoopArr:
lstCurvDS = [x.AsCurve().ToProtoType() for x in lstEdg]
polycurvDS = DS.PolyCurve.ByJoinedCurves(lstCurvDS)
lstCurv = List[Curve]([x.ToRevitType() for x in polycurvDS.Curves()])
curvLoop = CurveLoop.Create(lstCurv)
return curvLoop
wall = UnwrapElement(IN[0])
vft = FilteredElementCollector(doc).OfClass(ViewFamilyType).ToElements().Find(lambda i : i.ViewFamily == ViewFamily.Elevation)
viewTypeId = vft.Id
TransactionManager.Instance.EnsureInTransaction(doc)
#get propreties
curvloopWall = getFaceloop(wall)
locCurv = wall.Location.Curve
vectA = locCurv.Direction.Normalize()
offSetCurve = locCurv.CreateOffset(2, vectA.CrossProduct(XYZ(-1,0,0)))
pt = offSetCurve.Evaluate(0.5, True)
ln = Line.CreateBound(pt, pt + XYZ(0,0,10))
ang = vectA.AngleTo(XYZ(1,0,0)) * XYZ(1,0,0).CrossProduct(vectA).Normalize().Z
#create marker
eleMarker = ElevationMarker.CreateElevationMarker(doc, viewTypeId, pt, 100)
indXElev = 0 if ang > 0 else 2
ele = eleMarker.CreateElevation(doc, doc.ActiveView.Id , indXElev)
rot = eleMarker.Location.Rotate(ln, ang + math.pi / 2)
#set cropShape
crManager = ele.GetCropRegionShapeManager()
crManager.SetCropShape(curvloopWall)
TransactionManager.Instance.TransactionTaskDone()
OUT = eleMarker