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


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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
Гена C, эта сборка для версии T-FLEX CAD (15.1.68.0), но вы можете самостоятельно компилировать плагин для TF14 (нужно переопределить ссылки на TFlexAPI).
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, чтобы плагин ( SpecCadBasicPlugin ) корректно работал в T-FLEX CAD (15.1.61.0), его нужно перекомпилировать под эту версию (см. вложение)...
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, у меня windows 8.1, но это не столь критично. если вы используете T-FLEX CAD (15.1.61.0), должно быть делали переустановку компонентов поддержки T-FLEX CAD, в составе которой, должен быть Framework .NET 4. важно, чтобы все необходимые компоненты были установлены.
Пакетный экспорт в AutoCad, T-FLEX CAD Extension - плагин расширения стандартного интерфейса.
 
avm, на моей стороне проблем не наблюдается: ( https://www.youtube.com/watch?v=4KT99SIpXVU )
Пакетный экспорт в 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
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.