Hello @arukaroor and welcome
Please read the forum rules if you haven’t.
I’m not sure if there are custom nodes can do this, I know you are a beginner but you can do it with Python if you have some programming knowledge.
unfortunately the Fabrication Part is not the easiest part of the Revit API
here an example
Python code
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Fabrication import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
def getConnectors(elem):
lstCon = []
conectors = elem.ConnectorManager.Connectors
lstCon = [con for con in conectors]
return lstCon[0], lstCon[1]
def getServiceButton(lstServiceFab, famName):
for servicFab in lstServiceFab:
countGroup = servicFab.GroupCount
for x in range(countGroup):
countButton = servicFab.GetButtonCount(x)
for y in range(countButton):
fabServiceButton = servicFab.GetButton(x,y)
if fabServiceButton.Name == famName:
return fabServiceButton
fabPart = UnwrapElement(IN[0])
lstPoints = IN[1]
famName = IN[2]
outHanger = []
error = []
fabConf = FilteredElementCollector(doc).OfClass(FabricationConfiguration).FirstElement()
lstServ = fabConf.GetAllLoadedServices()
button = getServiceButton(lstServ, famName)
if button is not None:
TransactionManager.Instance.EnsureInTransaction(doc)
for pts in lstPoints:
#convert dynamoPt to RevitPt
rvtPt = pts.ToXyz()
curveFabPart = fabPart.Location.Curve
conectA, conectB = getConnectors(fabPart)
interResult = curveFabPart.Project(rvtPt)
if interResult.Distance < 0.05 :
distaceA = rvtPt.DistanceTo(conectA.Origin)
distaceB = rvtPt.DistanceTo(conectB.Origin)
try:
newhanger = FabricationPart.CreateHanger(doc, button, fabPart.Id, conectA, distaceA, True)
outHanger.append(newhanger)
except:
try:
newhanger = FabricationPart.CreateHanger(doc, button, fabPart.Id, conectB, distaceB, True)
outHanger.append(newhanger)
except Exception as ex:
error.append([ex, distaceA, distaceB])
TransactionManager.Instance.TransactionTaskDone()
else:
error = "ERROR, No hanger has been loaded with this name : '{}'".format(famName)
OUT = fabConf, button, outHanger, error
the api doc