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;
|
|
|
|
|
|
|
2025-02-10 20:53:40 +08:00
|
|
|
|
|
2025-04-24 20:56:44 +08:00
|
|
|
|
namespace ShrlAlgoToolkit.RevitAddins.RvMEP;
|
2024-09-22 11:05:41 +08:00
|
|
|
|
|
|
|
|
|
|
[Transaction(TransactionMode.Manual)]
|
|
|
|
|
|
[Regeneration(RegenerationOption.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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|