使用
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 > 
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";    
/// <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.cnb
logs.com/p/revit-family-api-param.html