2024-09-22 11:05:41 +08:00
|
|
|
|
using System.Windows;
|
|
|
|
|
|
|
|
|
|
|
|
using Autodesk.Revit.Attributes;
|
|
|
|
|
|
using Autodesk.Revit.DB;
|
|
|
|
|
|
using Autodesk.Revit.DB.Mechanical;
|
|
|
|
|
|
using Autodesk.Revit.DB.Plumbing;
|
|
|
|
|
|
using Autodesk.Revit.UI.Selection;
|
|
|
|
|
|
|
|
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace Sai.RvKits.RvMEP;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Revit执行命令
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Transaction(TransactionMode.Manual)]
|
|
|
|
|
|
[Regeneration(RegenerationOption.Manual)]
|
|
|
|
|
|
public class BreakMEPCurveCmd : ExternalCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
public override void Execute()
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
while (true)
|
|
|
|
|
|
{
|
|
|
|
|
|
var filter1 = new FuncFilter(
|
|
|
|
|
|
e => e is MEPCurve and not InsulationLiningBase and not FlexDuct and not FlexPipe);
|
|
|
|
|
|
var refer1 = UiDocument.Selection.PickObject(
|
|
|
|
|
|
ObjectType.PointOnElement, filter1
|
|
|
|
|
|
, "拾取打断管线的位置");
|
|
|
|
|
|
var pointPicked = refer1.GlobalPoint;
|
|
|
|
|
|
|
|
|
|
|
|
var mepCurve = UiDocument.Document.GetElement(refer1) as MEPCurve;
|
2024-12-22 10:26:12 +08:00
|
|
|
|
var loc = mepCurve.GetCurve() as Line;
|
2024-09-22 11:05:41 +08:00
|
|
|
|
var d = loc.Direction;
|
|
|
|
|
|
var halfGap = 20 / 304.8;
|
|
|
|
|
|
var point1 = pointPicked - d * halfGap;
|
|
|
|
|
|
var point2 = pointPicked + d * halfGap;
|
|
|
|
|
|
|
2024-12-22 10:26:12 +08:00
|
|
|
|
var breakPoint1 = mepCurve.GetCurve().Project(point1).XYZPoint;
|
|
|
|
|
|
var breakPoint2 = mepCurve.GetCurve().Project(point2).XYZPoint;
|
2024-09-22 11:05:41 +08:00
|
|
|
|
if (!loc.IsInsideEx(breakPoint1, halfGap) || !loc.IsInsideEx(breakPoint2, halfGap))
|
|
|
|
|
|
{
|
|
|
|
|
|
MessageBox.Show("打断点距离管线端点太近");
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
//var direction = breakPoint2 - breakPoint1;
|
|
|
|
|
|
//var flag = direction.Normalize().IsAlmostEqualTo(loc.Direction);
|
|
|
|
|
|
|
|
|
|
|
|
Document.Invoke(_ =>
|
|
|
|
|
|
{
|
|
|
|
|
|
var second = mepCurve.BreakByPoint(breakPoint1);
|
|
|
|
|
|
var third = mepCurve.BreakByPoint(breakPoint2);
|
|
|
|
|
|
Document.Delete(third);
|
|
|
|
|
|
|
|
|
|
|
|
//if (flag)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// var second = mepCurve.BreakByPoint(breakPoint1);
|
|
|
|
|
|
// var third = mepCurve.BreakByPoint(breakPoint2);
|
|
|
|
|
|
// Document.Delete(third);
|
|
|
|
|
|
//}
|
|
|
|
|
|
//else
|
|
|
|
|
|
//{
|
|
|
|
|
|
// var second = mepCurve.BreakByPoint(breakPoint2);
|
2024-10-27 00:19:48 +08:00
|
|
|
|
// //var mepCurve2 = Document.GetElement(second) as ElementToMove;
|
2024-09-22 11:05:41 +08:00
|
|
|
|
// var third = mepCurve.BreakByPoint(breakPoint1);
|
|
|
|
|
|
// Document.Delete(third);
|
|
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
}, "打断管线");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|