Спасибо!
20.04.2017 14:36:28
Добрый день!
Появилась необходимость получать превьюшки (картинки) 3D моделей/чертежей. В API я увидел классы типа ExportTo... Один из них позволяет в файл экспортнуть 3D битмапку в файл. Вариант получается не очень удобный, потому что: 1. приходится открывать 3D вид документа, 2. создавать временный файл, а превьюшка нужна в режиме реального времени, 3. в картинке отображается именно текущая 3D сцена (т.е. модель может быть перевернута, а хочется именно чтобы в диметрии в определенном масштабе отображение было) Я заметил, что у самого TFLEX CAD, в браузере "Меню документов" есть быстрый просмотр превьюшек документов (см. рис. ниже). Никто не подскажет, а можно ли им каким-либо образом воспользоваться?
Изменено: |
|
|
05.03.2017 16:12:29
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: нужно ли после вызова данного метода вызывать document.Regenerate(options)? или LoadConfigurationVariables(confName) достаточно?[/QUOTE] я пробовал применить метод LoadConfigurationSolids, но возникает исключение, типа: [CODE] An exception of type 'System.AccessViolationException' occurred in TFlexAPI.dll but was not handled in user code Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. [/CODE] если макрос запустить без отладчика, приложение T-FLEX CAD завершается с ошибкой. что именно вызывает ошибку, мне непонятно. незнаю зачем вам понадобилось использовать конфигурации модели. на мой взгляд, проще и эффективнее загрузить параметры из базы данных.[/QUOTE] я, возможно, сужу по другим CAD'ам (типа компаса или инвентора), но LoadConfigurationSolids мне показалось должен перезагрузить документ с тем набором компонентов (3D фрагментов), которые сохранены в конкретной конфигурации. я к чему - в разных конфигурациях ведь может быть разный набор фрагментов - ну, например, в одной конфигурации используются болты одного типа, а в другой - другого. возможно такое делается как-то по другому?
Изменено: |
|
|
05.03.2017 13:40:14
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: такое возможно реализовать?[/QUOTE] [CODE] using System.Windows.Forms; using TFlex.Model; namespace Test { public class Class6 { public static void Run() { Document document = TFlex.Application.ActiveDocument; RegenerateOptions options = new RegenerateOptions(); options.Full = true; string confName = ""; string confCurrent = document.ModelConfigurations.GetConfigurationWithCurrentValues(); MessageBox.Show("Текущая конфигурация: " + confCurrent); for (int i = 0; i < document.ModelConfigurations.ConfigurationCount; i++) { confName = document.ModelConfigurations.GetConfigurationName(i); if (confName != confCurrent) { MessageBox.Show("Следующая конфигурация: " + confName); document.ModelConfigurations.LoadConfigurationVariables(confName); document.Regenerate(options); } if (i == document.ModelConfigurations.ConfigurationCount - 1) { MessageBox.Show("Возврат к исходной конфигурации"); document.ModelConfigurations.LoadConfigurationVariables(confCurrent); document.Regenerate(options); } } } } } [/CODE][/QUOTE] а вопрос такой тогда возникает: если у меня в двух конфигурациях документа разный набор, например, 3D фрагментов. правильно ли я понимаю, что метод ModelConfigurations.LoadConfigurationSolids позволяет для конфигурации с определенным именем этот набор 3D фрагментов обновить? нужно ли после вызова данного метода вызывать document.Regenerate(options)? или LoadConfigurationVariables(confName) достаточно? |
|
|
04.03.2017 01:36:04
[QUOTE]zobza написал:
[QUOTE] SwnSerg написал: Добрый день! Подскажите, пожалуйста, каким образом можно узнать какая конфигурация модели является текущей (активной)?[/QUOTE] О какой конфигурации речь?[/QUOTE] речь идет о конфигурациях, которые можно посмотреть по команде "Конфигурации и исполнения". хочется по очереди загружать переменные конфигурации через API, но в итоге вернуть документ в первоначальное состояние (т.е. к той конфигурации,которая была до перебора конфигураций в цикле активна). такое возможно реализовать? |
|
|
03.03.2017 18:11:51
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: Подскажите, пожалуйста, каким образом можно обновить все открытые документы в сессии T-Flex CAD? [/QUOTE] макрос регенерации открытых документов: [CODE] using System.Collections.Generic; using System.Windows.Forms; using TFlex.Model; namespace Test { public class Class5 { static List<Document> documents = new List<Document>(); public static void Run() { Document activedocument = TFlex.Application.ActiveDocument; if (activedocument != null) { RegenerateOptions options = new RegenerateOptions(); options.Full = true; options.UpdateAllLinks = true; options.UpdateBillOfMaterials = true; foreach (var doc in GetDocuments()) { doc.BeginChanges("Регенерация документа " + doc.FileName); doc.Regenerate(options); doc.EndChanges(); } activedocument.Activate(); documents.Clear(); } else { MessageBox.Show("Не обнаружен активный документ.", "T-FLEX CAD", MessageBoxButtons.OK, MessageBoxIcon.Question); } } static List<Document> GetDocuments() { foreach (Document d in TFlex.Application.Documents) { if (d.ActiveView != null) { documents.Add(d); } } return documents; } } } [/CODE][/QUOTE] спасибо! |
|
|
15.02.2017 00:03:23
[QUOTE]zobza написал:
[QUOTE] SwnSerg написал: [QUOTE] Vite написал: [QUOTE] SwnSerg написал: Подскажите, пожалуйста, каким образом можно получить значения наименования и обозначения документа? [/QUOTE] [CODE] Document document = TFlex.Application.ActiveDocument; string Name = document.FindVariable("$Наименование").TextValue; string Designation = document.FindVariable("$Обозначение").TextValue; [/CODE][/QUOTE] а еще вопросик вдогонку... подскажите, пожалуйста, вот есть такой метод у Document - GetAttributes(). В самом приложении TFlex CAD я могу посмотреть эти же самые атрибуты? и где лучше хранить вспомогательные данные для плагина - в атрибутах документа или в переменных?[/QUOTE] В app.config[/QUOTE] тут всё же речь о данных о документе (пользовательских свойствах, как например у Word'a) |
|
|
15.02.2017 00:02:02
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: В самом приложении TFlex CAD я могу посмотреть эти же самые атрибуты? [/QUOTE] если я не ошибаюсь, контейнер атрибутов документа используется для хранения метаданных. [QUOTE] SwnSerg написал: и где лучше хранить вспомогательные данные для плагина - в атрибутах документа или в переменных?[/QUOTE] что вы подразумеваете под определением "вспомогательные данные" для плагина?[/QUOTE] тут идет речь о пользовательских свойствах документа |
|
|
14.02.2017 17:07:27
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: Подскажите, пожалуйста, каким образом можно получить значения наименования и обозначения документа? [/QUOTE] [CODE] Document document = TFlex.Application.ActiveDocument; string Name = document.FindVariable("$Наименование").TextValue; string Designation = document.FindVariable("$Обозначение").TextValue; [/CODE][/QUOTE] а еще вопросик вдогонку... подскажите, пожалуйста, вот есть такой метод у Document - GetAttributes(). В самом приложении TFlex CAD я могу посмотреть эти же самые атрибуты? и где лучше хранить вспомогательные данные для плагина - в атрибутах документа или в переменных? |
|
|
14.02.2017 17:02:07
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: Подскажите, пожалуйста, каким образом можно получить значения наименования и обозначения документа? [/QUOTE] [CODE] Document document = TFlex.Application.ActiveDocument; string Name = document.FindVariable("$Наименование").TextValue; string Designation = document.FindVariable("$Обозначение").TextValue; [/CODE][/QUOTE] спасибо! |
|
|
13.02.2017 01:30:46
[QUOTE]Sila Musli написал:
Хз как там в АПИ, но сам тип документа у Флекса один и тот же. Если есть 3Д, и нет форматок, то это просто Деталь, если есть форматки, то это чертёж и деталь, если есть фрагменты в 3Д, то это сборка, прототипы тут не при чём. Самый прикол, что и это не факт! Я иногда делаю деталь, а потом решаю, что будет сборка. Бывает в сборке все чертежи всех деталей. Бывает 3Д отдельно от 2Д, но правда редко. Бывает деталь, но с фрагментами. Нужно ввести переменную, которая будет чётко давать понять, что именно перед нами. Но задача не ясна, решения не будет, по началу мне показалось, что нужно просто чтоб плагин различал 3Д и 2Д, а тут ещё и сборки...сборки кстати бывают и 2Д....[/QUOTE] если у вас получится мне написать, каким образом со 100% вероятностью определить - 3D модель представляет документ или чертеж - я буду очень благодарен! :) |
|
|
12.02.2017 23:37:35
[QUOTE]zobza написал:
[QUOTE] SwnSerg написал: [QUOTE] zobza написал: Не поможет, прототип - это готовый шаблон. Не до конца сформулирована задача. Если чертеж на деталь оформлен в одном файле с многотельной 3D моделью это что? Чертеж? Деталь? Или Сборка? Лучше опиши какую задачу решаешь.[/QUOTE] Можно ли по созданному документу определить 3D модель это или чертеж? В зависимости от этого признака меняется набор команд плагина[/QUOTE] Это не или, это 2 разные задачи. И пример Vite это наглядно показывает. Может тебе нужно в зависимости от контекста работы кнопки менять? Что хоть плагин делает? Для чего он?[/QUOTE] Немного не понял про то, что это две разные задачи... Приведу пример - в API Solidworks есть такое свойство у документа - DocumentType, по которому я могу чётко определить с чем я работаю - деталью, сборкой или чертежом. Судя по всему, в TFlex так просто тип документа не получить, потому что сама объектная модель сильно отличается. |
|
|
12.02.2017 13:23:47
[QUOTE]zobza написал:
Не поможет, прототип - это готовый шаблон. Не до конца сформулирована задача. Если чертеж на деталь оформлен в одном файле с многотельной 3D моделью это что? Чертеж? Деталь? Или Сборка? Лучше опиши какую задачу решаешь.[/QUOTE] Можно ли по созданному документу определить 3D модель это или чертеж? В зависимости от этого признака меняется набор команд плагина
Изменено: |
|
|
11.02.2017 12:57:20
[QUOTE]Vite написал:
[QUOTE] SwnSerg написал: какими образом у документа узнать шаблон/прототип, по которому он был создан? [/QUOTE] я думаю все имеющиеся прототипы были созданы в рамках единой объектной модели документа. отличие возможно в конфигурации прототипа, да и сам прототип это тот же документ. фактически, система создает копию из прототипа как новый документ. [QUOTE] SwnSerg написал: Может ли пользователь создавать свои шаблоны?[/QUOTE] может [QUOTE] SwnSerg написал: Путь к этим шаблонам всегда схож? [/QUOTE] по-умолчанию корневая директория прототипов:[CODE] C:\Program Files\T-FLEX CAD 15 x64\Program\Прототипы [/CODE] пути для команд создания документа из прототипа определены в настройках приложения (см. вложение)[/QUOTE] Ага, спасибо! А можно ли у класса Document каким-либо образом узнать по какому прототипу он был создан? |
|
|
11.02.2017 01:58:31
[QUOTE]Vite написал:
[QUOTE] tucha.te написал: Можно ли каким-нибудь образом получить тип используемого документа? [/QUOTE] возможно вы имели ввиду определить прототип документа (шаблон), из которого создается новый документ. Нужно смотреть различие в прототипах.[/QUOTE] Думаю, что это то, что мне и нужно! Не могли бы Вы, пожалуйста, подсказать, какими образом у документа узнать шаблон/прототип, по которому он был создан? Может ли пользователь создавать свои шаблоны? Путь к этим шаблонам всегда схож? Что-то в API не удалось найти...
Изменено: |
|
|
10.02.2017 18:37:48
Доброго дня!
Можно ли каким-нибудь образом получить тип используемого документа? Под типом понимается - чертеж, деталь, сборка. Судя по API, объектной модели документа и однотипному расширению файлов документов (.grb) создаётся ощущение, что это совсем не просто сделать... Или, возможно, это закрытое свойство/метод документа (может его реально через рефлекшн получить?) Заметил вот такое: [LIST] [*]когда создаёшь новую деталь, открывается вкладка "3D модель", [*]когда создаешь чертеж/спецификацию/2D деталь/3D деталь. открывается вкладка "Чертеж", [*]когда создаешь сборку, открывается вкладка "Сборка". [/LIST]Вероятно, "под капотом" всё же TFlex знает, что за тип документа выбран? Или по нажатию определенной команды (например "Создать->Деталь") активируется определенная вкладка ленты? Заранее, спасибо!
Изменено: |
|
|