Revit二次开发——批量标注模型线
引言:在自动标注大环境下,利用模型线进行代替标注;仅仅是一种尝试,优缺点都有望读者自行改进。(仅限平面视图)
开始:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;namespace AutoDimention
{[TransactionAttribute(TransactionMode.Manual)]class SelectAutoDimention_Cmd : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elementset){UIDocument uidoc = commandData.Application.ActiveUIDocument;Document doc = uidoc.Document;XYZ Xvec = new XYZ(1, 0, 0);//*X单位向量XYZ Yvec = new XYZ(0, 1, 0);//*Y单位向量List ListLinesX = new List();List ListLinesY = new List();ReferenceArray refArryY = new ReferenceArray();ReferenceArray refArryX = new ReferenceArray();List modelLines = new List();bool is_Y = false;bool is_X = false;ICollection elementIds = uidoc.Selection.GetElementIds();List elements = new List();//*给定元素集合XYZ HidePointA = uidoc.Selection.PickPoint(Autodesk.Revit.UI.Selection.ObjectSnapTypes.Nearest, "选择标注点A");XYZ HidePointB = uidoc.Selection.PickPoint(Autodesk.Revit.UI.Selection.ObjectSnapTypes.Nearest, "选择标注点B");//*这个先把这里面的modelline添加进去foreach (Element element in elements){if (element is ModelLine){ModelLine modelLine = element as ModelLine;modelLines.Add(modelLine);}}try{foreach (ElementId elementId in elementIds){elements.Add(doc.GetElement(elementId));}//*这个先把这里面的modelline添加进去foreach (Element element in elements){if (element is ModelLine){ModelLine modelLine = element as ModelLine;modelLines.Add(modelLine);}}Line Juge_Line = modelLines[0].GeometryCurve as Line;if (Juge_Line.Direction.IsAlmostEqualTo(Xvec,0.01) || Juge_Line.Direction.IsAlmostEqualTo(-Xvec,0.01)){is_X = true;}if (Juge_Line.Direction.IsAlmostEqualTo(Yvec,0.01) || Juge_Line.Direction.IsAlmostEqualTo(-Yvec,0.01)){is_Y = true;}if (is_Y == true){Transaction transaction = new Transaction(doc, "Dimention");transaction.Start();foreach (ModelLine TemModeleline in modelLines){Line TemLine = TemModeleline.GeometryCurve as Line;XYZ TemP1 = TemLine.GetEndPoint(0);XYZ TemP2 = TemLine.GetEndPoint(1);TemP1 = new XYZ(TemP1.X, HidePointA.Y, TemP1.Z);TemP2 = new XYZ(TemP1.X, HidePointB.Y, TemP1.Z);TemLine = Line.CreateBound(TemP1, TemP2);TemModeleline.GeometryCurve = TemLine;doc.Regenerate();Options options = new Options();options.ComputeReferences = true;options.DetailLevel = ViewDetailLevel.Fine;GeometryElement geometryElement = TemModeleline.get_Geometry(options);foreach (GeometryObject geometryObject in geometryElement){if (geometryObject is Line){Line line = geometryObject as Line;refArryX.Append(line.Reference);ListLinesX.Add(line);}}}Line lineX = Line.CreateBound(ListLinesX[0].Origin, ListLinesX[1].Origin);Dimension dimension = doc.Create.NewDimension(doc.ActiveView, lineX, refArryX);transaction.Commit();}if (is_X == true){Transaction transaction = new Transaction(doc, "Dimention");transaction.Start();foreach (ModelLine TemModeleline in modelLines){Line TemLine = TemModeleline.GeometryCurve as Line;XYZ TemP1 = TemLine.GetEndPoint(0);XYZ TemP2 = TemLine.GetEndPoint(1);TemP1 = new XYZ(HidePointA.X, TemP1.Y, TemP1.Z);TemP2 = new XYZ(HidePointB.X, TemP1.Y, TemP1.Z);TemLine = Line.CreateBound(TemP1, TemP2);TemModeleline.GeometryCurve = TemLine;doc.Regenerate();Options options = new Options();options.ComputeReferences = true;options.DetailLevel = ViewDetailLevel.Fine;GeometryElement geometryElement = TemModeleline.get_Geometry(options);foreach (GeometryObject geometryObject in geometryElement){if (geometryObject is Line){Line line = geometryObject as Line;refArryY.Append(line.Reference);ListLinesY.Add(line);}}}Line lineY = Line.CreateBound(ListLinesY[0].Origin, ListLinesY[1].Origin);Dimension dimension = doc.Create.NewDimension(doc.ActiveView, lineY, refArryY);transaction.Commit();}}catch (Exception ex){MessageBox.Show(ex.Message + ex.StackTrace);}return Result.Succeeded;}}
}

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