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


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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 20 След.
Макрос для создания узлов
 
[QUOTE]DenStudy написал:
В значения коннектора загружает имена, но без выражений.[/QUOTE]
ну в этом плане API ограничен. все что я могу получить: имя параметра и его значение. по аналогии с переменными, должен быть тип данных "Expression", но я не вижу ничего подобного для коннекторов.
[QUOTE]DenStudy написал:
после того как нажимаешь ок на свойствах коннекотра всё значения пропадают.[/QUOTE]
не повторяется.
Изменено: Vite - 12.07.2017 16:58:20
Макрос для создания узлов
 
[QUOTE]DenStudy написал:
При выборе метода "Test.ConnectorTask.Run" выдаётся ошибка.[/QUOTE]
последовательность действий:
- поместите документ (Test Macro.grb) в директорию:
[CODE]
"C:\Program Files\T-FLEX CAD 15 x64\Program\Macros"
[/CODE]
- создайте новый документ;
- создайте пустой коннектор и выделите его;
- выполните макрос;
Макрос для создания узлов
 
DenStudy, проверьте ссылки (см. вложение). отлаживаемый метод должен быть: "Test.ConnectorTask.Run"
Изменено: Vite - 11.07.2017 19:06:43
Панель инструментов
 
Паша Маргинал, по-умолчанию параметр "Visible" установлено в "true". попробуйте сбросить настройки приложения, и повторно зарегистрировать плагин.
Макрос для создания узлов
 
DenStudy,

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

namespace Test
{
   public class ConnectorTask
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           if (document != null)
           {
               OpenFileDialog ofd = new OpenFileDialog();
               ofd.Filter = "T-FLEX CAD Document | *.grb";
               ofd.ShowDialog();

               bool IsChanges = false;
               foreach (var i in document.Selection.GetAllObjects())
               {
                   switch (i.GroupType)
                   {
                       case ObjectType.FixingVector:
                           Connector connector = (Connector)i;
                           document.BeginChanges("Create connector values");

                           if (connector.Parameters.Count == 0)
                               IsChanges = CreateConnectorValuesOfPrototype(connector, ofd.FileName);

                           if (IsChanges)
                               document.EndChanges();
                           else
                               document.CancelChanges();
                           break;
                       case ObjectType.LCS:
                           LCS lcs = (LCS)i;
                           document.BeginChanges("Create connector values");

                           if (lcs.ConnectorParameters.Count == 0)
                               IsChanges = CreateConnectorLCSValuesOfPrototype(lcs, ofd.FileName);

                           if (IsChanges)
                               document.EndChanges();
                           else
                               document.CancelChanges();
                           break;
                   }
               }
           }
       }

       static bool CreateConnectorValuesOfPrototype(Connector connector, string prototypePath)
       {
           Document prototype = TFlex.Application.OpenDocument(prototypePath, false);
           if (prototype != null)
           {
               foreach (Object2D i in prototype.Get2DObjects())
               {
                   if (i.GroupType == ObjectType.FixingVector)
                   {
                       Connector c = (Connector)i;
                       for (int j = 0; j < c.Parameters.Count; j++)
                       {
                           if (c.Parameters.IsReal(j))
                           {
                               connector.ChangeParameters().SetRealValue(
                                   c.Parameters.GetParameter(j),
                                   c.Parameters.GetRealValue(j));
                           }
                           else
                           {
                               connector.ChangeParameters().SetTextValue(
                                   c.Parameters.GetParameter(j),
                                   c.Parameters.GetTextValue(j));
                           }
                       }
                   }
               }
           }
           else
               MessageBox.Show("Прототип не определен...");

           if (connector.Parameters.Count > 0)
               return true;

           return false;
       }

       static bool CreateConnectorLCSValuesOfPrototype(LCS lcs, string prototypePath)
       {
           Document prototype = TFlex.Application.OpenDocument(prototypePath, false);
           if (prototype != null)
           {
               foreach (LCS i in prototype.GetLCSs())
               {
                   if (i.IsConnector())
                   {
                       for (int j = 0; j < i.ConnectorParameters.Count; j++)
                       {
                           if (i.ConnectorParameters.IsReal(j))
                           {
                               lcs.ChangeConnectorParameters().SetRealValue(
                                   i.ConnectorParameters.GetParameter(j),
                                   i.ConnectorParameters.GetRealValue(j));
                           }
                           else
                           {
                               lcs.ChangeConnectorParameters().SetTextValue(
                                   i.ConnectorParameters.GetParameter(j),
                                   i.ConnectorParameters.GetTextValue(j));
                           }
                       }
                   }
               }

               if (lcs.ConnectorParameters.Count > 0)
                   return true;
           }
           else
               MessageBox.Show("Прототип не определен...");

           return false;
       }
   }
}
[/CODE]
Макрос для создания узлов
 
