Revit Family API 添加参数与尺寸标注

使用FamilyManager其他的与普通添加参数与标注没区别。

[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class cmdAddParam : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
    {
        UIApplication app = commandData.Application;
        Document doc = app.ActiveUIDocument.Document;         Transaction ts = new Transaction(doc, "NewDimension");
        ts.Start();         //添加参数
        FamilyManager m_familyMgr = doc.FamilyManager;
        bool isInstance = false;
        FamilyParameter paramTw = m_familyMgr.AddParameter("Tw", BuiltInParameterGroup.PG_GEOMETRY, ParameterType.Length, isInstance);
        double tw = Util.mmToFeet(150.0);
        m_familyMgr.Set(paramTw, tw);
        m_familyMgr.SetFormula(paramTw, "Width / 4.0");//公式         //添加尺寸标注
        View pViewPlan = Util.findElement(doc, typeof(ViewPlan), "Lower Ref. Level") as View;
        ReferencePlane ref1 = Util.findElement(doc, typeof(ReferencePlane), "Left") as ReferencePlane;
        ReferencePlane ref2 = Util.findElement(doc, typeof(ReferencePlane), "offsetV") as ReferencePlane;
        ReferenceArray pRefArray = new ReferenceArray();
        pRefArray.Append(ref1.Reference);
        pRefArray.Append(ref2.Reference);
        XYZ p0 = ref1.FreeEnd;
        XYZ p1 = ref2.FreeEnd;
        Line pLine = app.Application.Create.NewLineBound(p0, p1);
        Dimension pDimTw = doc.FamilyCreate.NewDimension(pViewPlan, pLine, pRefArray);
        pDimTw.Label = m_familyMgr.get_Parameter("Tw");         ts.Commit();         return Result.Succeeded;
    }
}
public class Util
{
    //Revit内部单位feet转化为mm即毫米
    public static double mmToFeet(double val) { return val / 304.8; }
    public static double feetToMm(double val) { return val * 304.8; }
    //通过类型与名称找Element
    public static Element findElement(Document _rvtDoc, Type targetType, string targetName)
    {
        // get the elements of the given type
        //
        FilteredElementCollector collector = new FilteredElementCollector(_rvtDoc);
        collector.WherePasses(new ElementClassFilter(targetType));         // parse the collection for the given name
        // using LINQ query here. 
        // 
        var targetElems = from element in collector where element.Name.Equals(targetName) select element;
        List<Element> elems = targetElems.ToList<Element>();         if (elems.Count > )
        {  // we should have only one with the given name. 
            return elems[];
        }         // cannot find it.
        return null;
    }
    #region Formatting and message handlers
    public const string Caption = "Revit Family API Labs";     /// <summary>
    /// MessageBox wrapper for informational message.
    /// </summary>
    public static void InfoMsg(string msg)
    {         System.Diagnostics.Debug.WriteLine(msg);
        WinForm.MessageBox.Show(msg, Caption, WinForm.MessageBoxButtons.OK, WinForm.MessageBoxIcon.Information);
    }     /// <summary>
    /// MessageBox wrapper for error message.
    /// </summary>
    public static void ErrorMsg(string msg)
    {
        WinForm.MessageBox.Show(msg, Caption, WinForm.MessageBoxButtons.OK, WinForm.MessageBoxIcon.Error);
    }
    #endregion // Formatting and message handlers
}

url:http://greatverve.cnblogs.com/p/revit-family-api-param.html

上一篇:【新产品发布】【iM_TFTRGB 液晶驱动模块】


下一篇:读取Excel文件的两种方法