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


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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 19 След.
Плагин к Total commander, Total commander WLX / WDX
 
Mixa, насколько я понимаю, для корректной работы плагина (WDX) должны быть предустановленны компоненты (SW/Компас). 3D-модели деталей импортируются в сборку как набор тел в формате STL. То есть, то что вы называете миграцией данных - это фактически перенос метаданных файла (SW) в файл (Компас) с привязкой модели STL. В данном случае роль плагина (WDX) заключается в том, чтобы отобразить метаданные в буфер обмена Total Commander, а затем сохранить в файл (Компас) созданный из прототипа.

Если я не ошибаюсь, в T-FLEX CAD 16 была проделана огромная работа по интеграции сторонних CAD для организации совместной работы в единой системе DOCs. Мне не известны все тонкости по настройке и организации рабочего процесса в DOCs, но возможно то что вы хотите получить, уже реализовано.

Если рассматривать чисто пакетный импорт, без интеграции с DOCs, именно с миграцией метаданных и возникают пробелы. Для переноса метаданных из T-FLEX CAD 16, можно выгрузить структуру изделия в формат данных XML. Если в (SW/Компас) поддерживается возможность выгрузки метаданных структуры изделия в формате XML, то можно закрыть этот вопрос путем пакетного импорта, используя только компоненты T-FLEX CAD API.
Плагин к Total commander, Total commander WLX / WDX
 
[QUOTE]Mixa написал:
Банально, данные спецификации.[/QUOTE]
если не сложно, опишите процедуру "переброски данных модели" из (SW) в (Компас), используя существующий механизм (WDX). предполагается наличие установленного ПО (SW/Компас), в качестве дополнительного API, или только T-FLEX CAD API?
Плагин к Total commander, Total commander WLX / WDX
 
[QUOTE]Mixa написал:
Есть программеры чтоб WDX плагин написать для переброски данных из моделей и сборок SolidWorks и Компас очень нужен.[/QUOTE]
Что вы имеете ввиду под определением "переброски данных из моделей и сборок SolidWorks и Компас"?

Если имеется ввиду автоматическая регенерация модели (SW) в файл GRB, с учетом истории построений, то это задача далеко нетривиальная. Учитывая некоторые различия в инструментах моделирования и большое многообразие методов построения. Одно дело импортировать тела сборки, другое - по операционная ретрансляция модели.
Макрос ZoomAll (), Помогите с макросом. Как с помощью кода показать всё изображение?
 
Александр Крупенников, как вариант можно перерисовать прямоугольник изображения, используя свойство [I]WCSRectangle[/I], например:
[CODE]
using TFlex.Model;

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

           if (document == null && document.ActiveView == null && document.ActivePage == null)
               return;

           TFlex.Drawing.Rectangle rect = new TFlex.Drawing.Rectangle
           {
               Left   = document.ActivePage.Left.Value,
               Bottom = document.ActivePage.Bottom.Value,
               Right  = document.ActivePage.Right.Value,
               Top    = document.ActivePage.Top.Value
           };

           document.ActiveView.Graphics.WCSRectangle = rect;
           document.Redraw();
       }
   }
}
[/CODE]
Изменено: vite - 10.06.2019 12:19:55
Макрос ZoomAll (), Помогите с макросом. Как с помощью кода показать всё изображение?
 
Александр Крупенников, в T-FLEX CAD API 16 был добавлен метод [I]RunSystemCommand[/I], который позволяет запускать стандартные команды по имени, например:
[CODE]
using TFlex.Model;

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

           if (document == null && document.ActiveView == null)
               return;

           // Показать все изображение
           TFlex.Application.RunSystemCommand("ZoomMax");
       }
   }
}
[/CODE]
в отличии от команды [I]ZoomMax[/I], команда [I]ZoomAll[/I] показывает изображение в пределах границ страницы. если нужно приблизить или уменьшить изображение, используйте команды [I]ZoomIn/ZoomOut[/I]. чтобы отобразить только выбранные объекты, используйте [I]ZoomSelected[/I].
Доработки функционала, необходимые пользователям, Внедрение нового функционала, доработка существующего.
 
Необходимо добавить поддержку форматов LibreOffice (ods, odb) для подключения внешней базы данных.
Подключение к T-Flex из 1С, Подключение к T-Flex из 1С
 
