Tekla OpenAPI FAQ
Оглавление
- 1. Для чего применяется Tekla Structures OpenAPI?
- 2. Как узнать тип выбранного объекта?
- 3. Как получить номер позиции или сборки?
- 18. Может ли plug-in, или ConnectionBase, изменить свои входные параметры?
- 19. Чем отличаются приложения, макросы и плагины
- 20. Как узнать название открытой модели?
- 21. Можно ли получить доступ к функциям не перечисленным в Open API?
- 22. Почему GetReportProperty() ничего не возвращает?
- 23. Как вставить компонент из кода
- 24. Почему не вставляется профиль или плитка?
- 26. Почему .NET макрос выбрасывает исключение если с момента запуска окно несколько минут было открыто?
- 29. Можно ли получить отчетные значения (report properties) в локальной системе кординат опрашиваемого объекта?
- 30. Привязка макросов к версии Tekla Structures.
- 31. Как запустить внешнее приложение из Теклы?
- 32. Как получить выборку объектов определенного типа в модели?
- 34. Как добавить Tekla Component с помощью API
- 35. Плагины, как добавить во входящие данные деталь.
- 36 Как получить список выбраных чертежей из списка Drawing List.
- Как удалить элементы подрезки (Cutting Parts)
1. Для чего применяется Tekla OpenAPI?
namespace Tekla.Technology.Akit.UserScript
{
public class Script
{
public static void Run(Tekla.Technology.Akit.IScript akit)
{
akit.Callback("acmd_display_attr_dialog", "detail_dial", ""main_frame");
akit.PushButton("butDetailSymbol_on_off", "detail_dial");
akit.PushButton("butDetailSymbol_on_off", "detail_dial");
akit.ValueChange("detail_dial", "lbltxtDetailLabelIndexStart", "1");
akit.PushButton("butDetailSymbol_modify", "detail_dial");
akit.PushButton("butDetailSymbol_ok", "detail_dial");
}
}
}
2. Как узнать тип выбранного объекта?
В примере условием проверяем соответствует ли объект тому типу, что нужен нам.
while(myEnum.MoveNext()) { Beam myBeam = myEnum.Current as Beam; If (myBeam != null) { // beam selected, add code for beam here } }
myEnum — это список объектов Текла. Beam — класс балок TeklaStructures, myBeam — объект класса Beam, которому мы присваиваем текущий объект из списка, как балку. Если в результате myBeam — не равен null, т.е. содержит ссылку на представление балки в Текле, то запускаем код программы. Если же он пуст, берем следующий объект из списка myEnum. И далее по кругу, пока myEnum.Next() не вернет false, т.е. список закончится.
3. Как получить номер позиции или сборки?
С помощью функции GetReportProperty(string name, ref string)
первый аргумент это имя параметра, второй — ссылка объявленную строковую переменную в которую будет возвращен результат выполнения функции.
Beam B = new Beam(point, point2); string AssPos = ""; if(!B.GetReportProperty("ASSEMBLY_POS", ref AssPos)) Console.WriteLine("GetReportProperty failed!!!");
4. Какие именно свойства объектов можно получить с помощью GetReport?
Полный список параметров для запроса можно найти тут: contentattributes_global.lst в папке environments/%env%/template/settings.
Но лично я нашел его тут:
C:\Program Files\Tekla Structures\19.0\nt\TplEd\settings
5. Какой аргумент нужно использовать для метода GetObjectsByFilterName чтобы получить сборки(assembly)?
6. Как получить размеры профиля, например толщину полки?
13. Запросить от пользователя данные из Теклы во время выполнения программы.
try { Picker picker = new Picker(); Tekla.Structures.Point p1 = picker.PickPoint(); } catch(Exception e) { return; // cancelled etc. }
14. Топ-5 причин ошибок при выполнении программы.
- Либо в Текле не открыта Модель либо сама программа Tekla Structures не запущена
- Не было установлено соединение с моделью/чертежом для вызова модели надо использовать запись вида: Model myModel = new Model();Так же необходимо использовать проверки Model.GetConnectionStatus() (возвращает true если соединение было установлено) илиDrawingHandler.GetConnectionStatus() — для чертежей, до того как запускать основной код программы.
- Tekla.Structures.Model использованы не подходящие reference.
- Несовместимые типы объектов. Ну например вы пытаетесь присвоить строке численное значение. Или например точка из TeklaStructures.3dGeometry.3dPoint, не соответствует точке System.Geometry.Point.
- Добавление объекта или его выбор вернуло ошибку по одной из следующих причин:
-
- a. Пользовательский компонент не найден A custom component is not found from the model; or,
- b. «boolean part operative class» не соответствует «BooleanPart.BooleanOperativeClassName» во вставленном объекте.
Не забывайте использовать try-catch
15. Как назначить изображение для плагина?
И лежать в папке ….\TeklaStructures\<version>\nt\bitmaps\
16. Как подхватить объект в модели, если он выделен на чертеже?
В этом нелегком деле поможет следующий код:
TSM.ModelObject selectedObject =
Model.SelectModelObject(partInTheDrawing.ModelIdentifier);
17. В чем разница между PluginBase и ConnectionBase.
Plug-in — компонент, это значит, что он пересоздаётся заново в случае изменения каких-либо параметров компонента.
ConnectionBase это базовый класс для определения подключения, деталей и швов. Эти типы более специализированы и ограничен входными значениями полученными от PluginBase.
оочень хочу научится писать приложения для теклы где можно найти материал на эту тему?
В принципе вся информация опубликована на портале теклы:
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