revit二次开发一键标注轴网

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 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 listGrids = collectorGrid.OfCategory(BuiltInCategory.OST_Grids).ToElements().ToList();List ListGridY = new List();List ListGridX = new List();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 

成功! 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部