Ксения Пальянова, COM-сервер не доступен для T-FLEX Viewer (15.1.76.0/16.0.40.0). он также не доступен для T-FLEX CAD 3D (15.1.76.0), но для T-FLEX CAD 3D (16.0.40.0) доступен, хотя и нет официальной документации для текущей версии.
T-FLEX Package Manager, Модуль расширения пакетной обработки документов
 
Уважаемые инженеры, рад представить вам обновленную версию модуля пакетной обработки документов, приложение «T-FLEX Package Manager». В отличии от предыдущей версии, данный модуль имеет ряд существенных улучшений. Главная цель новой разработки – это создание универсального интерфейса для поддержки всех имеющихся трансляторов (импорт/экспорт) в одном модуле.

[VIDEO TYPE=YOUTUBE WIDTH=640 HEIGHT=360]https://www.youtube.com/embed/nziaFR5hU1A?feature=oembed[/VIDEO]

Исходный код: https://github.com/intity/tfpacman
Документация: [URL=https://yadi.sk/i/DJrf9u1-AbaNig]tfpacman_help.pdf[/URL]
План развития приложения: [URL=https://yadi.sk/i/PthLPM4xvXJtqQ]tfpacman_roadmap.pdf[/URL]
Бинарные файлы приложения: [URL=https://yadi.sk/d/6R9FpL6xoYhjVQ]TFPackageManager.7z[/URL]
Получить путь связанного объекта(файла) из Структуры изделия
 
[QUOTE]Анна написал:
подскажите пожалуйста какую ссылку вы используете для определения "SchemeId"? [/QUOTE]
это свойство было добавлено в T-FLEX CAD API 16, но вы можете определить схему по наименованию, например:
[CODE]
ProductStructure ps = document.GetProductStructures().Where(p => p.Name == "Данные для спецификации").FirstOrDefault();
[/CODE]
Получить путь связанного объекта(файла) из Структуры изделия
 
Анна, пример выгрузки данных структуры изделия в XML:
[CODE]
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using TFlex.Model;
using TFlex.Model.Data.ProductStructure;

namespace Test
{
   public class ProductStructureInfo
   {
       private static readonly Document document = TFlex.Application.ActiveDocument;

       public static void Run()
       {
           if (document == null)
               return;

           string path = Path.Combine(document.FilePath, "product_structure_data.xml");
           //
           // GUID схемы структуры изделия (см. C:\Program Files\T-FLEX CAD 16\Program\ProductStructs\Default product structure.xml)
           //
           Guid guid = new Guid("{0971322f-b6bb-46ae-891e-1abb26e0a252}");
           //
           // Получаем ссылку на объект структуры изделия из активного документа
           //
           ProductStructure ps = document.GetProductStructures().Where(p => p.SchemeId == guid).FirstOrDefault();
           if (ps != null)
           {
               XDocument xml = ProductStructureToXml(ps);
               xml.Save(path);
           }
       }

       private static XDocument ProductStructureToXml(ProductStructure ps)
       {
           //
           // Получаем ссылку на объект схемы
           //
           Scheme scheme = ps.GetScheme();
           //
           // Создаем объект XML документа
           //
           XDocument document = new XDocument(new XDeclaration("1.0", "utf-8", null));
           XElement psElement = new XElement("ProductStructure",
               new XAttribute("uid", scheme.UID),
               new XAttribute("name", scheme.Name),
               new XAttribute("path", scheme.OriginalPath));

           XElement groups = new XElement("Groups");

           SetGroup(groups, ps);

           psElement.Add(groups);
           document.Add(psElement);
           return document;
       }

       private static void SetGroup(XElement groups, ProductStructure psParent)
       {
           Document child;
           Scheme scheme = psParent.GetScheme();
           XElement fragment;

           foreach (var row in psParent.GetRowElementGroups())
           {
               XElement group = new XElement("Group", new XAttribute("name", row.Name));

               switch (row.Name)
               {
                   case "Детали":
                       foreach (var i in row.RowElements)
                       {
                           //
                           // Добавление фрагмента детали в XML-документ
                           //
                           fragment = new XElement("Fragment", new XAttribute("id", i.ObjectId));
                           SetElement(scheme, fragment, i);
                           group.Add(fragment);
                       }
                       break;
                   case "Сборочные единицы":
                       foreach (var j in row.RowElements)
                       {
                           //
                           // Добавление фрагмента подсборки в XML-документ
                           //
                           fragment = new XElement("Fragment", new XAttribute("id", j.ObjectId));
                           SetElement(scheme, fragment, j);
                           //
                           // Открываем документ, относительно пути элемента структуры изделия
                           //
                           if ((child = TFlex.Application.OpenDocument(j.SourceFragmentPath, false)) != null)
                           {
                               //
                               // Получаем ссылку на объект ProductStructure из дочернего документа
                               //
                               ProductStructure childPs = child.GetProductStructures().Where(p => p.SchemeId == scheme.UID).FirstOrDefault();

                               if (childPs != null)
                               {
                                   //
                                   // Добавляем элемент Groups к фрагменту подсборки
                                   //
                                   XElement childGroups = new XElement("Groups");
                                   //
                                   // Рекурсивный вызов метода SetGroup с параметрами подсборки
                                   //
                                   SetGroup(childGroups, childPs);
                                   fragment.Add(childGroups);
                               }

                               child.Close();
                           }

                           group.Add(fragment);
                       }
                       break;
               }

               groups.Add(group);
           }
       }

       private static void SetElement(Scheme scheme, XElement fragment, RowElement element)
       {
           foreach (var p in scheme.Parameters)
           {
               switch (p.Name)
               {
                   case "Наименование":
                       fragment.Add(new XElement("parameter",
                           new XAttribute("name", p.Name),
                           new XAttribute("value", element[p.UID].Text)));
                       break;
                   case "Обозначение":
                       fragment.Add(new XElement("parameter",
                           new XAttribute("name", p.Name),
                           new XAttribute("value", element[p.UID].Text)));
                       break;
                   case "Позиция из фрагмента":
                       fragment.Add(new XElement("parameter",
                           new XAttribute("name", p.Name),
                           new XAttribute("value", element[p.UID].Text)));
                       break;
               }
           }

           fragment.Add(new XElement("parameter",
               new XAttribute("name", "Путь к фрагменту"),
               new XAttribute("value", element.SourceFragmentPath)));
       }
   }
}
[/CODE]
Сайт и Форум, Замечания и предложения по сайту и форуму
 
Анна, попробуйте в google поиске ввести такой запрос:
[CODE]
site:tflex.ru/forum document
[/CODE]
Создание меню после открытия документа
 
[QUOTE]Анна написал:
Я правильно понимаю что после открытия документа не получится создать подменю?[/QUOTE]
ну мы можем только гадать что на самом деле происходит. мои тесты показывают, что меню создается только в обработчике [I]OnCreateTools[/I]. если это действительно так, то это явная недоработка API.

думаю вам лучше обратится с этим вопросом в техподдержку.
Вопросы начинающего, вопросы от тех, кто только начинает своё знакомство с T-FLEX CAD
 
dixiony, когда создается эскиз на грани, программа автоматически создает рабочую плоскость, поскольку экизы создаются на рабочей плоскости. если вы заранее создали РП_1, затем сместили ее на расстоянии и далее создаете эскиз на той же грани, то эскиз будет размещен на РП_1. те есть, РП_1 уже определена для грани, поэтому не происходит повторного создания РП_2. если вы хотите черить на РП_2, привязанной к той же грани, нужно дополнительно создать ее.

https://youtu.be/WUlH6nQ9t7g
Изменено: vite - 25.03.2019 09:16:06
T-FLEX CAD 16.0.50.0
Создание меню после открытия документа
 
Анна, это ошибка регистрации команды. в вашем случае можно было бы использовать глобальный объект меню, но проблема в том, что вне контекста обработчика [I]OnCreateTools[/I] применить изменения нельзя.
Выяснить материал через API
 
[QUOTE]Andrey Mazurov написал:
Я спрашивал есть ли возможность вызвать инструмент измерения и взять результаты его работы, а не делать через переменные.[/QUOTE]
результат отладки показывает: что имена свойств (XSIZE, YSIZE, ZSIZE) операция содержит, но их значения [I]null[/I]. либо это ошибка API, либо значения извлекаются другим способом. ответ находится в техподдержке...

[QUOTE]Andrey Mazurov написал:
Материал равен null, если это не тот объект где его присвоили.[/QUOTE]
по поводу материалов: посмотрите всю структуру преобразований. сначала нужно получить документ фрагмента, потом материал.
Обработка меню и подменю созданные в разделе Сервис
 
[QUOTE]Анна написал:
Как определить какой пункт подменю выбрал пользователь, т.е. нажал левой клавишей мышки по одной из строк сформированных динамически?[/QUOTE]
вам нужно переопределить обработчик команд [I]OnCommand[/I], например:

[CODE]
// перечисление команд
enum Commands
{
   Task1 = 1,
   Task2,
   Task3
}

public partial class PluginInstance : TFlex.Plugin
{
   // ...

   protected override void OnCreateTools()
   {
       // регистарция команд и добавление меню...
   }

   // добавление команд в обработчик
   protected override void OnCommand(Document document, int id)
   {
       switch ((Commands)id)
       {
           default:
               base.OnCommand(document, id);
               break;
           case Commands.Task1:
               // обработка задачи 1
               break;
            case Commands.Task2:
               // обработка задачи 2
               break;
            case Commands.Task3:
               // обработка задачи 3
               break;
       }
   }
}
[/CODE]
Выяснить материал через API
 
[QUOTE]Andrey Mazurov написал:
А как получить материал я так и не придумал.[/QUOTE]
материал получить не сложно, а вот получить свойства (XSIZE, YSIZE, ZSIZE) из операции не получается, метод [I]GetRealProperty[/I] возвращает значение [I]null[/I]. возможно данные свойства извлекаются в контексте измерения, или это просто ошибка API.

[CODE]
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]));
           }
       }
   }
}
[/CODE]
копирование ЛСК документа CAD, Необходимо скопировать ЛСК из одного документа в другой средствами API
 
