Перейти к публикации

NxOpen запуск приложения не в автономном режиме


TheFatRat

Рекомендованные сообщения

Добрый день, возник вопрос по реализации внешнего файла при работе с NX.

Как можно открыть внешний файл не в автономном режиме. Я пытаюсь открыть созданию модель в NX с расширением prt, далее изменить ее по средствам NXOpen (dll уже написана и работает через ctr+U, во время выполнения этой dll я выбираю поверхности детали на которых буду строить кривые, то есть мне необходим контакт с моделью). Я открываю модель получаю сессию этой модели, но не могу с ней взаимодействовать она полностью выполняется в автономном режиме. И если я пере открою модель, то изменения будут применены.

Как можно использую exe файл открыть модель и сессию и редактировать ее в режиме реального времени и вообще возможно ли такое?

 

Пример кода который я использую для открытия и получения сессии:

    public static void Main(string[] args)
    {
        try
        {
            Process.Start("D:\\ABC.prt");

            PartLoadStatus partLoadstatus;
            Session.GetSession().Parts.OpenDisplay("D:\\ABC.prt", out partLoadstatus);
            theSession = Session.GetSession();
            theUfSession = UFSession.GetUFSession();


            theSession.ApplicationSwitchImmediate("UG_APP_MODELING");

            ListingWindow lw = theSession.ListingWindow;
            lw.Open();
            foreach (Body item in theSession.Parts.Work.Bodies)
                lw.WriteFullline(item.JournalIdentifier.ToString());

            //Создание блока
            FeatureSigns sign = FeatureSigns.Nullsign;
            double[] cornet_pt = { 100.0, 0.0, 0.0 };
            string[] edge_len = { "300.0", "100.0", "100.0" };
            Tag blk_obj_id = Tag.Null;
            theUfSession.Modl.CreateBlock1(sign, cornet_pt, edge_len, out blk_obj_id);

            theUfSession.Part.Save();
        }
        catch (NXException ex)
        {
            UI.GetUI().NXMessageBox.Show("Message", NXMessageBox.DialogType.Error, ex.Message);

        }
    }

 

Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts

Что значит редактировать в режиме реального времени ? Не совсем понятно , вы хотите открыть деталь , сделать какие то изменения в ней и закрыть , через собственной исполняемый файл(exe) ? 

Ссылка на сообщение
Поделиться на других сайтах
12 часов назад, denis3122 сказал:

Что значит редактировать в режиме реального времени ? Не совсем понятно , вы хотите открыть деталь , сделать какие то изменения в ней и закрыть , через собственной исполняемый файл(exe) ? 

Когда я запускаю внешний файл exe для работы в nxopen он все процессы выполняет в пакетном режиме, я никак не могу воздействовать на эту сессию (окно nx даже не открывается). Мне необходимо запустить внешний exe Файл чтобы открылась актуальная сессия nxopen с нужным файлом и я смог в ней отредактировать модель по созданным мной шаблонам UI. После этого сохранить деталь. Часть работы выполняется в пакетном режиме, а часть в интерактивном (пример интерактивного ctr+u и выбор dll файла). Изучив документацию я нашел что есть третий режим  "Удаленный" клиент-серверное приложение, но для него чтобы работать с внешними интерфейсами UI необходимо экспортировать необходимые параметры, для классов UI, как они экспортируются на сервер я пока найти не смог, может кто-то делал нечто подобное?

Ссылка на сообщение
Поделиться на других сайтах
On 11/12/2022 at 6:28 AM, TheFatRat said:

Когда я запускаю внешний файл exe для работы в nxopen он все процессы выполняет в пакетном режиме, я никак не могу воздействовать на эту сессию (окно nx даже не открывается). Мне необходимо запустить внешний exe Файл чтобы открылась актуальная сессия nxopen с нужным файлом и я смог в ней отредактировать модель по созданным мной шаблонам UI. После этого сохранить деталь. Часть работы выполняется в пакетном режиме, а часть в интерактивном (пример интерактивного ctr+u и выбор dll файла). Изучив документацию я нашел что есть третий режим  "Удаленный" клиент-серверное приложение, но для него чтобы работать с внешними интерфейсами UI необходимо экспортировать необходимые параметры, для классов UI, как они экспортируются на сервер я пока найти не смог, может кто-то делал нечто подобное?

Для этого программа должна быть скомпилирована в режиме не "External" - исполняемый файл получается c расширением *.exe, а в режиме "Internal" - - исполняемый файл получается c расширением *.dll.

А вообще, непонятно, что вы подразумеваете под внешним файлом?

Ссылка на сообщение
Поделиться на других сайтах
12.11.2022 в 04:28, TheFatRat сказал:

Когда я запускаю внешний файл exe для работы в nxopen он все процессы выполняет в пакетном режиме, я никак не могу воздействовать на эту сессию (окно nx даже не открывается). Мне необходимо запустить внешний exe Файл чтобы открылась актуальная сессия nxopen с нужным файлом и я смог в ней отредактировать модель по созданным мной шаблонам UI. После этого сохранить деталь. Часть работы выполняется в пакетном режиме, а часть в интерактивном (пример интерактивного ctr+u и выбор dll файла). Изучив документацию я нашел что есть третий режим  "Удаленный" клиент-серверное приложение, но для него чтобы работать с внешними интерфейсами UI необходимо экспортировать необходимые параметры, для классов UI, как они экспортируются на сервер я пока найти не смог, может кто-то делал нечто подобное?

