Python - Cant get items from list


I’m attempting to write some Python code which modifies the crop region o f an elevation using the ViewCropRegionShapeManager Class.

I’ve set up Dynamo using the Select View node which passes the result to a Python script:

The script extracts the CropRegion (note its runs in Revit 2017), and returns a list of the 4 lines making up the crop:

# Dynamo
import clr
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *

import Autodesk
from Autodesk.Revit.DB import *

from Autodesk.Revit.UI.Selection import *

import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

#The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode 	= IN
elefound			= UnwrapElement(IN[0])	# An element - should be an elevation

#Get CropRegionShapeManager from elevation
elecrsm = elefound.GetCropRegionShapeManager()

#Get Crop Region shape
crshape = elecrsm.GetCropShape()

#Assign your output to the OUT variable.
OUT = [crshape]

This gives the view boundary lines (in a list for some reason):

0 List
…0 List
…0 Autodesk.Revit.DB.Line
…1 Autodesk.Revit.DB.Line
…2 Autodesk.Revit.DB.Line
…3 Autodesk.Revit.DB.Line

The problem I have is that I now want to extract the start and endpoint of the lines, but when I try to take one of the lines from the list I get an indexing error:

Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
Traceback (most recent call last):
File “”, line 40, in
TypeError: ‘CurveLoop’ object is unsubscriptable

Am I missing something? I think the problem is that the list is an Ilist, not a list, but I see no reason why I cannot extract items from it?


I believe you can’t directly index into a Curveloop, but what you can do is iterate over it with a for loop like this:
for curve in curveloop:

and then do with the lines whatever you want.

OK, thanks, I’ll try that.

What I don’t understand is why the CurveLoop appears like a list in a watch node:

Remove the [ ] from OUT = [crshape]