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


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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 22 След.
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, попробуйте удалить плагин через меню: Настройка>Приложения..., и повторно подключить его...
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, по-видимому я забыл обновить сборку именно для (15.1.61.0). обновите сборку, теперь должно работать...
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, вы можете прикрепить исходные файлы?
Изменено: vite - 27.08.2018 17:11:53
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, текущая сборка плагина компилировалась на базе API (15.1.61.0). чтобы воспроизвести ошибку, нужно описать последовательность действий и данные ввода.
Вопрос по API
 
FRei, возможно...
Вопрос по API
 
FRei, если очень нужно, могу предложить временное решение:
[CODE]
using System;
using System.Runtime.InteropServices;
using TFlex.Model;

namespace TFlex
{
   public class Factory : PluginFactory
   {
       public override Plugin CreateInstance()
       {
           return new PluginInstance(this);
       }

       public override Guid ID
       {
           get
           {
               return new Guid("{83FC6A2C-16BD-4F00-A067-7AB1038E4553}");
           }
       }

       public override string Name
       {
           get
           {
               return "T-FLEX CAD Extension";
           }
       }
   }
   
   public partial class PluginInstance : Plugin
   {
       const int GWLP_WNDPROC = (-4);
       const uint WM_KEYDOWN = 0x0100;

       [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr", CharSet = CharSet.Auto)]
       private static extern IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex);

       [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", CharSet = CharSet.Auto)]
       private static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

       [DllImport("user32.dll", EntryPoint = "CallWindowProc", CharSet = CharSet.Auto)]
       private static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);

       private delegate IntPtr WinProcDelegate(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);

       private static IntPtr handle = IntPtr.Zero;
       private static IntPtr oldWndProc = IntPtr.Zero;
       private WinProcDelegate newWndProc;
       
       private IntPtr WindowProc(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam)
       {
           if (uMsg == WM_KEYDOWN)
           {
               switch ((int)wParam)
               {
                   case 0x21: // PAGE UP
                       RotateView(45);
                       break;
                   case 0x22: // PAGE DOWN
                       RotateView(-45);
                       break;
               }
           }

           return CallWindowProc(oldWndProc, hWnd, uMsg, wParam, lParam);
       }

       private void RotateView(float angle)
       {
           Document document = TFlex.Application.ActiveDocument;
           Model.Model3D.View3D view3D = (document.ActiveView as Model.Model3D.View3D);
           Model.Model3D.View3D.Parameters p = view3D.GetParameters();
           p.AutoResize = true;
           p.CameraType = Model.Model3D.View3D.CameraType.Orthographic;
           p.Angle = (p.Angle + angle);
           view3D.SetParameters(p);
       }
     
       public PluginInstance(Factory factory) : base(factory) {}
       
       protected override void NewDocumentCreatedEventHandler(DocumentEventArgs args)
       {
           args.Document.AttachPlugin(this);
       }
       
       protected override void DocumentOpenEventHandler(DocumentEventArgs args)
       {
           args.Document.AttachPlugin(this);
       }
       
       protected override void ViewActivatedEventHandler(ViewEventArgs args)
       {
           base.ViewActivatedEventHandler(args);

           if (args.View is Model.Model3D.View3D)
           {
               if (handle == IntPtr.Zero)
               {
                   handle = args.View.HWnd;
                   newWndProc = new WinProcDelegate(WindowProc);
                   oldWndProc = GetWindowLongPtr(handle, GWLP_WNDPROC);
                   SetWindowLongPtr(handle, GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(newWndProc));
               }
               else if (handle != args.View.HWnd)
               {
                   oldWndProc = GetWindowLongPtr(handle, GWLP_WNDPROC);
                   SetWindowLongPtr(handle, GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(newWndProc));
               }
           }
       }

       protected override void ViewDeactivatedEventHandler(ViewEventArgs args)
       {
           base.ViewDeactivatedEventHandler(args);

           if (handle != IntPtr.Zero)
           {
               SetWindowLongPtr(handle, GWLP_WNDPROC, oldWndProc);
               newWndProc = null;
               handle = IntPtr.Zero;
           }
       }
   }
}
[/CODE]
этот код нужно компилировать в модуль расширения DLL. стандартный вариант поворота работает в режиме просмотра (клавиши: PgUp и PgDn). тоже самое я сделал для режима "эскиз".
Вопрос по API
 
FRei, вы меня не правильно поняли, нужно получить доступ к оконной процедуре главного окна приложения для обработки события [I]KeyPressEventHandler[/I], чего пока нет в API. классы [I]PluginCommand[/I] и [I]CustomCommand[/I] просто реализуют интерфейс пользовательских команд, которые внутри также имеют свои обработчики. эти классы предоставляют немного больше возможностей для расширенной обработки команд меню. т.е. сначала выполняется команда меню, потом обрабатывается контекст клавиатуры. несмотря на то, что макрос частично отрабатывает на событии [I]ViewActivated[/I], он по прежнему работает некорректно. у меня, к примеру, неправильно работает селектор. по мимо прочего, каждый клик мыши повторно запускает метод [I]Run[/I].
Вопрос по API
 
