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


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Операция "Листовая заготовка"
 
Добрый день! Пытаюсь построить операцию "листовая заготовка" по профилю:
Код
using System;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;

namespace NewMacroNamespace
{
   public class NewMacroClass
   {
      public static void NewMacroPrefab()
      {
         Document document = TFlex.Application.ActiveDocument;//Получение активного документа
         document.BeginChanges("Построение и выталкивание");//Открытие блока изменений документа

         PathConstruction pathConstruction = new PathConstruction(document);      

         TFlex.Model.Model2D.Contour cn = pathConstruction.Contour;//контур

          //создание узлов
         FreeNode fn1 = new FreeNode(document, 20, 60);            
         FreeNode fn2 = new FreeNode(document, 120, 60);
         FreeNode fn3 = new FreeNode(document, 20, 20);            
         FreeNode fn4 = new FreeNode(document, 120, 20); 

         //соединяем узлы линиями
         ConstructionOutline l1 = new ConstructionOutline(document, fn1, fn2);
         ConstructionOutline l2 = new ConstructionOutline(document, fn2, fn4);
         ConstructionOutline l3 = new ConstructionOutline(document, fn4, fn3);
         ConstructionOutline l4 = new ConstructionOutline(document, fn3, fn1);

         //отнесение этих линий к контуру 
         OutlineContourSegment s1 = new OutlineContourSegment(cn);
         OutlineContourSegment s2 = new OutlineContourSegment(cn);
         OutlineContourSegment s3 = new OutlineContourSegment(cn);
         OutlineContourSegment s4 = new OutlineContourSegment(cn);      
         s1.Outline = l1; s2.Outline = l2; s3.Outline = l3;s4.Outline = l4;

         //создание штриховки
         Area ar = new Area (document);
         TFlex.Model.Model2D.Contour cn1 = ar.AppendContour();

         //путь
         ConstructionContourSegment seg1 = new ConstructionContourSegment(cn1); 
         seg1.Construction = pathConstruction; 

         StandardWorkplane swp1 = new StandardWorkplane(document, StandardWorkplane.StandardType.Top);

         // Создаем 3D-профиль на основе штриховки и рабочей плоскости
         AreaProfile ap1 = new AreaProfile(document);
         ap1.Area = ar;
         ap1.WorkSurface = swp1;

         document.ApplyChanges();
         document.EndChanges();

         //-----------------------------------------------------------------

         document.BeginChanges("3Д");

         SheetMetalPart smp = new SheetMetalPart(document);
         smp.Profiles.Add(ap1.Geometry.SheetContour);
         smp.Type = SheetMetalPart.ExtrusionType.Summary;   
         smp.Thickness = 1;

         document.ApplyChanges();
         document.EndChanges();

      }

   }
}

Сам профиль создаётся, операция выталкивания с ним тоже работает. Такое ощущение, что я упускаю какой-то параметр. Подскажите, пожалуйста, что именно тут не так.
 
Dmitry, кажется операция SheetMetalPart сломана... :-( (тестировал на последней сборке)
Операция ThickenExtrusion работает нормально. Я немного изменил код. Построения выполняются по селектору рабочей плоскости.
Код
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;

namespace Test
{
    public class SheetBuilder
    {
        public static void Run()
        {
            var document = TFlex.Application.ActiveDocument;
            if (document == null)
                return;

            var objects = document.Selection.GetAllObjects();
            if (objects.Length == 0)
                return;

            var workplane = objects[0] as Workplane;
            if (workplane == null)
                return;

            document.BeginChanges("1");

            var fn1 = new FreeNode(document, 20, 60);
            var fn2 = new FreeNode(document, 120, 60);
            var fn3 = new FreeNode(document, 20, 20);
            var fn4 = new FreeNode(document, 120, 20);

            var co1 = new ConstructionOutline(document, fn1, fn2);
            var co2 = new ConstructionOutline(document, fn2, fn4);
            var co3 = new ConstructionOutline(document, fn4, fn3);
            var co4 = new ConstructionOutline(document, fn3, fn1);

            var profile = new SketchProfile(document) { WorkSurface = workplane };

            profile.Outlines.Add(co1);
            profile.Outlines.Add(co2);
            profile.Outlines.Add(co3);
            profile.Outlines.Add(co4);

            fn1.Page = workplane.Page;
            fn2.Page = workplane.Page;
            fn3.Page = workplane.Page;
            fn4.Page = workplane.Page;

            co1.Page = workplane.Page;
            co2.Page = workplane.Page;
            co3.Page = workplane.Page;
            co4.Page = workplane.Page;

            document.EndChanges();

            // ------------------------------------------------------------- //

            document.BeginChanges("2");

            var smp = new SheetMetalPart(document);
            smp.Profiles.Add(profile.Geometry.SheetContour);
            smp.Type = SheetMetalPart.ExtrusionType.Summary;
            smp.Thickness = new Parameter(1);

            //var te = new ThickenExtrusion(document);
            //te.Profile.Add(profile.Geometry.SheetContour);
            //te.ForwardLength = new Parameter(20);

            document.EndChanges();
        }
    }
}
T-FLEX CAD 17.1.25.0
 
Цитата
vite написал:
Dmitry , кажется операция SheetMetalPart сломана... (тестировал на последней сборке)
У меня версия 17.0.60.0, операция SheetMetalPart так же не работает.

Посему вопрос: можно ли использовать вместо этого операцию ThickenExtrusion без потери функционала в дальнейшем? В перспективе нужно будет сделать операции сгибания и создания отверстий, так же с помощью макроса.
 
Dmitry, я проверил тест на двух версиях CAD (14.0.41.0 и 17.0.65.0) методом построения профиля посредством создания штриховки. В обоих случаях строится профиль но без листовой заготовки. Операция "Выталкивание" использовалась в качестве проверки контура на корректность.
По видимому придется обратиться в техподдержку с этим вопросом. На форуме они не отвечают... :-(
T-FLEX CAD 17.1.25.0
 
Где-то в справке вычитал (если не ошибаюсь), что листовая заготовка строится на проволочном профиле. Не знаю, есть ли в нём отличия от других типов профиля. Попробую покопать в этом направлении.
Из этого возникает вопрос: Проволочный профиль строится на основе рёбер, можно ли как-то OutLine преобразовать в Edge?
 
Цитата
vite написал:
По видимому придется обратиться в техподдержку с этим вопросом. На форуме они не отвечают...
Техподдержка (по крайней мере, в ВК) предложила задать мне вопрос на этом форуме)
 
Цитата
Dmitry написал:
Техподдержка (по крайней мере, в ВК) предложила задать мне вопрос на этом форуме)
Соцсети и форум - это не официальная техподдержка. Здесь делятся опытом пользователи. Писать нужно непосредственно сюда https://www.tflex.ru/mail/, выбрав пункт тех поддержка и указав предприятие и лицензии
 
