Tekla OpenAPI FAQ
18. Может ли plug-in, или ConnectionBase, изменить свои входные параметры?
19. В чем разница между приложением, плагином, и скриптом в TeklaStructures?
Plug-ins — компоненты подключаемые в объектную модель приложения TeklaStructures, при этом когда меняется какой либо из параметров компонента, все объекты входящие в него пересоздаются в соответствии с новыми входными данными. Для корректной работы плагин должен быть скомпилирован под конкретную версию Теклы, иначе текла его не сможет подключить.
Приложение — это самостоятельная программа которая может подключаться к Текле при необходимости и может использовать все возможности TeklaAPI. Но для корректной работы оно так же должно быть скомпилировано под конкретную версию Теклы.
Script — это текстовый файл написанный на c# который текла может открыть, скомпилировать в виде .dll, и выполнить. По скольку он написан на c# то вы можете воспользоваться всеми возможностями объектной модели этого языка. Создавать формы, функции, классы, вызывать объекты и так далее.
20. Как узнать название открытой модели?
ModelInfo modelInfo = Model.GetInfo();
Свойство ModelName объекта modelInfo в результате корректного выполнения функции Model.GetInfo() будет содержать название модели. Если ни одной модели не открыто то в переменной будет пустая строка.
21. Можно ли получить доступ к функциям не перечисленным в Open API?
double Thickness2 = 0.0; modelPart.GetReportProperty("PROFILE.WIDTH", ref Thickness); кстати: список полный список атрибутов доступных в текле по умолчанию можно найти в файле contentattributes_global.lst подробнее в в этой статье.
23. Как вставить компонент Текла в модель с помощью API
Следующий код иллюстрирует вставку из кода компонента «FloorTool» из библиотеки компонентов Tekla Structures:
24. Почему не вставляется профиль или плитка?
//This is in Default environment beam.Profile.ProfileString = "HEA300";
25. В чем разница между координатными системами вида и чертежа когда создаешь виды на чертежах?
В объектной модели теклы предусмотрено несколько методов для создания вида на чертеже. Но все они требуют две системы координат в качестве обязательных аргументов:
public View(Tekla.Structures.Drawing.ContainerView View, Tekla.Structures.Geometry3d.CoordinateSystem ViewCoordinateSystem,Tekla.Structures.Geometry3d.CoordinateSystem DisplayCoordinateSystem, System.Collections.ArrayList PartList)
Разница между этими двумя системами в следующем:
View coordinate system — это система координат трехмерной модели.
Display coordinate system — система координат в которой вид, в котором мы видим объекты из модели.
Пример можно найти в startUp Package в проекте — BasicViews.sln, ищите методы AddView и AddRotatedView.
26. Почему .NET макрос выбрасывает исключение если с момента запуска окно несколько минут было открыто?
Это возможно с макросами которые используют akit интерфейс.
По умолчанию akit соединение длится совсем не долго. В порядке сохранения akit соединения онлайн на долгое время вам поможет следующий метод: order to keep the akit link alive as long as your macro is running you need the next method:
Этот метод используется в MultiReportGenerator чтобы удостоверится что akit соединение всё время доступно.
static Tekla.Technology.Akit.IScript akit; public static void Run(Tekla.Technology.Akit.IScript akit_in) { System.Runtime.Remoting.Lifetime.ClientSponsor sponsor = null; try { sponsor = new System.Runtime.Remoting.Lifetime.ClientSponsor(); akit = akit_in; sponsor.Register((System.MarshalByRefObject)akit); Application.Run(new ReportGenerator()); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message + "\n" + ex.StackTrace); } finally { if (sponsor != null) { sponsor.Close(); } } }
27. Как узнать какая версия Теклы запущена?
string TSVersion = Model.GetCurrentProgramVersion();
28. Why I get the next message «Cannot load DLL dakit.dll: Given module not found.»?
29. Можно ли получить отчетные значения (report properties) в локальной системе кординат опрашиваемого объекта?
30. Привязка макросов к версии Tekla Structures.
31. Как запустить внешнее приложение из Теклы?
// Generated by Tekla.Technology.Akit.ScriptBuilder using Tekla.Structures.Model; using SD =System.Diagnostics; namespace Tekla.Technology.Akit.UserScript { public class Script { public static void Run(Tekla.Technology.Akit.IScript akit) { SD.Process Process = new SD.Process(); Process.EnableRaisingEvents=false; Process.StartInfo.FileName="iexplore"; Process.StartInfo.Arguments="https://extranet.tekla.com"; Process.Start(); } } }
32. Как получить выборку объектов определенного типа в модели?
ModelObjectEnumerator BooleanEnum =
Model.GetModelObjectSelector().GetAllObjectsWithType(
ModelObject.ModelObjectEnum.BOOLEANPART);
33. Reading inp files without restarting TS.
You can read inp files without restarting Tekla Structures by setting XS_DYNAMIC_INPUT_FILE=TRUE, preferable in the …\TeklaStructures\<version>\nt\bin\user.ini file.
This will enable an «update» button in your inp dialog that when clicked will read your new inp file.
Please be careful when using this feature, since there can be problems, like some memory handling problems. So don’t use it during production, only to develop the dialogs for your plugins or custom components.
We don’t recommend to use this feature, but since many users know about it we want to warn you of the risks involved in using it.
Edit: please note that the inp name cannot contain any «_», this will cause the update to fail!
span/pdouble/span/div
34. Как добавить Tekla Component в модель с помощью Tekla Open API
Листинг:
const string PluginName = "FloorTool"; ArrayList points = new ArrayList { new Point(0, 0, 0), new Point(0, 6000, 0), new Point(7200, 6000, 0), new Point(7200, 0, 0) }; Polygon inputPolygon = new Polygon { Points = points }; ComponentInput componentInput = new ComponentInput(); componentInput.AddInputPolygon(inputPolygon); Component component = new Component(componentInput) { Name = PluginName, Number = -100000 }; component.LoadAttributesFromFile("standard"); component.Insert();
в ComponentInput — нужно добавить все входящие данные из интерфеса, точки, ссылки на объекты и т.п.
Например, если вводные данные компонента, список точек в модели, выбранные пользователем то:
const string PluginName = «Test»;
ComponentInput componentInput = new ComponentInput(); componentInput.AddOneInputPosition(new TSG3D.Point(0,0,0)); componentInput.AddOneInputPosition(new TSG3D.Point(0,1000,0)); componentInput.AddOneInputPosition(new TSG3D.Point(1000,1000,0)); componentInput.AddOneInputPosition(new TSG3D.Point(1000,0,0)); TSM.Component component = new TSM.Component(componentInput) { Name = PluginName, Number = -100000 }; component.Insert(); const string PluginName = "DJhandrails";
35 Плагины, как добавить во входящие данные деталь.
С помощью этого кода у пользователя можно запросить ввод элемента модели, который можно будет в дальнейшем обраборать в методе RUN вашего плагина.
public override List DefineInput() { List PartList = new List(); Picker _picker = new Picker(); TSM.Beam beam1 = (TSM.Beam)_picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART); PartList.Add(new InputDefinition(beam1.Identifier)); return PartList; } public override bool Run(List<InputDefinition> input) { // Get the Input parts to use in this part of the code Beam beam = (Beam)_model.SelectModelObject((Identifier)input[0].GetInput()) … }
36 Как получить список выбраных чертежей из списка Drawing List.
var CurrentDrawingHandler = new TSD.DrawingHandler(); //получаем доступ к чертежам
var drawingsEnum = CurrentDrawingHandler.GetDrawingSelector().GetSelected(); //получение чертежей, выбранных пользователем
while(drawingsEnum.MoveNext()) //перебираем перебираем полученый список
{
var _drawing = drawingsEnum.Current as TSD.Drawing; //получили доступ к конкретному чертежу.
string some_string = string.Empty;
_drawing .GetUserProperty(«Default», ref some_string );//сделаем с ним что нибудь, например получим UDA.
MessageBox.Show(some_string ); //И выведем его, чтобы убедится что все работает.
}
оочень хочу научится писать приложения для теклы где можно найти материал на эту тему?
В принципе вся информация опубликована на портале теклы:
http://extra.tekla.com
Естественно на иностранном. :/ но хочешь научиться, придется изучать всё равно.
Не подскажете если какая нибудь возможность получить инструменты для создания параметрических узлов через OPEN TEKLA API не имея лицензии. Буду очень благодарен за ответ. Моя почта shjin777собакаgmail.com
Да, все инструменты в текле есть. Для того чтобы начать работать достаточно подключить в проект на C# следующие библиотеки:
Tekla.Structures.dll — основная библиотека, обязательная для работы с текла с помощью C#.
Tekla.Strucutes.Geometry.dll — содержит классы для работы с геометрией — точки, вектора, их вращение и т.п.
Tekla.Structures.Dialog.dll — с помощью этой библиотеки можно подключиь стандартные диалоги для ваших АПИ компонентов.
Tekla.Structures.Drawgin.dll — здесь классы для работы с чертежами
Tekla.Structures.Model.dll — классы для работы с моделью.
Tekla.Structures.Plugins.dll — классы для написания компонента на C#
Tekla.Structures.Catalog.dll — классы для работы с каталогами (профилей, материалов, болтов)
лежит это богатство тут:
..\TeklaStructures\19.0\nt\bin
еще не помешает reference c описанием и примеры.
Здравствуйте.
В Текле все профили в библиотеке поделены на группы (двутавры, тавры, швеллеры и т.д.), дальше в группах дополнительные параметры (деление по ГОСТ или типа того) ну и потом сам профиль.
Есть ли возможность прочитать какие группы уже есть, и какие госты в них записаны, ну и дальше какие профили созданы в самих групах гостов?
И есть ли возможность через API создавать такие сечения динамически?
Спасибо большое
Можно создать .lis файл.
Апи для этого не нужно, достаточно изучить параметры самих профилей в файле.
А потом уже создать приложение которое сгененирирует нужные профиля, со всеми атрибутами.
С генерацией .lis файлов проблемы не было, спасибо 🙂
Добрый день!
Подскажите, как правильно создать пользовательский компонент с использованием C# VisualStudio? Где взять его имя, входные параметры? Как изменить программно открытые для редактирования его параметры?
http://cadsupport.ru/tekla-api-faq/2/#insert-tekla-component-api
Вот тут приведен пример добавления компонента с помощью текла апи. Взять список необходимых свойств можно следующим образом- настроить компонент и сохранить эту настройку. Дальше в папке с моделью можно найти папку attributes и там текстовый файл с этой настройкой, в котором перечислены все необходимые имена атрибутов.
Доброго времени суток!
С Текловским Open Api работаю уже несколько лет, в данный момент пишу плагин для работы с Tekla Analysis.
Столкнулся со следующей проблемой — вытягиваю из модели AnalysisPart, далее фрагмент кода (TSA заменил Tekla::Structures::Analysis для упрощения):
TSA::Analysis^ _analysis = gcnew TSA::Analysis();
TSA::AnalysisObjectSelector^ _analysisObjectSelector = _analysis->GetAnalysisObjectSelector();
TSA::AnalysisObjectEnumerator^ analysisObjectEnumerator =
_analysisObjectSelector->GetAllObjectsWithType(TSA::AnalysisObject::AnalysisObjectEnum::ANALYSIS_PART, _analysisModelName);
if (analysisObjectEnumerator != nullptr)
{
for each (TSA::AnalysisPart^ nextPart in analysisObjectEnumerator)
{
nextPart->AnalysisPartBarAttributes->BarStartCondition->EccentricityMode =
TSA::AnalysisPartEnd::EccentricityModeEnum::ECCENTRICITY_MODE_MANUAL;
nextPart->AnalysisPartBarAttributes->BarStartCondition->Eccentricity->X = 1.23;
}
nextPart->Modify();
}
то-есть — перебираю каждый и устанавливаю для них определенные параметры, для упрощения понимания оставил два.
Затем, естественно каждому делаю Modify.
Странность состоит в том, что после отработки плагина в AnalysisPart данные не появляются.
Или я что-то неправильно делаю, или Текловцы API не дописали почеловечески.
Во всяком случае для физической модели я делаю нечто подобное и там данные обновляются.
Посоветуйте, пожалуйста где я допустил ошибку?
Если открыть справку по API, даже в 2016i — можно обратить внимание, что раздел Analysis — документирован крайне слабо по сравнению с другими разделами. И сформирован по сути автоматически, представляя собой просто список методов и свойств.
Лично я пока не рассматриваю Tekla Structures в качестве расчетного пакета, потому в эту сторону даже не смотрю. Как я понимаю это задел на будущее, которое пока не наступило.
В целом то, что метод Modify() не срабатывает — странно. Нечто похожее встречалось в 18.1 — не срабатывал медот Modify для DwgObject в разделе Drawing.
Так что как вариант — можно попробовать исполнить код в другой версии Теклы.
Уже разобрался со своей проблемой, описанной выше: оказывается нужно обязательно удалять модель анализа
String^ analysisModelName = _analysisModel->AnalysisModelName;
String^ analysisEngineName = _analysisModel->AnalysisEngine;
_analysisModel->Delete();
и затем создать новую с таким-же именем и необходимыми параметрами (сохранив их предварительно)
_analysisModel = gcnew Tekla::Structures::Analysis::AnalysisModel();
_analysisModel->AnalysisModelName = analysisModelName;
_analysisModel->AnalysisEngine = analysisEngineName;
_analysisModel->AnalysisObjectType = Tekla::Structures::Analysis::AnalysisObject::AnalysisObjectEnum::ANALYSIS_MODEL;
_analysisModel->MemberAxislocation = Tekla::Structures::Analysis::AnalysisModel::AxisLocationEnum::REFERENCE_AXIS;
_analysisModel->Insert();
теперь данные в AnalysisPart появляются стабильно.
To DonJad
Support request:
C# 1. How to set new ModificationStamp, after ZERO, with date
(ModificationStamp CurStamp = new ModificationStamp(1,0); — ?)
2. How to retrieve modified PARTS after setting this ModificationStamp
Problem: I need to programmatically select PARTS created or modified after a
certain date for their programmatic processing, not for a report, several
times in one project.
https://developer.tekla.com/api/5/15321 -> is not useful
Здравствуйте.
Как получить папку Plugins, или папку где лежит файл TeklaStructures.exe
В той папке в которой установлена Текла, и туда же ссылается ярлык которым вы Теклу запускаете.
Здравствуйте. Не могу найти ваши контакты, напишите на e-mail пожалуйста
Can we able to create plugin or macro which will filter the member by profile type and change the class of member which we are providing in form.
Sure we can, simple task for script.
Как проверить через API, что такого пользовательского атрибута нет? GetUserProperty возвращает false если свойства нет или оно пустое. SetUserProperty возвращает true даже если такого свойства нет.
Здравствуйте. Не могу найти ваши контакты, напишите на e-mail пожалуйста
Написал.
Как через апи выйти из теклы? Еxit, выход из Теклы, т.е. как сохранить модель и закрыть главное окно теклы программно, не прибивая процессы? Спасибо.
Думаю, что Tekla сама себя закрыть не сможет. Все таки нужно отдельное приложение, которое будет управлять процессом запуска теклы и ее закрытием (через Process).
Кстати, у Tekla есть возможность запускаться обходя различные стартовые окна (т.е. без участия пользователя) и сразу открывать нужную модель. Для этого нужно настроить файл Bypass.ini и передать его в аргументы процесса вместе с путем к модели. Подробнее здесь: https://support.tekla.com/article/how-to-create-a-shortcut-to-bypass-the-login-dialog-and-immediately-open-your-model
Ну а сохранение модели и закрытие модели через ModelHandler. Подробнее здесь: https://developer.tekla.com/doc/tekla-structures/2023/model-handler-class-18241