Evgeniytti, пример построения ЛСК из документа источник в документ назначения:

[CODE]
using TFlex.Model;
using TFlex.Model.Model3D;

namespace Test
{
   public class MigrateLCS
   {
       public static void Run()
       {
           Document document_1 = TFlex.Application.OpenDocument(@"E:\net\Documents\T-FLEX\tf16_test\test_lcs_1.grb", false);
           Document document_2 = TFlex.Application.OpenDocument(@"E:\net\Documents\T-FLEX\tf16_test\test_lcs_2.grb", false);

           ProcessingDocument(document_1, document_2);

           document_1.Close();
           document_2.Close();
       }

       private static void ProcessingDocument(Document source, Document destination)
       {
           if (source == null || destination == null)
               return;

           foreach (var i in Document3D.GetLCSs(source)) // получаем ЛСК исходного документа
           {
               foreach (var j in i.Parents)
               {
                   if (j.Object is Node3D node3D) // получаем 3D-узел для построения ЛСК
                   {
                       destination.BeginChanges("перенос ЛСК");

                       // создаем новый 3D-узел
                       CoordinateNode3D node = new CoordinateNode3D(destination)
                       {
                           Name = node3D.Name,
                           X = node3D.Geometry.Point.X,
                           Y = node3D.Geometry.Point.Y,
                           Z = node3D.Geometry.Point.Z,
                       };

                       // создаем новую ЛСК
                       PointsLCS lcs = new PointsLCS(destination)
                       {
                           Name = i.Name,
                           PointToOrigin = node.Geometry.Point
                       };

                       destination.EndChanges();
                       destination.Save();
                   }
               }
           }
       }
   }
}
[/CODE]
Изменено: vite - 23.02.2019 15:11:10
Оформление документа, Всё и только об оформлении 2D и 3D документа
 
Цитата
ВладиславКМВ написал:
Кто-нибудь ещё может проверить этот файл, повторится ли ошибка?
элемент оформления (0x4A000004) привязан к проекции (5) через смежныe узлы как сечение снизу. если сдвинуть проекцию (4), то элемент оформления останется на месте.
Изменено: vite - 11.02.2019 22:23:51
T-FLEX CAD 16.0.50.0
Версионный контроль проекта
 
[QUOTE]andreikorzhyts написал:
Git самое идеальное о чём знаю и чем пользуюсь сам, но жаль, что только для текстовых файлов..[/QUOTE]
не важно какой формат файла, git также может фиксировать изменения бинарных файлов, в том числе файлы документов T-FLEX CAD. правда, кроме того, что вы напишете в комментарии, ничего содержательного не увидете.
Изменено: vite - 11.02.2019 20:47:50
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 19 След.