So I can get everything I want for a built in parameter, but it is returned as Autodesk.Revit.DB.Parameter (System.Object) and it needs to be Revit.Elements.Parameter… ToDSType() doesn’t work.
If you call the parameter by name with “Family and Type”, you will get one of three different parameters. Only the VIEW_TYPE will work in this instance.
erm, you can use element selector from dynamo api using the parameter ID as integer value to get Revit.Elements.Element as output. Example of your case would be:
def GetDSElem(id):
return ElementSelector.ByElementId(Id.IntegerValue,False)
result = None
for myView in collector:
try:
result = myView.get_Parameter(BuiltInParameter.VIEW_TYPE)
DSelem = GetDSElem(result.Id)
myOut = [DSelem, DSelem.Id,DSelem.Name]
if result: break
except: pass
OUT = myOut
EDIT: The codes above are not tested yet. It is produced based on your first picture, and your second picture is unclear. Please zoom in till to see a single node and press the camera button on the top right hand corner
Unfortunately, doesn’t work - IronPython wants a reference or string and if I feed the Id in as string, it just comes back null. I don’t think IronPython will return anything that has a negative (-1012106) Id.
Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
Traceback (most recent call last):
File “”, line 50, in
TypeError: expected Reference, got int
Good thought, but IronPython returns an error on all negative Id’s (-1012106) just like GetElement. I’m guessing this is just a limit of the API.
Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
Traceback (most recent call last):
File “”, line 51, in
Exception: Could not obtain element from the current document! The id may not be valid.
Using vft_id = myView.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsElementId() will return the Id of the view family type. doc.GetElement(vft_id) gets you the element.
But I’m not sure if you wanted the element, or the parameter object itself.
Yes, that is the problem. In most instances, what you’ve shown works just fine. With this and other code of a similar sort, I’m trying to pull the BuiltInParameter as parameter - not the parameter from the element. In some instances, there may not yet be a DB element created. But the BuiltInParameter exist.
Note that you can’t use Snoop for BuiltInParameters by ID. So I’m guessing this is just a underlying API issue.
EDIT
Seems like I misunderstood the issue in the first place.
And referring to the RevitAPI forum was just a suggestion, where you might find a post with a aim similar to yours. I can see that it could be read as a “push away”.
could you at least show a snapshot of that error? i could not guess where is line50. and i can assure that this works because thats what dynamo did itself in their code for their node. and if you achieve it using their node, then you can achieve it in python script as well
Anyways, i think this workaround should work since i think what you wanna achieve the to get the the viewtype element of a view. So heres the code:
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
def GetDSElem(id):
result = None
try:
result = Revit.Elements.ElementSelector.ByElementId(id.IntegerValue,False)
except:
result = doc.GetElement(id)
if result:
try: return result.ToDSType(False)
except:return result
return None
#Preparing input from dynamo to revit
elements = UnwrapElement(IN[0])
finaloutput1,finaloutput2 = list(),list()
#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
for ele in elements:
if ele:
#FirstWay
typeid1 = ele.GetTypeId()
#SecondWay
typeid12 = ele.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsElementId()
dsele1,dsele2 = None,None
#Translate to Element
if typeid1:
dsele1 = GetDSElem(typeid1)
if typeid12:
dsele2 = GetDSElem(typeid12)
#append to list
finaloutput1.append(dsele1)
#append to list
finaloutput2.append(dsele2)
TransactionManager.Instance.TransactionTaskDone()
#Final output
OUT = finaloutput1,finaloutput2
Actually, I’m working on some parameter management tools, and wanted to get the BuiltInParameters, Labels (all simple enough) and Id’s (not so easy) before views are created.
I also found that there are a number of BuiltInParameters that can’t be parsed and have missing Labels using Python. I posted that under a separate thread.