import clr
import sys
sys.path.append(âC:\Program Files (x86)\IronPython 2.7\Libâ)
import System
from System import Array
from System.Collections.Generic import *
clr.AddReference(âProtoGeometryâ)
from Autodesk.DesignScript.Geometry import *
clr.AddReference(âRevitNodesâ)
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference(âRevitServicesâ)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference(âRevitAPIâ)
clr.AddReference(âRevitAPIUIâ)
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = uiapp.ActiveUIDocument
def tolist(obj1):
if hasattr(obj1,âiterâ): return obj1
else: return [obj1]
#Preparing input from dynamo to revit
element = UnwrapElement(IN[0])
#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
sheets = FilteredElementCollector(doc).OfClass(ViewSheet).ToElements()
views = FilteredElementCollector(doc).OfClass(ViewPlan).WhereElementIsNotElementType().ToElements()
floorpln =
for view in views:
if view.ViewType == ViewType.FloorPlan:
floorpln.append(view)
sheetwidth = (1000/2)/304.8
sheetheight = (1100/2)/304.8
center = XYZ(sheetwidth , sheetheight , 0)
ââ"
for sheet , view in zip(sheets , floorpln):
Viewport.Create(doc , sheet.Id , view.Id , center)ââ"
for sheet in sheets:
sheet_name = sheet.Name
if sheet_name == (âPlumbing Detailsâ):
mysht = sheet
for view in floorpln :
view_name = view.Name
if view_name == (âGROUND FLOORâ):
myvw = view
#np = Viewport.Create(doc , mysht.Id , myvw.Id , center)
Method for indexing python list selected views
view_names = [âGROUND FLOORâ , âFIRST FLOORâ ,âSECOND FLOORâ]
selected_views = [view for view in floorpln if view.Name in view_names]
#Getting the structural sheets from sheets
sheet_names = [âSecond Floor Structural Planâ , âFirst Floor Structural Planâ , âGround Floor Structural Planâ]
selected_sheets = [sheet for sheet in sheets if sheet.Name in sheet_names]
#for sheet , view in zip(selected_sheets , selected_views):
np = Viewport.Create(doc , sheet.Id , view.Id , center)
result =
ââ"
for sheet , view in zip(selected_sheets , selected_views):
if sheetname == âSecond Floor Structural Planâ:
viewname == âSecond Floorâ
if sheetname == âFirst Floor Structural Planâ:
viewname == âFIRST FLOORâ
if sheetname == âGround Floor Structural Planâ:
viewname == âGROUND FLOORâ
newvp=Viewport.Create(doc, sheet.Id, view.Id, XYZ(1.75 , 1.1 , 0))
result.append(newvp) ââ"
name_map = {
âRoof Floor Structural Planâ: âROOF FLOORâ,
âSecond Floor Structural Planâ: âSecond Floorâ,
âFirst Floor Structural Planâ: âFIRST FLOORâ,
âGround Floor Structural Planâ: âGROUND FLOORâ
}
ââ"
for view in selected_views:
view_name = view.Name
sheet_name = name_map.get(view_name) # Use map to get the corresponding view name
if sheet_name:
# Find the view that matches view_name
sheetnew = next((sheet for sheet in selected_sheets if sheet.Name == sheet_name), None)
if sheet:
# Create a viewport on the sheet with this view at âcenterâ position
new_vp = Viewport.Create(doc, view.Id, sheet.Id, XYZ(center))
result.append(new_vp)ââ"
this is all i have tried but its not working , i want to automate it in python itself i dont want to take any input from dynamo nodes