Tekla API, вызываем скрипт из программы.

Создаем и вызываем макро скрипт из приложения в Текле Tekla Structures Open APIЕсли внимательно изучать Tekla API, то довольно скоро можно заметить, что описанный там функционал не исчерпывает реальных возможностей Tekla Structures. Если у вас есть доступ к Tekla Extranet то, на соответствующих форумах, можно узнать, что дело именно так и обстоит.

Однако возможность использовать все функции есть. Заключается она в работе со скриптами.

Документации по скрипто-писанию как таковой обнаружить не удалось. Впрочем тут, тут и здесь я касался этого вопроса. Собственно создание, запись и анализ скриптов в текле — задача на первый взгляд непростая, но на самом деле тривиальная. Остается не раскрытым вопрос, а как встроить скриптовый функционал в ваше приложение?

Tekla Open API C# пример вызова макроса приложения

Ниже приведен листинг кода который вешается на кнопку интерфейса в приложении. Сама функция создает и вызывает скрипт который меняет масштаб выбранных в чертеже видов на значение которое установлено в тексте кнопки. Скрипт вызывает стандартный диалог, сбрасывает там все чек-боксы, устанавливает новый масштаб, отмечает его чек-бокс, применяет новую настройку и закрывает окно диалога.

//изменяем масштаб видов на чертеже
        private void btViewScale_Click(object sender, EventArgs e)
        {
            string Name = GetMacroFileName();//имя файла, темповое.
            string MacrosPath = string.Empty;//тут будет путь к файлу макроса
            Tekla.Structures.TeklaStructuresSettings.GetAdvancedOption("XS_MACRO_DIRECTORY", ref MacrosPath);//узнаем где нам собственно сохранить макрос чтобы можно было его запустить.
            if (MacrosPath.IndexOf(';') > 0) { MacrosPath = MacrosPath.Remove(MacrosPath.IndexOf(';')); }
            
            //А дальше сам скрипт.
            string script2 = "namespace Tekla.Technology.Akit.UserScript" +
                            "{" +
                            " public class Script" +
                                "{" +
                                    " public static void Run(Tekla.Technology.Akit.IScript akit)" +
                                    " {" +
            @"akit.Callback(""acmd_display_attr_dialog"", ""view_dial"", ""main_frame"");" +
            @"akit.PushButton(""view_on_off"", ""view_dial"");" +
            @"akit.ValueChange(""view_dial"", ""gr_view_scale_en"", ""1"");" +
            @"akit.ValueChange(""view_dial"", ""gr_view_scale"", """ + (sender as Button).Text + @""");" +
            @"akit.PushButton(""view_modify"", ""view_dial"");" +
            @"akit.PushButton(""view_ok"", ""view_dial"");" +
                                    "}}}";

       //записываем наш скрипт в файл
            File.WriteAllText(Path.Combine(MacrosPath, Name), script2);
       //и запускаем скрипт в Tekla
            Tekla.Structures.Model.Operations.Operation.RunMacro("..\\" + Name);
        }
        
        //дополнительная функция. 
                private string GetMacroFileName()
        {
            lock (Random)
            {
                if (_TempFileIndex < 0)
                {
                    _TempFileIndex = Random.Next(0, MaxTempFiles);
                }
                else
                {
                    _TempFileIndex = (_TempFileIndex + 1) % MaxTempFiles;
                }

                return string.Format(FileNameFormat, _TempFileIndex);
            }
        }

Другие статьи по теме Tekla Structures

 

Tekla API, вызываем скрипт из программы.: 1 комментарий

  1. art_rrc 26.03.2016 at 16:30

    Большое спасибо! Очень полезная статья!

Добавить комментарий

Имя *
E-mail *
Сайт