| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Tekla > Tekla API Как вывести информацию о выбранных деталях модели в форму?

Tekla API Как вывести информацию о выбранных деталях модели в форму?

Ответ
Поиск в этой теме
Непрочитано 17.05.2017, 08:16 #1
Tekla API Как вывести информацию о выбранных деталях модели в форму?
rom_kaxxx
 
Регистрация: 18.10.2014
Сообщений: 102

Подскажите пожалуйста! Необходимо получить определенные данные о выделенных деталях модели и записать их в форму. Например, ниже в коде хочу записать в label85 номер сборки детали. Запускаю, деталь выделяю, но ничего не происходит, программа работает, не зависает. Где ошибка?

Код:
[Выделить все]
 private void button2_Click(object sender, EventArgs e)
        {
            model = new Model();  //получаем доступ к модели
            CurrentDrawingHandler = new DrawingHandler();  //получаем доступ к чертежам

            //если подключение прошло успешно
            if (model.GetConnectionStatus() &&
                CurrentDrawingHandler.GetConnectionStatus())
            {
                InitializeComponent();
            }
            else
                MessageBox.Show("Запусти Tekla Structures и открой модель!!!");

            var parts = picker.PickObjects(TSMUI.Picker.PickObjectsEnum.PICK_N_PARTS);
            
            while (parts.MoveNext())
            {
                if (parts.Current is Beam == false) continue;
                var beam = parts.Current as Beam;

                string AssPos = "";

                if (!beam.GetReportProperty("MATERIAL", ref AssPos))
                {
                    Console.WriteLine("GetReportProperty failed!!!");
                }
                else label85.Text = AssPos.ToString();

            }
            //model.CommitChanges();
  
        }
Просмотров: 3907
 
Непрочитано 17.05.2017, 11:36
#2
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Код:
[Выделить все]
       public static double GetAttribute(string GetAttribute)
        {
            TSM.Model Model = new TSM.Model();

            double MyAttribute = 0;

            TSM.UI.ModelObjectSelector ObjectsInModel = new TSM.UI.ModelObjectSelector();
            TSM.ModelObjectEnumerator ObjectsInModelSelect = ObjectsInModel.GetSelectedObjects();

            while (ObjectsInModelSelect.MoveNext())
            {
                if (ObjectsInModelSelect.Current is TSM.Beam)
                {
                    TSM.Beam MyBeam = (TSM.Beam)ObjectsInModelSelect.Current;
                    if (MyBeam != null)
                    {
                        MyBeam.GetReportProperty(GetAttribute, ref MyAttribute);

                    }
                }
            }

            return MyAttribute;
        }

а дальше что-то в таком духе:

Код:
[Выделить все]
             
            double h = MyModel.GetAttribute(h_comboBox.Text);
get_h_textBox.Text = Convert.ToString(h);
В вашем случае, если возвращается уже переменная типа string, то конвертировать не надо.
andrejjerdna вне форума  
 
Автор темы   Непрочитано 17.05.2017, 19:11
#3
rom_kaxxx


 
Регистрация: 18.10.2014
Сообщений: 102


По вашему не получилось, вообще ничего не выдает, да и с выбором непонятно.
Написал так. Выбор через Picker сделал.


Код:
[Выделить все]
 public static string GetAttribute(string GetAttribute)
        {
            string MyAttribute = "------";

            TSM.UI.Picker picker = new TSM.UI.Picker();
            var parts = picker.PickObjects(TSMUI.Picker.PickObjectsEnum.PICK_N_PARTS);

            TSM.UI.ModelObjectSelector ObjectsInModel = new TSM.UI.ModelObjectSelector();
            TSM.ModelObjectEnumerator ObjectsInModelSelect = ObjectsInModel.GetSelectedObjects();
            TSM.Model Model = new TSM.Model();
            //while (ObjectsInModelSelect.MoveNext())
            while (parts.MoveNext())
            {
                if (ObjectsInModelSelect.Current is TSM.Beam)
                {
                    TSM.Beam MyBeam = (TSM.Beam)ObjectsInModelSelect.Current;
                    if (MyBeam != null)
                    {
                        MyBeam.GetReportProperty(GetAttribute, ref MyAttribute);
                    }
                    
                }
            }

            return MyAttribute;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string hh = GetAttribute("PREFIX");
            label85.Text = Convert.ToString(hh);
        }
Только, все равно не получается, выдает начальное значение MyAttribute = "------". Где может быть ошибка?
rom_kaxxx вне форума  
 
Непрочитано 17.05.2017, 20:30
#4
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Что в теме не читал, код писал можно сказать сразу в посте, но работать должен без проблем:
Код:
[Выделить все]
if (TeklaModel.GetConnectionStatus())
            {
                ModelObjectEnumerator PickFirstSelSet = new TSM.UI.ModelObjectSelector().GetSelectedObjects();
                PickFirstSelSet.MoveNext();
                Beam curBeam = PickFirstSelSet.Current as Beam;
                if (curBeam != null)
                {
                    string prefix = "";
                    curBeam.GetReportProperty("PREFIX", ref prefix);
                    MessageBox.Show("Префикс первой попавшейся балки - "+prefix);
                }
                else
                {
                    MessageBox.Show("Все пропало!");
                }
            }
