Revit二次开发_显示最近的轴网交点

  做项目的时候有时要通过轴网定位与别人交流,常规操作是点选最近的两根轴网,看轴网的名称。可能我记性太差,一个地方总是要确认几次才放心。现在也有一些插件可以将轴圈显示在工作视图最外侧,但在轴网比较多且密集的时候看起来效果还是比较糟糕的。

   于是通过二次开发做了一个快速识别轴网定位的功能,通过点选一个点,识别最近的两根方向不一样的轴网,弹窗显示并自动复制到剪贴板中。

  现在主要针对的是直线型轴网,还有两个问题还没处理,一个是弧形轴网的识别,一个是多段轴网识别的修正,先挖下坑以后慢慢填了。-.-!

以下代码:

 public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
 {
 UIDocument uidoc = commandData.Application.ActiveUIDocument;
 Document doc = uidoc.Document;

 //选择点
 XYZ sel_point = uidoc.Selection.PickPoint(Autodesk.Revit.UI.Selection.ObjectSnapTypes.None);

 //获取所有轴网
 FilteredElementCollector filteredElementCollector = new FilteredElementCollector(doc);
 filteredElementCollector.OfClass(typeof(Grid));

 //处理多段轴网及弧形轴网
 //to do...

 //过滤出所有直线轴网
 List<Grid> lineGrid = new List<Grid>();
 foreach (Grid g in filteredElementCollector)
 {
 if ((g.Curve as Line) != null) lineGrid.Add(g);
 }
 //变量;
 Grid grid_n1 = null;
 Grid grid_n2 = null;
 double dis1 = double.MaxValue;
 double dis2 = double.MaxValue;
 //遍历轴网,计算出离选择点最近的一条轴网
 foreach (Grid g in lineGrid)
 {
 if (g.Curve.Distance(sel_point) < dis1)
 {
 grid_n1 = g;
 dis1 = g.Curve.Distance(sel_point);
 }
 }
 //遍历轴网,计算出离选择点最近的第二条轴网
 foreach(Grid g in lineGrid)
 {
 if (!(g.Curve as Line).Direction.IsAlmostEqualTo((grid_n1.Curve as Line).Direction) && g.Curve.Distance(sel_point) < dis2)
 {
 grid_n2 = g;
 dis2 = g.Curve.Distance(sel_point);
 }
 }

 //显示时将数字结尾的轴网号排在前面
 string name1 = grid_n1.Name;
 string name2 = grid_n2.Name;
 if (!char.IsNumber(name1.Last()))
 {
 string name = name1;
 name1 = name2;
 name2 = name;
 }
 string inputStr = name1 + "轴 交 " + name2 + "轴";
 //显示
 TaskDialog.Show("goodwish", inputStr);
 //复制到剪贴板
 System.Windows.Forms.Clipboard.SetText(inputStr);

 return Result.Succeeded;
 }

0

评论0

请先

没有账号? 注册  忘记密码?

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录网站
普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress