Open Tekla API — events. Обработка событий с помощью Tekla API
В языке C# существуют так называемые события, инструмент весьма удобный, позволяющий приложениям интерактивно реагировать на те или иные изменения в приложении. Естественно объекты Tekla Structures тоже ими обладают. Добавление обработчика тех или иных событий к вашему скрипту или приложению — позволит съэкономить пару кликов и, возможно, пару кнопок на форме, а главное нервы пользователя.
Сами события на самом деле не так уж легки для понимания, соответственно для того чтобы понять, что это и как работает ищите уроки по C# по ключевым словам events и delegate. Надо сказать, что легче от этого не станет, поскольку объяснения зачастую никак не проясняют работу с событиями, особенно в контексте работы вашего приложения с приложением внешним. Но на самом деле все довольно таки тривиально. Приведенный ниже приведен листинг кода позволяет зарегистривать событие при запуске формы и задать обработчик, который будет вызываться при возникновении нашего события. В данном случае в качестве обрабатываемого события взят момент изменения выбранного в модели. Т.е. когда пользователь выбрал новую деталь, мы можем сразу узнать что именно он выбрал, либо каким-то другим способом отреагировать.
Обработка событий в Текле, пример: реакция на изменение выбора пользователем.
using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Windows.Forms; using Tekla.Structures.Model; namespace EventFormRegister { public partial class Form1 : Form { //регистрируем новое событие. private Tekla.Structures.Model.Events _events = new Tekla.Structures.Model.Events(); private object _selectionEventHandlerLock = new object(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //задаеем нашему событию обработчик, при запуске формы. _events.SelectionChange += Events_SelectionChangeEvent; //и регистрируем его. _events.Register(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //при выходе из приложения снимаем регистрацию _events.UnRegister(); } void Events_SelectionChangeEvent() { //Убеждаемся что код внутри блока работает синхронно с основным приложением. lock (_selectionEventHandlerLock) { MessageBox.Show("Selection changed event received"); } } } }
Как видно сам код довольно прост. За исключением момента синхронизации обработчика и приложения. Соответственно можно полезть в дебри, и разобраться с механизмами потоков в приложении. А можно принять как данность — необходимо добавлять lock перед собственно обрабочиком.
Кстати, аналогично модели можно обрабатывать и события происходящие с Чертежами в Текле.
Продолжением этой статьи можно считать следующий хороший пример:
Tekla Macro — Custom Inquire — получаем данные из теклы на событиях.
One Comments