• Revit API创建标注NewTag


    start
    /// <summary>
    /// 创建水管管径标注
    /// </summary>
    [Transaction(TransactionMode.Manual)]
    public class CreatPipeDiameterTag : IExternalCommand
    {
        #region IExternalCommand Members

        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document doc = uiDoc.Document;//当前活动文档
            Autodesk.Revit.DB.View view = uiDoc.ActiveView;//当前活动视图
            Selection sel = uiDoc.Selection;//选择集
            Transaction ts = new Transaction(doc, "水管管径标记");
            try
            {
                ts.Start();
                PipeSelectionFilter psf = new PipeSelectionFilter(doc);
                Reference refer = sel.PickObject(ObjectType.Element, psf, "请选择要标注的水管:");
                Pipe pipe = doc.GetElement(refer) as Pipe;
                if (pipe == null)
                {
                    ts.Dispose();
                    TaskDialog.Show("RevitMassge""没有选中水管");
                    return Result.Failed;
                }
                //Define tag mode and tag orientation for new tag
                TagMode tageMode = TagMode.TM_ADDBY_CATEGORY;
                TagOrientation tagOri = TagOrientation.Horizontal;
                //Add the tag to the middle of duct
                LocationCurve locCurve = pipe.Location as LocationCurve;
                XYZ pipeMid = locCurve.Curve.Evaluate(0.275true);
                IndependentTag tag = doc.Create.NewTag(view, pipe, false, tageMode, tagOri, pipeMid);
                //遍历类型
                FilteredElementCollector filterColl = GetElementsOfType(doc, typeof(FamilySymbol), BuiltInCategory.OST_PipeTags);
                //WinFormTools.MsgBox(filterColl.ToElements().Count.ToString());
                int elId = 0;
                foreach (Element el in filterColl.ToElements())
                {
                    if (el.Name == "管道尺寸标记")
                        elId = el.Id.IntegerValue;
                }
                tag.ChangeTypeId(new ElementId(elId));
                ElementId eId = null;
                if (tag == null)
                {
                    ts.Dispose();
                    TaskDialog.Show("RevitMassge""创建标注失败!");
                    return Result.Failed;
                }
                ICollection<ElementId> eSet = tag.GetValidTypes();
                foreach (ElementId item in eSet)
                {
                    if (item.IntegerValue == 532753)
                    {
                        eId = item;
                    }
                }
                tag = doc.get_Element(eId) as IndependentTag;
            }
            catch (Exception)
            {
                ts.Dispose();
                return Result.Cancelled;
            }
            ts.Commit();

            return Result.Succeeded;
        }
        FilteredElementCollector GetElementsOfType(Document doc, Type type, BuiltInCategory bic)
        {
            FilteredElementCollector collector = new FilteredElementCollector(doc);

            collector.OfCategory(bic);
            collector.OfClass(type);

            return collector;
        }
        #endregion
    }


    /// <summary>
    ///水管选择过滤器
    /// </summary>
    public class PipeSelectionFilter : ISelectionFilter
    {
        #region ISelectionFilter Members

        Document doc = null;
        public PipeSelectionFilter(Document document)
        {
            doc = document;
        }

        public bool AllowElement(Element elem)
        {
            return elem is Pipe;
        }

        public bool AllowReference(Reference reference, XYZ position)
        {
            return doc.GetElement(reference) is Pipe;
        }

        #endregion
    }
    end
  • 相关阅读:
    vim技巧2
    vim技巧1
    网站压力测试工具
    CentOS mysql安装
    破解root
    渐进式性能监测案例
    网络监测介绍
    I/O检测介绍
    虚拟内存介绍
    @Slf4j
  • 原文地址:https://www.cnblogs.com/greatverve/p/revit-api-NewTag.html
Copyright © 2020-2023  润新知