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


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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
View3D, размещение видов
 
[QUOTE]apps написал:
Можно ли для документа через API выполнить операцию - "размещение видов"?[/QUOTE]
пример размещения четырех проекционных 3D вида (без линейки и фиксации вращения):
[CODE]
using System.Linq;
using TFlex.Model;
using TFlex.Model.Model3D;

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

           if (document == null)
               return;

           SplitFourProjectionViews(document);
       }

       static void SplitFourProjectionViews(Document doc)
       {
           View3D view3D = null;
           View3D.Parameters p = null;

           doc.Views.First<TFlex.Model.View>().Split(ViewType.View3D, ViewType.View3D, ViewType.View3D, ViewType.View3D);
           for (int i = 0; i < doc.Views.Count<TFlex.Model.View>(); i++)
           {
               switch (i)
               {
                   case 0: // Front
                       view3D = (View3D)doc.Views.ElementAt<TFlex.Model.View>(i);
                       p = view3D.GetParameters();
                       p.set_Viewpoint(0, 0);
                       p.set_Viewpoint(1, 1);
                       p.set_Viewpoint(2, 0);
                       p.Angle = 0;
                       p.CameraType = View3D.CameraType.Orthographic;
                       p.AutoResize = true;
                       view3D.SetParameters(p);
                       break;
                   case 1: // Left
                       view3D = (View3D)doc.Views.ElementAt<TFlex.Model.View>(i);
                       p = view3D.GetParameters();
                       p.set_Viewpoint(0, 1);
                       p.set_Viewpoint(1, 0);
                       p.set_Viewpoint(2, 0);
                       p.Angle = 0;
                       p.CameraType = View3D.CameraType.Orthographic;
                       p.AutoResize = true;
                       view3D.SetParameters(p);
                       break;
                   case 2: // Top
                       view3D = (View3D)doc.Views.ElementAt<TFlex.Model.View>(i);
                       p = view3D.GetParameters();
                       p.set_Viewpoint(0, 0);
                       p.set_Viewpoint(1, 0);
                       p.set_Viewpoint(2, 1);
                       p.Angle = 0;
                       p.CameraType = View3D.CameraType.Orthographic;
                       p.AutoResize = true;
                       view3D.SetParameters(p);
                       break;
               }
           }
       }
   }
}
[/CODE]
[QUOTE]apps написал:
У объекта TFlex.Configuration.Settings3D есть свойство DontCloseView. Что оно означает?[/QUOTE]
это определение свойства "Фиксированный набор окон".
ExportToPDF3D, настройка экспорта
 
apps, такого свойства текущая сборка T-FLEX CAD API не поддерживает. но вы можете завершить процесс открытого файла, например:
[CODE]
using System.Diagnostics;
using System.Threading;
using TFlex.Model;

namespace Test
{
   public class Class16
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           string fileName = "test.pdf";
           string programName = "SumatraPDF";

           if (document == null)
               return;

           ExportToPDF3D pdf3d = new ExportToPDF3D(document);
           pdf3d.Export(@"e:\" + fileName);
           Thread.Sleep(10);
           foreach (var process in Process.GetProcessesByName(programName))
           {
               if (process.MainWindowTitle.Contains(fileName))
               {
                   process.Kill();
                   break;
               }
           }
       }
   }
}
[/CODE]
Вопросы начинающего, вопросы от тех, кто только начинает своё знакомство с T-FLEX CAD
 