[QUOTE]DenStudy написал:
Попробовал скомпилировать ваш макрос - не получилось.[/QUOTE]
исправьте ошибку в первой строке. что такое 2D коннектор?
Макрос для создания узлов
 
[QUOTE]DenStudy написал:
Необходимо загружать в выбранный коннектор список значений коннектора, значения с выражениями из шаблона (прототипа) коннектора.[/QUOTE]
если я правильно понял вопрос, вам нужно заполнить "Значения коннектора" для выделенного ЛСК активного документа, из прототипа. так?

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

namespace Test
{
   public class ConnectorTask
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           if (document != null)
           {
               OpenFileDialog ofd = new OpenFileDialog();
               ofd.Filter = "T-FLEX CAD Document | *.grb";
               ofd.ShowDialog();

               bool IsChanges = false;
               foreach (var i in document.Selection.GetAllObjects())
               {
                   if (i.GroupType == ObjectType.LCS)
                   {
                       LCS docLCS = (LCS)i;
                       document.BeginChanges("Create connector values");

                       if (docLCS.ConnectorParameters == null)
                           IsChanges = CreateConnectorValuesOfPrototype(docLCS, ofd.FileName);

                       if (IsChanges)
                           document.EndChanges();
                       else
                           document.CancelChanges();
                       break;
                   }
               }
           }
       }

       static bool CreateConnectorValuesOfPrototype(LCS docLCS, string prototypePath)
       {
           Document prototype = TFlex.Application.OpenDocument(prototypePath, false);
           if (prototype != null)
           {
               foreach (LCS i in prototype.GetLCSs())
               {
                   if (i.IsConnector())
                   {
                       for (int j = 0; j < i.ConnectorParameters.Count; j++)
                       {
                           if (i.ConnectorParameters.IsReal(j))
                           {
                               docLCS.ChangeConnectorParameters().SetRealValue(
                                   i.ConnectorParameters.GetParameter(j),
                                   i.ConnectorParameters.GetRealValue(j));
                           }
                           else
                           {
                               docLCS.ChangeConnectorParameters().SetTextValue(
                                   i.ConnectorParameters.GetParameter(j),
                                   i.ConnectorParameters.GetTextValue(j));
                           }
                       }
                   }
               }

               if (docLCS.ConnectorParameters != null)
                   return true;
           }
           else
               MessageBox.Show("Прототип не определен...");

           return false;
       }
   }
}
[/CODE]
Макрос для создания узлов
 
DenStudy,

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

namespace Test
{
   public class DocumentTask
   {
       public static void Run()
       {
           Document document = TFlex.Application.ActiveDocument;
           if (document != null)
           {
               OpenFileDialog ofd = new OpenFileDialog();
               ofd.Filter = "T-FLEX CAD Document | *.grb";
               ofd.ShowDialog();
               InsertVariablesOfPrototype(document, ofd.FileName);
           }
       }

