91 lines
3.4 KiB
C#
91 lines
3.4 KiB
C#
using Autodesk.Revit.DB;
|
|
using Autodesk.Revit.UI.Selection;
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
using System;
|
|
|
|
|
|
namespace Szmedi.RvKits.DrawingTools
|
|
{
|
|
[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)
|
|
{
|
|
ElementReferenceType referenceType1 = ElementReferenceType.REFERENCE_TYPE_LINEAR;
|
|
Reference refer = UiDocument.Selection.PickObject(
|
|
ObjectType.Edge,
|
|
new ReferenceSelectionFilter(referenceType1),
|
|
"请选择第一条边"
|
|
);
|
|
Reference refer1 = UiDocument.Selection.PickObject(
|
|
ObjectType.Edge,
|
|
new ReferenceSelectionFilter(referenceType1),
|
|
"请选择第二条边"
|
|
);
|
|
Element e = UiDocument.Document.GetElement(refer);
|
|
Element 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;
|
|
Line 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();
|
|
}
|
|
}
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
|
|
#endregion RepeatExecute
|
|
}
|
|
}
|
|
}
|