{"id":2073,"date":"2014-09-30T09:09:11","date_gmt":"2014-09-30T07:09:11","guid":{"rendered":"https:\/\/www.modelical.com\/?p=713"},"modified":"2022-05-09T11:50:33","modified_gmt":"2022-05-09T09:50:33","slug":"duplicar-armaduras-api-revit","status":"publish","type":"node","link":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/","title":{"rendered":"Duplicar Armaduras"},"content":{"rendered":"<p>A ra\u00edz de uno de los proyectos de consultor\u00eda que tenemos en marcha hemos llevado Revit al extremo en lo que se refiere al dise\u00f1o y detallado de armaduras. Revit no es, ni de lejos, la mejor aplicaci\u00f3n para hacer despieces o estudiar conexiones complejas, pero si que es una aplicaci\u00f3n robusta y que cada d\u00eda integra a m\u00e1s profesionales, y muchas de las cosas que no pueden hacerse &#8220;out-of-the-box&#8221; son posibles con un m\u00ednimo conocimiento de la API.<\/p>\n<p>Resulta que en algunas ocasiones, cuando duplicamos una barra de armadura que se encuentra\u00a0interactuando con otras\u00a0y sobre todo si \u00e9stas \u00faltimas son estribos, la copia acaba en una posici\u00f3n imprevisible y, lo peor de todo, con unas restricciones que poco tienen que ver con las de la barra original. F\u00edjate en la imagen, la barra azul est\u00e1 interactuando con el estribo en U:<\/p>\n<p><img decoding=\"async\" width=\"1400\" height=\"722\" class=\"alignnone size-full wp-image-3970\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg\" alt=\"DupRebar00\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg 1400w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00-480x248.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00-768x396.jpg 768w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00-1280x660.jpg 1280w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/p>\n<p>Y ahora, tras copiar la barra al portapapeles y pegarla en el mismo sitio, obtenemos esto.<\/p>\n<p><img decoding=\"async\" width=\"1400\" height=\"722\" class=\"alignnone size-full wp-image-3971\" src=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar01.jpg\" alt=\"DupRebar01\" srcset=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar01.jpg 1400w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar01-480x248.jpg 480w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar01-768x396.jpg 768w, https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar01-1280x660.jpg 1280w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/p>\n<p>La barra se recoloca y se pega al otro estribo. De hecho, las restricciones han cambiado, s\u00f3lo en uno de los Handles, pero lo suficiente para que tengamos que reposicionarla.<\/p>\n<p>Pues bien, para remediar este comportamiento es necesario conocer bien <a title=\"Revit RebarConstraintsManager\" href=\"http:\/\/www.revitapidocs.com\/2015\/32fe1ec6-ddb3-feac-f18c-8683b054f639.htm\" target=\"_blank\" rel=\"noopener\">c\u00f3mo funcionan las interacciones entre barras en Revit<\/a> (Ingl\u00e9s) para poder sacarle partido a la API.<\/p>\n<p>El siguiente c\u00f3digo crea un comando que permite copiar una armadura manteniendo las mismas restricciones.<\/p>\n<pre class=\"right-set:true wrap:true lang:c# decode:true \">using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Autodesk.Revit.DB;\r\nusing Autodesk.Revit.DB.Structure;\r\nusing Autodesk.Revit.UI;\r\nusing Autodesk.Revit.UI.Selection;\r\n\r\nnamespace CopyReinforcementKeepConstraints\r\n{\r\n    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]\r\n    public class ReinforcementCopier:IExternalCommand\r\n    {\r\n        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)\r\n        {\r\n            UIDocument uidoc=commandData.Application.ActiveUIDocument;\r\n            Document doc= uidoc.Document;\r\n            RebarPickFilter selFilter = new RebarPickFilter(); \/\/use the selection filter\r\n            Reference reference = uidoc.Selection.PickObject(ObjectType.Element, selFilter, \"Please select a rebar to be copied\");\r\n            Element el = doc.GetElement(reference); \/\/get the Rebar reference\r\n            ICollection&lt;ElementId&gt; elID = new List&lt;ElementId&gt;();\r\n            elID.Add(el.Id); \/\/create a list to pass it to the copy method below\r\n            Rebar myRebar = el as Rebar; \/\/get the Rebar \r\n            ICollection&lt;ElementId&gt; newID = new List&lt;ElementId&gt;(); \/\/create a list to host the duplicate rebar\r\n            RebarConstraintsManager myRCM = myRebar.GetRebarConstraintsManager();\r\n            IList&lt;RebarConstrainedHandle&gt; handleClander=myRCM.GetAllConstrainedHandles(); \/\/A list to hold constrained handles\r\n            IList&lt;RebarConstraint&gt; constraints = new List&lt;RebarConstraint&gt;(); \/\/A list to host constraints applied to each handle\r\n            foreach (RebarConstrainedHandle cHandle in handleClander)\r\n            {\r\n                constraints.Add(myRCM.GetCurrentConstraintOnHandle(cHandle)); \/\/collect all constraints\r\n            }\r\n            Transaction trans1 = new Transaction(doc, \"DUPLICATE REBAR\");\r\n            trans1.Start();\r\n                try\r\n                {\r\n                    newID = ElementTransformUtils.CopyElements(doc, elID, new XYZ(0, 0, 0)); \/\/duplicate rebar, in same place\r\n\r\n                    Rebar myNewRebar = doc.GetElement(newID.ElementAt(0)) as Rebar; \/\/retrieve the rebar from the newly created ID\r\n\r\n                    RebarConstraintsManager myNewRCM = myNewRebar.GetRebarConstraintsManager(); \/\/access the new rebar constraints\r\n                    IList&lt;RebarConstrainedHandle&gt; handleClanderDuodenal = myNewRCM.GetAllConstrainedHandles(); \/\/access the new rebar handles\r\n                    for (int i = 0; i &lt; handleClanderDuodenal.Count; i++)\r\n                    {\r\n                        myNewRCM.SetPreferredConstraintForHandle(handleClanderDuodenal[i],constraints[i]); \/\/assign the new rebar handles the same constrains as the original one\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                   message = ex.Message;\r\n                   return Result.Failed;\r\n                }\r\n            trans1.Commit(); \/\/close your transaction\r\n            return Result.Succeeded;\r\n        }\r\n        \/\/create a filter to select only rebars.\r\n        public class RebarPickFilter : ISelectionFilter\r\n        { \r\n            public bool AllowElement(Element e)\r\n            {\r\n                return (e.Category.Id.IntegerValue.Equals(\r\n                  (int)BuiltInCategory.OST_Rebar));\r\n            }\r\n            public bool AllowReference(Reference r, XYZ p)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Utiliza este Addin Manifest para registrar tu Comando.<\/p>\n<pre class=\"wrap:true lang:xhtml decode:true\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RevitAddIns&gt;\r\n  &lt;AddIn Type=\"Command\"&gt;\r\n    &lt;Name&gt;CopyReinforcementKeepConstraints&lt;\/Name&gt;\r\n    &lt;Assembly&gt;C:ProgramDataAutodeskRevitAddins2014CopyReinforcementKeepConstraints.dll&lt;\/Assembly&gt;\r\n    &lt;AddInId&gt;8c22e788-192d-4388-82b6-bff244938829&lt;\/AddInId&gt;\r\n    &lt;FullClassName&gt;CopyReinforcementKeepConstraints.ReinforcementCopier&lt;\/FullClassName&gt;\r\n    &lt;Text&gt;Duplicate Rebar&lt;\/Text&gt;\r\n    &lt;VendorId&gt;Modelical&lt;\/VendorId&gt;\r\n    &lt;VendorDescription&gt;Modelical FTW&lt;\/VendorDescription&gt;\r\n  &lt;\/AddIn&gt;\r\n&lt;\/RevitAddIns&gt;\r\n<\/pre>\n<p>Quiero dar las gracias a Javier Gim\u00e9nez y Juan Ma P\u00e9rez por ayudarme con este primer comando para Revit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A ra\u00edz de uno de los proyectos de consultor\u00eda que tenemos en marcha hemos llevado Revit al extremo en lo que se refiere al dise\u00f1o y detallado de armaduras. Revit no es, ni de lejos, la mejor aplicaci\u00f3n para hacer despieces o estudiar conexiones complejas, pero si que es una aplicaci\u00f3n robusta y que cada [&hellip;]<\/p>\n","protected":false},"featured_media":0,"template":"","categories":[],"tags":[757],"class_list":["post-2073","node","type-node","status-publish","hentry","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>Duplicar Armaduras - 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\/node\/duplicar-armaduras-api-revit\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Duplicar Armaduras - Modelical\" \/>\n<meta property=\"og:description\" content=\"A ra\u00edz de uno de los proyectos de consultor\u00eda que tenemos en marcha hemos llevado Revit al extremo en lo que se refiere al dise\u00f1o y detallado de armaduras. Revit no es, ni de lejos, la mejor aplicaci\u00f3n para hacer despieces o estudiar conexiones complejas, pero si que es una aplicaci\u00f3n robusta y que cada [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/\" \/>\n<meta property=\"og:site_name\" content=\"Modelical\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Modelical\/\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-09T09:50:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@modelical\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/\",\"name\":\"Duplicar Armaduras - Modelical\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/09\\\/DupRebar00.jpg\",\"datePublished\":\"2014-09-30T07:09:11+00:00\",\"dateModified\":\"2022-05-09T09:50:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/09\\\/DupRebar00.jpg\",\"contentUrl\":\"https:\\\/\\\/www.modelical.com\\\/wp-content\\\/uploads\\\/2014\\\/09\\\/DupRebar00.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/duplicar-armaduras-api-revit\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Nodes & Macros\",\"item\":\"https:\\\/\\\/www.modelical.com\\\/es\\\/node\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Duplicar Armaduras\"}]},{\"@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\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Duplicar Armaduras - 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\/node\/duplicar-armaduras-api-revit\/","og_locale":"es_ES","og_type":"article","og_title":"Duplicar Armaduras - Modelical","og_description":"A ra\u00edz de uno de los proyectos de consultor\u00eda que tenemos en marcha hemos llevado Revit al extremo en lo que se refiere al dise\u00f1o y detallado de armaduras. Revit no es, ni de lejos, la mejor aplicaci\u00f3n para hacer despieces o estudiar conexiones complejas, pero si que es una aplicaci\u00f3n robusta y que cada [&hellip;]","og_url":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/","og_site_name":"Modelical","article_publisher":"https:\/\/www.facebook.com\/Modelical\/","article_modified_time":"2022-05-09T09:50:33+00:00","og_image":[{"url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_site":"@modelical","twitter_misc":{"Tiempo de lectura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/","url":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/","name":"Duplicar Armaduras - Modelical","isPartOf":{"@id":"https:\/\/www.modelical.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/#primaryimage"},"image":{"@id":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/#primaryimage"},"thumbnailUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg","datePublished":"2014-09-30T07:09:11+00:00","dateModified":"2022-05-09T09:50:33+00:00","breadcrumb":{"@id":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/#primaryimage","url":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg","contentUrl":"https:\/\/www.modelical.com\/wp-content\/uploads\/2014\/09\/DupRebar00.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.modelical.com\/es\/node\/duplicar-armaduras-api-revit\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Nodes & Macros","item":"https:\/\/www.modelical.com\/es\/node\/"},{"@type":"ListItem","position":2,"name":"Duplicar Armaduras"}]},{"@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"}]}},"_links":{"self":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/node\/2073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/node"}],"about":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/types\/node"}],"wp:attachment":[{"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/media?parent=2073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/categories?post=2073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.modelical.com\/es\/wp-json\/wp\/v2\/tags?post=2073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}