Open Tekla API — events. Обработка событий с помощью Tekla API

Tekla Structures Open API Model EventsВ языке 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 — получаем данные из теклы на событиях.