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.275, true);
            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 = ;
            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 == )
                {
                    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

Revit API创建标注NewTag的更多相关文章

  1. Revit API 创建带箭头的标注

      [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class cmd : ...

  2. Revit api 创建族并加载到当前项目

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. Revit API创建墙的保温层修改墙厚度

    start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)]  / ;         ; ...

  4. Revit API创建标高,单位转换

    一业内朋友让我写个快速创建标高的插件. ;             ; i <= iNum; i++)             {                 Level level = d ...

  5. Revit API创建一个拷贝房间内对象布局命令

    本课程演示创建一个拷贝房间内对象布局命令,完整演示步骤和代码.这个命令把选中房间内的对象复制到其它选中的一个或多个房间中,而且保持与源房间一致的相对位置.通过本讲座使听众知道创建一个二次开发程序很简单 ...

  6. Revit API创建几何实体Solid并找到与之相交的元素

    几何实体的创建方法之一:构成封闭底面,指定拉伸方向与拉伸高度.GeometryCreationUtilities ;         , pt.Y - dBoxLength / , pt.Z);    ...

  7. Revit api 创建楼梯图元

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. Revit API创建详图视图

    start //创建详图视图 Transaction ts = new Transaction(doc, "http://greatverve.cnblogs.com"); ts. ...

  9. Revit通过API创建共享参数

    Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个. ...

随机推荐

  1. Python-互斥锁 进程间通讯

    3.守护进程(**) 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常: AssertionError: daemonic proces ...

  2. zoj3195 联通树上三个点的路径长

    输出有个坑,两个月之前就没对,,今天又被坑了一次 求联通树上三个点的路径长度,只要求两两点对的最短路径,加起来除以二即可 #include<iostream> #include<cs ...

  3. python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块)

    一.BeautifulSoup 1. 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: ''' Beautiful Soup提供一些简单 ...

  4. 关于asp.net mvc中的httpModules 与 httpHandler

    ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,A ...

  5. 【C++ Primer 第六章】 1. 定义模板

    类模板 题目描述:实现StrBlob的模板版本. /* Blob.h */ #include<iostream> #include<vector> #include<in ...

  6. PHP PC端微信扫码支付【模式二】详细教程-附带源码(转)

    博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们! 首先还是 ...

  7. Ubuntu 里面 apt-get 三个有关更新的命令的区别

    apt-get update 更新软件源中的所有软件列表. apt-get upgrade 更新软件. apt-get dist-upgrade 更新系统版本. 作者:耑新新,发布于  博客园 转载请 ...

  8. hdu 2680 多起点一终点

    注意这是一个有向图! 多起点,一终点 反过来,看成一个起点,多个终点,找最短路 因为是有向图 所以u->v 要也要反过来成为v->u Sample Input5 8 5 //结点数 边数 ...

  9. C 几何水题 求不同斜率的数目 枚举+set

    Description Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率.现在LU把平面内所有点中任意两点连线,得到的斜率放 ...

  10. AOJ 0525 Osenbei【穷竭搜索】

    AOJ 0525 题意: 有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示).一次可将同一行或同一列的煎饼全部翻转.现在需要把尽可能多的煎饼翻成正面朝上,问最多能 ...