Is item in list a curve or surface

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!