Revit二次开发之轴网标注
using System;
using System.Collections.Generic;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
namespace 标注轴网
{
[Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
public class Command:IExternalCommand
{
public XYZ vectX = new XYZ(-1, 0, 0);
public XYZ vectX2 = new XYZ(1, 0, 0);
public XYZ vectY = new XYZ(0, 1, 0);
public XYZ vectY2 = new XYZ(0, -1, 0);
public Result Execute(ExternalCommandData externalCommandData,ref string message,ElementSet elementSet)
{
UIDocument uidoc = externalCommandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
Selection selection = uidoc.Selection;
View view = uidoc.ActiveView;
List<Grid> gridsX = new List<Grid>();
List<Grid> gridsY = new List<Grid>();
ReferenceArray reffX=new ReferenceArray();
ReferenceArray reffY=new ReferenceArray();
Line xLine = null;
Line yLine = null;
FilteredElementCollector coll = new FilteredElementCollector(doc);
coll.OfClass(typeof(Grid)).OfCategory(BuiltInCategory.OST_Grids);
foreach(Grid gr in coll)
{
Grid temp = gr as Grid;
Line line = temp.Curve as Line;
if(line.Direction.IsAlmostEqualTo(vectX)||line.Direction.IsAlmostEqualTo(vectX2))
{
gridsX.Add(temp);
reffX.Append(new Reference(temp));
}
if(line.Direction.IsAlmostEqualTo(vectY)|| line.Direction.IsAlmostEqualTo(vectY2))
{
gridsY.Add(temp);
reffY.Append(new Reference(temp));
}
}
if(gridsX.Count>=2)
{
xLine = Line.CreateBound((gridsX[0].Curve as Line).Origin, (gridsX[1].Curve as Line).Origin);
}
if(gridsY.Count>=2)
{
yLine = Line.CreateBound((gridsY[0].Curve as Line).Origin, (gridsY[1].Curve as Line).Origin);
}
using (Transaction ts = new Transaction(doc))
{
ts.Start("dimension");
try
{
doc.Create.NewDimension(view, xLine, reffX);
doc.Create.NewDimension(view, yLine, reffY);
}
catch(Exception)
{
}
ts.Commit();
}
return Result.Succeeded;
}
}
}
点击我查看效果
参考资料