[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 }