FRei, этот пример нельзя использовать в контексте события [I]ViewActivated[/I]. должен быть обработчик событий типа [I]KeyPressEventHandler[/I] на уровне класса [I]Plugin[/I].
Вопрос по API
 
FRei, самый простой способ обработки события [I]KeyEventArgs[/I] через класс расширения [I]CustomCommand[/I], например:
[CODE]
using System.Windows.Forms;
using TFlex.Command;
using TFlex.Model;

namespace Test
{
   public class UserCommand : CustomCommand
   {
       public UserCommand(CommandState cmd) : base (cmd)
       {

       }

       public override void OnKeyPressed(TFlex.Command.KeyEventArgs e)
       {
           if (e.Code == TFlex.KeyCode.keyC_B)
           {
               MessageBox.Show("Key code: Ctrl + B"); // обработка команды пользователя
           }

           base.OnKeyPressed(e); // передача управления для обработки стандартных команд приложения
       }
   }

   public class TestMacro
   {
       static readonly Document document = TFlex.Application.ActiveDocument;

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

           CommandState cmd = new CommandState();
           UserCommand userCommand = new UserCommand(cmd);
           userCommand.Run(document.ActiveView);
       }
   }
}
[/CODE]
чтобы корректно запустить макрос, нужно подключить событие [I]ViewActivated[/I] в редакторе макросов (см. вложение). Когда один из видов документа будет активным, сработает макрос [I]TestMacro[/I], который запустит цикл обработки команд пользователя.
Пакетное сохранение GRB в PDF формат
 
avm, именно так.
Пакетное сохранение GRB в PDF формат
 
avm,

[CODE]
ex.OpenExportFile = false;
[/CODE]
Поля форматок
 
Паша Маргинал, форматка - это тот же фрагмент.

[CODE]
using TFlex.Model;

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

           if (document == null)
               return;

           foreach (var i in document.GetFragments())
           {
               if (i.DisplayName.Contains("<Форматки>"))
               {
                   var variables = i.GetVariables();
                   // ...
                   break;
               }
           }
       }
   }
}
[/CODE]
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
Обновление плагина 05.04.18

- Добавлен параметр "Суффикс имени файла" для переопределения имени файла вывода по шаблону (см. документацию);
- Добавлена опция "Проверить шаблон чертежа", которая включает в пул экспорта только страницы с оформлением.
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
Обновление плагина 02.04.18

- Добавлен транслятор в формат растрового изображения (см. документацию)
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
Обновление плагина 07.03.18

- Добавлен селектор документов (см. вложение);
- Добавлена возможность вводить формат вещественной переменной в области маркера шаблона имени файла (см. документацию);
- Добавлена локализация English, German.
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
Уважаемые инженеры конструкторы, рад представить вам плагин [URL=https://github.com/intity/TFlexEx/wiki]T-FLEX CAD Extension[/URL], который расширяет функциональные возможности стандартного экспорта в формат файлов:
- AutoCAD (DWG, DXF, DXB)
- Bitmap (BMP, JPEG, GIF, TIFF, PNG)
Главным образом, эта реализация в некотором смысле решает задачу пакетного экспорта.  Более подробно, как с этим работать, вы можете ознакомится в документации [URL=https://yadi.sk/i/Ka4o82Fv3TzjiS]Export to Packages[/URL]. Плагин был протестирован в текущей версии T-FLEX CAD 15 x64, и на данном этапе, вполне рабочий вариант.
Если у вас появятся идеи, относительно улучшения или модернизации плагина, пишите. Любые предложения, приветствуются.
Благодарности прошу направлять в адрес [URL=http://tflex.ru/forum/index.php?PAGE_NAME=profile_view&UID=9429]Алексея[/URL], который заинтересовал и помогал в тестировании на раннем этапе разработки.
Изменено: vite - 02.04.2018 16:10:45
EditInContext(), Редактирование фрагмента
 
apps, метод "EditInContext" реализует выполнение команды контекстного меню "Открыть фрагмент в контексте сборки". почему то файл документа открывается в режиме чтения. если закрыть файл (вручную) в контексте сборки, то появляется окно с предложением сохранить или просто закрыть документ. если нажать на "Да", то должно появиться окно "сохранить как", но этого не происходит (явная ошибка). по-видимому данная команда была добавлена для визуального удобства редактирования геометрии детали в контексте сборки. по поводу метода "Close", похоже на ошибку.
Замечания по T-FLEX CAD 15, Ваши замечания касающиеся работы T-FLEX CAD 15
 
не знаю, является это ошибкой (см. вложение). чтобы воспроизвести, необходимо выполнить полный пересчет модели (с обновлением ссылок). ошибка свзана с потерей грани операции "оболочка". если перезадать или повторно создать операцию "оболочка", а затем выполнить пересчет модели, ошибка не наблюдается. проблема возникает, каждый раз при повтоном открытии файла и пересчете модели.
T-FLEX CAD 16.0.68.0
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]
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 22 След.