整理代码
This commit is contained in:
86
ShrlAlgoToolkit.RevitAddins/RvView/DimensionBy2LineCmd.cs
Normal file
86
ShrlAlgoToolkit.RevitAddins/RvView/DimensionBy2LineCmd.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.UI.Selection;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External;
|
||||
|
||||
|
||||
namespace ShrlAlgo.RvKits.RvView;
|
||||
|
||||
[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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user