Так и должно быть , так как вы используете в своем приложении (exe) библиотеки NX , то есть используете nx как стороннюю библиотеку. Почему бы вам просто не привязаться к событиям в NX и их не обработать ? Например при открытии детали выполнить какие то действия.  А то что вы хотите сделать вряд ли возможно так как вы хотите получить полный доступ к процессу который не вами создан. То есть это все равно что скрестить человека с лошадью , да вы можете ездить на лошади (то есть через интерфейс с ней взаимодействовать ) но вы не можете соединиться с ней полностью и иметь общий мозг. 

Ссылка на сообщение
Поделиться на других сайтах
38 минут назад, denis3122 сказал:

Так и должно быть , так как вы используете в своем приложении (exe) библиотеки NX , то есть используете nx как стороннюю библиотеку. Почему бы вам просто не привязаться к событиям в NX и их не обработать ? Например при открытии детали выполнить какие то действия.  А то что вы хотите сделать вряд ли возможно так как вы хотите получить полный доступ к процессу который не вами создан. То есть это все равно что скрестить человека с лошадью , да вы можете ездить на лошади (то есть через интерфейс с ней взаимодействовать ) но вы не можете соединиться с ней полностью и иметь общий мозг. 

Нашел пример в NX 12.0\UGOPEN\SampleNXOpenApplications\.NET\RemotingExample, Клиент-серверного приложения у меня получилось вывести сообщение на экран theUI.NXMessageBox, но я не могу выводить диалоговое окно BlockDialog выходит ошибка в методах Initialize_cb, Apply_cb, Show().

 

Код для клиента

static void Main(string[] args)
    { 
        theSession = (Session)Activator.GetObject(typeof(Session), "http://localhost:4567/NXOpenSession");
        UFSession theUFSession = (UFSession)Activator.GetObject(typeof(UFSession), "http://localhost:4567/UFSession");
        theUI = (UI)Activator.GetObject(typeof(UI), "http://localhost:4567/theUI");

            string TheDialogName = "C:\\Users\\User\\YandexDisk\\MyDocuments\\source\\NXOpen\\Massive.dlx";

            theUI.NXMessageBox.Show("Message", NXMessageBox.DialogType.Error, "asdasd");

            theDialog = theUI.CreateDialog(TheDialogName);
            theDialog.AddInitializeHandler(new BlockDialog.Initialize(Initialize_cb));
            theDialog.AddApplyHandler(new BlockDialog.Apply(Apply_cb));
            theDialog.AddOkHandler(new BlockDialog.Ok(Apply_cb));
            theDialog.Show();
        }

Код для сервера

 

 public static void Run()
    {
        DoLog("In NXOpenRemotingService.Main - getting session\n");
        theSession = Session.GetSession();
        theUFSession = UFSession.GetUFSession();
        theUI = UI.GetUI();
            DoLog("Starting NX Service\n");

            LifetimeServices.LeaseTime = System.TimeSpan.FromDays(10000);

            SoapServerFormatterSinkProvider provider = new SoapServerFormatterSinkProvider();
            provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

            // Create the IDictionary to set the port on the channel instance.

            IDictionary props = new Hashtable();
            props["port"] = port;

            // Create a new http channel with the given provider and properties
            ChannelServices.RegisterChannel(new HttpChannel(props, null, provider), false);

            DoLog("\n\n");
            DoLog("Exporting Session object");
            RemotingServices.Marshal(theSession, "NXOpenSession");

            DoLog("Exporting UFSession Object");
            RemotingServices.Marshal(theUFSession, "UFSession");

            DoLog("Exporting theUI Object");
            RemotingServices.Marshal(theUI, "theUI");

            DoLog("NX Service started on port " + port + "\n");

}

 

 

Ссылка на сообщение
Поделиться на других сайтах
11 часов назад, TheFatRat сказал:

Нашел пример в NX 12.0\UGOPEN\SampleNXOpenApplications\.NET\RemotingExample, Клиент-серверного приложения у меня получилось вывести сообщение на экран theUI.NXMessageBox, но я не могу выводить диалоговое окно BlockDialog выходит ошибка в методах Initialize_cb, Apply_cb, Show().

 

Код для клиента

static void Main(string[] args)
    { 
        theSession = (Session)Activator.GetObject(typeof(Session), "http://localhost:4567/NXOpenSession");
        UFSession theUFSession = (UFSession)Activator.GetObject(typeof(UFSession), "http://localhost:4567/UFSession");
        theUI = (UI)Activator.GetObject(typeof(UI), "http://localhost:4567/theUI");

            string TheDialogName = "C:\\Users\\User\\YandexDisk\\MyDocuments\\source\\NXOpen\\Massive.dlx";

            theUI.NXMessageBox.Show("Message", NXMessageBox.DialogType.Error, "asdasd");

            theDialog = theUI.CreateDialog(TheDialogName);
            theDialog.AddInitializeHandler(new BlockDialog.Initialize(Initialize_cb));
            theDialog.AddApplyHandler(new BlockDialog.Apply(Apply_cb));
            theDialog.AddOkHandler(new BlockDialog.Ok(Apply_cb));
            theDialog.Show();
        }

