Tekla Macro Custom Inquire подписка на события.

Tekla Custom Inquire Macro TeklaAPITekla Structures содержит исчерпывающий объем информации о каждом элементе модели — графическом, или текстовом. Чтобы получить данные используют следующие инструменты:

  • Inquire — не слишком интерактивен, выдаёт исчерпывающую информацию — но только об одном объекте.
  • Custom Inquire выводит информацию мгновенно, но тоже только один элемент. И нельзя добраться до пользовательских свойств (UDA) элементов.
  • Reports —  отличный, только сначала надо в Template Editore написать подходящий репорт. В сложных случаях нетривиальная задача.

Ниже представлен макрос который представляет частный случай подписки на событие SelectionChange из TeklaAPI. Будем извлекать информацию о выделенных элементах, согласно заданному списку свойств.

Список задается в виде отдельных переменных. Впрочем, если приходилось разрабатывать репорты в Текле, то понять принцип будет легко. Макрос качаем тут:

CADSUPPORT_CustomInquireTool.cs

подробнее о том как это работает

Cкрипт вышел довольно объемным, но большая часть носит скорее описательный характер (инициализация и  свойства окна самого окна с текстом). Основные функции сведены в один метод Events_SelectionChangeEvent().

Работает всё следующим образом — макрос при запуске вызывает форму, форма подписывается на событие теклы SelectionChange. И вызывает метод Events_SelectionChangeEvent() если пользователь что-то выбрал, (чуть подробнее про Events в модели ) то внутри метода, обращаемся к выделенному элементу, и опрашиваем свойства. По результату формируем список, который выталкиваем в окно.

В виде кода это выглядит так:

        void Events_SelectionChangeEvent()
        {
            lock (_selectionEventHandlerLock)
            {
                Tekla.Structures.Model.UI.ModelObjectSelector selected = new Tekla.Structures.Model.UI.ModelObjectSelector();
                Tekla.Structures.Model.ModelObjectEnumerator manyO = (selected.GetSelectedObjects() as ModelObjectEnumerator);
                string txt = string.Empty;
                while (manyO.MoveNext())
                {
                            string GUID = string.Empty;
                            string POS = string.Empty;
                            string UDA = string.Empty; 
                    if ((manyO.Current as Part) != null) //change for Assembly, Bolt, or whatever. 
                    {
                        var pp = (manyO.Current as Part); 

                            pp.GetReportProperty("ASSEMBLY.GUID", ref GUID);
                            pp.GetReportProperty("ASSEMBLY_POS", ref POS);
                            pp.GetReportProperty("ASSEMBLY.MAINPART.USERDEFINED.SOME_UDA", ref UDA);
                        txt += GUID + "; " + POS +"; "+UDA+Environment.NewLine; 
                    }
                    else if ((manyO.Current as Assembly)!= null)
                        {
                            var pp = (manyO.Current as Assembly); 

                            pp.GetReportProperty("GUID", ref GUID);
                            pp.GetReportProperty("ASSEMBLY_POS", ref POS);
                            pp.GetReportProperty("MAINPART.USERDEFINED.SOME_UDA", ref UDA);
                            txt += GUID + "; " + POS +"; "+UDA+Environment.NewLine; 
                        }
                }
                SetText(txt.ToString());
            }
        }

Где SetText() — отдельный метод, в котором данные отправляются в форму после синхронизации потоков.

Для пользователя это просто еще одно окошко, которое просто работает во всех версиях теклы. А логику работы можно быстро поменять текстовом редакторе например Notepad++. Добавить вызов новых атрибутов, или произвести сложные действия с уже полученной информацией.

А тут небольшой пример как можно обратится вообще к любому объекту в модели

// here we can check any object which inherite ModelObject interface
                if ((manyO.Current as ModelObject) != null)
                {
                    var pp = manyO.Current as ModelObject;
                        string GUID = string.Empty;
                        string POS = string.Empty;
                        string UDA = string.Empty;
                        string DP = string.Empty;
                        pp.GetReportProperty("GUID", ref GUID);
                        pp.GetReportProperty("STANDARD", ref POS);
                        pp.GetReportProperty("ASSEMBLY.MAINPART.USERDEFINED.UDA", ref UDA);
                        txt += GUID + "\t " + POS + "\t " + UDA + Environment.NewLine;

                }

Tekla Macro Custom Inquire подписка на события.: 1 комментарий

Добавить комментарий

Имя *
E-mail *
Сайт