Просто можете в кнопочку скопировать, потестировать. Если все будет работать - можете уже сверху доп. необходимый функционал накручивать. Если нет - дайте знать, вышлю уж точно 100% рабочую версию.
art_rrc вне форума  
 
Непрочитано 17.05.2017, 22:54
#5
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от rom_kaxxx Посмотреть сообщение
По вашему не получилось, вообще ничего не выдает, да и с выбором непонятно.
Написал так. Выбор через Picker сделал.


Код:
[Выделить все]
 public static string GetAttribute(string GetAttribute)
        {
            string MyAttribute = "------";

            TSM.UI.Picker picker = new TSM.UI.Picker();
            var parts = picker.PickObjects(TSMUI.Picker.PickObjectsEnum.PICK_N_PARTS);

            TSM.UI.ModelObjectSelector ObjectsInModel = new TSM.UI.ModelObjectSelector();
            TSM.ModelObjectEnumerator ObjectsInModelSelect = ObjectsInModel.GetSelectedObjects();
            TSM.Model Model = new TSM.Model();
            //while (ObjectsInModelSelect.MoveNext())
            while (parts.MoveNext())
            {
                if (ObjectsInModelSelect.Current is TSM.Beam)
                {
                    TSM.Beam MyBeam = (TSM.Beam)ObjectsInModelSelect.Current;
                    if (MyBeam != null)
                    {
                        MyBeam.GetReportProperty(GetAttribute, ref MyAttribute);
                    }
                    
                }
            }

            return MyAttribute;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string hh = GetAttribute("PREFIX");
            label85.Text = Convert.ToString(hh);
        }
Только, все равно не получается, выдает начальное значение MyAttribute = "------". Где может быть ошибка?
Попробуйте оставить код как есть. Просто алгоритм такой. Выделяете объект, потом нажимаете кнопку.
andrejjerdna вне форума  
 
Автор темы   Непрочитано 18.05.2017, 08:16
#6
rom_kaxxx


 
Регистрация: 18.10.2014
Сообщений: 102


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Попробуйте оставить код как есть. Просто алгоритм такой. Выделяете объект, потом нажимаете кнопку.
Да, получилось, но только с балками, а с пластинами не работает, если я правильно понимаю, то из-за условия?
Код:
[Выделить все]
 if (ObjectsInModelSelect.Current is TSM.Beam)
А как сделать так:
Выделяю 3 детали, у первой , например, вывожу префикс, у второй - материал, у третий - массу?

----- добавлено через ~10 мин. -----
Цитата:
Сообщение от art_rrc Посмотреть сообщение
Если все будет работать - можете уже сверху доп. необходимый функционал накручивать. Если нет - дайте знать, вышлю уж точно 100% рабочую версию.
Не получается, не возвращает значение выделенного объекта. Если есть возможность, скиньте 100% рабочую версию, а то опыта не хватает допилить самому.
rom_kaxxx вне форума  
 
Непрочитано 18.05.2017, 08:56
#7
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от rom_kaxxx Посмотреть сообщение
Да, получилось, но только с балками, а с пластинами не работает, если я правильно понимаю, то из-за условия?
Да, тут код для одной детали, и для балки.
andrejjerdna вне форума  
 
Автор темы   Непрочитано 18.05.2017, 09:49
#8
rom_kaxxx


 
Регистрация: 18.10.2014
Сообщений: 102


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Да, тут код для одной детали, и для балки.
Не пойму, где ошибка. Переписываю код, чтобы выбор шел через picker и только одного элемента, а остальное оставляю без изменения. Ошибок не выдает. А значение атрибута выдает начальное - string MyAttribute = "------";

Код:
[Выделить все]
 string MyAttribute = "------";

            TSM.UI.Picker picker = new TSM.UI.Picker();           
            var parts = picker.PickObject(TSMUI.Picker.PickObjectEnum.PICK_ONE_PART, "Выбери балку");

            TSM.UI.ModelObjectSelector ObjectsInModel = new TSM.UI.ModelObjectSelector();
            TSM.ModelObjectEnumerator ObjectsInModelSelect = ObjectsInModel.GetSelectedObjects();
            TSM.Model Model = new TSM.Model();

            if (ObjectsInModelSelect.Current is TSM.Beam)
            {
                TSM.Beam MyBeam = (TSM.Beam)ObjectsInModelSelect.Current;
                if (MyBeam != null)
                {
                    MyBeam.GetReportProperty(GetAttribute, ref MyAttribute);

                }
            }

            return MyAttribute;
Что не так?
rom_kaxxx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Tekla > Tekla API Как вывести информацию о выбранных деталях модели в форму?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tekla. Импорт свойств чертежей из другой модели. Raznouh Tekla 2 03.05.2017 23:57
Tekla. Опорные модели автогада встают только на плоскости отметок. Как поставить на ось? olegrussia Tekla 2 04.10.2015 18:28
Импорт модели TEKLA 15 в Robot 2010? blackniger Tekla 5 13.08.2010 08:18
Можно ли в ЛИРЕ вывести цветные шкалы армирования только для выбранных стержней? МишаИнженер Лира / Лира-САПР 7 05.03.2010 13:20
Как вывести в layout только часть модели? temoha2006 AutoCAD 12 18.08.2008 17:19