Files
ShrlAlgoToolkit/ShrlAlgoToolkit.RevitAddins/Mep/ForceConnectCmd.cs

123 lines
3.2 KiB
C#
Raw Normal View History

2024-09-22 11:05:41 +08:00
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Plumbing;
using Nice3point.Revit.Toolkit.External;
2026-02-22 20:03:42 +08:00
using ShrlAlgoToolkit.RevitAddins.RvMEP;
using ShrlAlgoToolkit;
using ShrlAlgoToolkit.RevitAddins;
2026-02-22 20:03:42 +08:00
namespace ShrlAlgoToolkit.RevitAddins.Mep;
2024-09-22 11:05:41 +08:00
[Transaction(TransactionMode.Manual)]
public class ForceConnectCmd : ExternalCommand
{
public override void Execute()
{
using Transaction trans = new(Document, "强制连接系统");
try
{
while (true)
{
var pipeList = UiDocument.Selection.PickElementsByRectangle(new GenericFilter<Pipe>()).Cast<Pipe>().ToList();
try
{
trans.Start();
if (pipeList.Count == 2)
{
var pipe1 = pipeList[0];
var pipe2 = pipeList[1];
var l1 = (pipe1.Location as LocationCurve)?.Curve as Line;
var l2 = (pipe2.Location as LocationCurve)?.Curve as Line;
var l3 = l2.Clone();
var p1 = l1.Origin;
var projectPoint = l2.Project(p1).XYZPoint;
var collection1 = pipe1.ConnectorManager.UnusedConnectors;
var collection2 = pipe2.ConnectorManager.UnusedConnectors;
var di = double.MaxValue;
var conns = new List<Connector>();
foreach (Connector connector in collection1)
{
foreach (Connector connector1 in collection2)
{
var temp = connector.Origin.DistanceTo(connector1.Origin);
if (temp < di)
{
conns.Clear();
di = temp;
conns.Add(connector);
conns.Add(connector1);
}
}
}
Document.Create.NewElbowFitting(conns[0], conns[1]);
//conns[0].ConnectTo(conns[1]);
//var comparisonResult= l1.Intersect(l3, out var result);
// if (comparisonResult == SetComparisonResult.Overlap)
// {
// var p = result.get_Item(0).XYZPoint;
// }
}
if (pipeList.Count == 3)
{
var pipe1 = pipeList[0];
var pipe2 = pipeList[1];
var pipe3 = pipeList[2];
var l1 = (pipe1.Location as LocationCurve).Curve as Line;
var l2 = (pipe2.Location as LocationCurve).Curve as Line;
var l3 = (pipe3.Location as LocationCurve).Curve as Line;
if (l1.Direction.IsAlmostEqualTo(l2.Direction))
{
var collection1 = pipe1.ConnectorManager.UnusedConnectors;
var collection2 = pipe2.ConnectorManager.UnusedConnectors;
foreach (Connector connector in collection1)
{
foreach (Connector connector1 in collection2)
{
//var temp = connector.Origin.DistanceTo(connector1.Origin);
//if (temp < di)
//{
// conns.Clear();
// di = temp;
// conns.Add(connector);
// conns.Add(connector1);
//}
}
}
//doc.Create.NewTeeFitting();
}
}
trans.Commit();
}
catch (Exception)
{
trans.Commit();
return;
}
}
}
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
{
if (trans.GetStatus() == TransactionStatus.Started)
{
trans.Commit();
}
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
if (trans.GetStatus() == TransactionStatus.Started)
{
trans.Commit();
}
return;
}
}
}