BrowserPane.Update()

Автор Тема: BrowserPane.Update()  (Прочитано 7388 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
BrowserPane.Update()
« : 21-03-2017, 16:16:26 »
Доброго времени суток. уважаемые форумчане. Помогите пожалуйста разобраться, как работает метод BrowserPane.Update(). Ситуация такая, меняю имена вхождений (+ добавляю новые) в папках браузера. Заметил. что не всегда корректно отображается содержимое папок в юраузере (если сохраняешь, закрываешь, открываешь --> отображается все ок). Стал разбираться, как это исправить. Нашел метод BrowserPane.Update(). Не пойму, то ли это, что мне надо? В частности мне не понятна такая вот фраза из описания "Should be used after changing browser node status (e.g. DisplayState)" Что это за статус? Что он означает? Как всегда рад любому совету / предположению.
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #1 : 21-03-2017, 17:16:56 »
Что это за статус? Что он означает? Как всегда рад любому совету / предположению.
Вот что я нашёл: http://adndevblog.typepad.com/manufacturing/2012/12/inventor-displaystate-property-of-browsernodedefinition.html
Только не "Статус", а "Состояние".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #2 : 21-03-2017, 17:55:56 »
Вот что я нашёл: http://adndevblog.typepad.com/manufacturing/2012/12/inventor-displaystate-property-of-browsernodedefinition.html
Спасибо вам, Александр. Но то ли английский меня подводит, то ли владение программированием, яснее не стало:
Сначала вроде все понятно, что статус DisplayState  показывает состояние BrowserNodeDefinition. Он либо стоит "по умолчанию" kDefaultDisplayState, либо меняется, если было вмешательство с помощью API. Но код, который за этим следует, его смысл я совсем не понял. На выходе перебираются все вхождения, и выводится в дебагер их имена и то, включена ли в них адаптивность... Но как это связано с DisplayState?
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #3 : 21-03-2017, 17:58:11 »
На выходе перебираются все вхождения, и выводится в дебагер их имена и то, включена ли в них адаптивность... Но как это связано с DisplayState?
Ну да. Чтобы посмотреть какие состояния DisplayState у BrowserNode в файле.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #4 : 21-03-2017, 18:06:48 »
Ну да. Чтобы посмотреть какие состояния DisplayState у BrowserNode в файле.
Не могли бы вы пояснить, каким образом мы смотрим это состояние? Адаптивность вхождений с ними же никак не связана?
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #5 : 21-03-2017, 18:15:15 »
Похоже я влез не в свою тему.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #6 : 21-03-2017, 18:24:17 »
Похоже я влез не в свою тему.
Жаль :( В любом случае большое спасибо за участие. Попытаюсь еще разок осмыслить вашу ссылку, Владимир Николаевич обычно ерунды не пишет. :)
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #7 : 21-03-2017, 18:39:37 »
У меня возникло подозрение, что если изменить для нода его DisplayState на kUpdateRequiredDisplayState, то BrowserPane.Update() обновит этот нод.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #8 : 21-03-2017, 19:16:55 »
У меня возникло подозрение, что если изменить для нода его DisplayState на kUpdateRequiredDisplayState, то BrowserPane.Update() обновит этот нод.
Имеете ввиду, что после изменения содержимого папки вручную менять свойство? Звучит резонно, быть может в инвенторе баг, и свойство само не всегда меняется, когда должно, из за чего и браузер не обновляется командой  BrowserPane.Update().
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #9 : 21-03-2017, 22:21:27 »
У меня возникло подозрение, что если изменить для нода его DisplayState на kUpdateRequiredDisplayState, то BrowserPane.Update() обновит этот нод.

Не смог это сделать, может что посоветуете? Пробовал так:
Код - C# [Выбрать]
  1. oPane_ZKS.TopNode.BrowserNodes["TEST"].BrowserNodeDefinition.DisplayState = kUpdateRequiredDisplayState;
  2. // или
  3. oPane_ZKS.TopNode.BrowserNodes["TEST"].BrowserNodeDefinition.DisplayState = 46857;

В обоих строках компилятор выдает ошибку. Не могу вкурить, какой нужен синтаксис?

П.С. Кстати поэксперементировал, построил перебор BrowserNodeDefinition-ов всех "поднодов", все пишут "kDefaultDisplayState". Хотя, по идее, свойство DisplayState  не должно быть "дефолтным", так как в половине из них были изменения. Код остановлен "точкой останова" и визуально видно, что браузер еще не обновлен.
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #10 : 21-03-2017, 22:50:15 »
С синтаксисом разобрался:
Код - C# [Выбрать]
  1. oPane_ZKS.TopNode.BrowserNodes["TEST"].BrowserNodeDefinition.DisplayState = Inventor.BrowserNodeDisplayStateEnum.kUpdateRequiredDisplayState;

Но проблемы это не решило. Рядом с папкой в браузере появляется красная молния (такая же появляется. например, когда деталь наследует свойства у другой детали, и когда вторая деталь-родитель была изменена). BrowserPane.Update() все также не работает. Более того, молния эта никуда не девается, даже после закрытия/открытия сборки - статус папки остается без изменения. Я программно все вернул, но стало мне казаться, что свойство это отвечает исключительно за визуализацию папок в браузере. Правдо непонятно, почему на него ссылаются в описании метода BrowserPane.Update(). В общем я опять в тупике.
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #11 : 21-03-2017, 23:00:57 »
Не уверен, что до конца понял посыл автора следующей статьи, но выглядит как пример создания папок с различными визуальными эффектами:
http://spiderinnet2.typepad.com/blog/2013/07/inventor-net-ui-miscellaneous-create-custom-browser-pane-pt-3.html

Что опять таки говорит о том, быть может "BrowserNodeDefinition.DisplayState" совсем другие задачи решает?
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #12 : 21-03-2017, 23:38:09 »
Что опять таки говорит о том, быть может "BrowserNodeDefinition.DisplayState" совсем другие задачи решает?
Похоже, что его задача лишь в установке иконки для узла.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #13 : 22-03-2017, 00:47:48 »
Похоже, что его задача лишь в установке иконки для узла.
Я тоже пришел к такому вывду. Но мне это не поможет. В англоязычных статьях на форумах, с вопросами на тему обновления браузера довольно часто в коде встречается метод BrowserPane.Refresh(). К сожалению, ни в 1 из топиков не было пометки "Solved". Так что разобраться толком я так и не смог, ибо непонятно, какая часть кода рабочая, какая нет. Судя по описанию, метод также может быть решением моей задачи. Но пока его использовать не получилось.
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #14 : 25-03-2017, 17:04:27 »
Так и не нашел, как обновить браузер. После 3-4 манипуляций с вхождениями все равно начинает "глючить". B единственное, что спасает, это закрытие / открытие сборки. Решил попробовать пойти по этому пути. Создал кнопку для пользователя, с помощью которой программа быстро закрывает сборку, и снова ее открывает. Но после такой манипуляций слетают все ссылки на объекты в программе, которые были заданы при ее загрузке. Вопрос собственно такой, подскажите пожалуйста, каким образом можно заставить программу закрыться и снова себя открыть?
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #15 : 25-03-2017, 21:21:38 »
Вопрос собственно такой, подскажите пожалуйста, каким образом можно заставить программу закрыться и снова себя открыть?
Зачем? Не проще ли заставить программу обновить свои данные? ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: BrowserPane.Update()
« Ответ #16 : 25-03-2017, 21:28:13 »
Зачем? Не проще ли заставить программу обновить свои данные?
Каждый раз буду добавлять новые данные, или удалять старые, я буду вынужден менять код "обновление данных"? Рано или поздно это приведет к ошибке. Понятно, что я рассматриваю это, как план "Б". Но перезапустить программу было бы значительно проще, если это возможно
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #17 : 25-03-2017, 21:32:38 »
Каждый раз буду добавлять новые данные, я буду вынужден менять код "обновление данных"?
Вынеси код "обновление данных" в отдельную функцию, которая обновляет данные при запуске программы и если её принудительно вызвать. Этого будет достаточно на все случаи жизни. Т.е. если у тебя данные будут добавляться, то модифицировать тебе придётся только одну эту функцию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: BrowserPane.Update()
« Ответ #18 : 25-03-2017, 21:37:18 »
если это возможно
Если это .NET-программа (dll-файл), то сомнительно, что ты её сможешь перезапустить. В AutoCAD это точно сделать нельзя, т.к. все программы в одном домене. В Inventor не знаю, но уверен на 99.9% что сама себя программа перезагрузить не сможет. Нужна будет другая программа, которая эту выгрузит, а потом загрузит и запустит на выполнение. Так что советую не искать приключений, а пойти по простейшему пути.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение