118 lines
5.5 KiB
C#
118 lines
5.5 KiB
C#
using Autodesk.Revit.DB;
|
|
using Autodesk.Revit.UI;
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
using System;
|
|
|
|
using System.Linq;
|
|
|
|
namespace Szmedi.RvKits.DrawingTools;
|
|
|
|
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
|
|
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
|
public class SplitDimensionsCmd : ExternalCommand
|
|
{
|
|
public override void Execute()
|
|
{
|
|
SplitExecute(UiDocument);
|
|
}
|
|
|
|
public void SplitExecute(UIDocument uidoc)
|
|
{
|
|
var doc = uidoc.Document;
|
|
try
|
|
{
|
|
List<Dimension> list = uidoc.Selection
|
|
.PickElementsByRectangle(new GenericFilter<Dimension>(), "框选尺寸标注")
|
|
.OfType<Dimension>()
|
|
.ToList();
|
|
bool flag = !list.Any();
|
|
if (!flag)
|
|
{
|
|
doc.InvokeGroup(
|
|
transactionGroup =>
|
|
{
|
|
foreach (Dimension dimension in list)
|
|
{
|
|
try
|
|
{
|
|
Line line = dimension.Curve as Line;
|
|
if (line != null)
|
|
{
|
|
doc.Invoke(ts =>
|
|
{
|
|
for (int i = 0; i < dimension.NumberOfSegments; i++)
|
|
{
|
|
DimensionSegment dimensionSegment = dimension.Segments.get_Item(i);
|
|
Reference reference = dimension.References.get_Item(i);
|
|
if (reference.ElementId != ElementId.InvalidElementId)
|
|
{
|
|
if (doc.GetElement(reference.ElementId) is Grid grid)
|
|
{
|
|
reference = new Reference(grid);
|
|
}
|
|
}
|
|
|
|
if (reference.ElementId != ElementId.InvalidElementId)
|
|
{
|
|
if (doc.GetElement(reference.ElementId) is Level level)
|
|
{
|
|
reference = new Reference(level);
|
|
}
|
|
}
|
|
|
|
Reference reference2 = dimension.References.get_Item(i + 1);
|
|
if (reference2.ElementId != ElementId.InvalidElementId)
|
|
{
|
|
if (doc.GetElement(reference2.ElementId) is Grid grid2)
|
|
{
|
|
reference2 = new Reference(grid2);
|
|
}
|
|
}
|
|
|
|
if (reference2.ElementId != ElementId.InvalidElementId)
|
|
{
|
|
if (doc.GetElement(reference2.ElementId) is Level level2)
|
|
{
|
|
reference2 = new Reference(level2);
|
|
}
|
|
}
|
|
|
|
ReferenceArray referenceArray = new();
|
|
referenceArray.Append(reference);
|
|
referenceArray.Append(reference2);
|
|
Dimension dimension2 = doc.Create.NewDimension(
|
|
dimension.View,
|
|
line,
|
|
referenceArray,
|
|
dimension.DimensionType
|
|
);
|
|
if (dimension2 != null)
|
|
{
|
|
dimension2.Prefix = dimensionSegment.Prefix;
|
|
dimension2.Suffix = dimensionSegment.Suffix;
|
|
dimension2.Above = dimensionSegment.Above;
|
|
dimension2.Below = dimensionSegment.Below;
|
|
dimension2.TextPosition = dimensionSegment.TextPosition;
|
|
}
|
|
}
|
|
|
|
doc.Delete(dimension.Id);
|
|
});
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// ignored
|
|
}
|
|
}
|
|
},
|
|
"拆分尺寸标注"
|
|
);
|
|
}
|
|
}
|
|
catch (Autodesk.Revit.Exceptions.OperationCanceledException) { }
|
|
}
|
|
}
|