ВладиславКМВ, на сколько я понимаю, изначальный вопрос был в том, какой из двух методов построения модели лучше (#5002). далее, вы определили модель для сравнения, и предложили Алексею следующее (#5007):
Цитата
ВладиславКМВ написал:
Ну вот давайте на примерах, которые вы в основном выкладывали недоделанными, объясняя это ленью.
...
Напомню, пример задания (один из), в котором поучаствовали и вы #653 и я #652.
Алексей предоставил вам вполне рабочий вариант изделия, вы почему-то решили этого не делать, полагая что для сравнения методов достаточно сборки из двух недоработанных деталей. ну хорошо, может вас действительно не правильно поняли, и на самом деле вы имели ввиду основной концепт модели. но и тут не складывается: отсутствие целостности отношений контрольных параметров и зазора; порог вхождения в предоставленный вами метод, значительно превышает метод Алексея;
модель Алексея интуитивно понятна, что без особых затруднений позволяет модернизировать ее. в конечном итоге, вы перешли в плоскость обсуждения технологии изготовления пресс формы. я не специалист в области изготовления пресс форм, но уверен, если такой появится на этом форуме, определенно сделает выбор в пользу метода Алексея.
Изменено: vite - 14.01.2018 04:44:37
T-FLEX CAD 16.0.61.0
Вопросы начинающего, вопросы от тех, кто только начинает своё знакомство с T-FLEX CAD
 
ВладиславКМВ, зачем вам такие сложности? ведь очевидно, лучшее решение - это геометрия тора. я немного модернизировал модель Алексея, добавил параметр высоты крышки. попробуйте сделать то же самое по вашей методике. уверен, вы станкнетесь с массой проблем...
T-FLEX CAD 16.0.61.0
T-Flex API code for database in clipboard copy /// Код API T-Flex для базы данных в буфер обмена
 
Simon Missel, in this case, the API does not support functions for executing an application command. You need to unload the data from the table. For example:
[CODE]
using System;
using System.Data;
using TFlex.Model;

namespace Test
{
   public class Class17
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           DataTable table = null;
           string db_name = "A";

           if (document == null)
               return;

           document.BeginChanges("Export XML data from internal database");

           foreach (var i in document.GetDatabases())
           {
               if (i.Name == db_name && i.SubType == DatabaseType.Internal)
               {
                   InternalDatabase internalDatabase = (InternalDatabase)i;
                   table = GetDataTable(internalDatabase);
                   break;
               }
           }

           if (table != null)
               table.WriteXml(@"e:\export_data.xml");

           document.EndChanges();
       }

       static DataTable GetDataTable(InternalDatabase internalDatabase)
       {
           DataTable table = null;
           DataColumn column = null;
           DataRow row = null;

           if (internalDatabase == null)
               return table;

           table = new DataTable(internalDatabase.Name);

           for (int i = 0; i < internalDatabase.GetColumnCount(); i++)
           {
               switch (internalDatabase.GetColumnType(i))
               {
                   case DatabaseColumnType.DBInt:
                       column = new DataColumn(internalDatabase.GetColumnName(i), typeof(Int32));
                       table.Columns.Add(column);
                       break;
                   case DatabaseColumnType.DBReal:
                       column = new DataColumn(internalDatabase.GetColumnName(i), typeof(Double));
                       table.Columns.Add(column);
                       break;
                   case DatabaseColumnType.DBText:
                       column = new DataColumn(internalDatabase.GetColumnName(i), typeof(String));
                       table.Columns.Add(column);
                       break;
               }
           }

           for (int r = 0; r < internalDatabase.GetRecordCount(); r++)
           {
               row = table.NewRow();

               for (int c = 0; c < internalDatabase.GetColumnCount(); c++)
               {
                   switch (internalDatabase.GetColumnType©)
                   {
                       case DatabaseColumnType.DBInt:
                           row[c] = internalDatabase.GetIntValue(c, r);
                           break;
                       case DatabaseColumnType.DBReal:
                           row[c] = internalDatabase.GetRealValue(c, r);
                           break;
                       case DatabaseColumnType.DBText:
                           row[c] = internalDatabase.GetTextValue(c, r);
                           break;
                   }
               }

               table.Rows.Add(row);
           }

           return table;
       }
   }
}
[/CODE]
Доработки функционала, необходимые пользователям, Внедрение нового функционала, доработка существующего.
 
предложение, добавить в пул расширения меню "Настройка\Окна" (классический интерфейс) пользовательские окна приложения (см. tf_settings_windows_classic_ui.png), как это реализовано в ленточном интерфейсе (см. tf_settings_windows_ribbon_ui.png)
Экспорт в формат STEP
 
