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


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Создание сопряжения с помощью API, Как указать грань (тип Geometry), имя которой было указано в шаблоне вручную?
 
Прикладываю также StackTrace:

  в TFlex.Model.ModelObject.get_HandleForGet()
  в TFlex.Model.Model3D.Object3D.SetParentGeometry_2(IntPtr Handle, Geometry Geom, Int32 Index_1, Int32 Index_2, IntPtr Flags)
  в TFlex.Model.Model3D.Object3D.SetParentGeometry_1(IntPtr Handle, Geometry Geom, Int32 Index, IntPtr Flags)
  в TFlex.Model.Model3D.Object3D.SetParentGeometry(IntPtr Handle, Geometry Geom, IntPtr Flags)
  в TFlex.Model.Model3D.Mate.set_Element1(Geometry geometry)
  в TflexPlugin.AddPartCommand._addPart(AddPartViewModel vm) в C:\Projects\TFlex\TFlexApiTest\TflexPlugin\AddPartCommand.cs:строка 93
Изменено: Максим Шаталов - 01.06.2022 11:30:30
Создание сопряжения с помощью API, Как указать грань (тип Geometry), имя которой было указано в шаблоне вручную?
 
Добрый день!

[B]Подскажите, пожалуйста, каким образом можно использовать так называемую "именнованную" геометрию для создания сопряжений в сборке?[/B] Интересует именно механизм сопряжений, т.к. существует задача перенести текущие наработки из одного САПР в T-Flex.
Ниже указан примерный код для создания сопряжения, происходит падение на строчке [B]mate.Element1 = ....[/B] Притом, что правая часть выражения нормально приводится к типу Geometry. Возникает [B]NullReferenceException[/B], причем единственным объектом, который равен null
в этой строке, является свойство [B]Element1[/B].
[CODE]var fragments = _document.GetFragments3D();

if (fragments.Any())
{
   var lastFragment = fragments.Last();

   var mate = new Mate(_document);

   mate.Type = Mate.MateType.Distance;
   mate.DistanceValue = 5;
   
   mate.Element1 = (Geometry)((dynamic)fragment.GetFragmentDocument(false).GetObjectByName("Низ")).Topol;
   mate.Element2 = (Geometry)((dynamic)lastFragment.GetFragmentDocument(false).GetObjectByName("Верх")).Topol;
   
   mate.Regenerate(true);
}[/CODE]
Страницы: 1