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


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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 19 След.
Создание меню после открытия документа
 
[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.35.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.35.0
Версионный контроль проекта
 
[QUOTE]andreikorzhyts написал:
Git самое идеальное о чём знаю и чем пользуюсь сам, но жаль, что только для текстовых файлов..[/QUOTE]
не важно какой формат файла, git также может фиксировать изменения бинарных файлов, в том числе файлы документов T-FLEX CAD. правда, кроме того, что вы напишете в комментарии, ничего содержательного не увидете.
Изменено: vite - 11.02.2019 20:47:50
Перебор страниц в документе
 
Анна, а просто переключить фокус на 2D-вид не получается, нужно обязательно закрыть активный 3D-вид?
Перебор страниц в документе
 
[QUOTE]Анна написал:
Написали в техподдержке:[/QUOTE]
а что толку, активизация 2D-вида не работает, если текущий активный вид 3D.
Получить все сборки, детали, стандартные изделия входящие в 3D модель
 
Анна, пример рекурсивной обработки документа и всех вложенных фрагментов, с последовательным выводом метаданных в файл "asm_info.log".

[CODE]
using System.IO;
using TFlex.Model;
using TFlex.Model.Model3D;
using System.Diagnostics;

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


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

           path = document.FilePath + @"asm_info.log";

           if (File.Exists(path))
               File.Delete(path);

           MetadataOutput(document);

           if (File.Exists(path))
               Process.Start("notepad.exe", path);
       }

       private static void MetadataOutput(Document document)
       {
           int index = 0;

           foreach (var i in document.GetFragments3D())
           {
               string[] contents = {
                   "Документ:\t\t"         + document.FileName,
                   "Кол-во фрагментов:\t"  + document.GetFragments3D().Count,
                   "  Индекс фрагмента:\t" + index,
                   "  Имя файла:\t\t"      + i.FilePath,
                   "  Имя объкта:\t\t"     + i.Name,
                   "  Идентификатор:\t"    + i.ObjectId,
                   "  Полный путь:\t\t"    + i.FullFilePath,
                   "========================================================"
               };

               File.AppendAllLines(path, contents);
               index++;

               if (TFlex.Application.OpenFragmentDocument(i.FullFilePath) is Document fragment)
                   MetadataOutput(fragment);
           }
       }
   }
}
[/CODE]
Перебор страниц в документе
 
Анна, пример ниже включает вариант активизации страницы, если активный вид 3D, но метод [I]Activate[/I] почему то не работает. Если активный вид 2D, все нормально...

[CODE]
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Windows.Forms;

namespace Test
{
   public class TestMacro
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           Page activePage = null;

           if (document == null)
               return;

           foreach (var i in document.GetPages())
           {
               if (document.ActivePage == null)
               {
                   activePage = i; // если нет активной страницы, сохраняем первую страницу из коллекции

                   foreach (var v in document.Views)
                   {
                       if (v is View2D)
                       {
                           v.Activate(); // что-то случилось с методом Activate...
                           break;
                       }
                   }
               }
               else if (activePage == null)
                   activePage = document.ActivePage; // в противном случае, сохраняем активную страницу

               switch (i.PageType) // определение типа страницы
               {
                   case PageType.Normal: // Обычная
                       if (document.ActiveView is View2D)
                       {
                           document.ActiveView.Page = i; // активизируем страницу
                           MessageBox.Show(i.Name);
                       }
                       break;
                   case PageType.BillOfMaterials: // Спецификация
                       if (document.ActiveView is View2D)
                       {
                           document.ActiveView.Page = i; // активизируем спецификацию
                           MessageBox.Show(i.Name);
                       }
                       break;
               }
           }

           if (document.ActivePage != null && activePage != null)
           {
               // активизируем ранее сохраненную страницу
               document.ActiveView.Page = activePage;
               MessageBox.Show(activePage.Name);
           }
       }
   }
}
[/CODE]
Печать документов через макрос, Помогите разобраться с "document.Print"
 
Дмитрий, в качестве параметра родительского окна нужно передать дескриптор главного окна приложения, например:

[CODE]
public static void Run()
{
   Document document = TFlex.Application.ActiveDocument;

   if (document == null)
       return;

   document.Print(TFlex.Application.ActiveMainWindow.Handle, true, true);
}
[/CODE]
Вопрос по API
 
[QUOTE]FRei написал:
Кстати, а как вывести что-нибудь в окошко выходные данные, для отладки?[/QUOTE]
я не пользуюсь отладчиком T-FLEX CAD, по-видимому метод TFlex.Log.Debug("")
Вопрос по API
 
FRei, ну не скромничайте, ваш уровень достаточный. вы можете легко оптимизировать модель, чтобы избавиться от дубликатов массива. т.е. нужно просто создать универсальный фрагмент, который принимает параметры на вход: символ и смещение, относительно ЛСК. а вся логика перестроения символа может быть основана на матрице из БД. вместо дубликата массива, нужно вставить фрагмент в сборку и определить параметры. в данном случае, используется единственный экземпляр многократно вставленный в сборку с различными параметрами. в качестве теста, можно сравнить производительность на большом массиве данных, скажем из 1000 символов, интересно что получится.
Вопрос по API
 
FRei, не знаю что вы хотите получить в конечном итоге. на мой взгляд, ваша модель получается слишком перегружена элементами построения. не проще использовать готовый фрагмент параметрического символа? к тому же, это даст существенный прирост производительности в процессе перестроения модели.
Вопрос по API
 
FRei, есть возможность добавить элементы в коллекцию исключений по индексу, например:
[CODE]
document.BeginChanges("");

linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(1), new Parameter(0)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(3), new Parameter(0)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(1), new Parameter(1)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(2), new Parameter(1)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(3), new Parameter(1)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(2), new Parameter(2)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(3), new Parameter(2)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(1), new Parameter(3)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(3), new Parameter(3)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(1), new Parameter(4)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(2), new Parameter(4)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(1), new Parameter(5)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(2), new Parameter(5)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(3), new Parameter(5)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(1), new Parameter(6)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(2), new Parameter(6)));
linearArray.Exclusions.Add(new Exclusion(linearArray, new Parameter(3), new Parameter(6)));

document.EndChanges();
[/CODE]
если понадобится обновить коллекцию исключений, нужно предварительно ее очистить:
[CODE]
linearArray.Exclusions.Clear();
[/CODE]
Вопрос по API
 
FRei, по поводу перебора элементов не уверен что это возможно.
пример изменения видимости объекта:

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

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

           if (document == null)
               return;

           foreach (ModelObject i in document.GetObjects())
           {
               if (i.GroupType == ObjectType.LinearArray && i.Name == "Линейный массив_1")
               {
                   LinearArrayOperation linearArray = i as LinearArrayOperation;

                   document.BeginChanges("");

                   linearArray.VisibleInScene = false;

                   document.EndChanges();

                   break;
               }
           }
       }
   }
}
[/CODE]
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
Гена C, эта сборка для версии T-FLEX CAD (15.1.68.0), но вы можете самостоятельно компилировать плагин для TF14 (нужно переопределить ссылки на TFlexAPI).
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 19 След.