Revit二开–管线标注
前几天有朋友问我 如何用程序来实现标注管道长度,他的思路是获取管道的locationcurve 然后获取两个端点的引用然后进行标注,但是管道的locationcurve 没有端点引用,所以用这种方法无法实现管道的长度标注。今天恰好有点时间,就把管道长度标注的方法放出来供大家参考。 代码已经集成到唐僧解瓦项目 代码实现环境Revit2019 vs2017)
唐僧解瓦 项目 github地址:https://github.com/binbinstrong/tangsengjiewa
[Transaction(TransactionMode.Manual)]
[Journaling(JournalingMode.UsingCommandData)]
[Regeneration(RegenerationOption.Manual)]
public class Cmd_DimPipe:IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var uidoc = commandData.Application.ActiveUIDocument;
var doc = uidoc.Document;
var sel = uidoc.Selection;
var acview = uidoc.ActiveView;
var pipe = sel.PickObject(ObjectType.Element, doc.GetSelectionFilter(m => m is Pipe)).GetElement(doc) as Pipe;
var geoele = pipe.get_Geometry(new Options()
{DetailLevel = ViewDetailLevel.Fine, ComputeReferences = true});
var line = pipe.LocationLine();
var refs = GetEndPlanRefs(geoele);
doc.Invoke(m =>
{
doc.Create.NewDimension(acview, line, refs);
},"创建管道长度标注");
return Result.Succeeded;
}
private ReferenceArray GetEndPlanRefs(GeometryElement geoele)
{
var result = new ReferenceArray();
var geometrys = geoele.Cast<GeometryObject>().ToList();
foreach (GeometryObject geo in geometrys)
{
if (geo is Solid so)
{
var faces = so.Faces;
foreach (var face in faces)
{
if (face is PlanarFace pface)
{
result.Append(pface.Reference);
}
}
}
else
continue;
}
return result;
}
}