Fabrication servicebutton

I created a function to get all the button names. Unfortunately not getting the first button name. Not sure what is the exact reason.


# Load the Python Standard and DesignScript Libraries
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

fp = UnwrapElement(IN[0])

# Place your code below this line
config = FabricationConfiguration.GetFabricationConfiguration(doc)

#get all the loaded services
allservices = config.GetAllServices()
m_services = config.GetAllLoadedServices()
itemfiles = config.GetAllLoadedItemFiles()
useditemfiles = config.GetAllUsedItemFiles()
fabservicebutton = FabricationServiceButton
groupindex = fabservicebutton.GroupIndex 
isstright = fabservicebutton.IsStraight 
m_services = config.GetAllLoadedServices()
servicenames = []
for i in m_services:
	name = i.Name
	servicenames.append(name)
connectors = fp.ConnectorManager.UnusedConnectors
connectorList = [conn for conn in connectors]
connctorshape = []
for i in connectors:
	shape = i.Shape
	connctorshape.append(shape)
groupid = 0#fp.GroupId.IntegerValue
service = m_services[0]
groupcount = service.GroupCount
buttoncount = service.GetButtonCount(0)

def locateButton (service , groupid , name):
	if service != None and groupid >= 0 and  groupid < groupcount :
		buttoncount = service.GetButtonCount(groupid)
		buttonnames = []
		count = 1
		while count < buttoncount :
			bt = service.GetButton(groupid, count)
			if bt != None and bt.Name == name:
				button = bt
			else:
				button = None			
			count = count + 1
			buttonnames.append(bt.Name)		
	else:
		comment = "null"
	return buttonnames

# Assign your output to the OUT variable.
OUT = locateButton(m_services[0], 0 , "Offset")

First index in lists in Python is 0. Probably initializing count = 0 in stead of count = 1 will do the trick.

1 Like