Скачать NANOCAD Pдгы 8.5
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

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

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

rom_kaxxx вне форума Вставить имя

Подскажите пожалуйста! Необходимо получить определенные данные о выделенных деталях модели и записать их в форму. Например, ниже в коде хочу записать в 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();
  
        }
Просмотров: 1421
 
Непрочитано 17.05.2017, 11:36
#2
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 510
Отправить сообщение для 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
Сообщений: 100


По вашему не получилось, вообще ничего не выдает, да и с выбором непонятно.
Написал так. Выбор через 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
Минск
Сообщений: 336


Что в теме не читал, код писал можно сказать сразу в посте, но работать должен без проблем:
Код:
[Выделить все]
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
Владимир
Сообщений: 510
Отправить сообщение для 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
Сообщений: 100


Цитата:
Сообщение от 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
Владимир
Сообщений: 510
Отправить сообщение для andrejjerdna с помощью Skype™


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


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


Цитата:
Сообщение от 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

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


Размещение рекламы