Jump to content

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


TheFatRat

Recommended Posts

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);

        }
    }

 

Link to post
Share on other sites


UnPinned posts
denis3122

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

Link to post
Share on other sites
TheFatRat
12 часов назад, denis3122 сказал:

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

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

Link to post
Share on other sites
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.

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

Link to post
Share on other sites
denis3122
12.11.2022 в 04:28, TheFatRat сказал:

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

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

Link to post
Share on other sites
TheFatRat
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");

}

 

 

Link to post
Share on other sites
denis3122
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");

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

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.




  • Сообщения

    • Влад 13
      vad0000, Ваша помощь очень помогла, Спасибо большущее! Причина: п.07 мин +60.00мм мах. 311.00мм. п.09 Y1 +311.44мм    Y2 +312,25мм. Инициализацию то проходила, то не проходила. Поставил: п.07 мин +60.00мм мах. 312.00мм. п.09 Y1 +311.44мм    Y2 +311,44 мм. Инициализацию проходит. Текущие координаты Y1 и Y2, после инициализации Y1 +312.50 мм    Y2 +312.44 мм. Балка должна останавливаться в соответствии с п.07 (+312.00мм) или с п.09 (+311.44мм)?
    • Евгений 1988
      Куплю перфоленты или кассеты с параметрами циклов для schablin 128 cnc на стойке bosch alpha 2.
    • Fedor
      Наверное ветровая нагрузка даст большее горизонтальное воздействие. В принципе удобно заменять ветровую нагрузку сейсмической, проще считать ... 
    • tav78
      Добрый день, прошу помощи. Учусь работать с Солиде. Столкнулся с непонятной ситуацией. К сожалению  из-за недостатка сообщений, загружать файлы в форум я не могу, поэтому выложил картинки и модель в Солиде 2022 на Майл диске. https://cloud.mail.ru/public/ysFQ/BXg7EXKV1 (ссылке тоже по человечески создать я не могу) Учусь создавать детали в сборке сверху-вниз. Создал эскиз шатуна в сборке (Рис.1) и начинаю создавать на основе эскиза детали и элементы. Все хорошо, создал деталь Шатун (Рис.2), потом создал деталь Скобу, но на этапе создания отверстия под болт в детали «Скоба» обнаружил, что геометрия этого отверстия не проецируется на плоскость эскиза, точнее она вообще почему то не выделяется при попытке ее выделить (Рис.3). Другая геометрия этого же эскиза проецируется, можно спроецировать весь эскиз, а потом удалить лишнею геометрию, но отдельно геометрия отверстия не проецируется. Какая у Солида в этом логика понять не могу, все время сталкиваюсь, что часть геометрии в сборках сверху-вниз не цепляется для использования, до этого работал в Инвенторе, там все цеплялось.
    • статист
    • Bot
      Мы приближаем время приятных знаков внимания и запускаем предпраздничное бонусное предложение. Купите IYNO Start до 29 декабря и получите 3 месяца использования бесплатно*. Бонус! Расширенные возможности из IYNO PRO на весь срок действия подписки на IYNO Start: Автоматизированное создание лотов для организации закупок и включение их в договоры подряда. Теперь обновление моделей от проектировщика автоматически актуализирует не только сводную ведомость объёмов работ, но и лоты, сформированные на её основе. Детальный учёт факта выполнения работ по конкретным конструкциям. Это позволит строить аналитические отчёты в любых срезах, мониторить темпы выполнения работ по захваткам, подрядчикам или договорам, основываясь на достоверных данных информационной модели. Встроенная конфигурируемая BI-система для представления данных внутри IYNO — это возможность в реальном времени формировать отчёты о плановых и фактически выполненных объёмах работ. Специалистам больше [...] View the full article
    • Povar1
      Реализовать не сложно но не логичней коррекции брать в цикле смены инструмента через параметр #4120 а из поста убрать вывод Н и D.
    • maxx2000
      @mrvcf1 Токарно-карусельный например, где нет оси Y. Или G12 Circular Pocket Milling CW / G13 Circular Pocket Millin... (haascnc.com) т.е. в одном кадре обработка кармана. Так что о конкретном преимуществе судить тяжело
    • kukuj
      У HAASовцев универсальная версия документации. Заходишь сюда или сюда и ищешь там, то, что надо. У студиозов думалка не работает: откуда взять информацию?
    • CottonCow
      Пытался построить сетку ЦИЛИНДРА в Ансисе, выдает ошибку   The mesh generation did not complete due to poor quality elements or incorrect input. Please try meshing with another mesh method or different mesh options. При попытке обновить mesh 
×
×
  • Create New...