//============代码片段2-1:外部命令中Excute 函数的定义============
public interface IExternalCommand
{
public Autodesk.Revit.UI.Result Execute(
Autodesk.Revit.UI.ExternalCommandData commandData,
ref string message,
Autodesk.Revit.DB.ElementSet elements)
}
//============代码片段2-2:从commandData 中取到Document============ UIApplication uiApplication = c ommandData.Application;
Application application = uiApplication.Application;
UIDocument uiDocument = uiApplication.ActiveUIDocument;
Document document = uiDocument.Document;
//============代码片段2-3:使用message 参数============
public class command : IExternalCommand
{
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
message = "message test";
return Result.Failed;
}
}
//============代码片段2-4:使用element 参数============
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
message = "Plea take attention on the highlighted Walls!";
//先从UI 选取元素,然后执行该插件
ElementSet elems = commandData.Application.ActiveUIDocument.Selection.Elements;
foreach (Element elem in elems)
{
Wall wall = elem as Wall;
if (null != wall)
{
elements.Inrt(elem);
}
}
return Result.Failed;
//============代码片段2-5:外部命令中Excute 函数的返回值============
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
try
{
UIDocument uiDoc = c ommandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
List<ElementId> lectedElem = new List<ElementId>();
foreach(Element elem in u iDoc.Selection.Elements)
{
lectedElem.Add(elem.Id);
}
doc.Delete(lectedElem);
TaskDialogResult result = TaskDialog.Show(
"Revit",
"Yes to return succeeded and delete all lection,"+
"No to cancel all commands.",
TaskDialogCommonButtons.Yes|TaskDialogCommonButtons.No);
if (TaskDialogResult.Yes == result)
{
return Result.Succeeded;
}
el if (TaskDialogResult.No == r esult)
{
elements = uiDoc.Selection.Elements;
message = "Failed to delete lection.";
return Result.Failed;
}
el
{
return Result.Cancelled;
}
}
catch
{
message = "Unexpected Exception is thrown o ut.";
return Result.Failed;
}
/
/============代码片段2-6:IExternalApplication 接口定义============
public interface I ExternalApplication
{
Autodesk.Revit.UI.Result OnShutdown(UIControlledApplication application);
Autodesk.Revit.UI.Result OnStartup(UIControlledApplication application);
}
//============代码片段2-7:使用IExternalApplication 定制UI============
public Autodesk.Revit.UI.Result OnStartup(UIControlledApplication application)
{
//添加一个新的Ribbon 面板
RibbonPanel ribbonPanel = application.CreateRibbonPanel("NewRibbonPanel");
/
/在新的Ribbon 面板上添加一个按钮
//点击这个按钮,调用本章第四节第一个实例。
PushButton pushButton = ribbonPanel.AddItem(new PushButtonData("HelloRevit", "HelloRevit", @"C:\Projects\HelloRevit\HelloRevit.dll", "HelloRevit.Class1")) as PushButton;
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication application)
{
//UI 定制不需要特别在OnShutdown 方法中做处理。
return Result.Succeeded;
}
//============代码片段2-8:IExternalDBApplication 接口定义============
public interface I ExternalDBApplication
{
Autodesk.Revit.DB.ExternalDBApplicationResult OnShutdown(UIControlledApplication application);
Autodesk.Revit.DB.ExternalDBApplicationResult OnStartup(UIControlledApplication application);
}
//============代码片段2-9:ExternalCommand 的.addin 文件格式示例============
<?xml version="1.0" encoding="utf-8" s tandalone="no"?>
<RevitAddIns>
<AddIn Type="Command">
<Asmbly>c:\MyProgram\MyProgram.dll</Asmbly>
<AddInId>76eb700a-2c85-4888-a78d-31429ecae9ed</AddInId>
<FullClassName>Revit.Samples.SampleCommand</FullClassName>
<Text>Sample command</Text>
<VisibilityMode>NotVisibleInFamily</VisibilityMode>
<VisibilityMode>NotVisibleInMEP</VisibilityMode>
<AvailabilityClassName>Revit.Samples.SampleAccessibilityCheck</AvailabilityClassName> <LongDescription><p>This is the long description for my command.</p><p>This is another descriptive paragraph, with notes about how to u the command properly.</p></LongDescription>
<TooltipImage>c:\MyProgram\Autodesk.jpg</TooltipImage>
<LargeImage>c:\MyProgram\MyProgramIcon.png</LargeImage>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, </VendorDescription>
</AddIn>
</RevitAddIns>
//============代码片段2-10:ExternalApplication 的.addin 文件格式示例============ <?xml version="1.0" encoding="utf-8" s tandalone="no"?>
<RevitAddIns>
<AddIn Type="Application">
<Name>SampleApplication</Name>
<Asmbly>c:\MyProgram\MyProgram.dll</Asmbly>
<AddInId>604B1052-F742-4951-8576-C261D1993107</AddInId>
<FullClassName>Revit.Samples.SampleApplication</FullClassName>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, </VendorDescription>
</AddIn>
</RevitAddIns>
//============代码片段2-11:数据库级别ExternalApplication 的.addin 文件格式示例============
<?xml version="1.0" s tandalone="no"?>
<RevitAddIns>
<AddIn Type="DBApplication">
<Asmbly>c:\MyDBLevelApplication\MyDBLevelApplication.dll</Asmbly>
<AddInId>DA3D570A-1AB3-4a4b-B09F-8C15DFEC6BF0</AddInId>
<FullClassName>MyCompany.MyDBLevelAddIn</FullClassName>
<Name>My DB-Level AddIn</Name>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, </VendorDescription> </AddIn>
</RevitAddIns>
//============代码片段2-12:外部命令中Excute 函数的Transaction 属性============ [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]
public class Class1 : IExternalCommand
{
}
//============代码片段2-13:外部命令中Excute 函数的Journaling 属性============ [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandDa ta)]
public class Class1 : IExternalCommand
{
}
//============代码片段2-14:获取Application 对象============
Autodesk.Revit.ApplicationServices.Application app
= commandData.Application.Application;
//============代码片段2-15:Revit 版本及产品信息============
public void GetVersionInfo(Autodesk.Revit.ApplicationServices.Application app)
{
if (app.VersionNumber == "2014")
{
TaskDialog.Show("Supported version",
"This application supported in this v ersion.");
}
el
{
TaskDialog dialog = new TaskDialog("Unsupported version.");
dialog.MainIcon = TaskDialogIcon.TaskDialogIconWarning;
dialog.MainInstruction = "This application is only supported in Revit 2014.";
dialog.Show();
}
}
//============代码片段2-16:获取UIApplication 对象============
Autodesk.Revit.UI.UIpplication uiApp = commandData.Application;
//============代码片段2-17:获取文档对象============
Autodesk.Revit.UI.UIDocument activeDoc = commandData.Application.ActiveUIDocument; Autodesk.Revit.DB.DocumentSet documents = commandData.Application.Application.Documents;
//============代码片段2-18:从Setting 中取到当前文档的Categories============
// 从当前文档对象中取到Setting 对象
Settings documentSettings = document.Settings;
String prompt = "Number of all categories in current Revit document: " +