开头先讲一个问题,平时做施工图标记的时候一根梁的标记是非常多的,所以我们会通过切换标记的形式来切换标记(如下图所示),那这在代码中是如何实现的呢?
首先查看API,这是我们创建一个NewTag所需要的各个参数:
第一个参数:我们用doc.ActiveView当前活动视图;
第二个参数:找到我们的梁;
第三个参数:是否加箭头;
第四个参数:有三种形式:类别标记,多类别标记和材质。我们选第一个类别标记。
第五个参数:水平方向还是竖直方向。
第六个参数:坐标
FilteredElementCollector fil = new FilteredElementCollector(doc, uiDoc.ActiveView.Id);
fil.OfCategory(BuiltInCategory.OST_StructuralFraming);//梁
foreach(Element el in fil)
{
IndependentTag tagg = doc.Create.NewTag(doc.ActiveView, el, true, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Vertical, new XYZ (0,0,0));//给每一夸梁进行标记
}
实现的效果:
系统只按默认的上次的选择进行创建,不能实现一件标记,那么接下来该怎么做呢?
这里只需要用到一句话: tagg.ChangeTypeId(id);
和上边的代码全部整合:
FilteredElementCollector fil = new FilteredElementCollector(doc, uiDoc.ActiveView.Id);
fil.OfCategory(BuiltInCategory.OST_StructuralFraming);//梁
FilteredElementCollector filtered = new FilteredElementCollector(doc);//标注
filtered.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_StructuralFramingTags);
ElementId id = null;
foreach (FamilySymbol tag in filtered)
{
if (tag.Name == "梁集中标注")
{
id = tag.Id;
}
}
foreach (Element el in fil)
{
IndependentTag tagg = doc.Create.NewTag(doc.ActiveView, el, true, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Vertical, new XYZ (0,15,0));//给每一夸梁进行标记
tagg.ChangeTypeId(id);
IndependentTag tag = doc.Create.NewTag(doc.ActiveView, el, true, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Vertical, new XYZ(0, 0, 0));
}
效果: