Untitled
unknown
plain_text
2 months ago
2.3 kB
11
Indexable
// 1. Разрезать стояк в точке вставки
var splitId = Autodesk.Revit.DB.Plumbing.PlumbingUtils.BreakCurve(doc, pipe.Id, insertPt);
doc.Regenerate();
var lower = pipe; // исходная = нижняя половина
var upper = doc.GetElement(splitId) as Autodesk.Revit.DB.Plumbing.Pipe;
// 2. Укоротить обе половины на fittingHalf = длина муфты / 2
double fittingHalfFt = fittingLengthMm / 2.0 / 304.8;
var lowerLC = lower.Location as LocationCurve;
var upperLC = upper.Location as LocationCurve;
var lowerEnd = lowerLC.Curve.GetEndPoint(1);
var upperStart = upperLC.Curve.GetEndPoint(0);
lowerLC.Curve = Line.CreateBound(lowerLC.Curve.GetEndPoint(0),
lowerEnd - XYZ.BasisZ * fittingHalfFt);
upperLC.Curve = Line.CreateBound(upperStart + XYZ.BasisZ * fittingHalfFt,
upperLC.Curve.GetEndPoint(1));
// 3. Активировать символ и ПОСТАВИТЬ с level (4-arg overload, БЕЗ host-pipe)
if (!symbol.IsActive) symbol.Activate();
var level = doc.GetElement(pipe.LevelId) as Level;
var fi = doc.Create.NewFamilyInstance(
insertPt, symbol, level,
Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
// 4. Повернуть в вертикаль (КЛЮЧЕВОЙ шаг — без level шаг 4 silently ignored)
ElementTransformUtils.RotateElement(doc, fi.Id,
Line.CreateBound(insertPt, insertPt + XYZ.BasisY), -Math.PI/2);
// 5. Соединить коннекторы муфты с коннекторами половинок
Connector cFitBot = null, cFitTop = null;
foreach (Connector c in fi.MEPModel.ConnectorManager.Connectors) {
if (c.ConnectorType != ConnectorType.End) continue;
if (cFitBot == null || c.Origin.Z < cFitBot.Origin.Z) cFitBot = cFitBot == null ? c : cFitBot;
if (c.Origin.Z < (cFitBot?.Origin.Z ?? double.MaxValue)) cFitBot = c;
if (cFitTop == null || c.Origin.Z > cFitTop.Origin.Z) cFitTop = c;
}
Connector cLow = FindEndAt(lower, lowerLC.Curve.GetEndPoint(1));
Connector cUpp = FindEndAt(upper, upperLC.Curve.GetEndPoint(0));
cLow.ConnectTo(cFitBot);
cFitTop.ConnectTo(cUpp);Editor is loading...
Leave a Comment