UI Selection - PickBoxStyle not defined

Hi All,

Ive got a small headscratcher here with using the PickBox() selection method in the Revit API.
For some reason the PickBoxStyle is not recognised.
Have I missed loading a reference or is this something else?

Revit 2018
Dynamo 1.3.2

image

import clr

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference)'RevitAPI')
from Autodesk.Revit.DB.Events import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

pickedBox = uidoc.Selection.PickBox(PickBoxStyle.Enclosing, "Select a box")

OUT=pickedBox

@Kulkul?
@Mostafa_El_Ayoubi?

Got it, had to be a bit more specific when creating the PickBoxStyle. :man_facepalming:

import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

pboxS=Autodesk.Revit.UI.Selection.PickBoxStyle.Enclosing

pickedBox = uidoc.Selection.PickBox(pboxS, "Select a box")

OUT=pickedBox
4 Likes

Hi @Ewan_Opie ,
Thanks for this code ! I am currently working on something similar and I would like to convert user pickedbox to points, curves, …etc in order to place a schedule according to user selection in sheets.

Do you think it is possible to create a list of curves or points out of the user selected area ?
I’ve tried using your code with the dynamo nodes (element location, curves, BBox, …etc.) but it doesn’t give anything.

Thanks in advance

Hi @a.halim

There are other pick-point examples on the forum for individual points.

Have a look at this for a starting point with pickbox rectangles :wink:

D2_Pickbox to Curves.dyn (42.7 KB)

1 Like

@Ewan_Opie , this is just perfect :smiley:
Thank you so much !!

Hi again @Ewan_Opie ,
the script works perfectly for selecting a region from any view. Even with sheets, which is great.

However, I tried to use the rectangle center-point to place a schedule view, but it is being placed very far from the selected region.
What do you think is the reason ?
Thanks

Could be a Revit XYZ converstion issue.
Try using this code in a python block.
It requires list inputs.

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import ToDSType(bool) extension method
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.Elements)
# Import geometry conversion extension methods
clr.ImportExtensions(Revit.GeometryConversion)
# Import DocumentManager and TransactionManager
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
# Import RevitAPI
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

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

sheets = []
for i in IN[0]:
	sheets.append(UnwrapElement(i))
views=[]	
for i in IN[1]:
	views.append(UnwrapElement(i))
points=[]	
for i in IN[2]:
	points.append(UnwrapElement(i).ToXyz())

# Start Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
viewp=[]
#for s in sheets:
#	for v,p in zip(views,points):
#		a=Viewport.Create(doc, s.Id,v.Id, p)
#		viewp.append(a)
cnt = 0		
for cnt in range(len(sheets)):  
    a=Viewport.Create(doc, sheets[cnt].Id,views[cnt].Id, points[cnt])
    viewp.append(a)

# End Transaction
TransactionManager.Instance.TransactionTaskDone()

OUT=viewp