2024-09-22 11:05:41 +08:00
|
|
|
|
using Autodesk.Revit.DB;
|
|
|
|
|
|
using Autodesk.Revit.UI.Selection;
|
|
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
|
|
|
2026-02-22 20:03:42 +08:00
|
|
|
|
using ShrlAlgoToolkit.RevitAddins.RvView;
|
|
|
|
|
|
using ShrlAlgoToolkit;
|
|
|
|
|
|
using ShrlAlgoToolkit.RevitAddins;
|
2025-02-10 20:53:40 +08:00
|
|
|
|
|
2026-02-22 20:03:42 +08:00
|
|
|
|
namespace ShrlAlgoToolkit.RevitAddins.DrawSheet;
|
2024-09-22 11:05:41 +08:00
|
|
|
|
|
|
|
|
|
|
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
|
|
|
|
|
|
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
|
|
|
|
|
public class DimensionBy2LineCmd : ExternalCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
public override void Execute()
|
|
|
|
|
|
{
|
|
|
|
|
|
#region RepeatExecute
|
|
|
|
|
|
|
|
|
|
|
|
using Transaction trans = new(Document, "标注");
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
while (true)
|
|
|
|
|
|
{
|
|
|
|
|
|
var referenceType1 = ElementReferenceType.REFERENCE_TYPE_LINEAR;
|
|
|
|
|
|
var refer = UiDocument.Selection.PickObject(
|
|
|
|
|
|
ObjectType.Edge,
|
|
|
|
|
|
new FuncFilter(_ => true, (reference, _) => referenceType1 == reference.ElementReferenceType),
|
|
|
|
|
|
"请选择第一条边"
|
|
|
|
|
|
);
|
|
|
|
|
|
var refer1 = UiDocument.Selection.PickObject(
|
|
|
|
|
|
ObjectType.Edge,
|
|
|
|
|
|
new FuncFilter(_ => true, (reference, _) => referenceType1 == reference.ElementReferenceType),
|
|
|
|
|
|
"请选择第二条边"
|
|
|
|
|
|
);
|
|
|
|
|
|
var e = UiDocument.Document.GetElement(refer);
|
|
|
|
|
|
var e1 = UiDocument.Document.GetElement(refer1);
|
|
|
|
|
|
|
|
|
|
|
|
var f = e.GetGeometryObjectFromReference(refer) as Edge;
|
|
|
|
|
|
var f1 = e1.GetGeometryObjectFromReference(refer1) as Edge;
|
|
|
|
|
|
var c1 = f.AsCurve();
|
|
|
|
|
|
var c2 = f1.AsCurve();
|
|
|
|
|
|
var p1 = c1.GetEndPoint(0);
|
|
|
|
|
|
c2.MakeUnbound();
|
|
|
|
|
|
var p2 = c2.Project(p1).XYZPoint;
|
|
|
|
|
|
var l = Line.CreateBound(p1, p2);
|
|
|
|
|
|
ReferenceArray array = new();
|
|
|
|
|
|
|
|
|
|
|
|
array.Append(refer);
|
|
|
|
|
|
array.Append(refer1);
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
trans.Start();
|
|
|
|
|
|
Document.Create.NewDimension(Document.ActiveView, l, array);
|
|
|
|
|
|
trans.Commit();
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Autodesk.Revit.Exceptions.InvalidOperationException)
|
|
|
|
|
|
{
|
|
|
|
|
|
var plane = Plane.CreateByThreePoints(f.AsCurve().GetEndPoint(0), f.AsCurve().GetEndPoint(1), f1.AsCurve().GetEndPoint(0));
|
|
|
|
|
|
var originSketch = Document.ActiveView.SketchPlane;
|
|
|
|
|
|
Document.ActiveView.SketchPlane = SketchPlane.Create(Document, plane);
|
|
|
|
|
|
Document.Create.NewDimension(Document.ActiveView, l, array);
|
|
|
|
|
|
Document.ActiveView.SketchPlane = originSketch;
|
|
|
|
|
|
trans.Commit();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (trans.GetStatus() == TransactionStatus.Started)
|
|
|
|
|
|
{
|
|
|
|
|
|
trans.Commit();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception)
|
|
|
|
|
|
{
|
|
|
|
|
|
//message = ex.InnerException.ToString();
|
|
|
|
|
|
if (trans.GetStatus() == TransactionStatus.Started)
|
|
|
|
|
|
{
|
|
|
|
|
|
trans.Commit();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion RepeatExecute
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|