{"id":2647,"date":"2024-07-24T07:17:00","date_gmt":"2024-07-24T07:17:00","guid":{"rendered":"https:\/\/infralligence.com\/?p=2647"},"modified":"2024-12-31T09:31:03","modified_gmt":"2024-12-31T09:31:03","slug":"revit-plugin-types","status":"publish","type":"post","link":"https:\/\/infralligence.com\/pl\/resources\/revit-plugin-types\/","title":{"rendered":"Revit Plugin types"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"2647\" class=\"elementor elementor-2647\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a636728 e-con-full kk-blog-post e-flex rael-particle-no e-con e-parent\" data-id=\"a636728\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-978bece elementor-widget elementor-widget-text-editor\" data-id=\"978bece\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Revit API provides three plugin types:\u00a0<strong>Command<\/strong>,\u00a0<strong>Application<\/strong>, and\u00a0<strong>DBApplication<\/strong>. They have various purposes and customization options.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acc30ef elementor-widget elementor-widget-image\" data-id=\"acc30ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"2653\" height=\"1493\" src=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png\" class=\"attachment-full size-full wp-image-2650\" alt=\"\" srcset=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png 2653w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6-300x169.png 300w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6-1024x576.png 1024w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6-768x432.png 768w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6-1536x864.png 1536w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6-2048x1153.png 2048w\" sizes=\"(max-width: 2653px) 100vw, 2653px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98d5948 elementor-widget elementor-widget-text-editor\" data-id=\"98d5948\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5>\ud83d\udccc TLDR \u2013 Summary Upfront:<\/h5>\n<p>Revit API has 3 plugin types:<\/p>\n<p>\u27a1\ufe0f <strong>Command<\/strong>\u00a0(IExternalCommand): Simplest. Great for testing and single-purpose methods.<\/p>\n<p>\u27a1\ufe0f <strong>Application\u00a0<\/strong>(IExternalApplication): The \u201ctypical plugin\u201d. Customization of ribbon and buttons.<\/p>\n<p><strong>\u27a1\ufe0f DBApplication <\/strong>(IExternalDBApplication): Restricted version of Application. Rarely used.<\/p>\n<p>Create the plugins by creating classes implementing interfaces (in brackets).<\/p>\n<p>Remember to register the plugins with manifest files (.addin).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ecaaabc elementor-widget elementor-widget-rael-table-of-contents\" data-id=\"ecaaabc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;rael_headings_by_tags&quot;:[&quot;h3&quot;,&quot;h4&quot;],&quot;rael_exclude_headings_by_selector&quot;:[],&quot;rael_min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;rael_marker_view&quot;:&quot;numbers&quot;,&quot;rael_hierarchical_view&quot;:&quot;yes&quot;,&quot;rael_min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;rael_min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"rael-table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"rael-toc__header\">\n\t\t\t\t<h5 class=\"rael-toc__header-title\">\ud83d\udd0dContent: <\/h5>\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"rael-toc__body\">\n\t\t\t<div class=\"rael-toc__spinner-container\">\n\t\t\t\t<i class=\"rael-toc__spinner eicon-loading eicon-animation-spin\" aria-hidden=\"true\"><\/i>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc20d4b elementor-widget elementor-widget-text-editor\" data-id=\"bc20d4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Command (IExternalCommand)<\/h3><p>The Command is the simplest type of Revit plugin. It is a\u00a0<strong>single method for a specific task<\/strong> (e.g., renumbering views, organizing sheets, or placing multiple elements with one click).<\/p><p>Commands are placed under the\u00a0<strong>External Tools<\/strong>\u00a0button in the Add-Ins tab \u2013 you cannot customize this placement.<\/p><p>You can assign the command name and description through the manifest file (more about the manifest file later).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c50a40 elementor-widget elementor-widget-image\" data-id=\"8c50a40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"2022\" height=\"424\" src=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-4.png\" class=\"attachment-full size-full wp-image-2648\" alt=\"\" srcset=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-4.png 2022w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-4-300x63.png 300w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-4-1024x215.png 1024w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-4-768x161.png 768w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-4-1536x322.png 1536w\" sizes=\"(max-width: 2022px) 100vw, 2022px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d8bb296 elementor-widget elementor-widget-text-editor\" data-id=\"d8bb296\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Commands are implemented using the <strong>IExternalCommand <\/strong><span style=\"font-size: 16px;\">interface. Below is a simple example of a Command showing the path of the current project.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6c44e1 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"c6c44e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-default' data-show-toolbar='no'><code class='language-csharp'>namespace RevitMastery.Revit.Commands\r\n{\r\n\t[Transaction(TransactionMode.Manual)]\r\n\t[Regeneration(RegenerationOption.Manual)]\r\n\tpublic class RevitMasteryCommand : IExternalCommand\r\n\t{\r\n\t\tpublic Result Execute(ExternalCommandData commandData, ref string message,\r\n\t\tElementSet elements)\r\n\t\t{\r\n\t\t\t\/\/ Get the basic Revit application and the current document objects\r\n\t\t\tUIApplication uiApp = commandData.Application;\r\n\t\t\tDocument doc = uiApp.ActiveUIDocument.Document;\r\n\r\n\t\t\t\/\/ Get the path of the current document\r\n\t\t\tvar documentPath = doc.PathName;\r\n\r\n\t\t\t\/\/ Check if the document path is empty. Based on that, prepare the document\tmessage.\r\n\t\t\tvar documentMessage = documentPath == &quot;&quot; ? &quot;The current project is not yet saved.&quot; : &quot;The current project path is: &quot; + documentPath;\r\n\t\t\tTaskDialog.Show(&quot;TestPlugin&quot;, documentMessage);\r\n\r\n\t\t\treturn Result.Succeeded;\r\n\t\t}\r\n\t}\r\n}<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29709d6 elementor-widget elementor-widget-text-editor\" data-id=\"29709d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To make your Command appear in Revit, it must be registered with a manifest file. Each command must be registered separately, which can be tedious for multiple instances.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d8bf31 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"3d8bf31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-default' data-show-toolbar='no'><code class='language-xml'>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;RevitAddIns&gt;\r\n &lt;AddIn Type=&quot;Command&quot;&gt;\r\n       &lt;Name&gt;Revit Mastery Command&lt;\/Name&gt;\r\n       &lt;FullClassName&gt;RevitMastery.Revit.RevitMasteryCommand&lt;\/FullClassName&gt;\r\n       &lt;Text&gt;Revit Mastery&lt;\/Text&gt;\r\n       &lt;Description&gt;Revit Mastery plugin as a command.&lt;\/Description&gt;\r\n       &lt;VisibilityMode&gt;AlwaysVisible&lt;\/VisibilityMode&gt;\r\n       &lt;Assembly&gt;D:\\Repos\\RevitMastery\\RevitMastery.Revit\\bin\\Debug\\net8.0-windows\\RevitMastery.Revit.dll&lt;\/Assembly&gt;\r\n       &lt;AddInId&gt;b053b38b-79ca-4f56-8f42-4dc890563e78&lt;\/AddInId&gt;\r\n    &lt;VendorId&gt;INFR&lt;\/VendorId&gt;\r\n    &lt;VendorDescription&gt;Kamil Korus from infralligence.com&lt;\/VendorDescription&gt;\r\n &lt;\/AddIn&gt;\r\n&lt;\/RevitAddIns&gt;<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-33e5b71 elementor-widget elementor-widget-text-editor\" data-id=\"33e5b71\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h6>The registration process is described step-by-step in the\u00a0<a href=\"https:\/\/infralligence.com\/pl\/resources\/#start-revit-programming-guide\" target=\"_blank\" rel=\"noreferrer noopener\">Start Revit API Programming Guide<\/a>.<\/h6>\n<p>Commands are <strong>great for testing<\/strong>. But as your plugin grows, you may need more customization (e.g., own ribbons and buttons). For this, you need the Application plugin type.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b9daa5 elementor-widget elementor-widget-text-editor\" data-id=\"3b9daa5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Application (IExternalApplication)<\/h3><p>The <strong>Application<\/strong> plugin type allows you to create custom tabs, buttons, and other menu items in Revit. This is what most people think of as a \u201ctypical plugin.\u201d<br \/>The created Revit menu items can be customized and styled. You can add button images, descriptions, and tooltips.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e20329e elementor-widget elementor-widget-image\" data-id=\"e20329e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"2230\" height=\"356\" src=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3.png\" class=\"attachment-full size-full wp-image-2654\" alt=\"\" srcset=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3.png 2230w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3-300x48.png 300w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3-1024x163.png 1024w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3-768x123.png 768w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3-1536x245.png 1536w, https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-3-2048x327.png 2048w\" sizes=\"(max-width: 2230px) 100vw, 2230px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f154aac elementor-widget elementor-widget-text-editor\" data-id=\"f154aac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The Application code logic differs from the Command. The Command \u201cexecutes\u201d a single method when clicked, while <strong>the Application performs actions on Revit\u2019s opening (startup) and closing (shutdown)<\/strong>. Typically, it creates custom Revit menu tabs, panels, and buttons and links the buttons with commands (methods) to be fired when clicked. The actual code is placed in the commands linked with buttons \u2013 in the example below the \u201cShow project path\u201d button is linked with the command created before.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eefd506 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"eefd506\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-default' data-show-toolbar='no'><code class='language-csharp'>namespace RevitMastery.Revit\r\n{\r\n  [Transaction(TransactionMode.Manual)]\r\n  [Regeneration(RegenerationOption.Manual)]\r\n  public class RevitMasteryApplication : IExternalApplication\r\n  {\r\n    public Result OnStartup(UIControlledApplication application)\r\n    {\r\n      var assemblyPath = Assembly.GetExecutingAssembly().Location;\r\n\r\n      var ribbonName = &quot;Revit Mastery&quot;;\r\n      application.CreateRibbonTab(ribbonName);\r\n      var panel = application.CreateRibbonPanel(ribbonName, &quot;Revit Mastery Panel&quot;);\r\n\r\n      var buttonData = new PushButtonData(\r\n        typeof(RevitMasteryCommand).FullName, \r\n        &quot;Show project path&quot;, \r\n        assemblyPath, \r\n        typeof(RevitMasteryCommand).FullName);\r\n      var button = panel.AddItem(buttonData) as PushButton;\r\n      button.ToolTip = &quot;Shows the localization path of the current project.&quot;;\r\n      \r\n      Uri imageUri = new Uri(Path.Combine(Path.GetDirectoryName(assemblyPath), &quot;Resources&quot;, &quot;Images&quot;, &quot;description_32.png&quot;));    \r\n      BitmapImage image = new BitmapImage(imageUri);\r\n      button.LargeImage = image;            \r\n\r\n      return Result.Succeeded;\r\n    }\r\n\r\n    public Result OnShutdown(UIControlledApplication application)\r\n    {\r\n      return Result.Succeeded;\r\n    }\r\n  }\r\n}\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0417352 elementor-widget elementor-widget-text-editor\" data-id=\"0417352\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tSimilar to Commands, the Application plugin type must be registered with a manifest file.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21c6cef elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"21c6cef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-default' data-show-toolbar='no'><code class='language-xml'>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;RevitAddIns&gt;\r\n  &lt;AddIn Type=&quot;Application&quot;&gt;\r\n    &lt;Name&gt;Revit Mastery Application&lt;\/Name&gt;\r\n    &lt;FullClassName&gt;RevitMastery.Revit.RevitMasteryApplication&lt;\/FullClassName&gt;\r\n    &lt;Text&gt;Revit Mastery&lt;\/Text&gt;\r\n    &lt;Description&gt;Revit Mastery plugin as an application.&lt;\/Description&gt;\r\n    &lt;VisibilityMode&gt;AlwaysVisible&lt;\/VisibilityMode&gt;\r\n    &lt;Assembly&gt;D:\\Repos\\RevitMastery\\RevitMastery.Revit\\bin\\Debug\\net8.0-windows\\RevitMastery.Revit.dll&lt;\/Assembly&gt;\r\n    &lt;AddInId&gt;a1f29cab-4880-4e59-86b2-c6fbb0dccb92&lt;\/AddInId&gt;\r\n    &lt;VendorId&gt;Kamil Korus&lt;\/VendorId&gt;\r\n    &lt;VendorDescription&gt;Kamil Korus from revitmastery.com&lt;\/VendorDescription&gt;\r\n  &lt;\/AddIn&gt;\r\n&lt;\/RevitAddIns&gt;\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a63926e elementor-widget elementor-widget-text-editor\" data-id=\"a63926e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>DBApplication (IExternalDBApplication)<\/h3> <strong>DBApplication<\/strong> is the <strong>least common plugin type<\/strong>. It runs code during Revit\u2019s startup and shutdown, but it can\u2019t modify the UI and is rarely used.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Revit API provides three plugin types:\u00a0Command,\u00a0Application, and\u00a0DBApplication. They have various purposes and customization options. \ud83d\udccc TLDR \u2013 Summary Upfront: Revit API has 3 plugin types: \u27a1\ufe0f Command\u00a0(IExternalCommand): Simplest. Great for testing and single-purpose methods. \u27a1\ufe0f Application\u00a0(IExternalApplication): The \u201ctypical plugin\u201d. Customization of ribbon and buttons. \u27a1\ufe0f DBApplication (IExternalDBApplication): Restricted version of Application. Rarely used. Create the [&hellip;]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[6],"tags":[],"post_folder":[],"class_list":["post-2647","post","type-post","status-publish","format-standard","hentry","category-revit-api-basics"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Revit Plugin types - Infralligence<\/title>\n<meta name=\"description\" content=\"Revit API provides three plugin types: Command (IExternalCommand), Application (IExternalApplication), and DBApplication...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/infralligence.com\/pl\/resources\/revit-plugin-types\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Revit Plugin types - Infralligence\" \/>\n<meta property=\"og:description\" content=\"Revit API provides three plugin types: Command (IExternalCommand), Application (IExternalApplication), and DBApplication...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/infralligence.com\/pl\/resources\/revit-plugin-types\/\" \/>\n<meta property=\"og:site_name\" content=\"Infralligence\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-24T07:17:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-31T09:31:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png\" \/>\n<meta name=\"author\" content=\"Kamil Korus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kamil Korus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/\"},\"author\":{\"name\":\"Kamil Korus\",\"@id\":\"https:\/\/infralligence.com\/#\/schema\/person\/838177275b7d3b8b217b13180a74aeda\"},\"headline\":\"Revit Plugin types\",\"datePublished\":\"2024-07-24T07:17:00+00:00\",\"dateModified\":\"2024-12-31T09:31:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/\"},\"wordCount\":404,\"publisher\":{\"@id\":\"https:\/\/infralligence.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png\",\"articleSection\":[\"Revit API Basics\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/\",\"url\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/\",\"name\":\"Revit Plugin types - Infralligence\",\"isPartOf\":{\"@id\":\"https:\/\/infralligence.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png\",\"datePublished\":\"2024-07-24T07:17:00+00:00\",\"dateModified\":\"2024-12-31T09:31:03+00:00\",\"description\":\"Revit API provides three plugin types: Command (IExternalCommand), Application (IExternalApplication), and DBApplication...\",\"breadcrumb\":{\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage\",\"url\":\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png\",\"contentUrl\":\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/infralligence.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Revit Plugin types\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/infralligence.com\/#website\",\"url\":\"https:\/\/infralligence.com\/\",\"name\":\"Infralligence\",\"description\":\"Digital Automation and AI for civil engineering\",\"publisher\":{\"@id\":\"https:\/\/infralligence.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/infralligence.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/infralligence.com\/#organization\",\"name\":\"Infralligence\",\"url\":\"https:\/\/infralligence.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infralligence.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/11\/android-chrome-192x192-1.png\",\"contentUrl\":\"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/11\/android-chrome-192x192-1.png\",\"width\":192,\"height\":192,\"caption\":\"Infralligence\"},\"image\":{\"@id\":\"https:\/\/infralligence.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/infralligence.com\/#\/schema\/person\/838177275b7d3b8b217b13180a74aeda\",\"name\":\"Kamil Korus\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infralligence.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/95bd7da2ac29ff34a2ab9bf4ea30273b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/95bd7da2ac29ff34a2ab9bf4ea30273b?s=96&d=mm&r=g\",\"caption\":\"Kamil Korus\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/kamil-korus\/\"],\"url\":\"https:\/\/infralligence.com\/pl\/resources\/author\/kamil-korus\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Revit Plugin types - Infralligence","description":"Revit API provides three plugin types: Command (IExternalCommand), Application (IExternalApplication), and DBApplication...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/infralligence.com\/pl\/resources\/revit-plugin-types\/","og_locale":"pl_PL","og_type":"article","og_title":"Revit Plugin types - Infralligence","og_description":"Revit API provides three plugin types: Command (IExternalCommand), Application (IExternalApplication), and DBApplication...","og_url":"https:\/\/infralligence.com\/pl\/resources\/revit-plugin-types\/","og_site_name":"Infralligence","article_published_time":"2024-07-24T07:17:00+00:00","article_modified_time":"2024-12-31T09:31:03+00:00","og_image":[{"url":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png"}],"author":"Kamil Korus","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Kamil Korus","Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#article","isPartOf":{"@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/"},"author":{"name":"Kamil Korus","@id":"https:\/\/infralligence.com\/#\/schema\/person\/838177275b7d3b8b217b13180a74aeda"},"headline":"Revit Plugin types","datePublished":"2024-07-24T07:17:00+00:00","dateModified":"2024-12-31T09:31:03+00:00","mainEntityOfPage":{"@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/"},"wordCount":404,"publisher":{"@id":"https:\/\/infralligence.com\/#organization"},"image":{"@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage"},"thumbnailUrl":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png","articleSection":["Revit API Basics"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/","url":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/","name":"Revit Plugin types - Infralligence","isPartOf":{"@id":"https:\/\/infralligence.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage"},"image":{"@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage"},"thumbnailUrl":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png","datePublished":"2024-07-24T07:17:00+00:00","dateModified":"2024-12-31T09:31:03+00:00","description":"Revit API provides three plugin types: Command (IExternalCommand), Application (IExternalApplication), and DBApplication...","breadcrumb":{"@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/infralligence.com\/resources\/revit-plugin-types\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#primaryimage","url":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png","contentUrl":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/12\/ef76ea52-7514-442f-86d2-1de7ac319d13-6.png"},{"@type":"BreadcrumbList","@id":"https:\/\/infralligence.com\/resources\/revit-plugin-types\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/infralligence.com\/"},{"@type":"ListItem","position":2,"name":"Revit Plugin types"}]},{"@type":"WebSite","@id":"https:\/\/infralligence.com\/#website","url":"https:\/\/infralligence.com\/","name":"Infralligence","description":"Digital Automation and AI for civil engineering","publisher":{"@id":"https:\/\/infralligence.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/infralligence.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/infralligence.com\/#organization","name":"Infralligence","url":"https:\/\/infralligence.com\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infralligence.com\/#\/schema\/logo\/image\/","url":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/11\/android-chrome-192x192-1.png","contentUrl":"https:\/\/infralligence.com\/wp-content\/uploads\/2024\/11\/android-chrome-192x192-1.png","width":192,"height":192,"caption":"Infralligence"},"image":{"@id":"https:\/\/infralligence.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/infralligence.com\/#\/schema\/person\/838177275b7d3b8b217b13180a74aeda","name":"Kamil Korus","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infralligence.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/95bd7da2ac29ff34a2ab9bf4ea30273b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/95bd7da2ac29ff34a2ab9bf4ea30273b?s=96&d=mm&r=g","caption":"Kamil Korus"},"sameAs":["https:\/\/www.linkedin.com\/in\/kamil-korus\/"],"url":"https:\/\/infralligence.com\/pl\/resources\/author\/kamil-korus\/"}]}},"_links":{"self":[{"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/posts\/2647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/comments?post=2647"}],"version-history":[{"count":29,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/posts\/2647\/revisions"}],"predecessor-version":[{"id":2905,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/posts\/2647\/revisions\/2905"}],"wp:attachment":[{"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/media?parent=2647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/categories?post=2647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/tags?post=2647"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/infralligence.com\/pl\/wp-json\/wp\/v2\/post_folder?post=2647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}