SwnSerg, в документации [URL=https://yadi.sk/i/DGW18gez3P9paA]ActiveX T-FLEX CAD[/URL] имеется расширенное описание функции [I]ExportToStep[/I]. если возвращаемое значение равно нулю, это связано с нарушением функционирования модуля.
[CODE]
// JavaScript source code

var TFLEX = new ActiveXObject("TFW32.SERVER");
var wscript = new ActiveXObject("WScript.Shell");

var FileName = "e:\\test.stp";
var FileVersion = 1;
var ConvertToBS = 0;
var SimplifyModel = 1;
var AssemblyRepresentation = 0;
var SplitPeriodic = 1;
var SplitAllPeriodic = 0;
var QuickTransformationDisabled = 0;
var Units = 0;
var Reserved = 0;

var disp = TFLEX.GetActiveFile();
if (disp != null)
{
   var result = disp.ExportToStep(
       FileName,
       FileVersion,
       ConvertToBS,
       SimplifyModel,
       AssemblyRepresentation,
       SplitPeriodic,
       SplitAllPeriodic,
       QuickTransformationDisabled,
       Units,
       Reserved,
       Reserved);

   if (result == 1)
       wscript.Popup("Экспорт STEP-файла выполнено успешно");
   else
       wscript.Popup("Код ошибки: " + result);
}
[/CODE]
на самом деле, экспорт файла выполняется, но возвращаемое значение неверно.
Выделение текста цветом
 
Паша Маргинал,

Пример изменения цвета текста таблицы:
[CODE]
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Drawing;

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

           if (document != null)
           {
               document.BeginChanges("");

               Table table;
               string pattern = "Text";
               Position pos1;
               Position pos2;

               foreach (RichText text in document.GetTexts())
               {
                   text.BeginEdit();

                   if (text.TableOnly)
                   {
                       table = (Table)text.GetFirstTable();

                       for (int i = 0; i < table.CellCount; i++)
                       {
                           if (table.GetCellText((uint)i) == pattern)
                           {
                               var color = Color.FromArgb(255, 0, 0); // Red color

                               pos1 = new Position(0, 0, i);
                               pos2 = new Position(pattern.Length, 0, i);
                               text.SetSelection(pos1, pos2);

                               CharFormat format = text.CharacterFormat;
                               format.Color = (uint)(color.R << 8 | color.G << 16 | color.B << 24);
                               format.DefaultColor = false;
                               format.DefaultFontSize = true;
                               text.CharacterFormat = format;
                               break;
                           }
                       }
                   }

                   text.EndEdit();
               }

               document.EndChanges();
           }
       }
   }
}
[/CODE]

если таблица вложена в параграф, используйте дополнительный метод "GetNextTable" для перебора.
Изменено: Vite - 03.12.2017 06:53:59
Регистрация плагина
 
[QUOTE]Паша Маргинал написал:
Можно ли регистрировать плагин через записи в реестре?[/QUOTE]
есть простой способ:
нужно создать тектовый файл с расширением (*.fta) и добавить описание модуля. далее, подключить плагин через пользовательский интерфейс (меню: Настройка / Приложения...).
[QUOTE]Паша Маргинал написал:
Можно ли писать плагины на c/c++ и регать их через записи в реестре?[/QUOTE]
если вы хотите подключть модуль, достаточно внести данные в файл конфигурации приложения.
Замечания по T-FLEX CAD 15, Ваши замечания касающиеся работы T-FLEX CAD 15
 
