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 elems = targetElems.ToList();

         if (elems.Count >  0)
        {   //  we should have only one with the given name. 
             return elems[ 0];
        }

         //  cannot find it.
         return  null;
    }
     #region Formatting and message handlers
     public  const  string Caption =  " Revit Family API Labs ";

     ///  
    
///  MessageBox wrapper for informational message.
    
///  

     public  static  void InfoMsg( string msg)
    {

        System.Diagnostics.Debug.WriteLine(msg);
        WinForm.MessageBox.Show(msg, Caption, WinForm.MessageBoxButtons.OK, WinForm.MessageBoxIcon.Information);
    }

     ///  
    
///  MessageBox wrapper for error message.
    
///  

     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

你可能感兴趣的:(Revit Family API 添加参数与尺寸标注)