Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: R.I.Chernov от 07-12-2017, 16:55:14

Название: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 07-12-2017, 16:55:14
Доброго времени суток уважаемые форумчане, ищу вашей помощи в решении указанного в теме вопроса:
У меня идет перебор вхождений с сортировкой (размещением) их по папкам браузера. Можно ли узнать, в какой папке находится вхождение, чтобы, если он уже в "нужной", можно было бы пропустить операцию его "перемещения"?
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: mikazakov от 08-12-2017, 19:17:19
Доброго времени суток уважаемые форумчане, ищу вашей помощи в решении указанного в теме вопроса:
У меня идет перебор вхождений с сортировкой (размещением) их по папкам браузера. Можно ли узнать, в какой папке находится вхождение, чтобы, если он уже в "нужной", можно было бы пропустить операцию его "перемещения"?
Ну я думаю нужно смотреть самый верхний объект браузера, там есть метод:
BrowserPane.GetBrowserNodeFromObject( NativeObject As Object ) As BrowserNode
Если где то подчиненные узлы сдержат зависимый объект то должно дать ссылку на этот объект
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 12-12-2017, 16:50:15
Спасибо, Михаил, за совет. Буду искать.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 12-12-2017, 20:20:31
BrowserPane.GetBrowserNodeFromObject( NativeObject As Object ) As BrowserNode
В общем этот метод мне был ране известен и не сильно помог. А вот идея насчет "подчинения" натолкнула меня на новый критерий поиска, за что еще раз спасибо.
Решением является использование свойства BrowserNode.Parent, которое возвращает BrowserNode родительского объекта, т.е. стоящего на уровень выше в браузере (возвращает ошибку для BrowserNode верхней сборки).

В итоге у меня получился такой вот код:
   
Код - C# [Выбрать]
  1.  
  2.     // oDoc - ссылка на активную сборку
  3.     // oсс - ссылка на интеесующее нас вхождение
  4.     // oBFolder - интересующая нас папка браузера
  5.  
  6.     Inventor.BrowserNode bn = oDoc.BrowserPanes["AmBrowserArrangement"].GetBrowserNodeFromObject(oсс);
  7.     if (!bn.Parent.Equals(oBFolder.BrowserNode)) oBFolder.Add(bn);

П.С. Надеюсь данный код будет кому-то еще полезен. Хотя, честно признаюсь, что результат оказался хуже ожидания. Проводил тест для сборки из 450 деталей: без проверки операция делается за 4-5 секунд, с проверкой за 0.5. Компьютер мощный, на более слабых, возможно, разница будет более заметной. В любом случае, экономия времени не сильно впечатляет конечно :) Ну за год-другой "отобьется" день, который я потратил на поиск данного кода.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: mikazakov от 12-12-2017, 20:24:00
Проводил тест для сборки из 450 деталей: без проверки операция делается за 4-5 секунд, с проверкой за 0.5.
Этот тест был на Addin или на внешнем exe-файле
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 12-12-2017, 20:49:05
Этот тест был на Addin или на внешнем exe-файле
Мне стыдно признаться, но я до сих пор не до конца представляю себе, что такое Add-in :(
В общем я замерял в отладчике. Сейчас скомпилировал exe файл, чтобы в  Messagebox замер с таймеров выводил - те же цифры получились: от 4 до 5 секунд в первом случае и 0.5 - 0,7 во втором.
П.С. Для сравнения: аналогичная проверка свойства ComponentOccurrence.Grounded экономит 40 секунд, ну в смысле если у 450 ранее "заграунденых" деталей просто проверить корректность свойства, а не снова выставить его.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: mikazakov от 12-12-2017, 20:51:39
Сейчас скомпилировал exe файл
ну а какую скорость вы после этого батенька хотите? Вы работаете в другом адресном пространстве и данные перепихиваете из одного процесса в другой.
На AddIn на два порядка быстрее все обрабатывается, если не больше
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 12-12-2017, 21:01:32
ну а какую скорость вы после этого батенька хотите?
Ну я же указал, что ранее разговор был о 40 секундах, то есть разница на порядок. А эти две задачи по сложности обработки мне казались в целом похожими.
П.С. Сейчас еще раз замерил с "Grounded", вышло всего десять секунд выгоды. Короче то ли я раньше, где-то накосячил, то ли пример посложнее был.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 12-12-2017, 21:05:26
На AddIn на два порядка быстрее все обрабатывается
Разница скорости в два порядка очень соблазнительно звучит. :) Михаил, подскажите пожалуйста, насколько большая разница написании exe и Add-in? По ложность, времени , или какому-то другому критерию можете оценить? (если это конечно возможно). Хочется понять, сколько времени надо потратить, чтобы перейти от одного к другому.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: mikazakov от 13-12-2017, 06:07:05
Михаил, подскажите пожалуйста, насколько большая разница написании exe и Add-in?
разница в 20 строчек кода. Просто нужно немного времени потратить что бы разобраться, на моем сайте же есть мануал на русском.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 13-12-2017, 15:25:08
разница в 20 строчек кода. Просто нужно немного времени потратить что бы разобраться, на моем сайте же есть мануал на русском.
Да, у меня есть ваш мануал, и читать его даже начинал ))  Но то ли знаний тогда не хватило, то ли времени, в общем не осилил. Спасибо, надеюсь со второго раза успешнее получится.
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: mikazakov от 13-12-2017, 18:07:45
надеюсь со второго раза успешнее получится.
Ну как бы переход из количества в качество никто не отменял  :)
Название: Re: Как определить, находится ли вхождение в интересующей папке браузера?
Отправлено: R.I.Chernov от 13-12-2017, 18:09:40
Ну как бы переход из количества в качество никто не отменял
Иначе до сих пор бы использовал VBA :)