Цитата
Dmitry написал:
Из этого возникает вопрос: Проволочный профиль строится на основе рёбер, можно ли как-то OutLine преобразовать в Edge?
Ничего преобразовывать не нужно. После создания профиля, структура объекта "GeometryData" уже содержит данные "ModelEdges" (см. вложение).
T-FLEX CAD 17.1.25.0
 
Добрый день!
Хочу развернуть листовую деталь. Нашел класс Unbend.
В классе есть свойство CylindricalFaces и KeptPlanarFace, отвечающие за выбор неподвижной грани и цилиндрических поверхностей.
Но не нашел свойство отвечающее за выбор самого тела.
Какое свойство в классе Undend отвечает за выбор тела?

List<ModelFace> modelFace = new List<ModelFace>();
List<BodyPart> newlist_body1 = new List<BodyPart>();
foreach (BodyPart body in document.Bodies)
{
if (body.Name == "Тело_1 - Копия_развертка")
{
foreach (ModelBody Body in body.TopOperation.Geometry.Solid)
{

foreach (ModelFace face in Body.Faces)
{

modelFace.Add(face);
}
}
}


}
Unbend разгибание = new Unbend(document);
разгибание.KeptPlanarFace = modelFace[8];
Screen-006.png (247.94 КБ)
Изменено: Roman - 27.02.2025 17:14:17
 
Добрый день!
Подскажите пожалуйста, как разогнуть деталь с помощью класса Unbend?
Unbend разгибание = new Unbend(document);
разгибание.KeptPlanarFace = facesList[3];

Каким способом выбрать тело для разгибания?
Изменено: Roman - 01.06.2025 18:43:24
 
Цитата
Roman написал:
Каким способом выбрать тело для разгибания?
По селектору..
T-FLEX CAD 17.1.25.0
 
Цитата
написал:
Цитата
Roman написал:
Каким способом выбрать тело для разгибания?
По селектору..
vite, вы имеете ввиду метод ObjectSelectControl.SetFilter?
как передать тело в класс Unbend?
 
Roman, вы можете прикрепить модель, созданную в ручном режиме, чтобы приблизительно понимать чего вы хотите получить.

Исходная модель, тело, которое нужно преобразовать в другое тело (применить операцию).

Цитата
Roman написал:
вы имеете ввиду метод ObjectSelectControl.SetFilter?
выделенный объект по типу тело, грань и т.п., например,
Код
var objects = document.Selection.GetAllObjects();
T-FLEX CAD 17.1.25.0
 
"""vite написал:
Roman, вы можете прикрепить модель, созданную в ручном режиме, чтобы приблизительно понимать чего вы хотите получить.

Исходная модель, тело, которое нужно преобразовать в другое тело (применить операцию).""""

