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


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

Страницы: 1
Откат 3D-модели: TF12 и TF17, Отношения "родитель-потомок" при создании профиля
 
Доброго времени суток, уважаемые форумчане.
На нашем предприятии приобретены пара лицензий T-Flex CAD 17 (сборка 17.0.27.0) для новых работ, требующих улучшенного функционала. На основой массе рабочих мест работает T-Flex CAD 12 (сборка 12.0.81.0).
Хотел бы попросить вашего совета и помощи. Вопрос касается ньюанса работы с откатом 3Д-модели.

T-FLEX CAD 12.0.81.0

Имеем 3D-модель, созданную в T-Flex CAD 12 (файл «Вопрос 4.4 — TF12.grb», Рисунок 1):
Рисунок 1

«Профиль_СРЕЗ» создан на грани «Грань_3», принадлежащей выталкиванию «ВЫБОРКА» (см. Рисунок 2 ниже). Модель показана в процессе создания «Профиль_СРЕЗ», «Грань_3» выбрана, а выталкивание «БАЗА» погашено, для удобства обзора.
Рисунок 2

При необходимости перезадать «Профиль_СРЕЗ», например, на другую грань выталкивания «ВЫБОРКА», в T-Flex 12 мне кажется удобным откатить 3D-модель к выталкиванию «ВЫБОРКА» и выбрать команду «Изменить» для «Профиль_СРЕЗ» (см. Рисунок 3 ниже):
Рисунок 3

Важный ньюанс: в состоянии отката к выталкиванию «ВЫБОРКА» «Профиль_СРЕЗ» также остаётся в 3D-сцене, он доступен и с ним можно работать. Я понимаю логику работы T-Flex 12 так: «Профиль_СРЕЗ» построен на «Грань_3», которая существует в 3D-сцене, пока существует её родитель - выталкивание «ВЫБОРКА». Благодаря этому я могу изменить «Профиль_СРЕЗ» и выбрать нижнюю грань выталкивания «ВЫБОРКА». При этом «Профиль_СРЕЗ» остаётся на том же уровне «родитель-потомок» в логике построений 3D-модели.
Такая возможность становится особенно важной когда:
1 связь между «Грань_3» и «Профиль_СРЕЗ» нарушилась и необходимо восстановить её, не разрушив 3D-модель (особенно если модель сложная и делал её другой конструктор);
2 если «Профиль_СРЕЗ» нужно перезадать от другой грани того же выталкивания или другой операции.

T-FLEX CAD 17.0.27.0

Теперь рассмотрим состояние отката той же 3D-модели к выталкиванию «ВЫБОРКА», но уже в T-Flex 17 (см. Рисунок 4 ниже):
Рисунок 4

Здесь выталкивание «ВЫБОРКА» существует, но «Грань_3» не существует (отображется серым цветом в дереве 3D-модели). «Профиль_СРЕЗ» также не существует, в 3D-сцене отсутствует, работать с ним нельзя.

В связи с вышеизложенным, возникают следующие вопросы:
1. Какая логика отношений «родитель-потомок» заложена в T-Flex CAD 17 в этом случае — почему «Грань_3» и «Профиль_СРЕЗ» отмечены как погашенные (скрытые / недоступные)?
2. Что предпринять, если в процессе работы и изменений 3D-модели связь между «ВЫБОРКА» → «Грань_3» или «Грань_3» → «Профиль_СРЕЗ» нарушилась и необходимо восстановить её;
3. Если «Профиль_СРЕЗ» нужно перезадать от другой грани того же выталкивания или другой операции?

Подозреваю, что я упускаю какой-то тонкий ньюанс, если возможно, направьте меня, может где-то в официальной справке T-Flex CAD 17 можно прочитать, как это предполагалось разработчиками. Хочется понимать свой инструмент, тем более, что система становится всё мощнее и сложнее, а базовые механизмы всё глубже уходят в недра.
Обозначение резьбы в TFlex CAD 12, Настройка обозначения резьбы на проекции по ГОСТ 8724-2002 "Резьба метрическая... "
 

Здравствуйте, уважаемые форумчане.

Используемая версия TFlex CAD: 12.0.81.0 Дата сборки: October 21 2015.

Хотел бы обсудить с вами обозначение резьбы в TFlex CAD.

Согласно разделу 5 "Обозначения резьбы" по ГОСТ 8724-2002 "Резьба метрическая. Диаметры и шаги":

В условное обозначение размера резьбы должны входить: буква М, номинальный диаметр резьбы и шаг резьбы, выраженные в миллиметрах и разделённые знаком " х ".

Пример: М8х1,25.

