引言:在自動標註大主題下,自動標註軸網;利弊等望讀者自行改進(僅限平面視圖)
開始:
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace AutoDimention
{
[TransactionAttribute(TransactionMode.Manual)]
public class AutoDimentionGrid_Cmd : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
FilteredElementCollector collectorGrid = new FilteredElementCollector(doc);
collectorGrid.OfClass(typeof(Grid)).OfCategory(BuiltInCategory.OST_Grids);
IList<Element> listGrids = collectorGrid.ToElements().ToList();
List<Line> ListGridY = new List<Line>();
List<Line> ListGridX = new List<Line>();
Line lineGridX = null;
Line lineGridY = null;
XYZ Xvec = new XYZ(-1, 0, 0);//*-X單位向量
XYZ Xvec2 = new XYZ(1, 0, 0);//*X單位向量
XYZ Yvec = new XYZ(0, -1, 0);//*-Y單位向量
XYZ Yvec2 = new XYZ(0, 1, 0);//*Y單位向量
ReferenceArray refArryGridY = new ReferenceArray();
ReferenceArray refArryGridX = new ReferenceArray();
foreach (Element TemElement in listGrids)
{
Grid grid = TemElement as Grid;
Line line = grid.Curve as Line;
if (line.Direction.IsAlmostEqualTo(Yvec) || line.Direction.IsAlmostEqualTo(Yvec2))
{
ListGridY.Add(line);
refArryGridY.Append(new Reference(grid));
}
if (line.Direction.IsAlmostEqualTo(Xvec) || line.Direction.IsAlmostEqualTo(Xvec2))
{
ListGridX.Add(line);
refArryGridX.Append(new Reference(grid));
}
}
if (ListGridX.Count >= 2)
{
lineGridX = Line.CreateBound(ListGridX[0].Origin, ListGridX[1].Origin);
}
if (ListGridY.Count >= 2)
{
lineGridY = Line.CreateBound(ListGridY[0].Origin, ListGridY[1].Origin);
}
using (Transaction transaction = new Transaction(doc, "AutoDimenionGrid"))
{
try
{
transaction.Start();
doc.Create.NewDimension(doc.ActiveView, lineGridY, refArryGridY);
doc.Create.NewDimension(doc.ActiveView, lineGridX, refArryGridX);
transaction.Commit();
}
catch (Exception)
{
transaction.Commit();
}
}
return Result.Succeeded;
}
}
}
技術羣:1090519856