80 lines
2.8 KiB
C#
80 lines
2.8 KiB
C#
|
|
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
using System.Windows;
|
|||
|
|
|
|||
|
|
|
|||
|
|
namespace Szmedi.RvKits.MEPTools;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Revit执行命令
|
|||
|
|
/// </summary>
|
|||
|
|
[Transaction(TransactionMode.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;
|
|||
|
|
var loc = mepCurve.GetLocCurve() as Line;
|
|||
|
|
var d = loc.Direction;
|
|||
|
|
var halfGap = 10 / 304.8;
|
|||
|
|
var point1 = pointPicked - d * halfGap;
|
|||
|
|
var point2 = pointPicked + d * halfGap;
|
|||
|
|
|
|||
|
|
var breakPoint1 = mepCurve.GetLocCurve().Project(point1).XYZPoint;
|
|||
|
|
var breakPoint2 = mepCurve.GetLocCurve().Project(point2).XYZPoint;
|
|||
|
|
|
|||
|
|
//var direction = breakPoint2 - breakPoint1;
|
|||
|
|
//var flag = direction.Normalize().IsAlmostEqualTo(loc.Direction);
|
|||
|
|
if (!loc.IsInsideEx(breakPoint1, halfGap) || !loc.IsInsideEx(breakPoint2, halfGap))
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("打断点距离管线端点太近");
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
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);
|
|||
|
|
// doc.Delete(third);
|
|||
|
|
//}
|
|||
|
|
//else
|
|||
|
|
//{
|
|||
|
|
// var second = mepCurve.BreakByPoint(breakPoint2);
|
|||
|
|
// //var mepCurve2 = doc.GetElement(second) as MEPCurve;
|
|||
|
|
// var third = mepCurve.BreakByPoint(breakPoint1);
|
|||
|
|
// doc.Delete(third);
|
|||
|
|
|
|||
|
|
//}
|
|||
|
|
},
|
|||
|
|
"打断管线");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|