Вот как обозначение резьбы формирует TFlex CAD 12 (слева показана проекция):

http://ibb.co/dfMq0x

Рисунок 1

На скриншоте выше (см. рисунок 1) видно, что в обозначении резьбы её диаметр и шаг разделяет символ " * " (звёздочка), имеющий код 42.

Этот код можно увидеть в окне "Вставка символа" (щёлкнув правой кнопкой мыши в любое текстовое поле и выбрав в контекстном меню "Вставить символ...".

http://ibb.co/j2LLiH

Рисунок 2

В качестве символьного шрифта в документе используется шрифт Tflexs_b.shx (меню Настройка - Статус...).
http://ibb.co/komnVx

Таким образом, обозначение резьбы, формируемое TFlex CAD 12 в моём случае не соответствует ГОСТ 8724-2002.

Прошу вашего совета в решении вопроса о том, каким образом заставить TFlex обозначать резьбу по ГОСТу, а именно вставлять между диаметром резьбы и её шагом символ " х " вместо символа " * " (звёздочка).

P.S. Помню, когда работа шла в версии TFlex CAD 10, такого вопроса не возникало, разделителем был символ " х ".

Не работает блок set свойства TFlex.Model.Model2D.MultilineText.Node
 
Доброго всем здоровья, уважаемые форумчане.

Обнаружил в классе TFlex.Model.Model2D.MultilineText (позволяет управлять многострочным текстом, см. команду TE: Создать текст - Создать многострочный текст<M>) странности при установке свойства Node. Свойству нельзя задать значение, отличное от null. То есть, с помощью API нельзя привязать текст к узлу. Вручную в CAD это, конечно, возможно.
Ниже привожу код тестового макроса. Он был создан с помощью встроенного редактора макросов TFlex CAD. Макрос находится в файле "Тест MultilineText_Node.grb".[CODE]using System;
using TFlex.Model;
using TFlex.Model.Model2D;
using System.Windows.Forms;
namespace NewMacroNamespace
{
   public class NewMacroClass
   {
       public static void Привязать_многострочный_текст_к_узлу()
       {
           Document doc = TFlex.Application.ActiveDocument;
           if (doc != null &&
               doc.Selection.GetSize() > 0 &&                //Выбран хотя бы один элемент
               doc.Selection.GetAt(0).GetType() == typeof(MultilineText))    //И это многострочный текст
           {
               if (!doc.IsChanging())
                   doc.BeginChanges("Привязка текста к узлу");
               MultilineText text = (MultilineText)doc.Selection.GetAt(0);    //В условии тип уже проверили
               FreeNode node = new FreeNode(doc, new Parameter(10), new Parameter(20));    //Координаты узла X=10, Y=20
               //Пытаемся привязать текст к только что созданному узлу node
               text.Node = node;
               if (doc.IsChanging())
                   doc.EndChanges();
               //Сообщение в окне всегда будет "Свойство Node выбранного текста: null"
               MessageBox.Show(
                   String.Format("Свойство Node выбранного текста: {0}",
                   text.Node == null ? "null" : text.Node.GetType().FullName));
           }
       }
   }
}[/CODE]Перед запуском макроса необходимо выбрать многострочный текст на единственной странице.
После выполнения строки [CODE]text.Node = node;[/CODE]свойство Node остаётся null.
В конце работы макрос всегда показывает сообщение "Свойство Node выбранного текста: null".
Для лучшего понимания, что происходит в блоке set, заглянем в недра сборки TFlexAPI с помощью бесплатной утилиты JetBrains dotPeek ([URL=https://www.jetbrains.com/decompiler/)]https://www.jetbrains.com/decompiler/)[/URL].
Декомпилированный код блока set свойства TFlex.Model.Model2D.MultilineText.Node:[CODE]// Assembly: TFlexAPI, Version=12.0.74.0, Culture=neutral, PublicKeyToken=eab6a180a6be0d77
// Assembly location: C:\Program Files (x86)\T-FLEX\T-FLEX CAD 12\Program\TFlexAPI.dll
/// <summary>
/// Узел привязки текста
/// </summary>
public unsafe Node Node
{
 get
 { ... }
 set
 {
   this.CheckObject((ModelObject) value);
   TFMultilineText* textForSet = this.TextForSet;
   if (value != null)
     return;                                    //от себя: нет никакой реализации для установки свойства
   *(int*) ((IntPtr) textForSet + 236) = -1;    //от себя: выполняется для случая value == null
 }
}[/CODE]Обратите внимание на строки:[CODE]if (value != null)
   return;[/CODE]Значит, установить свойство Node в не-null невозможно, вместо этого происходит простой возврат из блока set.
Для сравнения привожу аналогичный код для класса LineText. Он позволяет управлять строчным текстом TFlex CAD, см. команду TE: Создать текст - Создать строчный текст<D>.
Блок set для свойства TFlex.Model.Model2D.LineText.Node:[CODE]/// <summary>
/// Узел привязки текста
/// </summary>
public unsafe Node Node
{
 get
 { ... }
 set
 {
   this.CheckObject((ModelObject) value);
   if (value == null)
     *(int*) ((IntPtr) this.repSet + 236) = -1;
   else
     *(int*) ((IntPtr) this.repSet + 236) = <Module>.CTFObject.GetIndex((CTFObject*) value.repGet);
 }[/CODE]Обратите внимание, что здесь обрабатываются оба случая, когда value == null и когда != null. В отличие от MultilineText.Node, свойство LineText.Node и позволяет привязать строчный текст к заданному узлу.
Жду ваших комментариев, уважаемые форумчане.
Надеюсь, что вышеописанный недочёт дойдёт до внимания разработчиков и будет устранён для API TFlex CAD 12.
Файл "Тест MultilineText_Node.grb" прикреплён к сообщению.
Используемая версия CAD: TFlex CAD x32 12.0.74.0
Версия среды выполнения: v4.0.30319
Сборка TFlexAPI, Version=12.0.74.0, Culture=neutral, PublicKeyToken=eab6a180a6be0d77
Операционная система: Windows 7 x64.
Проблема с работой TFlex API
 
Здравствуйте, уважаемые старожилы и гости форума.
Пишу макрос для TFlex CAD 10.0.57.0, который показывает информацию о выделенном объекте документа. В частности, для линий типа Outline пишу код:

[CODE]ModelObject mo = doc.Selection.GetAt(0) as ModelObject; //Исследуем первый выделенный объект
...
switch (mo.GroupType) //Перебираем тип объекта
...
case ObjectType.Outline: //Найдена линия изображения
Outline ol = mo as Outline;
if (ol == null)
{
MessageBox.Show("Объект определён как \"" + mo.GroupType.ToString() + "\", но при преобразовании к типу \"" +
"\"Outline\" объект получил значение null.");
try
{
ol = (ProjectionOutline)mo;
}
catch (Exception e)
{
ReportForm errForm = new ReportForm();
errForm.SetReportText(e.Message);
errForm.ShowDialog();
}
[/CODE]В документе я выбираю линию изображения, полученную с проекции (класс ProjectionOutline). Согласно документации на TFlex API имеем:

[CODE]__gc class ProjectionOutline : public Model2D::Outline;[/CODE]Значит, я могу обращаться к ProjectionOutline через переменную базового класса Outline.
При выполнении строки
[CODE]ol = (ProjectionOutline)mo;[/CODE]генерируется исключение вот с таким сообщением (содержится в e.Message):
[A]TFlex.Model.Model3D.ProjectionOutline невозможно привести к [B]TFlex.Model.Model3D.ProjectionOutline.
Тип A происходит от ТFlехАРI3D, Version=9.0.0.0, Culture=neutral, PublicKeyToken=28c4a25ab632a509 в контексте "LoadFrom" в расположении "C:\PROGRA~1\T-FLEX\T-FLEX~3\Program\ТFlехАРI3D.dll.
Тип B происходит от ТFlехАРI3D, Version=9.0.0.0, Culture=neutral, PublicKeyToken=28c4a25ab632a509" в контексте "Default" в расположении "C:\Program Files\T-FLEX\T-FLEX CAD 10\Program\ТFlехАРI3D.dll.
Подскажите пожалуйста, что может быть не так? При компиляции проекта в свойствах ссылок на ТFlехАРI.dll и ТFlехАРI3D.dll свойство "CopyLocal == false".
Буду благодарен за любые мысли по поводу причин происхождения вышеописанного сообщения. Просто не могу понять, куда дальше копать.
Изменено: Николай - 01.12.2013 00:09:11
Блок изменения документа, Особенности при работе в системе DOCs
 
Добрый день, уважаемые.
В процессе работы макроса, который создаёт оси на выбранных окружностях, иногда выбрасывается следующее исключение:

"Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "tfdapi8, Version=10.0.928.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "tfdapi8, Version=10.0.928.0, Culture=neutral, PublicKeyToken=null"
  в TFDOCsAPI8.GetFragmentDocument(TFDOCsAPI8* , DOCsHandle* , DOCsHandle* idParentDoc, DOCsHandle* idParentFragment, DOCsFragmentID* fragmentID, Boolean fVerifyExists)
  в UndoManager.Apply(UndoManager* )
  в TFlex.Model.Document.ApplyChangesEx(Boolean bCheck)
  в TFlex.Model.Document.EndChanges()
  в MacroLibrary.AxisForm.btnCreateAxis_MouseUp(Object sender, MouseEventArgs e)
  в System.Windows.Forms.Control.OnMouseUp(MouseEventArgs e)
  в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
  в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
  в System.Windows.Forms.Control.WndProc(Message& m)
  в System.Windows.Forms.ButtonBase.WndProc(Message& m)
  в System.Windows.Forms.Button.WndProc(Message& m)
  в System.Windows.Forms.Control.ControlNativeWindow .OnMessage(Message& m)
  в System.Windows.Forms.Control.ControlNativeWindow .WndProc(Message& m)
  в System.Windows.Forms.NativeWindow .Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].



************** Загруженные сборки **************
mscorlib
   Версия сборки: 2.0.0.0
   Версия Win32: 2.0.50727.3607 (GDR.050727-3600)
   CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
TFlexMacroLoader
   Версия сборки: 9.0.0.0
   Версия Win32: 10.0.57.0
   CodeBase: file:///C:/Program%20Files/T-FLEX/T-FLEX%20CAD%2010/Program/TFlexMacroLoader.DLL
----------------------------------------
msvcm80
   Версия сборки: 8.0.50727.3053
   Версия Win32: 8.00.50727.3053
   CodeBase: file:///C:/WINDOWS/WinSxS/x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca/msvcm80.dll
----------------------------------------
TFlexAPI
   Версия сборки: 9.0.0.0
   Версия Win32: 10.0.57.0
   CodeBase: file:///C:/Program%20Files/T-FLEX/T-FLEX%20CAD%2010/Program/TFlexAPI.DLL
----------------------------------------
***
   Версия сборки: 9.0.0.0
   Версия Win32: 10.0.57.0
   CodeBase: file:///C:/Program%20Files/T-FLEX/T- *** .DLL
----------------------------------------
TFDOCsAPI
   Версия сборки: 9.0.0.0
   Версия Win32: 10.0.57.0
   CodeBase: file:///C:/Program%20Files/T-FLEX/T-FLEX%20CAD%2010/Program/TFDOCsAPI.DLL
----------------------------------------
tfdapi8
   Версия сборки: 10.0.952.0
   Версия Win32:
   CodeBase: file:///C:/Program%20Files/T-FLEX/T-FLEX%20DOCs%2010/tfdapi8.dll
----------------------------------------
9hurg1sdtfm
   Версия сборки: 0.0.0.0
   Версия Win32: 10.0.57.0
   CodeBase: file:///C:/Program%20Files/T-FLEX/T-FLEX%20CAD%2010/Program/TFlexMacroLoader.dll
----------------------------------------
MacroLibrary
   Версия сборки: 1.0.0.0
   Версия Win32: 1.0.0.0
   CodeBase: file:///C:/Program%20Files/T-FLEX/T-FLEX%20CAD%2010/Program/MacroLibrary.DLL
----------------------------------------
System.Windows.Forms
   Версия сборки: 2.0.0.0
   Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
   CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
   Версия сборки: 2.0.0.0
   Версия Win32: 2.0.50727.3614 (GDR.050727-3600)
   CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
   Версия сборки: 2.0.0.0
   Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
   CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Accessibility
   Версия сборки: 2.0.0.0
   Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
   CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Windows.Forms.resources
   Версия сборки: 2.0.0.0
   Версия Win32: 2.0.50727.3053 (netfxsp.050727-3000)
   CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

<configuration>
   <system.windows.forms jitDebugging="true" />
</configuration>

При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном."

Здесь в обработчике события MouseUp (btnCreateAxis_MouseUp) макрос открывает блок изменений документа Document.BeginChanges("Создание осей"), создаёт оси на выбранных окружностях и затем пытается сохранить созданные оси командой Document.EndChanges(). Иногда всё проходит абсолютно без проблем. Но отчего-то иногда получается вот такая вот ерунда.
Есть ли у кого-то предположения, с чем может быть связано подобное поведение? Может быть существуют некие особые правила работы с блоком изменения документа при работе в интеграции с DOCs?
Работаю с T-Flex CAD 10.0.57, интеграция с файлами и документами T-Flex DOCs 10.
Свойства размера
 
Здравствуйте, уважаемые.
Возникла необходимость программно задать выбранному размеру, проставленному на проекции, свои значения номинала и отклонений.
После 3х дней попыток код макроса выложить на форум так и не удалось. Всё зависает напрочь.
Поэтому привести его здесь не могу. На словах вопрос такой:
когда я пытаюсь присвоить свойству Value класса Dimension или же свойствам TolerLowerDev, TolerUpperDev класса LinearDimension какое-либо значение - это не работает. Значения не попадают в параметры размера. Свойство ManualValue устанавливаю в true.
zip-файл с текстом програмы прикладываю к посту.
Смотрел примеры макросов, например пересчёт размеров в середину поля допуска. Судя по тем макросам всё элементарно. Но, тем не менее, простое присваивание не работает.
Может кто-то знает, как обойти проблему и всё-таки задать размеру свои собственные значения номинала и допусков.
Изменено: Николай - 24.04.2012 22:06:55
Свойство Outline.PatternName, Как получить список имён доступных в системе образцов
 
Добрый день, уважаемые посетители форума.
В ходе создания макроса возникает необходимость программного получения полного списка имён образцов штриховых линий (типов линий), которые доступны в T-Flex CAD. Макрос должен получить этот список из системы и предоставить пользователю возможность выбора типа линии из этого списка.
Затем я предполагаю использовать указанный пользователем тип для рисования линий.
Я думаю, можно решить этот вопрос "в лоб": выписать аккуратно на лист бумаги (или в текстовый файл) имена типов линий, которые находятся в выпадающем списке "Тип линии" в команде "G: Создать изображение", заполнить этими строками ComboBox, запретить пользователю редактирование поля и жить спокойно, получая из ComboBox'а выбранное имя.
Но всё же хотел бы спросить:
1. возможны ли в природе случаи, когда список типов линий может непредсказуемо измениться в результате, допустим, корректировок каких-то служебных файлов? Не окажется ли мой вручную забитый список типов линий в какой-то момент неактуальным?

В случае положительного ответа на вопрос№1 вытекает вопрос №2:

2. возможно ли программно получить фактический (актуальный) список типов линий для использования в макросе?
Получение родительского объекта, Как получить объект-родитель для заданного объекта
 
Здравствуйте.
Столкнулся с проблемой.
Имеется: выбранная пользователем одна окружность, получаемая через doc.Selection.GetAt(0). Тип - TFlex::Model::Model2D::CircleOutline. Обычная "эскизная" окружность. На ней проставлены 2 оси, горизонтальная и вертикальная, тип TFlex::Model::Model2D::CenterAxisOutline.

Вопрос: как, имея объект CircleOutline circle = doc.Selection.GetAt(0) as CircleOutline, получить доступ к каждой из построенных на окружности осей?
Что-то в духе:
CenterAxisOutline horizontalAxis = get ??? тра ля ля
CenterAxisOutline verticalAxis = get ??? тра ля ля
Изменено: Николай - 01.04.2012 23:05:26
Свойство LineText.TextValue, Как задать его правильно
 
Всем добрый день!
Сборка T-Flex 10.0.57.0
Есть у меня 1 выбранный пользователем в окне строчный текст:
LineText lt = doc.Selection.GetAt(0);
Когда я меняю цвет этого текста наглым образом, без открытия блока изменений документа:
...
1 Parameter c = new Parameter(12); //Ярко-красный цвет
2 lt.Color = c;
....
Результат: при выполнении строки 2 выдаётся ошибка:
"Необрабатываемое исключение в компоненте приложения. ...
Объект не может быть изменён. Не открыт блок отмены действий."
Файл *.txt с доп. информацией прикладываю к посту.
Как только делаю
doc.BeginChanges("Установка цвета");
Parameter c = new Parameter(12); //Ярко-красный цвет
lt.Color = c;
doc.EndChanges();
то всё здорово и прекрасно работает, отмена изменений происходит корректно, цвета возвращаются на исходные.
Теперь я хочу изменить подобным образом свойство lt.TextValue. Согласно руководству по API оно доступно для записи. Не открывая блок изменений документа я делаю следующее:
...
string str = "Изменённый текст";
lt.TextValue = str;
...
Результат: никаких исключений не выдаётся, выбранный текст изменяет значение, это отображается в 2D-окне TFlex'а, захожу в свойства текста - там тоже строка = "Изменённый текст".
НО: в блоке изменений документа никаких записей нет, отменить изменение невозможно.
Дальше делаю так:
...
doc.BeginChanges("Изменение текста");
string str = "Изменённый текст";
lt.TextValue = str;
doc.EndChanges();
...
Результат: никаких исключений не выдаётся, в 2D-окне TFlex'а текст не показыват того, что он изменился, визуально значение осталось прежним, захожу в свойства текста - там строка = "Изменённый текст".
Вид текста с новым значением TextValue корректно отображается только после полного пересчёта комадой 3RG: Произвести полный пересчёт модели.
НО: по-прежнему в блоке изменений документа никаких записей нет, отменить изменение невозможно.
Вопросы:
1. (любопытно) Почему я смог без открытия блока изменений документа поменять значение свойства lt.TextValue и ничего не случилось?
2. (очень нужно) Как изменить свойство lt.TextValue таким образом, чтобы и текст визуально отобразился сразу по-человечески без команды 3RG, и, что гораздо важнее, чтобы изменение lt.TextValue попало-таки в блок изменений документа и я смог бы отменить эти свои действия.
Надеюсь на помощь.
Программное считывание "видимых" уровней отображения объектов
 
Уважаемые, всем доброго здравия.
Существует в T-Flex такая команда: SH:Задать уровни отображения. В ответ на выполнение этой команды появляется модальное диалоговое окно "Уровни", в котором для каждого типа объектов прописаны те уровни, находясь в пределах которых объект будет видимым.

Внимание, вопрос: как с помощью API программно считать эти значения для каждого типа объектов?

Конкретно мне нужно программно узнать, находится ли уровень объекта типа Text в пределах видимых уровней для своего типа. Мне надо сравнить значение в свойстве Text.Level с предельными значениями, записанными в диалоговом окне "Уровни" в строке "Тексты". Перерыл справку по API, найти не могу, поиск по "level" выдаёт несколько сотен ответов, кроме вездесущего " __property Parameter* Level;" ничего путного найти нет возможности.
Помогите пожалуйста.
Макрос с формой, Как отвязать форму от документа
 
Помогите, люди добрые!
Сделал макрос для поиска в содержимом строчных текстов. Много с ними работаю, давно хотел такую функцию. И вроде работает более-менее. Но есть вопрос. Опишу более подробно.
Файл из прилагаемого архива, называется "Поиск текста.grb", кладу в папку \Program\Macros. MacroLibrary.dll - в \Program.

---------- Случай №1 ----------
1.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Открываю окно "Макросы", запускаю  TestDllMacro  из узла "Поиск текста". Собственно, это ссылка внутрь DLL-ки. Макрос проверяет TFlex.Application.ActiveDocument == null и ругается. Всё хорошо. Затем открываю любой .grb документ, запускаю макрос снова. Загружается форма (метод Show(), немодально), выполняю поиск с разными результатами. Всё работает.
1.2. Макрос запущен, форма висит - закрываю документ, в котором искал. Теперь внимание - форма вместе с документом НЕ закрывается, остаётся. Клацаю "Найти всё" - ругается, doc == null, всё правильно. Так открываю, закрываю 5-6 документов (форма "живёт", никуда не исчезает), в них ищу - всё работает на ура.

---------- Случай №2 ----------
2.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Внимание: загружаю любой .grb документ (т.е. в этом случае - до того, как 1й раз запустить макрос). Запускаю макрос вызовом  TestDllMacro  из узла "Поиск текста". Форма загружается. Выполняю поиск в открытом документе, всё кул. Теперь моя беда: в этом варианте №2, который я сейчас описываю, при закрытии документа запущенная форма "насильственно" закрывается вместе с ним. Причём я проверял - управление в этом случае в обработчик события mainForm.FormClosing() не попадает!
После такого издевательства над формой 2й запуск макроса загружает форму в нерабочем состоянии - текст-боксы в нокауте, работает только кнопка "Выход". Помогает только полный перезапуск T-Flex.
Ну и теперь собственно вопрос:
Как заставить форму вести себя ВСЕГДА как в вышеописанном случае №1, т.е. нормально работать "при любой погоде".
Ну и может кто-нибудь подскажет, в чём же причина разного поведения формы?

P.S.Цепляю в пост архив .rar, там исходники проекта в Visual C# 2008 и .grb-шка с вызовом DLL-ки. В проекте есть скомпиленная в Debug-версии DLL-ка MacroLibrary.dll.
Расширение интерфейса T-Flex
 
Доброго времени суток.
Сборка T-Flex 10.0.57.0.

Вопрос №1
Уважаемые, подскажите пожалуйста, существует ли какая-то возможность добавить в интерфейс T-Flex CAD свою кнопку на панель инструментов, при нажатии на которую программа выполняет определённые действия с объектами в документе?

Конкретная задача.
Имеем: в 3Д-окне выбран один 3Д-фрагмент из нескольких;
Требуется: отдельная кнопка на панели инструментов, которая делает этот выбранный 3Д-фрагмент невидимым (состояние, когда поле "Погасить" = 1, поле "Уровень" прошу не затрагивать);
Просьба варианты [пр. кнопка мыши -> Видимость -> Погасить], купить 11-ю, 12-ю и т.п. версию не предлагать, не о том вопрос. Прошу высказываться по теме, конкретные мысли по конкретной задаче: есть фрагмент, нужна кнопка.

Вопрос №2
Существует ли способ "закрепить" панели инструментов на своём месте, предохранив их от случайных перемещений мышью?

Т.е. я хочу, чтобы панель с кнопками, расположенная у меня в пристыкованном виде внизу экрана никуда не дёргалась с места при случайном микроперетаскивании её мышью, когда щелчок из-за микросдвига руки превращается в перетаскивание. Вопрос только в этом, конкретно в защите панели от перемещений, "мыслью по древу" в непонятном и противоестественном направлении прошу не растекаться.
Интерфейс T-Flex CAD, Окна, панели инструментов
 
Несколько вопросов уважаемым форумчанам, давно они мне покоя не дают.
Сборка T-Flex CAD 10.0.57.0
Ситуация №1

Работа в T-Flex CAD интегрирована с T-Flex DOCs. При открытии любых файлов из Хранилища T-Flex DOCs (методом выбора команды "Редактировать" либо "Просмотреть" в меню карточки объекта) каждый файл открывается в собственном отдельном каде. Т.е. имея 2 открытых файла - имеем 2 самостоятельных процесса TFlex.exe в памяти.
При открытии файлов локально с винта из любой папки, без использования Докса, путём выбора команды "Открыть" из меню файла либо по 2му щелчку (через Проводник Windows или любой другой менеджер файлов) - все документы всегда открываются в одном родительском окне када, что делается быстро, т.к. процесс 1 раз загружается и потом лишь подгружает документы.
Вопрос №1
Как заставить T-Flex CAD открывать документы из Докса всегда в одном и том же окне?
Лирика: Очень утомительно ждать по 2 минуты для открытия эдак 10-ти мелких файлов типа шайбы, винты и прочая шелуха. Хотя обычно нужно 10 секунд взглянуть на модель, кое что измерить и на этом необходимость отпадает.
Ситуация №2
Однажды при исследовании окна Настройка, вкладки Команды наткнулся на кнопку "Переместить/изменить объекты".
Вопрос №2
Что она делает?
Лирика: В справке ничего об этом не нашёл. Когда поместил эту кнопку себе на панель инструментов - ни разу за месяц не видел её активной и доступной для нажатия - она всегда блокирована. Выбирал в 2D и в 3D-окнах любые объекты - кнопка всё равно всегда блокирована. Также для этой команды не пишется в строке состояния никакого клавиатурного аналога (как допустим для построения 3D-узла = 3N). Кнопка и подсказка показана на картинке:

Есть подозрения что кнопка вообще не рабочая совсем, мёртвая заглушка, возможно для какого-то резерва.
P.S. Уже который год убивает отсутствие возможности отсортировать дерево в окне Хранилище T-Flex DOCs по алфавиту. Неужели так сложно было сделать сортировку? Особенно для больших деревьев отсутствие сортировки - это просто бич и нервотрёпка. (Это был крик души)
Изменено: Николай - 13.11.2010 20:24:05
Настройка интерфейса T-Flex CAD, Как отключить строку меню?
 
Всем доброго времени суток!
Подскажите пожалуйста, как отключить строку меню в T-FLEX CAD 10? Скриншот окна Настройка прицеплен к сообщению. Почему-то невозможно снять указанный флажок. Может кто-то знает способ разблокировать его? Или может можно скрыть меню с помощью реестра?
Спасибо за внимание, надеюсь на полезные ответы.
(Кстати, пробовал в версии 11 - там меню легко можно убрать из интерфейса)
Вот скрин с хостера:
Изменено: Николай - 23.09.2010 20:22:28
Пересчёт 3D-фрагмента с внутренней БД, Логика работы T-Flex при пересчёте 3D-фрагментов, содержащих в себе БД
 
Доброго всем времени суток!
Уважаемые форумчане, очень интересует несколько вопросов. Представим себе ситуацию: сборочная 3Д-модель, которая содержит некоторое количество винтов (болтов или другого крепежа), при этом винты содержат в себе внутреннюю БД для параметризации в духе "диаметр/длина/покрытие" ну и т.д.
Вот мне интересно следующее:
1. Какую логику T-Flex использует при пересчёте таких 3Д-фрагментов, где есть параметризация с выборкой параметров из внутренней БД? Если кто-нибудь знает - распишите пожалуйста подробно по шагам.
2. Есть ли разница в скорости работы пары функций rec / val в сравнении с функцией find при выборке значений из внутренней БД? При этом считаем, что параметров выбирается около десятка. На мой взгляд пара rec / val должна работать быстрее, т.к. поиск по БД выполняется только 1 раз функцией rec, а затем по найденному номеру записи я выбираю функцией val нужные мне параметры. Но кто знает....
3. Если ли у кого-то соображения по поводу того, как максимально ускорить пересчёт 3Д-фрагмента типа винта, болта, гайки, шайбы и т.п., т.е. тех фрагментов, которые применяются массово и ввиду этого их время пересчёта критично.
Я решил таки усовершенствовать нашу базу крепежа, сделать её чуть более удобной. И возник такой интересный случай: массив из 1000 "новых" винтов стал пересчитываться в 5 раз дольше, чем массив 1000 "старых" винтов. После изысканий я случайно выяснил, что на скорость пересчёта почему-то влияет то, какая строчка из БД была выбрана при сохранении винта. Т.е. допустим я сохраняю свой винт при диаметре 3 мм и длине 10 (запись в БД №27). После этого мой массив 1000 элементов считается 25 секунд. После этого я пересохраняю винт со значением диаметра 2 мм и длиной 4 мм (запись в БД №1). После этого массив пересчитывается 5 секунд. При этом массив был сделан не в файле винта, а в сборке, куда винт вставлен как фрагмент. И в переменных винта как фрагмента в сборке была установлена запись №27 (диаметр 3 и длина 10). И я ну никак не могу понять почему так происходит. Какая логика может объяснить такое поведение? Может функции rec / val или find (кстати пробовал оба варианта - разницы не увидел) как-то особенно работают?
В общем, жду ваших комментариев по вышеописанным вопросам.
Борьба с T-Flex за выживание
 
Здравствуйте. Очень интересует 2 вопроса.
1. Существует команда "TE:Создать текст". В автоменю этой команды есть кнопка "Создать строчный текст". В свойствах созданного строчного текста есть флажок "Симметричное отображение". Теперь внимание - у меня в ходе работы периодически возникает острая необходимость ГРУППОВОГО, подчёркиваю, группового управления этим флажком. Количество текстов, которым нужно ОДНОВРЕМЕННО, за один заход, снять или установить этот флаг - от 300 до 1000. В окне "Свойства" такой возможности нет. Команда "ET:Изменить текст" такой возможности также не предоставляет. В "Руководствах" этот момент не освещается. Просветите меня тёмного, как же эту 1000 текстов разгрести? Неужели я должен сделать 4000 кликов ??? Я многое могу вытерпеть от T-Flex, его капризную безумную и взбалмошную, неуправляемую сущность (видимо в нём заложена русская эмоциональная душа), но размолоть мышь в пыль ради одного флажка?!!
2. Существует команда "QI:Проверка пересечений тел". В ней есть 2 опции "Все операции в сцене" и "Выбранные тела" (дословно наизусть не помню, но суть верная). У меня сборка состоит из нескольких подсборок нижнего уровня, соединяя которые я получаю готовую верхнюю сборку. Мне нужно найти пересечения между 2мя 3Д-фрагментами, но при этом рассматривать их как цельные тела, без учёта того, что они сами состоят из фрагментов, которые также могут пересекаться. В конечном итоге подобной возможности я в этой команде не нашёл. Это в свою очередь свело полезность этой операции в моём случае к нулю. Конечно, T-Flex находит пересечения 2х фрагментов-подсборок между собой (если они есть). Но при этом он находит и 50-70 мелких пересечений в каждой из подсборок. Итого я получаю один-два нужных результата и около 100 мелких совершенно ненужных мне в конкретный данный момент пересечений. И чтобы удостовериться, что в этом обширном списке пересечений есть нужные мне, мне нужно всю эту сотню просмотреть. Если бы T-Flex мог рассматривать 2 3Д-фрагмента без учёта их "составной" природы, как целые тела, то операция была бы для меня весьма полезна, я бы сразу мог увидеть конфликт и внести коррективы в модель и чертёж. Но без такой возможности на мой взгляд её уделом остаётся узкий спектр задач а-ля "пересекается ли этот куб и вон тот шарик", либо для нескольких твёрдотельных деталей, для крупных сборок из многодетальных узлов пользы на мой взгляд нет.
Если кто-нибудь может сказать, как в Т-Флекс можно решить вышеописанные проблемы - прошу вашего внимания и помощи в отыскании решения. Если Т-Флекс принципиально не умеет делать это - может разработчики когда-нибудь (хоть бы дожить, хотя сомневаюсь ;) ) решат эти вопросы в новых версиях.
Страницы: 1