Hi,
I can get the midpoint of a curve but next I would like to be able to find out if an item in a list is a curve or a surface. Because if it’s a surface then I would like the midpoint of the surface and I need to provide two arguments.
import clr
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
# Import RevitAPI
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import LineLoad
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import TaskDialog
# Import ToProtoType, ToRevitType geometry conversion extension methods
clr.AddReference("RevitNodes")
import Revit
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.ImportExtensions(Revit.GeometryConversion)
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
SOCR = UnwrapElement(IN[0])
midpoints = []
for s in SOCR:
if s is Curve: # This doesn't work and I would like to know what should go here
point1 = s.PointAtParameter(0.5)
midpoints.append(point1)
else:
surf1 = s.PointAtParameter(0.5, 0.5)
midpoints.append(surf1)
OUT = midpoints
hi
try to use
s.GetType()
to get the type of the element
I got it to work but for the comparison I turned things into strings and i doubt this is the best solution:
Do you have a better suggestion than comparing these two like this?
import clr
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
# Import RevitAPI
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import LineLoad
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import TaskDialog
# Import ToProtoType, ToRevitType geometry conversion extension methods
clr.AddReference("RevitNodes")
import Revit
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.ImportExtensions(Revit.GeometryConversion)
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
#SOCR = UnwrapElement(IN[0])
SOCR = IN[0]
midpoints = []
for t in SOCR:
if str(t.GetType()) == "Autodesk.DesignScript.Geometry.NurbsCurve":
point1 = t.PointAtParameter(0.5)
midpoints.append(point1)
else:
surf1 = t.PointAtParameter(0.5, 0.5)
midpoints.append(surf1)
OUT = midpoints
i dont really sure 100%, but you can use try,except if you want like this
for t in SOCR:
try:
point1 = t.PointAtParameter(0.5)
midpoints.append(point1)
except:
surf1 = t.PointAtParameter(0.5, 0.5)
midpoints.append(surf1)
OUT = midpoints
2 Likes
It works for now!
thanks!