{"id":112,"date":"2016-04-19T10:45:12","date_gmt":"2016-04-19T10:45:12","guid":{"rendered":"http:\/\/cadsupport.ru\/en\/?p=112"},"modified":"2024-04-10T04:49:34","modified_gmt":"2024-04-10T04:49:34","slug":"how-to-use-tekla-macro-script-with-tekla-api","status":"publish","type":"post","link":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/","title":{"rendered":"How to use Tekla Macro Scripts with Tekla API"},"content":{"rendered":"<figure id=\"attachment_119\" aria-describedby=\"caption-attachment-119\" style=\"width: 232px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-119 size-full\" title=\"quick scale switch application which is based on tekla macro scripts functionality\" src=\"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg\" alt=\"Tekla Macro Scripts - using in c# application or script\" width=\"232\" height=\"240\" \/><figcaption id=\"caption-attachment-119\" class=\"wp-caption-text\">Quick view scale switch app example<\/figcaption><\/figure>\n<p>If you\u00a0carefully study the <strong>Tekla API<\/strong>, then pretty soon you will notice that the functionality\u00a0which is listed at Reference Documentations\u00a0does not exhaust the whole possibilities\u00a0of Tekla Structures. If you have access to the <strong>Tekla Extranet<\/strong>, in the appropriate forums, you can see that it is indeed the case.\u00a0However a way to use all the functions exists. It consists in working with Tekla Macro Scripts.<!--more--><\/p>\n<h2>Tekla Open API Limits<\/h2>\n<p>There is no documentation for macro script writing (at least I couldn&#8217;t find it). But actually creating, recording and analysis of scripts at Tekla is a task which is not easy at first glance, but in fact it&#8217;s trivial. Unsolved question is how to embed scripting functionality to your \u00a0C# application?<\/p>\n<p>Below you could find listing of the code that is binds\u00a0on button of application interface. This function create, write as script and invoke that script. As result script changes the scale of the selected view on current drawing and switch it on value that is set in the button text. Script it self call the standard<em> View Dialog<\/em>, throws all of it&#8217;s check boxes, sets a new scale, marks scale check box, apply new settings and close dialog.<\/p>\n<h2>Tekla Macro Scripts example:<\/h2>\n<pre class=\"csharpcode\"><span class=\"rem\">\/\/Change Scale of View on Tekla Drawing<\/span>\r\n        <span class=\"kwrd\">private<\/span> <span class=\"kwrd\">void<\/span> btViewScale_Click(<span class=\"kwrd\">object<\/span> sender, EventArgs e)\r\n        {\r\n            <span class=\"kwrd\">string<\/span> Name = GetMacroFileName();<span class=\"rem\">\/\/Temporary file name.<\/span>\r\n            <span class=\"kwrd\">string<\/span> MacrosPath = <span class=\"kwrd\">string<\/span>.Empty;<span class=\"rem\">\/\/would store Path to script<\/span>\r\n            Tekla.Structures.TeklaStructuresSettings.GetAdvancedOption(<span class=\"str\">\"XS_MACRO_DIRECTORY\"<\/span>, <span class=\"kwrd\">ref<\/span> MacrosPath);<span class=\"rem\">\/\/Find out where is actual macro directory.<\/span>\r\n            <span class=\"kwrd\">if<\/span> (MacrosPath.IndexOf(<span class=\"str\">';'<\/span>) &gt; 0) { MacrosPath = MacrosPath.Remove(MacrosPath.IndexOf(<span class=\"str\">';'<\/span>)); }\r\n            \r\n            <span class=\"rem\">\/\/Create a script as string<\/span>\r\n            <span class=\"kwrd\">string<\/span> script2 = <span class=\"str\">\"namespace Tekla.Technology.Akit.UserScript\"<\/span> +\r\n                            <span class=\"str\">\"{\"<\/span> +\r\n                            <span class=\"str\">\" public class Script\"<\/span> +\r\n                                <span class=\"str\">\"{\"<\/span> +\r\n                                    <span class=\"str\">\" public static void Run(Tekla.Technology.Akit.IScript akit)\"<\/span> +\r\n                                    <span class=\"str\">\" {\"<\/span> +\r\n            <span class=\"str\">@\"akit.Callback(\"<\/span><span class=\"str\">\"acmd_display_attr_dialog\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"view_dial\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"main_frame\"<\/span><span class=\"str\">\");\"<\/span> +\r\n            <span class=\"str\">@\"akit.PushButton(\"<\/span><span class=\"str\">\"view_on_off\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"view_dial\"<\/span><span class=\"str\">\");\"<\/span> +\r\n            <span class=\"str\">@\"akit.ValueChange(\"<\/span><span class=\"str\">\"view_dial\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"gr_view_scale_en\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"1\"<\/span><span class=\"str\">\");\"<\/span> +\r\n            <span class=\"str\">@\"akit.ValueChange(\"<\/span><span class=\"str\">\"view_dial\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"gr_view_scale\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"\"<\/span> + (sender <span class=\"kwrd\">as<\/span> Button).Text + <span class=\"str\">@\"\"<\/span><span class=\"str\">\");\"<\/span> +\r\n            <span class=\"str\">@\"akit.PushButton(\"<\/span><span class=\"str\">\"view_modify\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"view_dial\"<\/span><span class=\"str\">\");\"<\/span> +\r\n            <span class=\"str\">@\"akit.PushButton(\"<\/span><span class=\"str\">\"view_ok\"<\/span><span class=\"str\">\", \"<\/span><span class=\"str\">\"view_dial\"<\/span><span class=\"str\">\");\"<\/span> +\r\n                                    <span class=\"str\">\"}}}\"<\/span>;\r\n\r\n       <span class=\"rem\">\/\/Save to file<\/span>\r\n            File.WriteAllText(Path.Combine(MacrosPath, Name), script2);\r\n       <span class=\"rem\">\/\/Run it at Tekla Structures application<\/span>\r\n            Tekla.Structures.Model.Operations.Operation.RunMacro(\"..\\\\\" + Name);\r\n        }\r\n        \r\n        <span class=\"rem\">\/\/Additional Function - File name generator<\/span>\r\n                <span class=\"kwrd\">private<\/span> <span class=\"kwrd\">string<\/span> GetMacroFileName()\r\n        {\r\n            <span class=\"kwrd\">lock<\/span> (Random)\r\n            {\r\n                <span class=\"kwrd\">if<\/span> (_TempFileIndex &lt; 0)\r\n                {\r\n                    _TempFileIndex = Random.Next(0, MaxTempFiles);\r\n                }\r\n                <span class=\"kwrd\">else<\/span>\r\n                {\r\n                    _TempFileIndex = (_TempFileIndex + 1) % MaxTempFiles;\r\n                }\r\n\r\n                <span class=\"kwrd\">return<\/span> <span class=\"kwrd\">string<\/span>.Format(FileNameFormat, _TempFileIndex);\r\n            }\r\n        }<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you\u00a0carefully study the Tekla API, then pretty soon you will notice that the functionality\u00a0which is listed at Reference Documentations\u00a0does not exhaust the whole possibilities\u00a0of Tekla Structures. If you have access to the Tekla Extranet, in the appropriate forums, you can see that it is indeed the case.\u00a0However a way to use all the functions [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[10,8,11,9,13,7,14,12],"class_list":["post-112","post","type-post","status-publish","format-standard","hentry","category-programing","category-tekla","tag-application","tag-c","tag-drawing","tag-openapi","tag-scale","tag-scripts","tag-tekla-structures","tag-view"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to use Tekla Macro Scripts with Tekla API - CadSupport<\/title>\n<meta name=\"description\" content=\"Tekla Macro Scripts, how to implement functionality to your application example. Good way to avoid Tekla Open API limitations.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use Tekla Macro Scripts with Tekla API - CadSupport\" \/>\n<meta property=\"og:description\" content=\"Tekla Macro Scripts, how to implement functionality to your application example. Good way to avoid Tekla Open API limitations.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/\" \/>\n<meta property=\"og:site_name\" content=\"CadSupport\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-19T10:45:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-10T04:49:34+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg\" \/>\n<meta name=\"author\" content=\"DonJad\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DonJad\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/\",\"url\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/\",\"name\":\"How to use Tekla Macro Scripts with Tekla API - CadSupport\",\"isPartOf\":{\"@id\":\"http:\/\/cadsupport.ru\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#primaryimage\"},\"image\":{\"@id\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg\",\"datePublished\":\"2016-04-19T10:45:12+00:00\",\"dateModified\":\"2024-04-10T04:49:34+00:00\",\"author\":{\"@id\":\"http:\/\/cadsupport.ru\/en\/#\/schema\/person\/b57bc479c7822ae8efbc5a5b624a3b8a\"},\"description\":\"Tekla Macro Scripts, how to implement functionality to your application example. Good way to avoid Tekla Open API limitations.\",\"breadcrumb\":{\"@id\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#primaryimage\",\"url\":\"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg\",\"contentUrl\":\"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg\",\"width\":232,\"height\":240,\"caption\":\"Tekla Macro Scripts - using in c# application or script\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/cadsupport.ru\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use Tekla Macro Scripts with Tekla API\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/cadsupport.ru\/en\/#website\",\"url\":\"http:\/\/cadsupport.ru\/en\/\",\"name\":\"CadSupport\",\"description\":\"smart solutions for engineering duties\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/cadsupport.ru\/en\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/cadsupport.ru\/en\/#\/schema\/person\/b57bc479c7822ae8efbc5a5b624a3b8a\",\"name\":\"DonJad\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/cadsupport.ru\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b22cdec01f0612764c8b311b89954151bfb042524440d622849757864e132a55?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b22cdec01f0612764c8b311b89954151bfb042524440d622849757864e132a55?s=96&d=mm&r=g\",\"caption\":\"DonJad\"},\"url\":\"http:\/\/cadsupport.ru\/en\/author\/donjad\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to use Tekla Macro Scripts with Tekla API - CadSupport","description":"Tekla Macro Scripts, how to implement functionality to your application example. Good way to avoid Tekla Open API limitations.","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":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/","og_locale":"en_US","og_type":"article","og_title":"How to use Tekla Macro Scripts with Tekla API - CadSupport","og_description":"Tekla Macro Scripts, how to implement functionality to your application example. Good way to avoid Tekla Open API limitations.","og_url":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/","og_site_name":"CadSupport","article_published_time":"2016-04-19T10:45:12+00:00","article_modified_time":"2024-04-10T04:49:34+00:00","og_image":[{"url":"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg"}],"author":"DonJad","twitter_card":"summary_large_image","twitter_misc":{"Written by":"DonJad","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/","url":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/","name":"How to use Tekla Macro Scripts with Tekla API - CadSupport","isPartOf":{"@id":"http:\/\/cadsupport.ru\/en\/#website"},"primaryImageOfPage":{"@id":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#primaryimage"},"image":{"@id":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#primaryimage"},"thumbnailUrl":"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg","datePublished":"2016-04-19T10:45:12+00:00","dateModified":"2024-04-10T04:49:34+00:00","author":{"@id":"http:\/\/cadsupport.ru\/en\/#\/schema\/person\/b57bc479c7822ae8efbc5a5b624a3b8a"},"description":"Tekla Macro Scripts, how to implement functionality to your application example. Good way to avoid Tekla Open API limitations.","breadcrumb":{"@id":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#primaryimage","url":"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg","contentUrl":"http:\/\/cadsupport.ru\/en\/wp-content\/uploads\/2016\/04\/Tekla-macro-script-using-in-application.jpg","width":232,"height":240,"caption":"Tekla Macro Scripts - using in c# application or script"},{"@type":"BreadcrumbList","@id":"http:\/\/cadsupport.ru\/en\/how-to-use-tekla-macro-script-with-tekla-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/cadsupport.ru\/en\/"},{"@type":"ListItem","position":2,"name":"How to use Tekla Macro Scripts with Tekla API"}]},{"@type":"WebSite","@id":"http:\/\/cadsupport.ru\/en\/#website","url":"http:\/\/cadsupport.ru\/en\/","name":"CadSupport","description":"smart solutions for engineering duties","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/cadsupport.ru\/en\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"http:\/\/cadsupport.ru\/en\/#\/schema\/person\/b57bc479c7822ae8efbc5a5b624a3b8a","name":"DonJad","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/cadsupport.ru\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b22cdec01f0612764c8b311b89954151bfb042524440d622849757864e132a55?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b22cdec01f0612764c8b311b89954151bfb042524440d622849757864e132a55?s=96&d=mm&r=g","caption":"DonJad"},"url":"http:\/\/cadsupport.ru\/en\/author\/donjad\/"}]}},"_links":{"self":[{"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/posts\/112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/comments?post=112"}],"version-history":[{"count":10,"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/posts\/112\/revisions"}],"predecessor-version":[{"id":202,"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/posts\/112\/revisions\/202"}],"wp:attachment":[{"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/media?parent=112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/categories?post=112"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/cadsupport.ru\/en\/wp-json\/wp\/v2\/tags?post=112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}