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


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
grb to step(stp)
 
добрый день.
Пытаюсь с помощью T-flex DOCs Open API сделать конвертер из grb в stp. Но не получается.
В документации есть пример, но он не работает (см. скриншот).
Выскакивает исключение на строке
Код
CadDocumentProvider provider = CadDocumentProvider.Connect(Context.Connection, ".grb"); 
Цитата
System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
Боролся-боролся. Никак не получилось справится с этим.
Connection не null судя по дебаггеру.



Так же были попытки использовать T-flex CAD Open API с помощью класса ExportToSTEP. Но не получается никак загрузить TflexAPI.dll
Цитата
System.IO.FileNotFoundException: "Не удалось загрузить файл или сборку "TFlexAPI.dll" либо одну из их зависимостей. Не найден указанный модуль."
При анализе с помощью Dependency Walker оказалось, что не хватает много дополнительных dll (не тфлексовых), поэтому затею бросил.

Занимался ли кто данным вопросом? Может я что-то упустил. Или есть другой программный способ перевода grb2stp?
 
Цитата
Валера Малеев написал:
Может я что-то упустил.
на сервере где выполняется конвертация стоит Тфлекс КАД? Опция там включена?


Скрытый текст
Изменено: SaprOnOff86 - 23.05.2021 01:43:17
 
Цитата
SaprOnOff86 написал:
Опция там включена?
Включил. Не помогла, проблемы те же.


Еще обнаружил данное окно. (см. во вложении). Можно ли сделать как-нибудь через него, используя макросы. (например, как в Компасе можно написать макросы на питоне)
 
Цитата
Валера Малеев написал:
Еще обнаружил данное окно. (см. во вложении). Можно ли сделать как-нибудь через него, используя макросы. (например, как в Компасе можно написать макросы на питоне)
Это конвертер для преобразования документов из предыдущей версии T-FLEX CAD (может быть полезным для обновления больших сборок). Если я не ошибаюсь, привязка Python к API "Компас" реализована посредством технологии COM. Текущая версия T-FLEX CAD вроде как регистрирует в системе COM-сервер (см. вложение) при инсталляции. Но, официально этот API не поддерживается. Если интересно, можете ознакомиться с документацией ActiveX T-FLEX CAD (устаревшая версия).
tfw32_server.PNG (28.47 КБ)
T-FLEX CAD 17.1.15.0
 
Цитата
vite написал:
Текущая версия T-FLEX CAD вроде как регистрирует в системе COM-сервер (см. вложение) при инсталляции. Но, официально этот API не поддерживается. Если интересно, можете ознакомиться с документацией ActiveX T-FLEX CAD (устаревшая версия).
Спасибо, выглядит рабочим вариантом. Буду пробовать.
 
Валера Малеев, я бы не стал использовать этот API без предварительного согласования с тех-поддержкой. Если COM-сервер действительно в рабочем состоянии (пока не ясно), то нужна, по крайней мере, актуальная документация.
T-FLEX CAD 17.1.15.0
 
vite, решил вернуться обратно к T-flex CAD Open API. Починил проблемы с библиотеками.

Прикладываю свой код, но не работает ни импорт, ни экспорт.

Мучаюсь уже долго, никак не получается ~~:-
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TFlex.Model;
using System.IO;

namespace tflex_converter_chsarp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(DateTime.Now + " Starting...");

            TFlex.Application.InitSession(GetSetup());

            stp2grb(@"C:\sss.stp", @"C:\sss.grb");
            grb2stp(@"C:\asd.grb", @"C:\asd.stp");

            Console.WriteLine(DateTime.Now + " Finish");
        }

        static TFlex.ApplicationSessionSetup GetSetup()
        {
            TFlex.ApplicationSessionSetup setup = new TFlex.ApplicationSessionSetup();
            setup.ReadOnly = false;
            setup.EnableMacros = true;
            setup.PromptToSaveModifiedDocuments = false;
            setup.Enable3D = true;
            //TFlex.Application.Options.Precise3DObjectSelector = false;

            return setup;
        }

        static void stp2grb(string src, string dst)
        {
            if (!File.Exists(src))
            {
                Console.WriteLine("File {0} does not exist", src);
                return;
            }

            Document document = TFlex.Application.NewDocument();

            ImportFromSTEP import = new ImportFromSTEP(document);
            import.ImportFormat = ImportSTEPFormat.Assembly;
            bool isImported = import.Import(src);
            Console.WriteLine("IsImported: " + isImported.ToString());

            bool isSaved = document.SaveAs(dst);
            Console.WriteLine("isSaved: " + isSaved.ToString());
        }

        static void grb2stp(string src, string dst)
        {
            if (!File.Exists(src))
            {
                Console.WriteLine("File {0} does not exist", src);
                return;
            }

            Document document = TFlex.Application.OpenAsDocument(src);
            ExportToStep toStep = new ExportToStep(document); // = new ExportToStep();
            bool IsExported = toStep.Export(dst);
            Console.WriteLine("IsExported: " + IsExported.ToString());
        }

    }
}


 
Цитата
Валера Малеев написал:
Мучаюсь уже долго, никак не получается
суппорт@топсистемы.ру
 
Цитата
SaprOnOff86 написал:
суппорт@топсистемы.ру
Смысл тогда форума, если все вопросы можно решить с саппортом? :)
Да и вряд ли в СП сидят разработчики, чтобы разбираться с чужим кодом.
 
Валера Малеев, добавьте в свое приложение класс ApiLoader (можно просто скопировать файл). Этот класс правильно инициализирует домен приложения и загрузит зависимые DLL. Вам нужно просто добавить ссылку на сборку TFlexAPI.dll в свое приложение (без копирования). Затем, инициализировать домен приложения, например:
Код
using System;
using TFlex.Model;

namespace TFlex
{
   static class Program
   {
      /// <summary>
      /// The main entry point for the application.
      /// </summary>
      [STAThread]
      static void Main()
      {
         APILoader.Initialize(); // инициализация домена приложения

         // ... обработка документов посредством T-FLEX CAD API ...

         APILoader.Terminate(); // завершение сеанса
      }
   }
}
Изменено: vite - 28.05.2021 18:57:36
T-FLEX CAD 17.1.15.0
Страницы: 1