添加项目文件。
This commit is contained in:
80
Szmedi.RvKits/MEPTools/BreakMEPCurveCmd.cs
Normal file
80
Szmedi.RvKits/MEPTools/BreakMEPCurveCmd.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
|
||||
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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user