Tekla OpenAPI пример PolyBeam

Простой пример того как можно добаться до свойств объектов Tekla Structures через Tekla OpenAPI. Алгоритм в целом примерно один:

Инициализируем пикер. 

С его помощью просим пользователя выбрать объект. 

Если объект как поли балка ничего из себя не представляет — выходим. 

Если это полибалка — выделяем ее в переменную pb

И у этой переменной просим Перечислитель контурных точек. 

И дальше у этого перечислителя просим одну за одной точки из которых состоит балка. 

Собственно код:

            try
            {
                var Picker = new Tekla.Structures.Model.UI.Picker(); 
                Tekla.Structures.Model.Object obj = Picker.PickObject(Tekla.Structures.Model.UI.Picker.PickObjectEnum.PICK_ONE_OBJECT);
                if ((obj as PolyBeam) is null) return;

                Tekla.Structures.Model.PolyBeam pb = (obj as PolyBeam);
                var en = pb.Contour.ContourPoints.GetEnumerator(); //return object which have access to contour points; 

                while (en.MoveNext())
                {
                    var point = (en.Current as ContourPoint);
                    var x = point.X;
                    var y = point.Y;
                    var z = point.Z;
                }
            }
            catch( Exception ex)
            {
                MessageBox.Show(ex.Message); //Show message; 
                // throw;   //use throw if you plan to cover exception somewhere else; 
            }

 

Тут, для тех кто не знаком с языком C# может возникнуть несколько вопросов 

(obj as PolyBeam) — выше по коду была использована ссылка на библиотеку Tekla.Structures.Model. Объект PolyBeam — как раз из этой библиотеки. 

По началу мы не знаем, что именно выбрал пользователь, но с помощью инструкции  as — мы можем уточнить у системы, удовлетворяет ли obj признакам PolyBeam объекта. Если удовлетворяет, то в результате мы получим объект. Если нет, то вернется null

Это так называемый полиморфизм. Т.е. один и тот же объект может соответствовать нескольким классам. И если, по какой то причине, мы не уверены — мы всегда можем спросить. 

Второй вопрос — а что же это за такой Перечислитель (Enumerator). На самом деле это связанный список, где у нас идут элементы один за одним. При этом мы не выделяем им конкретных адресов, как в Листе или  Массиве, но можем перечислить их с помощью moveNext и Сurrent

В ряде случаев такой подход предпочтителен с точки зрения оптимизации производительности и потребления памяти. 
Поэтому в TeklaAPI с этими штуками приходится иметь дело постоянно.