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


Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Подключение к текущему сеансу TFlex из внешнего EXE приложения, Как из внешнего EXE приложения подключиться к текущему сеансу TFlex для изменения геометрии в активном документе?
 
Это вопрос новичка.
Мне необходимо подключиться из внешнего приложения (EXE) к текущему сеансу TFlex, получить ссылку на активный документ и внести в него изменения через управляющие переменные модели.

Мне известно решение для случая, когда мое приложение используя класс APILoader, создает новый сеанс TFlex и создает или загружает файл, который предполагается изменять.
Но как мне подключиться к модели, которая у меня уже «в руках» и которую я вижу на экране?
Доступ нужен на изменение модели.

В случае Inventor API это делается весьма просто (проверки здесь опущены):
Код
Inventor.Application app = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application") as Inventor.Application;
PartDocument oDoc = app.ActiveDocument as PartDocument;
PartComponentDefinition oDef = oDoc.ComponentDefinition;

Далее – везде, с этого момента вся геометрия к моим услугам.

Буду очень признателен за ссылку на код.
Изменено: ananyev - 18.04.2016 18:16:09
 
Цитата
ananyev написал:
Но как мне подключиться к модели, которая у меня уже «в руках» и которую я вижу на экране?
Если я не ошибаюсь, OpenAPI не поддерживает интерфейс для внешнего потока приложений.
 
Цитата
Vite написал:
Цитата
Если я не ошибаюсь, OpenAPI не поддерживает интерфейс для внешнего потока приложений.
Я полагал, что проблема в моем крайне поверхностном знакомстве с документацией по OpenAPI.
А OpenAPI, оказывается, не очень-то и Open…
Если вы правы, то обходного маневра нет?
 
Цитата
ananyev написал:
Если вы правы, то обходного маневра нет?
Какую задачу вы хотите решить?
 
Пытаюсь из IronPython решить эту задачу, метод TFlex.Application.ActiveDocument до открытого документа не добирается, попробовал открыть документ так
doc = app.OpenDocument("m:\TFlex\API\circ 001.grb", True), код сработал, документ где то открылся, к нему есть доступ, но не в окне Флекса. Подскажите пожалуйста как активизировать этот док?(метод Activate() не помог)
 
Цитата
Khasan Mamaev написал:
Подскажите пожалуйста как активизировать этот док?
Вы открыли документ из внешнего потока?
 
Цитата
Vite написал:
Цитата
Khasan Mamaev написал:
Подскажите пожалуйста как активизировать этот док?
Вы открыли документ из внешнего потока?
Думаю что именно это я и сделал
 
Цитата
Khasan Mamaev написал:
Думаю что именно это я и сделал
То есть вы создали объект документа?
 
Vite,

Я из консоли IronPython открыл документ флекс и получил его объекты, при этом сам Флекс не запустился. Можно ли так сказать легализовать этот фоновый документ? Как сделать так чтобы проект открылся в окне Флекс?
Изменено: Khasan Mamaev - 18.04.2016 22:24:43
 
Цитата
Khasan Mamaev написал:
Я из консоли IronPython открыл документ флекс и получил его объекты, при этом сам Флекс не запустился.
Вы можете внести изменения в документ (например, изменить значение переменной)?
 
Цитата
Vite написал:
Вы можете внести изменения в документ (например, изменить значение переменной)?
да, я внес изменение в документ, я склонировал окружность с помощью такого кода
Код
nama = [i.Name for i in doc.Objects]
vara = [i for i in doc.Objects][2]

doc.BeginChanges("Клон")
vara.Clone()
doc.EndChanges()
doc.Save()
doc.Close()
Изменено: Khasan Mamaev - 18.04.2016 22:56:06
 
Цитата
Khasan Mamaev написал:
Как сделать так чтобы проект открылся в окне Флекс?
Вы пробовали запустить приложение и вызвать метод "OpenDocument"?

Да, действительно документ можно открыть и внести изменения:
Код
using System;
using TFlex;
using TFlex.Model;

namespace TFlexEx
{
    class Program
    {
        static void Main(string[] args)
        {
            ApplicationSessionSetup setup = new ApplicationSessionSetup();
            setup.ProtectionLicense = ApplicationSessionSetup.License.TFlex3D;
            setup.ReadOnly = false;
            TFlex.Application.InitSession(setup);

            Document document = TFlex.Application.OpenDocument(@"E:\net\Documents\T-FLEX\db_test\db_test.grb");
            document.BeginChanges("");

            foreach (Variable v in document.GetVariables())
            {
                if (v.Name == "P2")
                    v.RealValue = 60;
            }

            document.Save();
            document.EndChanges();
            TFlex.Application.ExitSession();

            Console.ReadKey();
        }
    }
}
Изменено: Vite - 26.07.2016 04:11:08
 
Цитата
Vite написал:
Да, действительно документ можно открыть и внести изменения:
Точно также можно создать новый документ и что то в нем начертить, теперь хотелось бы визуализировать этот процесс, чтобы была динамика, чтобы был открыт проект и вносимые изменения сразу же отображались. Возможно ли это? Автор темы спрашивал об этом. Попытка запустить приложение, а потом программной открыть файл не дает результата.
Изменено: Khasan Mamaev - 18.04.2016 23:34:00
 
Цитата
Khasan Mamaev написал:
Возможно ли это?
По-видимому так сделать не получится.
 
Цитата
Khasan Mamaev написал:
Цитата
Vite написал:
Да, действительно документ можно открыть и внести изменения:
Точно также можно создать новый документ и что то в нем начертить, теперь хотелось бы визуализировать этот процесс, чтобы была динамика, чтобы был открыт проект и вносимые изменения сразу же отображались. Возможно ли это? Автор темы спрашивал об этом. Попытка запустить приложение, а потом программной открыть файл не дает результата.
Вам бы обратиться напрямую в техподдержку и разработчикам.
 
Цитата
zobza написал:
Вам бы обратиться напрямую в техподдержку и разработчикам.
Здравая мысль, спасибо
 
Цитата
Khasan Mamaev написал:
Цитата
zobza написал:
Вам бы обратиться напрямую в техподдержку и разработчикам.
Здравая мысль, спасибо
Тема интересная, тоже столкнулся с такой проблемой и пришел сюда.
Удалось что-нибудь узнать с поддержки?
Я так понимаю для работы с уже запущенным приложением надо через COM интерфейс какой-то работать. Но не смог найти.
 
Цитата
curi0us написал:
Удалось что-нибудь узнать с поддержки?
Смотрите класс 'ApiServer'
Проект VS: TFlexClient.zip
Страницы: 1