{"id":20087,"date":"2020-12-09T16:50:37","date_gmt":"2020-12-09T15:50:37","guid":{"rendered":"https:\/\/www.modelical.com\/editar-techos-con-la-api-de-revit-te-explicamos-como-hacerlo-aplicando-programacion\/"},"modified":"2024-10-18T08:58:50","modified_gmt":"2024-10-18T06:58:50","slug":"editar-techos-con-la-api-de-revit","status":"publish","type":"post","link":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/","title":{"rendered":"Editar techos con la API de Revit"},"content":{"rendered":"<h2>Te explicamos c\u00f3mo hacerlo aplicando programaci\u00f3n<\/h2>\n<p>En numerosos proyectos tendremos que realizar el modelo de los acabados, lo cual puede ser una tarea laboriosa seg\u00fan la complejidad del proyecto.<\/p>\n<p>La interfaz de Revit no tiene ninguna herramienta que permita generar acabados autom\u00e1ticamente utilizando la informaci\u00f3n las habitaciones, sin embargo mediante la programaci\u00f3n se pueden realizar de forma sencilla soluciones para generar muros y suelos, tal y como mostramos con el nodo del <a title=\"Modelical Dynamo Package Wall Finishes by room\" href=\"https:\/\/www.modelical.com\/es\/node\/wall-wallfinishesbyroom\/\">Modelical Dynamo Package Wall Finishes by room<\/a>.<\/p>\n<p>El problema est\u00e1 cuando llegamos a los techos, despu\u00e9s de revisar la <a title=\"documentaci\u00f3n de la API\" href=\"https:\/\/www.revitapidocs.com\/\">documentaci\u00f3n de la API<\/a> y buscar soluciones en la web, nos encontramos con la siguiente situaci\u00f3n de partida:<\/p>\n<ul>\n<li>La API de Revit no permite crear techos.<\/li>\n<li>La API de Revit \u201cno permite\u201d editar el boceto de los techos.<\/li>\n<\/ul>\n<p>Con esta publicaci\u00f3n ense\u00f1aremos al lector a modificar el per\u00edmetro de los techos, aprovechando el per\u00edmetro de una habitaci\u00f3n. Vamos a utilizar como base de este aprendizaje un peque\u00f1o ejemplo:<\/p>\n<p><em>Supongamos que, despu\u00e9s de haber creado manualmente todos los techos de nuestro modelo, en la \u00faltima actualizaci\u00f3n del proyecto se ha producido un desajuste al modificarse la arquitectura.<\/em><\/p>\n<p><em>Teniendo miles de techos, actualizar los contornos ser\u00eda una tarea tediosa, por suerte esta tarea tambi\u00e9n es potencialmente automatizable. Empecemos con un techo y su habitaci\u00f3n.<\/em><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-16752\" style=\"margin-left: auto; margin-right: auto;\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/CeilingCreator1.png\" alt=\"\" width=\"100%\" height=\"auto\" \/><\/p>\n<h3>Obtener el per\u00edmetro de la habitaci\u00f3n<\/h3>\n<p>Lo primero que hacemos es obtener el contorno de la habitaci\u00f3n. Para ello podemos utilizar el m\u00e9todo <a title=\"GetBoundarySegments\" href=\"https:\/\/www.revitapidocs.com\/\">GetBoundarySegments<\/a> de la clase <a title=\"SpatialElement\" href=\"https:\/\/www.revitapidocs.com\/2020\/e73594e8-23aa-899f-82fb-3490def8ece2.htm\">SpatialElement<\/a>.<\/p>\n<p>Este m\u00e9todo nos devuelve una sublista de listas de segmentos, siendo la primera sublista el contorno exterior de la habitaci\u00f3n y las siguientes los contornos interiores.<\/p>\n<pre class=\"lang:c# decode:true\">Document currentDocument = ActiveUIDocument.Document; \r\n\r\nElementId roomId = new ElementId(207717);\r\n\r\nElement room = currentDocument.GetElement(roomId);\r\n\r\n\/\/get room boundary\r\nSpatialElementBoundaryOptions options = \r\n    new SpatialElementBoundaryOptions();\r\n\t\r\noptions.SpatialElementBoundaryLocation = \r\n    SpatialElementBoundaryLocation.Finish;\r\n\t\r\nIList&lt;IList&lt;ltBoundarySegment&gt;&gt; roomBoundary = \r\n    (room as SpatialElement).GetBoundarySegments(options);<\/pre>\n<p>Vemos que en este ejemplo la habitaci\u00f3n se ha localizado mediante el id (haremos lo mismo con el techo), esto es porque en este ejercicio no pretendemos identificar qu\u00e9 techo corresponde a qu\u00e9 habitaci\u00f3n, eso se lo dejamos al lector.<\/p>\n<h3>Obtener el boceto del techo<\/h3>\n<p>Ahora obtenemos el boceto del techo que queremos editar. En la API de Revit podemos alcanzarlo de la siguiente forma:<\/p>\n<pre class=\"lang:c# decode:true\">ElementId ceilingId = new ElementId(210549);\r\n                \r\nElement ceiling = currentDocument.GetElement(ceilingId);\r\n            \r\n\/\/get ceiling sketch\r\nElementClassFilter filter =\r\n    new ElementClassFilter(typeof(Sketch));\r\n            \r\nElementId sketchId = \r\n    ceiling.GetDependentElements(filter).First();\r\n            \r\nSketch ceilingSketch = \r\n    currentDocument.GetElement(sketchId) as Sketch;\r\n            \r\nCurveArrArray ceilingProfile = ceilingSketch.Profile;\r\n<\/pre>\n<p>Esta instancia de la clase <a title=\"CurveArrArray\" href=\"https:\/\/www.revitapidocs.com\/2020\/c9d071fe-9724-42ed-e280-57381cd44301.htm\">CurveArrArray<\/a> es una matriz que contiene a su vez submatrices que almacenan las l\u00edneas del boceto del techo, separadas por bucles, de forma equivalente al resultado obtenido anteriormente para la habitaci\u00f3n.<\/p>\n<p>El problema est\u00e1 en que los elementos de esta instancia no pueden ser modificados, si lo intentamos recibiremos una excepci\u00f3n del tipo <em>\u201cInvalidOperationException [\u2026] Collection is read-only\u201d<\/em>.<\/p>\n<h3>Obtener las l\u00edneas editables<\/h3>\n<p>Si bien la API de Revit no permite modificar directamente el boceto, s\u00ed hay una cosa que se puede hacer, obtener las l\u00edneas que forman techo y modificarlas.<\/p>\n<pre class=\"lang:c# decode:true\">filter = new ElementClassFilter(typeof(CurveElement));\r\n                \r\nIEnumerable curves = ceiling.GetDependentElements(filter)\r\n    .Select(id =&gt; currentDocument.GetElement(id));\r\n                \r\nIEnumerable modelLines = curves\r\n    .Where(e =&gt; e is ModelLine).Cast();\/\/target\r\n                \r\nif(curves.Count() != modelLines.Count())\r\n     throw new Exception(\"The ceiling contains\" +\r\n\t                     \"non straight lines\");\r\n<\/pre>\n<p>En este caso lo que hemos obtenido es una lista de las l\u00edneas que forman el techo, sin la estructura de bucles.<\/p>\n<p>La pregunta ser\u00eda c\u00f3mo podemos cambiar las l\u00edneas que componen el techo y no romperlo en el intento. Para ello tenemos que tener en cuenta dos condiciones particulares:<\/p>\n<ul>\n<li>Podemos cambiar una l\u00ednea por otra y podemos eliminar l\u00edneas, pero no podemos a\u00f1adirlas.<\/li>\n<li>Podemos modificar los bucles internos y podemos eliminarlos, excepto si dichas modificaciones entran en conflicto con la primera condici\u00f3n. Tampoco podremos a\u00f1adir nuevos bucles.<\/li>\n<\/ul>\n<p>Esto implica que si el techo original ten\u00eda 7 lados en su per\u00edmetro exterior el nuevo per\u00edmetro deber\u00e1 tener 7 o menos lados. Adem\u00e1s el nuevo techo podr\u00e1 tener igual o menor n\u00famero de bucles internos y estos bucles internos podr\u00e1n tener igual o menos aristas que las que ten\u00edan originalmente.<\/p>\n<p><b>En este ejemplo existe otra limitaci\u00f3n que puede ser solventada por el usuario: el techo y la habitaci\u00f3n deben estar formados por l\u00edneas rectas.<\/b><\/p>\n<p>En este punto podemos llegar a la conclusi\u00f3n de que puede ser interesante preservar la estructura del boceto de techo que hab\u00edamos conseguido en el apartado anterior, pero utilizando estas l\u00edneas de modelo que acabamos de conseguir en su lugar. Para ello podemos hacer lo siguiente:<\/p>\n<pre class=\"lang:c# decode:true\">IList&lt;IList&lt;ModelLine&gt;&gt; editableSketch = \r\n    new List&lt;IList&lt;ModelLine&gt;&gt;();\r\n            \r\nforeach (CurveArray loop in ceilingProfile) {\r\n     List&lt;ModelLine&gt; newLoop = new List&lt;ModelLine&gt;();\r\n                \r\n     foreach (Curve edge in loop) {\r\n                    \r\n          foreach (ModelLine modelLine in modelLines) {\r\n               \r\n               Curve currentLine = ((modelLine as ModelLine)\r\n                 .Location as LocationCurve).Curve;\r\n                        \r\n               if (currentLine.Intersect(edge) \r\n                    == SetComparisonResult.Equal){\r\n                    \r\n                    newLoop.Add(modelLine);\r\n                    break;\r\n               }\r\n                \r\n                editableSketch.Add(newLoop);\r\n          }\r\n     }\r\n}\r\n<\/pre>\n<p>Lo que est\u00e1 haciendo este c\u00f3digo es recorrer todos las l\u00edneas de los bucles del boceto de techo (variable ceilingProfile) y buscar la misma l\u00ednea en nuestra lista de l\u00edneas de modelo (variable modelLine), una vez que la encuentra la almacena en una nueva estructura (variable editableSketch) que respeta la estructura del boceto almacenando las l\u00edneas editables.<\/p>\n<h3>Ajustar los datos<\/h3>\n<p>Para evitar errores el c\u00f3digo deber\u00eda comprobar que se cumplen las condiciones mencionadas en el apartado anterior, antes de editar el techo.<\/p>\n<p>El siguiente c\u00f3digo es una simplificaci\u00f3n que:<\/p>\n<ul>\n<li>Ordena el contorno de la habitaci\u00f3n y del techo, dejando como primer elemento el per\u00edmetro exterior, y ordenando el resto de mayor a menor n\u00famero de aristas.<\/li>\n<li>Comprueba el n\u00famero de bucles y el n\u00famero de aristas.<\/li>\n<\/ul>\n<pre class=\"lang:c# decode:true\">\/\/sort room boundary\r\nIList&lt;BoundarySegment&gt; roomPerimeter = roomBoundary[0];\r\n            \r\nroomBoundary = roomBoundary.Skip(1)\r\n   .OrderByDescending(s =&gt; s.Count()).ToList();\r\n            \r\nroomBoundary.Insert(0, roomPerimeter);\r\n\r\n\/\/sort ceiling boundary            \r\nIList&lt;ModelLine&gt; ceilingPerimeter = editableSketch[0];\r\n            \r\neditableSketch = editableSketch.Skip(1)\r\n   .OrderByDescending(s =&gt; s.Count()).ToList();\r\n            \r\neditableSketch.Insert(0, ceilingPerimeter);\r\n\r\n\/\/compare the number of loops and edges\r\nif(roomBoundary.Count() &gt; editableSketch.Count()\r\n  || Enumerable.Range(0, Math.Min(roomBoundary.Count(),\r\n                                  editableSketch.Count()))\r\n  .Any(i =&gt; roomBoundary[].Count()&gt;editableSketch[].Count()))\r\n{\r\n     throw new Exception(\r\n        \"The ceiling's sketch cannot be\" +\r\n\t\t\" adapted to the room's shape.\");\r\n}\r\n<\/pre>\n<h3>Editar el techo<\/h3>\n<p>Ya tenemos el contorno actual del techo y el contorno de la habitaci\u00f3n, que es el que queremos conseguir.<\/p>\n<p>Ahora modificamos las l\u00edneas del techo para que coincidan con las de la habitaci\u00f3n, haciendo uso de la propiedad Location de la clase <a title=\"ModelLine\" href=\"https:\/\/www.revitapidocs.com\/2020\/52b40d5e-8a43-0dd7-035b-ae9de12d024e.htm\">ModelLine<\/a> seg\u00fan se ve en el siguiente c\u00f3digo:<\/p>\n<pre class=\"lang:c# decode:true\">using (Transaction t = new Transaction(currentDocument, \r\n                                      \"Edit ceiling sketch\"))\r\n{\r\n   t.Start();\r\n                    \r\n   for(int i = 0; i &lt; editableSketch.Count(); i++)\r\n   {\r\n      IList&lt;ModelLine&gt; ceilingLoop = editableSketch[];\r\n                        \r\n      if(i &lt; roomBoundary.Count())\r\n      {\r\n         \/\/edit the current loop\r\n         IList&lt;BoundarySegment&gt; roomLoop = roomBoundary[];\r\n                            \r\n         for(int j = 0; j &amp;lt ceilingLoop.Count(); j++)\r\n         {\r\n            ModelLine currentEdge = ceilingLoop[];\r\n                                \r\n            if(j &lt; roomLoop.Count())\r\n            {\r\n               \/\/edit the current edge\r\n               BoundarySegment roomEdge = roomLoop[];\r\n                                    \r\n               Curve newEdge = roomEdge.GetCurve().Clone();\r\n                                    \r\n               if(!(newEdge is Line))\r\n                  throw new Exception(\r\n                     \"The room contains non straight lines\");\r\n\r\n               (currentEdge.Location as LocationCurve).Curve =\r\n\t\t\t       newEdge;\r\n            }\r\n            else\r\n            {\r\n               \/\/remove the current edge\r\n               currentDocument.Delete(currentEdge.Id);\r\n            }\r\n         }\r\n      }\r\n      else\r\n      {\r\n         \/\/remove the current loop\r\n         foreach(ModelLine line in ceilingLoop)\r\n         {\r\n         currentDocument.Delete(line.Id);\r\n         }\r\n      }\r\n   }\r\n\r\n   t.Commit();\r\n}\r\n<\/pre>\n<p>Es importante hacer hincapi\u00e9 en el uso del m\u00e9todo <a title=\"Clone\" href=\"https:\/\/www.revitapidocs.com\/2020\/071f6ca9-f243-4655-924c-7beb881b100f.htm\">Clone<\/a> de la clase <a title=\"Curve\" href=\"https:\/\/www.revitapidocs.com\/2020\/071f6ca9-f243-4655-924c-7beb881b100f.htm\">Curve<\/a> utilizado para replicar la l\u00ednea de la habitaci\u00f3n. Si no se clonara, la l\u00ednea que define el per\u00edmetro de la habitaci\u00f3n estar\u00eda ligada internamente con la l\u00ednea que delimita el techo, llevando a errores cuando el usuario haga modificaciones en estos elementos desde la interfaz de Revit.<\/p>\n<p><b>Como algunos lectores ya se habr\u00e1n dado cuenta, este c\u00f3digo permite modificar el boceto de m\u00e1s elementos aparte de los techos, sin embargo otras categor\u00edas s\u00ed cuentan con m\u00e9todos propios para crear y modificar su geometr\u00eda, recomendamos consultar la documentaci\u00f3n de la <a title=\"API de Revit\" href=\"https:\/\/www.revitapidocs.com\/\">API de Revit<\/a> antes de caer en soluciones m\u00e1s complejas de lo necesario.<br \/>\n<\/b><\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>&nbsp;<\/p>\n<ul>\n<li>La API de Revit no permite editar el boceto de los techos, pero existen trucos para conseguirlo.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Puede parecer que este ejemplo tiene demasiadas limitaciones, sin embargo es la base sobre la que pudimos desarrollar en <a title=\"Modelical\" href=\"https:\/\/www.modelical.com\/en\/\">Modelical<\/a> un add-in como el siguiente:<\/p>\n<p><iframe src=\"https:\/\/www.youtube.com\/embed\/2zCCnIPyMqE\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h3>Referencias<\/h3>\n<p>Debemos dar las gracias a <a title=\"Joe Ye\" href=\"https:\/\/adndevblog.typepad.com\/aec\/joe-ye.html\">Joe Ye<\/a> y su art\u00edculo <a title=\"Change the boundary of floors\/slabs\" href=\"https:\/\/adndevblog.typepad.com\/aec\/2013\/10\/change-the-boundary-of-floorsslabs.html\">Change the boundary of floors\/slabs<\/a>, fue la clave para alcanzar nuestro objetivo.<\/p>\n<p><b>Autor:<\/b> <a title=\"Adri\u00e1n S\u00e1nz\" href=\"https:\/\/www.modelical.com\/en\/author\/adrian\/\">Adri\u00e1n S\u00e1nz<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Te explicamos c\u00f3mo hacerlo aplicando programaci\u00f3n En numerosos proyectos tendremos que realizar el modelo de los acabados, lo cual puede ser una tarea laboriosa seg\u00fan la complejidad del proyecto. La interfaz de Revit no tiene ninguna herramienta que permita generar acabados autom\u00e1ticamente utilizando la informaci\u00f3n las habitaciones, sin embargo mediante la programaci\u00f3n se pueden realizar [&hellip;]<\/p>\n","protected":false},"author":50,"featured_media":26966,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[704],"tags":[748,756,757],"class_list":["post-20087","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guias","tag-tecnologia-c","tag-tecnologia-revit","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>Editar techos con la API de Revit - 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\/editar-techos-con-la-api-de-revit\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Editar techos con la API de Revit - Modelical\" \/>\n<meta property=\"og:description\" content=\"Te explicamos c\u00f3mo hacerlo aplicando programaci\u00f3n En numerosos proyectos tendremos que realizar el modelo de los acabados, lo cual puede ser una tarea laboriosa seg\u00fan la complejidad del proyecto. La interfaz de Revit no tiene ninguna herramienta que permita generar acabados autom\u00e1ticamente utilizando la informaci\u00f3n las habitaciones, sin embargo mediante la programaci\u00f3n se pueden realizar [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/\" \/>\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=\"2020-12-09T15:50:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-18T06:58:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2020\/12\/EditingCeiling-400x250-1.jpg\" \/>\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\/jpeg\" \/>\n<meta name=\"author\" content=\"Adri\u00e1n Sanz\" \/>\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=\"Adri\u00e1n Sanz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/\"},\"author\":{\"name\":\"Adri\u00e1n Sanz\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/c426792dfe0b43d9ba68321226666558\"},\"headline\":\"Editar techos con la API de Revit\",\"datePublished\":\"2020-12-09T15:50:37+00:00\",\"dateModified\":\"2024-10-18T06:58:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/\"},\"wordCount\":1101,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/EditingCeiling-400x250-1.jpg\",\"keywords\":[\"Tec C#\",\"Tec Revit\",\"Tec Revit Api\"],\"articleSection\":[\"Guias\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/\",\"name\":\"Editar techos con la API de Revit - Modelical\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/EditingCeiling-400x250-1.jpg\",\"datePublished\":\"2020-12-09T15:50:37+00:00\",\"dateModified\":\"2024-10-18T06:58:50+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#\\\/schema\\\/person\\\/c426792dfe0b43d9ba68321226666558\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/editar-techos-con-la-api-de-revit\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/EditingCeiling-400x250-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/EditingCeiling-400x250-1.jpg\",\"width\":400,\"height\":250,\"caption\":\"crear techos con una API de Revit\"},{\"@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\\\/c426792dfe0b43d9ba68321226666558\",\"name\":\"Adri\u00e1n Sanz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ec31490ae263394daa1bce46a42c1971229edde7fa496c988991e320bd439e17?s=96&d=initials&r=g&initials=ad\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ec31490ae263394daa1bce46a42c1971229edde7fa496c988991e320bd439e17?s=96&d=initials&r=g&initials=ad\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ec31490ae263394daa1bce46a42c1971229edde7fa496c988991e320bd439e17?s=96&d=initials&r=g&initials=ad\",\"caption\":\"Adri\u00e1n Sanz\"},\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/author\\\/adrian\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Editar techos con la API de Revit - 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\/editar-techos-con-la-api-de-revit\/","og_locale":"es_ES","og_type":"article","og_title":"Editar techos con la API de Revit - Modelical","og_description":"Te explicamos c\u00f3mo hacerlo aplicando programaci\u00f3n En numerosos proyectos tendremos que realizar el modelo de los acabados, lo cual puede ser una tarea laboriosa seg\u00fan la complejidad del proyecto. La interfaz de Revit no tiene ninguna herramienta que permita generar acabados autom\u00e1ticamente utilizando la informaci\u00f3n las habitaciones, sin embargo mediante la programaci\u00f3n se pueden realizar [&hellip;]","og_url":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_published_time":"2020-12-09T15:50:37+00:00","article_modified_time":"2024-10-18T06:58:50+00:00","og_image":[{"width":400,"height":250,"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2020\/12\/EditingCeiling-400x250-1.jpg","type":"image\/jpeg"}],"author":"Adri\u00e1n Sanz","twitter_card":"summary_large_image","twitter_creator":"@modelical","twitter_site":"@modelical","twitter_misc":{"Escrito por":"Adri\u00e1n Sanz","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/#article","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/"},"author":{"name":"Adri\u00e1n Sanz","@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/c426792dfe0b43d9ba68321226666558"},"headline":"Editar techos con la API de Revit","datePublished":"2020-12-09T15:50:37+00:00","dateModified":"2024-10-18T06:58:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/"},"wordCount":1101,"commentCount":0,"image":{"@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2020\/12\/EditingCeiling-400x250-1.jpg","keywords":["Tec C#","Tec Revit","Tec Revit Api"],"articleSection":["Guias"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/","url":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/","name":"Editar techos con la API de Revit - Modelical","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2020\/12\/EditingCeiling-400x250-1.jpg","datePublished":"2020-12-09T15:50:37+00:00","dateModified":"2024-10-18T06:58:50+00:00","author":{"@id":"https:\/\/www.modelical.com\/es\/#\/schema\/person\/c426792dfe0b43d9ba68321226666558"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.modelical.com\/es\/editar-techos-con-la-api-de-revit\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2020\/12\/EditingCeiling-400x250-1.jpg","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2020\/12\/EditingCeiling-400x250-1.jpg","width":400,"height":250,"caption":"crear techos con una API de Revit"},{"@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\/c426792dfe0b43d9ba68321226666558","name":"Adri\u00e1n Sanz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/ec31490ae263394daa1bce46a42c1971229edde7fa496c988991e320bd439e17?s=96&d=initials&r=g&initials=ad","url":"https:\/\/secure.gravatar.com\/avatar\/ec31490ae263394daa1bce46a42c1971229edde7fa496c988991e320bd439e17?s=96&d=initials&r=g&initials=ad","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ec31490ae263394daa1bce46a42c1971229edde7fa496c988991e320bd439e17?s=96&d=initials&r=g&initials=ad","caption":"Adri\u00e1n Sanz"},"url":"https:\/\/www.modelical.com\/es\/author\/adrian\/"}]}},"_links":{"self":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts\/20087","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\/50"}],"replies":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/comments?post=20087"}],"version-history":[{"count":0,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/posts\/20087\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media\/26966"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media?parent=20087"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/categories?post=20087"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/tags?post=20087"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}