Revit二次开发知识分享(十九)控制轴网“隐藏编号”按钮

您所在的位置:网站首页 revit圆弧轴网 Revit二次开发知识分享(十九)控制轴网“隐藏编号”按钮

Revit二次开发知识分享(十九)控制轴网“隐藏编号”按钮

2024-07-16 02:30| 来源: 网络整理| 查看: 265

这段时间工作有一个新的想法,就是怎样子去操控轴网的编号显示还是隐藏,如下图。花了点时间研究了一番,发现Revit是有提供对应的API给我们去控制的,下面给大家详细讲讲,Just Do It~~~ 在这里插入图片描述 显示编号方法

在这里插入图片描述 里面需要传入两个参数,DatuEnds是一个枚举值,枚举值中的参数对应修改的位置,选择是起点还是终点。View参数对应的是需要显示编号的视图。

隐藏编号方法

在这里插入图片描述 里面的参数和显示编号的参数是一样的,这里不多加赘述。 基本的API就是上面这些,只要是DatumPlane下面的子类都有这个方法,说明标高也可以有同样的方法可以去使用。下面我给大家一个例子,框选关闭轴网编号。

[Transaction(TransactionMode.Manual)] public class ShowAndCloseGridNumberCmd : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; PickedBox pickBox = null; try { pickBox = uidoc.Selection.PickBox(Autodesk.Revit.UI.Selection.PickBoxStyle.Directional); } catch { return Result.Succeeded; } //请框选需要打开或者关闭的标高符号 //投影到视图中 XYZ maxPoint = pickBox.Max; XYZ minPoint = pickBox.Min; //极值 double minX = Math.Min(minPoint.X, maxPoint.X); double maxX = Math.Max(minPoint.X, maxPoint.X); double minY = Math.Min(minPoint.Y, maxPoint.Y); double maxY = Math.Max(minPoint.Y, maxPoint.Y); List pointList = TwoPointGetPointList(new XYZ(minX, minY,0), new XYZ(maxX, maxY, 0)); List gridList = new FilteredElementCollector(doc, uidoc.ActiveGraphicalView.Id).OfClass(typeof(Grid)).OfType().ToList(); Transaction trans = new Transaction(doc, "显示或者关闭轴号"); trans.Start(); foreach (var grid in gridList) { Curve c = grid.Curve; if (IsInPolygon(c.GetEndPoint(0).SetZ(),pointList)) { SetGridBubbleVisible(grid, uidoc.ActiveGraphicalView, DatumEnds.End0); } else if (IsInPolygon(c.GetEndPoint(1).SetZ(), pointList)) { SetGridBubbleVisible(grid, uidoc.ActiveGraphicalView, DatumEnds.End0); } } trans.Commit(); return Result.Succeeded; } public void SetGridBubbleVisible(Grid grid,View view,DatumEnds ends) { bool visible = grid.IsBubbleVisibleInView(ends, view); if (visible) { grid.HideBubbleInView(ends, view); } else { grid.ShowBubbleInView(ends, view); } } public List TwoPointGetPointList(XYZ minPoint,XYZ maxPoint) { List result = new List(); try { XYZ p1 = minPoint; XYZ p3 = maxPoint; XYZ p2 = new XYZ(maxPoint.X, minPoint.Y, 0); XYZ p4 = new XYZ(minPoint.X, maxPoint.Y, 0); result.Add(p1); result.Add(p2); result.Add(p3); result.Add(p4); } catch { System.Windows.Forms.MessageBox.Show("框选轮廓过小,无法判别"); result = new List(); } return result; } public bool IsInPolygon(XYZ checkPoint, List polygonPoints) { bool inSide = false; int pointCount = polygonPoints.Count; XYZ p1, p2; for (int i = 0, j = pointCount - 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3