Цитата
tapka написал:
Причина очень проста, если человек ввёл число, и захотел сменить тип задающего размера (радиус => диаметр) это значит он ввёл не тот тип, и значит введя 5 - ему нужно было диаметр 5, а при смене он становится 10 и приходится опять исправлять
если я не ошибаюсь, вы имели ввиду изменение геомертии, вместо значения по аналогии с NX, так?
Изменено: Vite - 18.10.2017 17:41:11
T-FLEX CAD 16.0.61.0
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
-=LEXX=- -=LEXX=-, обратитесь в техподдержку, интересно что ответят по данному вопросу.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
-=LEXX=- -=LEXX=-, если речь об этом ( [URL=http://tflex.ru/forum/index.php?PAGE_NAME=message&FID=14&TID=2388&TITLE_SEO=2388-peremennye-vo-vlozhennykh-fragmentakh&MID=30288#message30288]#17[/URL] )? ответ: никак. да, и смысл теряется в такой схеме. зачем вам промежуточное звено "sborka_1.grb", если управление выполняется с уровня "detail_1.grb"?
Изменено: Vite - 12.10.2017 11:54:50
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Sila Musli, вывод значений завасит от параметров метода "GetFragmentDocument", например:
[CODE]
GetFragmentDocument(true) // получает значение переменной на уровне сборки
GetFragmentDocument(false, true) // получает значение переменной на уровне фрагмента
[/CODE]
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Sila Musli, поправил вложение.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
Sila Musli, все верно, по этому результат был не однозначный.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
-=LEXX=- -=LEXX=-,

[CODE]
using System;
using System.Windows.Forms;

using TFlex;
using TFlex.Model;
using TFlex.Model.Model3D;


namespace Form1Namespace
{
   public partial class Form1
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, System.EventArgs e)
       {
           this.textBox1.Clear();

           Document doc = TFlex.Application.ActiveDocument;
           if (doc == null)
               return;

           // detail_1.grb
           this.GetVariablesInfo(doc, "P1_asm1");
           this.GetVariablesInfo(doc, "P2_asm1");

           // sborka_1.grb
           foreach (var i in doc.GetFragments3D())
           {
               this.GetVariablesInfo(i.GetFragmentDocument(true), "P1_asm2");
               this.GetVariablesInfo(i.GetFragmentDocument(true), "P2_asm2");

               // part_1.grb
               foreach (var j in i.GetFragmentDocument(true).GetFragments3D())
               {
                   this.GetVariablesInfo(j.GetFragmentDocument(true), "P1");
                   this.GetVariablesInfo(j.GetFragmentDocument(true), "P2");
               }
           }
       }

       private void GetVariablesInfo(Document doc, string variableName)
       {
           string val = "";
           foreach (var i in doc.GetVariables())
           {
               if (i.Name == variableName)
               {
                   val = i.IsText ? i.TextValue : i.RealValue.ToString();
                   this.textBox1.Text += string.Format("[{0}] : {1} = {2}\r\n", doc.Title, i.Name, val);
                   break;
               }
           }
       }
   }
}
[/CODE]
Изменено: Vite - 11.10.2017 23:46:16
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]-=LEXX=- -=LEXX=- написал:
Я вам уже несколько раз сказал - ваши ответы не соответствуют контексту вопроса - вы с самого первого ответа перепечатываете по сути одно и тоже, то что у меня в примерах.[/QUOTE]
если бы можно было понять, что конкретно вас интересует, возможно, я бы смог вам помочь.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]-=LEXX=- -=LEXX=- написал:
У меня в коде так и сделано. Я же говорю - не работает так! %) Считываются значения, заданные в другом файле, но не те что заданы в текущем и которые мне нужны...[/QUOTE]
проблема на вашей стороне. данный пример вполне рабочий.
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]-=LEXX=- -=LEXX=- написал:
Я же пытаюсь добраться до переменных заданных в текущем документе, но для вложенных фрагментов.[/QUOTE]

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

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

           foreach (var i in document.GetFragments3D())
           {
               if (i.FilePath == "asm_2.grb")
               {
                   MessageBox.Show(i.GetFragmentDocument(true).FindVariable("P1").RealValue.ToString(), "Variable value");
               }
           }
       }
   }
}
[/CODE]
Переменные во вложенных фрагментах, Получение значений переменных во вложенных фрагментах
 
[QUOTE]-=LEXX=- -=LEXX=- написал:
К сожалению и FindVariable() тоже находит для вложенных фрагментов лишь значение, которое задано у этих фрагментов в другом файле, но не в текущем ([/QUOTE]
используйте рабочий пример:
1. скачайте архив (см. вложение)
2. поместите файл "Test Macro.grb" в директорию:
[CODE]
C:\Program Files\T-FLEX CAD 15 x64\Program\Macros
[/CODE]
3. откройте документ "part_1.grb"
4. выполните макрос "Test Macro" в окне "Макросы"
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.