Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Выяснить материал через API
 
Дано:

Некий проект.
Создаем новую сборку, добавляем туда этот проект в виде фрагмента, разделяем на тела.

Хочу:

Для каждого полученного тела получить XSIZE, YSIZE, ZSIZE, mass, материал

Первые три получилось получить создав переменную и в ней написать - get_cls("НазваниеТела", "XSIZE") ,
для массы - get("НазваниеТела", mass)

А как получить материал я так и не придумал.

Может есть более прямые пути для получения XSIZE и как получить материал?
Код
    private readonly string vtemp1 = "get{2}(\"{0}\", \"{1}\"{3})";


    public double GetV(string bodyName, string valName)
    {
      var tp = valName.Contains("SIZE");
      var p1 = tp ? "_lcs" : "";
      var p2 = !tp ? "" : ",\"\"";
      vv.Expression = string.Format(vtemp1, bodyName, valName, p1, p2);
      return Math.Round(vv.RealValue, 3);
    }


    Variable vv = null; 


    private void MakeList()
    {
      Document.BeginChanges("dd");


      vv = Document.GetVariables().Where(w => w.Name == "test").SingleOrDefault();
      if (vv == null)
        vv = new Variable(Document, "test", 0);
      foreach (var b in Document.Bodies.Cast<BodyPart>())
      {
        if ((b.BaseOperation.Geometry.Solid.Length != 0) && (b.BaseOperation.Visible))
        {
          System.Diagnostics.Debug.WriteLine($"{b.Name} ({GetV(b.Name, "XSIZE")}, {GetV(b.Name, "YSIZE")}, {GetV(b.Name, "ZSIZE")}) {GetV(b.Name, "mass")}");
        }
      }

      Document.EndChanges();
    }


 
Цитата
Andrey Mazurov написал:
А как получить материал я так и не придумал.
материал получить не сложно, а вот получить свойства (XSIZE, YSIZE, ZSIZE) из операции не получается, метод GetRealProperty возвращает значение null. возможно данные свойства извлекаются в контексте измерения, или это просто ошибка API.

Код
using System.Diagnostics;
using TFlex.Model;
using TFlex.Model.Model3D;

namespace Test
{
    public class ObjectInfo
    {
        public static void Run()
        {
            Document document = TFlex.Application.ActiveDocument;

            if (document == null)
                return;

            double?[] xyz_size = new double?[3];

            foreach (BodyPart i in document.Bodies)
            {
                foreach (var p in i.BaseOperation.GetProperties())
                {
                    switch (p.Name)
                    {
                        case "XSIZE":
                            xyz_size[0] = i.BaseOperation.GetRealProperty(p.Name);
                            break;
                        case "YSIZE":
                            xyz_size[1] = i.BaseOperation.GetRealProperty(p.Name);
                            break;
                        case "ZSIZE":
                            xyz_size[2] = i.BaseOperation.GetRealProperty(p.Name);
                            break;
                    }
                }

                Debug.WriteLine(string.Format("Тело: {0}\nМатериал: {1}\nПокрытие: {2}\nXSIZE ({3})\nYSIZE ({4})\nZSIZE ({5})", 
                    i.Name, 
                    i.Material.Name, 
                    i.CoatingMaterial.Name, 
                    xyz_size[0], 
                    xyz_size[1], 
                    xyz_size[2]));
            }
        }
    }
}
T-FLEX CAD 17.1.6.0
 
Вы не правильно поняли вопрос. Получить просто проперти проблем нет. Но вот таких пропертей как XSIZE,YSIZE нету - это же результат работы инструмента измерить, а не свойство объекта поэтому через переменную это работает. Я спрашивал есть ли возможность вызвать инструмент измерения и взять результаты его работы, а не делать через переменные.
Материал равен null, если это не тот объект где его присвоили.
Повторюсь - создаете новую сборку, в нее загружаете фрагмент с деталями, далее делаете операцию разделить на тела. Так вот у этих тел материал не указан, и как выяснить базовое тело из которого получен этот объект - не понятно.
 
Цитата
Andrey Mazurov написал:
Я спрашивал есть ли возможность вызвать инструмент измерения и взять результаты его работы, а не делать через переменные.
результат отладки показывает: что имена свойств (XSIZE, YSIZE, ZSIZE) операция содержит, но их значения null. либо это ошибка API, либо значения извлекаются другим способом. ответ находится в техподдержке...

Цитата
Andrey Mazurov написал:
Материал равен null, если это не тот объект где его присвоили.
по поводу материалов: посмотрите всю структуру преобразований. сначала нужно получить документ фрагмента, потом материал.
T-FLEX CAD 17.1.6.0
Страницы: 1