Hi @Anonymous,
Riiiiiiiight. You need to add a union fitting. That's not a duct; it's a duct fitting, and a familyInstance.
All else fails, describe the elements using the Revit descriptions, or the RevitLookup (API) names. That way it's obvious. 🙂
I originally used two transactions, but it appears a regen will do the trick:
<Transaction(TransactionMode.Manual)> _
<Regeneration(RegenerationOption.Manual)> _
<Journaling(JournalingMode.UsingCommandData)> _
Public Class TransactionCommand
Implements UI.IExternalCommand
Public Function Execute(ByVal commandData As UI.ExternalCommandData, ByRef message As String, ByVal elements As DB.ElementSet) As UI.Result Implements UI.IExternalCommand.Execute
Dim app As ApplicationServices.Application = commandData.Application.Application
Dim doc As DB.Document = commandData.Application.ActiveUIDocument.Document
Dim docUi As UI.UIDocument = commandData.Application.ActiveUIDocument
Execute = UI.Result.Failed
Dim newDuctId As DB.ElementId = Nothing
Dim ductOrig As DB.Mechanical.Duct = Nothing
Dim duct2 As DB.Mechanical.Duct = Nothing
Dim breakPt As DB.XYZ = Nothing
Using transaction As New DB.Transaction(doc, "Break Duct + Add Fitting")
transaction.Start()
ductOrig = TryCast(doc.GetElement(New DB.ElementId(1789660)), DB.Mechanical.Duct)
Dim curve As DB.Curve = TryCast(ductOrig.Location, DB.LocationCurve).Curve
Dim pt0 As DB.XYZ = curve.GetEndPoint(0)
Dim pt1 As DB.XYZ = curve.GetEndPoint(1)
Dim vector As DB.XYZ = pt1.Subtract(pt0).Normalize
breakPt = pt0.Add(vector.Multiply(2.0))
newDuctId = DB.Mechanical.MechanicalUtils.BreakCurve(doc, ductOrig.Id, breakPt)
duct2 = TryCast(doc.GetElement(newDuctId), DB.Mechanical.Duct)
doc.Regenerate()
Dim connectorOrig As DB.Connector = ductOrig.ConnectorManager.Lookup(0)
Dim connector1 As DB.Connector = duct2.ConnectorManager.Lookup(1)
Dim familySymbol As DB.FamilySymbol = TryCast(doc.GetElement(New DB.ElementId(755396)), DB.FamilySymbol)
Dim famInstance As DB.FamilyInstance = doc.Create.NewFamilyInstance(breakPt, familySymbol, DB.Structure.StructuralType.NonStructural)
Dim fitting As DB.MEPModel = famInstance.MEPModel
Dim fittingConnector0 As DB.Connector = fitting.ConnectorManager.Lookup(0)
Dim fittingConnector1 As DB.Connector = fitting.ConnectorManager.Lookup(1)
connectorOrig.ConnectTo(fittingConnector1)
connector1.ConnectTo(fittingConnector0)
transaction.Commit()
' change our result to successful
Return UI.Result.Succeeded
End Using
Return Execute
End Function
End Class
Cheers,
-Matt
_______________________________________________________________________________
Marking a post as a 'solution' helps the community. Giving a post 'Kudos' is as good as saying thanks. Why not do both?