Код для сервера

 

 public static void Run()
    {
        DoLog("In NXOpenRemotingService.Main - getting session\n");
        theSession = Session.GetSession();
        theUFSession = UFSession.GetUFSession();
        theUI = UI.GetUI();
            DoLog("Starting NX Service\n");

            LifetimeServices.LeaseTime = System.TimeSpan.FromDays(10000);

            SoapServerFormatterSinkProvider provider = new SoapServerFormatterSinkProvider();
            provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

            // Create the IDictionary to set the port on the channel instance.

            IDictionary props = new Hashtable();
            props["port"] = port;

            // Create a new http channel with the given provider and properties
            ChannelServices.RegisterChannel(new HttpChannel(props, null, provider), false);

            DoLog("\n\n");
            DoLog("Exporting Session object");
            RemotingServices.Marshal(theSession, "NXOpenSession");

            DoLog("Exporting UFSession Object");
            RemotingServices.Marshal(theUFSession, "UFSession");

            DoLog("Exporting theUI Object");
            RemotingServices.Marshal(theUI, "theUI");

            DoLog("NX Service started on port " + port + "\n");

Суммируя, я так до конца и непонял что вы хотите сделать . Я могбы попытаться помочь , но напишите конкретно что вы хотите сделать , чем точнее напишите тем точнее и будет ответ ,я так думаю

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • Ветерок
      Зачем это нажимать? Лучше нажать проецировать кривую. Как выяснилось :) такая функция есть. @mannul даже файл выложил - бери и смотри/повторяй.
    • Stanislav
      Относительно POP and PUP в фале постпроцессора вот такое нашел для POP прослеживается возростающая закономерность, а вот для  PUP не ясно почему прыгает значение. # POP and PUP functions for initialization. H parameters are used to  # # get the correct POP and PUP values. If the thickness of the sheet   # # is between the minimum and maximum thickness, the postprocessor     # # will use POP and PUP parameters to write them in the PS file.       # # Example: H000 0.0 1.0 30000 25000                                   # #                                                                     # #     Minimum      Maximum       POP        PUP                       # #    Thickness    Thickness     Value      Value                      # #---------------------------------------------------------------------# H001    0.0          0.5        14000      9000 H002    0.51         1.0        14500      9000 H003    1.01         1.5        15000      9000 H004    1.51         2.0        15500      9000 H005    2.01         2.5        16000      8500 H006    2.51         3.0        16500      8000 H007    3.01         3.5        17000      8000 H008    3.51         4.0        17500      8000 H009    4.01         4.5        18000      9000 H010    4.51         5.0        18500      8000 H011    5.01         5.5        19000      9000 H012    5.51         6.0        19500      8000
    • Krusnik
      Да там же ничего сложного.   Делаете вашу спираль.   Потом делаете эскиз. В эскизе нажимаете Преобразование объектов и тыкаете на созданную спираль.   Нажимаете поверхность вытянуть и выбираете только что созданный эскиз. В опциях вытягивание ставите "До поверхности". И вытягиваете спиральку до вашего купола.   И последний шаг - вырез по траектории. Думаю с этим вы без моих советов справитесь.   Лишнее скрываете и вуаля.  
    • IgP
      Это, конечно, да, не хорошо ... Но и конструктор не бог чтобы всё знать ... Для этого есть и д.б. этап "технологическая проработка", со всеми вытекающими.
    • arsenev
      Спасибо за ответ. Нет, в видео он говорит, что это такая стратегия. Пробовал использовать шаблон и обрабатывать его со смещением, получается не то (именно, когда нужно обработать цилиндрическое отверстие). Лучше отводится стружка и не мешает резанию. (см. видео, где-то с 18 минуты).
    • scrimline
      Если ещё нужна информация, fanuc oi-tf станок akira-seiki, М14 на опускание руки, для привязки и М15 для поднятия
    • Богоманшин Игорь
      Эта проблема от незнания некоторыми конструкторами технологических особенностей порошковой окраски. Максимум на чертеже научатся указывать РАЛ и толщину слоя. А необходимо предусмотреть места подвеса, можно туда шпильки или гайки запрессовать в нужных местах.
    • MagicNight
      Добрый день! Обратил внимание, что стал шуметь (свистеть) шпиндель станка, причём на всех режимах. Я так понимаю, что полетели подшипники. Хотим найти их, но не знаем как они называются, может у кого-то было подобное? Ну и отремонтировать своими силами. Станок швейцарский Mikron UCP-710 пятиосевой.  
    • maxx2000
      это не одно и тоже что и создать шаблон? А если мне нужен будет документ без зон?
    • IgorT
      Может быть уточнить надо?  Достаточно в шаблоне, который используется для создания чертежа, включить эти самые зоны.
×
×
  • Создать...