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 с этими штуками приходится иметь дело постоянно.
Добавить комментарий