       public static void InsertVariablesOfPrototype(Document document, string prototypePath)
       {
           Document prototype = TFlex.Application.OpenDocument(prototypePath, false);

           if (prototype != null)
           {
               foreach (var i in prototype.GetVariables())
               {
                   if (document.FindVariable(i.Name) == null)
                   {
                       document.BeginChanges("Insert Variable");
                       CreateVariableOfPrototype(document, i);
                       document.EndChanges();
                   }
               }
           }
           else
           {
               MessageBox.Show("Прототип не определен...");
           }
       }

       public static Variable CreateVariableOfPrototype(Document document, Variable v)
       {
           Variable variable = null;

           if (v.IsReal)
           {
               variable = new Variable(document, v.Name, v.RealValue, v.External);
           }
           else if (v.IsText)
           {
               variable = new Variable(document, v.Name, v.TextValue, v.External);
           }

           if (variable != null)
           {
               variable.GroupName = v.GroupName;
               variable.Hidden = v.Hidden;
               variable.Comment = v.Comment;
               variable.Expression = v.Expression;

               for (int i = 0; i < v.ValueListCount; i++)
               {
                   variable.AddValueListString(v.GetValueListString(i));
               }
           }

           return variable;
       }
   }
}
[/CODE]
Изменено: Vite - 07.07.2017 19:00:31
Порядок размещения объектов
 
Паша Маргинал, такова специфика селектора. на самом деле, параграф наложен на таблицу. если, например, определить уровень таблицы (1), а параграф на уровне (0). затем, применить заливку таблицы, то параграф будет скрыт. при желании, можно выделить параграф через окно "Элементы модели". зачем вам такие сложности?
Порядок размещения объектов
 
Паша Маргинал, нужно смотреть документ, так сложно определить причину.
Порядок размещения объектов
 
[QUOTE]Паша Маргинал написал:
Подскажите как это можно сделать?[/QUOTE]
Возможно Вы имели ввиду случай, когда таблица наложена поверх параграфа? Если таблица создана независимо от параграфа, можно выделить в окне "Элементы модели" (для T-FLEX 15), или через слой (если элемент создан на отдельном слое). Далее, при помощи свойства "Уровень" или "Приоритет", устанавливаете порядковый номер от нуля.
На уровне API это общее свойство:
- Text.Level
- Text.Priority

для oпределения таблицы используется свойство "RichText.TableOnly", например:
[CODE]
foreach (RichText text in document.GetTexts())
{
   text.BeginEdit();

   if (text.TableOnly)
       text.Level = 1;

   text.EndEdit();
}
[/CODE]
Изменено: Vite - 27.06.2017 21:06:09
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
Можно ли как то достать все ссылки из одного параграфа?[/QUOTE]

[CODE]
static bool RemoveFileLink(Document document, ParagraphText text, string filePath)
{
   foreach (FileLink link in document.FileLinks)
   {
       if (link.FilePath == filePath)
       {
           text.SetFileLinkReference(link.InternalID.ToInt32(), new FileLink(document));
           return true;
       }
   }
   return false;
}
[/CODE]
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
Судя по вашему коду, для одного экземпляра ParagraphText проставится только один FileLink, а мне нужно именно несколько FileLink для одного параграфа.[/QUOTE]
вы можете прикрепить к объекту "ParagraphText" сколько угодно ссылок, с этим нет проблем:
[CODE]
FileLink link = null;

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

   if (text.TextValue.Contains("Text1"))
   {
       link = new FileLink(document, "item1.txt");
       text.SetFileLinkReference(link.InternalID.ToInt32(), link);
   }
   if (text.TextValue.Contains("Text2"))
   {
       link = new FileLink(document, "item2.txt");
       text.SetFileLinkReference(link.InternalID.ToInt32(), link);
   }

   text.EndEdit();
}
[/CODE]
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
Для этого текста я хочу проставить несколько ссылок на внешний файл через ParagraphText.SetFileLinkReference()[/QUOTE]

[CODE]
FileLink link = new FileLink(document, "test.lst");

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

   if (text.TextValue.Contains("Параграф"))
       text.SetFileLinkReference(link.InternalID.ToInt32(), link);

   text.EndEdit();
}
[/CODE]

