FamilyManager.NewType("");添加新类型,然后设置参数,就是为新类型设置参数。


FamilyManager.NewType("");添加新类型,然后设置参数,就是为新类型设置参数。

[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]

public class cmdAddType : IExternalCommand

{

    //添加类型

    void AddType(FamilyManager familyMgr, string name, double w, double d)

    {

        FamilyType type1 = familyMgr.NewType(name);

        FamilyParameter paramW = familyMgr.get_Parameter("Width");

        double valW = Util.mmToFeet(w);

        if (paramW != null)

        {

            familyMgr.Set(paramW, valW);

        }

        FamilyParameter paramD = familyMgr.get_Parameter("Depth");

        double valD = Util.mmToFeet(d);

        if (paramD != null)

        {

            familyMgr.Set(paramD, valD);

        }

    }

    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)

    {

        UIApplication app = commandData.Application;

        Document doc = app.ActiveUIDocument.Document;


        Transaction ts = new Transaction(doc, "AddType");

        ts.Start();


        //添加参数

        FamilyManager m_familyMgr = doc.FamilyManager;


        //添加类型Type

        AddType(m_familyMgr, "600x900", 600.0, 900.0);

        AddType(m_familyMgr, "600x600", 600.0, 600.0);


        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

}