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

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

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

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

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

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

//изменяем масштаб видов на чертеже 
// эта функция вешается на onClick event кнопок для изменения масштаба видового окна
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