Хочу разогнуть листовую деталь ( а именно копию листовой детали):
создать копию листовой детали получается, далее пытаюсь добавить в класс unbend тело и неподвижную плоскость, но немогу найти свойств для добавления.
private void button5_Click_1(object sender, EventArgs e)
{
Путь_к_Файлу_10 = @"C:\Новая папка\Деталь 2.grb";
string Путь_к_Файлу_Сборки = Путь_к_Файлу_10;
List<string> newlist1 = new List<string>();
Document document = TFlex.Application.OpenDocument($@"{Путь_к_Файлу_Сборки}");
document.BeginChanges("Создание проекции");
RegenerateOptions regenerateOptions = new RegenerateOptions();
////Создание копии тела для развертки
LCS lcs_1 = (LCS)document.GetObjectByName("ЛСК_1");
ModelObject bodypart = document.GetObjectByName("Тело_1 - Копия_развертка_1");
if (bodypart == null)
{
List<BodyPart> newlist_body = new List<BodyPart>();
List<BodyPart> newlist = new List<BodyPart>();
foreach (BodyPart body in document.Bodies)
{
if (body.Name == "Тело_1")
{
newlist_body.Add(body);
}
}
PointsLCS lcs_2_1 = (PointsLCS)document.GetObjectByName("КОПИЯ_ЛСК_1");
PointsLCS lcs_2 = new PointsLCS(document);
if (lcs_2_1 == null)
{
lcs_2.PointToOrigin = lcs_1.Geometry.Origin;
lcs_2.DirectionToAxisX = lcs_1.Geometry.DirectionX;
lcs_2.DirectionToAxisY = lcs_1.Geometry.DirectionY;
lcs_2.Name = "КОПИЯ_ЛСК_1";
TransformationGroup преобразование = lcs_2.Transformations.AddBaseTransfGroup();
преобразование.AddMoveTransf(TransformationCoordinate.Z, 300);
преобразование.Name = "преобразование копии 1";
}
CopyOperation2 копирование_гибки = new CopyOperation2(document, CopyBaseOperation2.Type.Bodies);
копирование_гибки.Operations.Add(newlist_body[0].BaseOperation);
копирование_гибки.SourceLCS = lcs_1;
if (lcs_2_1 == null)
{
копирование_гибки.TargetLCS = lcs_2;
}
else копирование_гибки.TargetLCS = lcs_2_1;
копирование_гибки.CopyMode = CopyBaseOperation2.Mode.Copy;
копирование_гибки.Name = "Копия_развертка_1";
document.SaveAs(@"C:\Новая папка\Деталь 20.grb");
List<ModelFace> newList_faces = new List<ModelFace>();
List<ModelFace> facesList = new List<ModelFace>();
//Перебор всех тел в сцене
foreach (TFlex.Model.Model3D.BodyPart body in document.Bodies)
{
if (body.Name == "Тело_1 - Копия_развертка_1")
{
//Перебор всех твердых тел в сцене
foreach (ModelBody Body in body.TopOperation.Geometry.Solid)
{
//Перебор всех граней твердых тел
foreach (ModelFace face in Body.Faces)
{
//Добавляем грани в список
facesList.Add(face);
}
}
}
}

Unbend разгибание = new Unbend(document);
разгибание.KeptPlanarFace = facesList[3];
разгибание.Body.Name = "Копия_развертка";
}
document.Save();
document.EndChanges();
document.Close();
}
Изменено: Roman - 06.07.2025 23:46:41
 
Roman, зачем нужна копия операции?


Код
document.EndChanges(); // сначала нужно закрыть блок изменений
document.Save(); // потом сохранять их
document.Close();
T-FLEX CAD 17.1.25.0
 
Цитата
написал:
Roman, зачем нужна копия операции?


Код
 document.EndChanges(); // сначала нужно закрыть блок изменений
document.Save(); // потом сохранять их
document.Close();
 
vite, копия нужна получить развертку и снять размеры с развертки.
 
Roman,

Уточните, что конкретно вы хотите получить?

- набор данных измерения (т.е. выгрузить данные в XML-файл),
- создать отдельный файл ( .grb ) с развёрткой,
- или ... ???
T-FLEX CAD 17.1.25.0
 
Цитата
написал:
Roman,

Уточните, что конкретно вы хотите получить?

- набор данных измерения (т.е. выгрузить данные в XML-файл),
- создать отдельный файл ( .grb ) с развёрткой,
- или ... ???
vite, необходимо получить проекцию развертки на отдельном листе и габариты развертки в структуре изделия (это я уже получил с помощью API).
Проблема в том что в класс Unbend нельзя добавить тело и неподвижную грань (нет свойств и методов для добавления).
Создать проекцию развертки на чертеже напрямую неполучатеся, т.к в справке API нет класса для создание проекции развертки.
Screen-014.png (97.37 КБ)
 
Roman, прикрепите файл модели без копии (если вам не сложно).
Изменено: vite - 12.07.2025 09:26:58
T-FLEX CAD 17.1.25.0
 
Цитата
Roman написал:
Создать проекцию развертки на чертеже напрямую неполучатеся, т.к в справке API нет класса для создание проекции развертки.
А обычная проекция чем отличается от проекции развёртки?
T-FLEX CAD 17.1.25.0
Страницы: 1