если не секрет, зачем это вам понадобилось?
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
Я хочу проставить для фрагмента несколько ссылок[/QUOTE]
когда создается новый документ, по-умолчанию, в нем всего две ссылки, которые определены в параметрах документа (см. вложение). если добавить фрагмент, то ссылка на файл создается автоматически при включении из библиотеки или локальной директории. объясните, что конкретно вы хотите сделать?
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
может ли быть у фрагмента несколько ссылок?[/QUOTE]
что значит несколько ссылок? путь фрагмента определяется свойством "FilePath", и на уровне пользовательского интерфейса можно задать путь через переменную документа в формате: {$Path}
переменная документа, это универсальный объект, который можно очень просто преобразовать в коллекцию (выпадающий список), подключить к таблице базы данных.
Изменено: Vite - 21.06.2017 15:28:36
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
То есть если я перед удалением фрагмента скопирую сам фрагмент, удалю его, обновлю ссылки и вставлю копию то должно сработать?[/QUOTE]
Зачем так усложнять? Можно переопределить свойство "FilePath". Фрагменты легко заменяются на уровне переременных документа (см. вложение). Если путь фрагмента определен переменной документа, то ссылки обновлять не нужно, достаточно обновить модель. Таким же образом, можно погасить фрагмент, без удаления.

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

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

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

               foreach (FileLink link in document.FileLinks)
               {
                   if (link.IsOriginalFormat)
                   {
                       ReplaceFragment(document, "Part1.grb", "Part2.grb");
                       //RemoveFragment(document, "Part1.grb");
                       break;
                   }
               }

               document.EndChanges();
           }
       }

       static bool ReplaceFragment(Document document, string filePathOld, string filePathNew)
       {
           foreach (Fragment fragment in document.GetFragments())
           {
               if (fragment.FilePath == filePathOld)
               {
                   fragment.FilePath = filePathNew;

                   if (fragment.GroupType == ObjectType.Fragment3D)
                       document.Regenerate3D();
                   return true;
               }
           }
           return false;
       }

       static bool RemoveFragment(Document document, string filePath)
       {
           ObjectArray objArray = new ObjectArray();
           DeleteOptions deleteOptions = new DeleteOptions();

           foreach (Fragment fragment in document.GetFragments())
           {
               if (fragment.FilePath == filePath)
               {
                   objArray.Add(fragment);

                   document.DeleteObjects(objArray, deleteOptions);
                   return true;
               }
           }
           return false;
       }
   }
}
[/CODE]
Изменено: Vite - 21.06.2017 14:56:32
Удаление ссылки на файл
 
[QUOTE]Паша Маргинал написал:
Как можно удалить ссылку на файл (FileLink).[/QUOTE]
если вы обратили внимание, интерфейс окна "Ссылки" не поддерживает функцию удаления ссылок. но, можно удалить фрагмент, а затем обновить ссылки.
Изменено: Vite - 21.06.2017 15:12:48
[ Закрыто] Получить значение RichText, Хочу через GetText() текст считать, но меня выкидывает с исключением Edit mode was not set
 
[QUOTE]Паша Маргинал написал:
Всем приветик, у меня такой вопрос: есть ли простой способ получить абсолютно все текстовые поля документа?[/QUOTE]

похоже на ошибку в API. когда добавляешь текст в документ, вылетает исключение, типа 'System.AccessViolationException':
[ Закрыто] Превью изображение, Как получить изображение превьюшки модели/чертежа
 
[QUOTE]SwnSerg написал:
Никто не подскажет, а можно ли им каким-либо образом воспользоваться?[/QUOTE]
Опишите задачу, что Вы хотите сделать.

Картинку можно получить используя метод "GetDocumentIcon":
[CODE]
Icon icon = TFlex.Application.GetDocumentIcon(fileName, 128);
[/CODE]
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 20 След.