89 lines
3.2 KiB
C#
89 lines
3.2 KiB
C#
using Autodesk.Revit.Attributes;
|
|
using Autodesk.Revit.DB;
|
|
using Autodesk.Revit.UI;
|
|
using Autodesk.Revit.UI.Selection;
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
using System;
|
|
|
|
|
|
namespace Szmedi.RvKits.DrawingTools
|
|
{
|
|
[Transaction(TransactionMode.Manual)]
|
|
|
|
public class DimensionPointLineCmd : ExternalCommand
|
|
{
|
|
public override void Execute()
|
|
{
|
|
using Transaction trans = new(Document, "点线标注");
|
|
try
|
|
{
|
|
while (true)
|
|
{
|
|
ElementReferenceType referenceType1 = ElementReferenceType.REFERENCE_TYPE_LINEAR;
|
|
ElementReferenceType referenceType2 = ElementReferenceType.REFERENCE_TYPE_NONE;
|
|
Reference refer = UiDocument.Selection.PickObject(
|
|
ObjectType.Edge,
|
|
new ReferenceSelectionFilter(referenceType1),
|
|
"请选择边"
|
|
);
|
|
Reference refer1 = UiDocument.Selection.PickObject(
|
|
ObjectType.PointOnElement,
|
|
new ReferenceSelectionFilter(referenceType2),
|
|
"请选择点"
|
|
);
|
|
Element e = UiDocument.Document.GetElement(refer);
|
|
|
|
var f = e.GetGeometryObjectFromReference(refer) as Edge;
|
|
var c1 = f.AsCurve();
|
|
var p1 = refer1.GlobalPoint;
|
|
c1.MakeUnbound();
|
|
var p2 = c1.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), p1);
|
|
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 ex)
|
|
{
|
|
if (ex.Message == "Invalid number of references.")
|
|
{
|
|
ErrorMessage = "选择的参考不可用于生成标注";
|
|
}
|
|
|
|
if (trans.GetStatus() == TransactionStatus.Started)
|
|
{
|
|
trans.Commit();
|
|
}
|
|
|
|
Result = Result.Failed;
|
|
}
|
|
}
|
|
}
|
|
}
|