{"id":321,"date":"2014-02-25T18:43:56","date_gmt":"2014-02-25T17:43:56","guid":{"rendered":"https:\/\/www.modelical.com\/en\/?p=321"},"modified":"2024-10-18T10:11:46","modified_gmt":"2024-10-18T08:11:46","slug":"revit-api-primer-plugin","status":"publish","type":"post","link":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/","title":{"rendered":"Revit API. Introduccion III"},"content":{"rendered":"<h2>Comando Externo VS Aplicaci\u00f3n Externa<\/h2>\n<p>En el <a href=\"https:\/\/www.modelical.com\/es\/revit-api-todo-lo-que-necesitas-para-empezar\/\">primer post<\/a>\u00a0sobre la API de Revit hablamos sobre la puesta a punto de las herramientas que nos van a ayudar a generar Add-ins en Revit. En el segundo hicimos una reflexi\u00f3n sobre la base necesaria para comenzar. En el presente post partiremos del punto en que nos quedamos en la primera entrada y haremos un primer Add-in.<\/p>\n<p>Lo primero de lo que debemos ser conscientes es que con la API de Revit se pueden hacer b\u00e1sicamente dos tipos de Add-ins: Aplicaciones Externas y Comandos Externos. La diferencia b\u00e1sica entre ambas es el momento en que se ejecuta el c\u00f3digo que contienen.<\/p>\n<p>En las Aplicaciones externas, el c\u00f3digo se ejecuta al abrir Revit y durante el tiempo en que \u00e9ste est\u00e9 abierto, por lo que este tipo de Add-in ser\u00e1 \u00fatil para generar nuestros propios botones en la interface de Revit y gestionar eventos que se produzcan mientras trabajamos en el programa (un evento es, por ejemplo, la creaci\u00f3n de un nuevo elemento, la aparici\u00f3n de un mensaje de advertencia, etc).<\/p>\n<p>Por otra parte, el c\u00f3digo contenido en los Comandos Externos se ejecuta \u00fanicamente cuando \u00e9ste es invocado. Por tanto, este tipo de Add-in es adecuado cuando queremos realizar acciones sobre nuestro documento de Revit en un momento determinado (por ejemplo: seleccionar todas las columnas visibles en una vista).<\/p>\n<p>Comenzaremos por generar un Comando Externo que seleccione todas las columnas presentes en la vista que tenemos activa y nos muestre el recuento de estas. Partiendo del nuevo proyecto de MS Visual C# con las referencias de Revit cargadas, el siguiente paso es invocar los <a href=\"http:\/\/es.wikipedia.org\/wiki\/Espacio_de_nombres\">Namespaces<\/a> que vamos a necesitar. En este caso los Namespaces son: Autodesk.Revit.DB y Autodesk.Revit.UI. Vamos a llamar al comando &#8220;SelectorCol&#8221; y para definirlo como tal emplearemos &#8220;:IExternalCommand&#8221;. Al namespace en el que estar\u00e1 incluido lo llamamos &#8220;SeleccionColumnas&#8221;. Adem\u00e1s vamos a definir que las transacciones est\u00e9n en modo autom\u00e1tico.\u00a0Las transacciones son \u00a0elementos que nos permiten realizar modificaciones en el modelo (cambiar estilos de l\u00edneas, cambiar tipos, crear elementos, etc) y, de momento, con saber que existen es suficiente.<\/p>\n<pre>using System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\n\r\nnamespace SeleccionColumnas\r\n{\r\n\t[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]\r\n\r\n\tpublic class SelectorCol:IExternalCommand\r\n\t{\r\n\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>Una vez hecho esto, podemos generar la estructura b\u00e1sica del comando haciendo click con el bot\u00f3n derecho encima de &#8220;IExternalCommand&#8221; \u00a0y seleccionando -&gt; Implement Interface -&gt; Implement Interface. Se nos generar\u00e1n las l\u00edneas de c\u00f3digo que definen el espacio en el que podemos definir las acciones a realizar por el comando. Podemos suprimir &#8221;\u00a0throw new NotImplementedException();\u00a0&#8221; y sustituirla por &#8220;return Result.Succeeded;&#8221;.\u00a0De los tres inputs que contiene la interface generada, el que m\u00e1s nos va a interesar es &#8220;commandData&#8221;, pues de \u00e9l podemos extraer informaci\u00f3n del modelo. Vamos a crear una variable de clase &#8220;Document&#8221; que contenga el documento que tenemos abierto en Revit al ejecutar el Plug-In y otra variable de clase &#8220;View&#8221; que contenga la vista activa. A ambas se accede desde commandData, pero una vez creada la variable &#8220;documentoAbierto&#8221; podemos acceder a la vista activa desde \u00e9sta.<\/p>\n<pre>using System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\n\r\nnamespace SeleccionColumnas\r\n{\r\n\t[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]\r\n\r\n\tpublic class SelectorCol:IExternalCommand\r\n\t{\r\n\t\tpublic Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)\r\n\t\t{\r\n\t\t\tDocument documentoAbierto = commandData.Application.ActiveUIDocument.Document;\r\n\t\t\tView vistaActiva = documentoAbierto.ActiveView;\r\n\t\t\treturn Result.Succeeded;\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>El siguiente paso es crear una lista que contenga todas las columnas visibles en la vista en la que nos encontramos. Para ello necesitaremos incluir el namespace &#8220;System.Collections.Generic&#8221; junto con el resto de namespaces, ya que en \u00e9l est\u00e1n contenidas las clases de tipo &#8220;lista&#8221;. Para seleccionar las columnas emplearemos un filtro de selecci\u00f3n &#8220;FilteredElementCollector&#8221; al que debemos darle como input el documento y la vista sobre la que queremos aplicar el filtro. Adem\u00e1s debemos usar el m\u00e9todo &#8220;OfCategory&#8221;, que nos permite discriminar seg\u00fan la categor\u00eda del elemento. Por \u00faltimo, emplearemos el m\u00e9todo &#8220;ToElements&#8221; para que el filtro devuelva la lista de elementos. En definitiva, esto ser\u00eda:<\/p>\n<pre> \r\nIList columnasEnVista = new FilteredElementCollector(documentoAbierto, vistaActiva.Id).OfCategory(BuiltInCategory.OST_StructuralColumns).ToElements();\r\n<\/pre>\n<p>Para seleccionar las columnas, debemos incluir en la selecci\u00f3n del ActiveUIDocument cada uno de los elementos incluidos en la lista creada. Para ello, se ha creado un bucle &#8220;foreach&#8221;. El acceso a la selecci\u00f3n se realiza por medio del\u00a0ActiveUIDocument, es decir: \u00a0&#8220;commandData.Application.ActiveUIDocument.Selection&#8221;. A\u00f1adidos los elementos a la selecci\u00f3n, s\u00f3lo queda hacer el recuento de las columnas y mostrar en pantalla el resultado. Para lo primero, se crea una variable tipo string que contendr\u00e1 el recuento de elementos de la lista columnasEnVista. \u00a0Para lo segundo, es necesario crear un &#8220;TaskDialog&#8221; que muestre el texto que queremos que acompa\u00f1e al recuento de columnas y la variable creada para contener el n\u00famero de columnas. Con el m\u00e9todo &#8220;TaskDialog.Show&#8221; en el primer input introducimos el encabezado de la ventana y en el segundo el contenido principal de la ventana.<\/p>\n<p>Una vez hecho esto, nuestro c\u00f3digo deber\u00eda tener un aspecto similar a este:<\/p>\n<pre>using System;\r\nusing System.Collections.Generic;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.UI;\r\n\r\nnamespace SeleccionColumnas\r\n{\r\n\t[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]\r\n\r\n\tpublic class SelectorCol:IExternalCommand\r\n\t{\r\n\t\tpublic Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)\r\n\t\t{\r\n\t\t\tDocument documentoAbierto = commandData.Application.ActiveUIDocument.Document;\r\n\t\t\tView vistaActiva = documentoAbierto.ActiveView;\r\n\r\n\t\t\t\/\/Filtro de selecci\u00f3n y almacenamiento de todas las columnas\r\n\t\t\tIList columnasEnVista = new FilteredElementCollector(documentoAbierto, vistaActiva.Id).OfCategory(BuiltInCategory.OST_StructuralColumns).ToElements();\r\n\r\n\t\t\t\/\/A\u00f1adimos a la selecci\u00f3n todas las columnas almacenadas en columnasEnVista para que queden resaltadas una vez termine el comando\r\n\t\t\tforeach (Element el in columnasEnVista)\r\n\t\t\t{\r\n\t\t\t\tcommandData.Application.ActiveUIDocument.Selection.Elements.Add(el);\r\n\t\t\t}\r\n\r\n\t\t\t\/\/Recuento del n\u00famero de columnas presentes en la vista\r\n\t\t\tstring numeroColumnas = columnasEnVista.Count.ToString();\r\n\r\n\t\t\t\/\/Mostramos un cuadro con la informaci\u00f3n recogida\r\n\t\t\tTaskDialog.Show(\"MODELICAL\", \"Mi primera aplicaci\u00f3n que cuenta el n\u00famero de columnas en esta vista nn N\u00famero de columnas en la vista: \" + numeroColumnas);\r\n\r\n\t\t\treturn Result.Succeeded;\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Tras haber definido las acciones a realizar por nuestra aplicaci\u00f3n, queda compilar el c\u00f3digo para generar el archivo de extensi\u00f3n .dll que emplear\u00e1 Revit. Para ello, en el MS Visual C# vamos al men\u00fa Build y seleccionamos &#8220;Build SeleccionColumnas&#8221; (es decir, Build + Nombre de la soluci\u00f3n en la que estemos trabajando). Se generar\u00e1 entonces el archivo .dll en la subcarpeta binRelease ubicada en la misma ruta que el archivo de MS VIsual C# en el que estamos trabajando (que por defecto ser\u00e1 el definido por MS Visual C#:<\/p>\n<p>&#8220;C:UsersTU_NOMBRE_DE_USUARIODocumentsVisual Studio 2010ProjectsSeleccionColumnasSeleccionColumnas&#8221;.<\/p>\n<p>Por \u00faltimo, es necesario crear un &#8220;manifest file&#8221; que d\u00e9 a Revit las se\u00f1as b\u00e1sicas de la aplicaci\u00f3n que hemos creado. Este archivo puede crearse a con el block de notas, cambiando posteriormente su extensi\u00f3n. El archivo tiene el siguiente aspecto:<\/p>\n<pre><!--?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?-->\r\n\r\nC:UsersGizenemDocumentsVisual Studio 2010ProjectsSeleccionColumnasSeleccionColumnasbinReleaseSeleccionColumnas.dll\r\n137DABDC-2B70-4807-A9F9-3C64EEE3AC14\r\nSeleccionColumnas.SelectorCol\r\n Cuenta Columnas\r\nModelical\r\nTutorial para hacer tu primera aplicaci\u00f3n que cuenta columnas\r\n<\/pre>\n<p>Puesto que hemos implementado un comando, en el &#8220;AddIn Type&#8221; tendr\u00e1 que ser Command. En &#8220;Assembly&#8221; debemos especificar la ruta en la que se encuentra el .dll generado al compilar en Visual Studio. Para el AddInId debemos emplear un <a href=\"http:\/\/en.wikipedia.org\/wiki\/Globally_unique_identifier\">GUID<\/a> que podemos generar con &#8220;guidgen.exe&#8221; una aplicaci\u00f3n para generar guids que trae por defecto Visual C#.<\/p>\n<p>En FullClassName debemos especificar el camino hasta el comando, que en nuestro caso ser\u00e1 SeleccionColumnas.SelectorCol (que indica el namespace en el que est\u00e1 incluido el comando y el nombre del mismo.<\/p>\n<p>Por \u00faltimo, tenemos tres campos relativos a la descripci\u00f3n del Addin: &#8220;Text&#8221; (que indica el texto que mostrar\u00e1 el bot\u00f3n de nuestro comando), &#8220;Vendor&#8221; (es un campo a rellenar que no tiene incidencia en la interface) y &#8220;Description&#8221;(contiene la informaci\u00f3n que se mostrar\u00e1 cuando el cursor se quede encima del bot\u00f3n sin pulsarlo).<\/p>\n<p><img decoding=\"async\" width=\"500\" height=\"172\" class=\"size-full wp-image-3925 aligncenter\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/01\/IMG-4.png\" alt=\"IMG 4\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/01\/IMG-4.png 500w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/01\/IMG-4-480x165.png 480w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/p>\n<p>Si has llegado hasta aqu\u00ed, puede que te interese <a href=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/Blog_Modelical-Tu-primer-AddIn.7z\">descargar el archivo enlazado aqu\u00ed<\/a>, que contiene los ficheros de Microsoft Visual Studio y el manifest file para su descarga y consulta.<\/p>\n<p>Aqu\u00ed puedes ir al siguiente cap\u00edtulo de la introducci\u00f3n: <a href=\"https:\/\/www.modelical.com\/es\/revit-api-assign-url-to-column-transactions\/\">Revit API. Introducci\u00f3n IV &#8211; Asignar una URL a una columna. Transacciones<\/a>.<br \/>\nSi est\u00e1s interesado en el tema o tienes alguna consulta concreta, no dudes en escribir en los comentarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comando Externo VS Aplicaci\u00f3n Externa En el primer post\u00a0sobre la API de Revit hablamos sobre la puesta a punto de las herramientas que nos van a ayudar a generar Add-ins en Revit. En el segundo hicimos una reflexi\u00f3n sobre la base necesaria para comenzar. En el presente post partiremos del punto en que nos quedamos [&hellip;]<\/p>\n","protected":false},"author":62,"featured_media":27199,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[667],"tags":[757],"class_list":["post-321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categorizar","tag-tecnologia-revit-api"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Revit API. Introduccion III - Modelical<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Revit API. Introduccion III - Modelical\" \/>\n<meta property=\"og:description\" content=\"Comando Externo VS Aplicaci\u00f3n Externa En el primer post\u00a0sobre la API de Revit hablamos sobre la puesta a punto de las herramientas que nos van a ayudar a generar Add-ins en Revit. En el segundo hicimos una reflexi\u00f3n sobre la base necesaria para comenzar. En el presente post partiremos del punto en que nos quedamos [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/\" \/>\n<meta property=\"og:site_name\" content=\"Modelical\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Modelical\/\" \/>\n<meta property=\"article:published_time\" content=\"2014-02-25T17:43:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-18T08:11:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/RevitAPI-IntroduccionIII-400x250-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Javier Gimenez Vila\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@modelical\" \/>\n<meta name=\"twitter:site\" content=\"@modelical\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Javier Gimenez Vila\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/\"},\"author\":{\"name\":\"Javier Gimenez Vila\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/aa5c84e0a8d9a65825c686c813c16346\"},\"headline\":\"Revit API. Introduccion III\",\"datePublished\":\"2014-02-25T17:43:56+00:00\",\"dateModified\":\"2024-10-18T08:11:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/\"},\"wordCount\":1166,\"commentCount\":2,\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/RevitAPI-IntroduccionIII-400x250-1.png\",\"keywords\":[\"Tec Revit Api\"],\"articleSection\":[\"Sin categorizar\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/\",\"name\":\"Revit API. Introduccion III - Modelical\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/RevitAPI-IntroduccionIII-400x250-1.png\",\"datePublished\":\"2014-02-25T17:43:56+00:00\",\"dateModified\":\"2024-10-18T08:11:46+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/aa5c84e0a8d9a65825c686c813c16346\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/revit-api-primer-plugin\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/RevitAPI-IntroduccionIII-400x250-1.png\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/RevitAPI-IntroduccionIII-400x250-1.png\",\"width\":400,\"height\":250},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/\",\"name\":\"Modelical\",\"description\":\"We build information\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/aa5c84e0a8d9a65825c686c813c16346\",\"name\":\"Javier Gimenez Vila\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja\",\"caption\":\"Javier Gimenez Vila\"},\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/author\\\/javi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Revit API. Introduccion III - Modelical","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:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/","og_locale":"es_ES","og_type":"article","og_title":"Revit API. Introduccion III - Modelical","og_description":"Comando Externo VS Aplicaci\u00f3n Externa En el primer post\u00a0sobre la API de Revit hablamos sobre la puesta a punto de las herramientas que nos van a ayudar a generar Add-ins en Revit. En el segundo hicimos una reflexi\u00f3n sobre la base necesaria para comenzar. En el presente post partiremos del punto en que nos quedamos [&hellip;]","og_url":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_published_time":"2014-02-25T17:43:56+00:00","article_modified_time":"2024-10-18T08:11:46+00:00","og_image":[{"width":400,"height":250,"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/RevitAPI-IntroduccionIII-400x250-1.png","type":"image\/png"}],"author":"Javier Gimenez Vila","twitter_card":"summary_large_image","twitter_creator":"@modelical","twitter_site":"@modelical","twitter_misc":{"Escrito por":"Javier Gimenez Vila","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/#article","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/"},"author":{"name":"Javier Gimenez Vila","@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/aa5c84e0a8d9a65825c686c813c16346"},"headline":"Revit API. Introduccion III","datePublished":"2014-02-25T17:43:56+00:00","dateModified":"2024-10-18T08:11:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/"},"wordCount":1166,"commentCount":2,"image":{"@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/RevitAPI-IntroduccionIII-400x250-1.png","keywords":["Tec Revit Api"],"articleSection":["Sin categorizar"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/","url":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/","name":"Revit API. Introduccion III - Modelical","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/RevitAPI-IntroduccionIII-400x250-1.png","datePublished":"2014-02-25T17:43:56+00:00","dateModified":"2024-10-18T08:11:46+00:00","author":{"@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/aa5c84e0a8d9a65825c686c813c16346"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.modelical.com\/es\/revit-api-primer-plugin\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/RevitAPI-IntroduccionIII-400x250-1.png","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/02\/RevitAPI-IntroduccionIII-400x250-1.png","width":400,"height":250},{"@type":"WebSite","@id":"https:\/\/www.modelical.com\/es\/#website","url":"https:\/\/www.modelical.com\/es\/","name":"Modelical","description":"We build information","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.modelical.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/aa5c84e0a8d9a65825c686c813c16346","name":"Javier Gimenez Vila","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja","url":"https:\/\/secure.gravatar.com\/avatar\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e7bf2aa96ec5fbb01291216adddb0f852224296cc43a4d6f1d4cf01175725a64?s=96&d=initials&r=g&initials=ja","caption":"Javier Gimenez Vila"},"url":"https:\/\/www.modelical.com\/es\/author\/javi\/"}]}},"_links":{"self":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts\/321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/comments?post=321"}],"version-history":[{"count":0,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts\/321\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media\/27199"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media?parent=321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/categories?post=321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/tags?post=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}