1、创建一个.NET Frame work
2、创建新项目
3、老样子先添加引用
4、外部命令实现接口
按照国际惯例增删改需要创建事务
using (Transaction transaction = new Transaction(document, "标注轴网"))
{
transaction.Start();
transaction.Commit();
}
5、看看创建都需要什么
6、先过滤轴网
//过滤器获取轴网
FilteredElementCollector collectorGrid = new FilteredElementCollector(document);
collectorGrid.OfClass(typeof(Grid));
List<Element> listGrids = collectorGrid.OfCategory(BuiltInCategory.OST_Grids).ToElements().ToList();
7、获得一个活跃的视图
View view = document.ActiveView;
8、遍历轴网,再通过x,y单位向量分别获取x轴、y轴的ListGridX、refArrayGridX
代码如下:
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace revit_OnkeyDimensioning
{
[TransactionAttribute(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//ui应用
UIApplication uiApp = commandData.Application;
//应用
Application application = uiApp.Application;
//文档
UIDocument uIDocument = uiApp.ActiveUIDocument;
//文件
Document document = uIDocument.Document;
FilteredElementCollector collectorGrid = new FilteredElementCollector(document);
collectorGrid.OfClass(typeof(Grid));
List<Element> listGrids = collectorGrid.OfCategory(BuiltInCategory.OST_Grids).ToElements().ToList();
List<Line> ListGridY = new List<Line>();
List<Line> ListGridX = new List<Line>();
ReferenceArray refArrayGridY = new ReferenceArray();
ReferenceArray refArrayGridX = new ReferenceArray();
//遍历所有的 轴网
foreach (Element item in listGrids)
{
Grid grid = item as Grid;
Line line = grid.Curve as Line;
XYZ Xvector = new XYZ(-1, 0, 0); //-X向量
XYZ Xvector2 = new XYZ(1, 0, 0); //X向量
XYZ Yvector = new XYZ(0, -1, 0); //-Y向量
XYZ Yvector2 = new XYZ(0, 1, 0); //Y向量
if (line.Direction.IsAlmostEqualTo(Yvector) || line.Direction.IsAlmostEqualTo(Yvector2))
{
ListGridY.Add(line);
refArrayGridY.Append(new Reference(grid));
}
if (line.Direction.IsAlmostEqualTo(Xvector) || line.Direction.IsAlmostEqualTo(Xvector2))
{
ListGridX.Add(line);
refArrayGridX.Append(new Reference(grid));
}
}
Line lineGridX = null;
Line lineGridY = null;
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(document, "轴网标注"))
{
transaction.Start();
//获得活跃的视图
View view = document.ActiveView;
document.Create.NewDimension(view, lineGridY, refArrayGridY);
document.Create.NewDimension(view, lineGridX, refArrayGridX);
transaction.Commit();
TransactionStatus transactionStatus = transaction.GetStatus();
if (transactionStatus == TransactionStatus.Committed)
{
TaskDialog.Show("标高创建", "创建成功!");
}
}
return Result.Succeeded;
}
}
}
到revit里Load
Run
成功!