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

Программирование в Nx Ufunc


IgP

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

Нужно программно получить постоянный ID тела, для дальнейшей его идентификации в другом сеансе.

Использовал функцию UF_TAG_ask_handle_of_tag.

Однако UF_TAG_ask_handle_of_tag после изменения размеров тела - возвращает другое значение.

Как получить постоянный handle объекта?

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


Нужно программно получить постоянный ID тела, для дальнейшей его идентификации в другом сеансе.

Использовал функцию UF_TAG_ask_handle_of_tag.

Однако UF_TAG_ask_handle_of_tag после изменения размеров тела - возвращает другое значение.

Как получить постоянный handle объекта?

Не четко задали вопрос

Вы не можете по handle нормально восстановит tag?

И с чего вы взяли что он должен быть постоянным - там где-то это написано

Я не знаю может он и постоянный не пользовался этой функцией

Насколько я понял эта пара функция предназначена для сохранения и восстановления tag

которые в разных сессиях могут отличаться

Может можно найти более простые способы для решения Вашей задачи

Назначить имя на tag или навесить на него аттрибуты

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

Ну взяли Мы это с того что в документации написано что этот ID между сеансами работы NX не меняется, то есть постоянный.

Собственно так это и есть.

Но при тестировании Мы решили изменить модель -> получмли error,

когда разобрались оказалось ,по факту ,что после каждого изменения этот ID меняется .....

С атрибутами и именами мы работаем, да вот в интерактиве они пользователю доступны,

поэтому никакой гарантии .....

Ссылка на сообщение
Поделиться на других сайтах
int Compare_drf_obj::_ask(int what, tag_t obj_tag)
{
char *handle, *file_data;
unsigned int id, ver;

handle = UF_TAG_ask_handle_of_tag (obj_tag);
UF_CALL(UF_TAG_decompose_handle( handle, &file_data, &id, &ver));
UF_free(handle);
UF_free(file_data);
if (what == ID) return id;
if (what == VERSION) return ver;
return -10;
}

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

Ну взяли Мы это с того что в документации написано что этот ID между сеансами работы NX не меняется, то есть постоянный.

Собственно так это и есть.

Но при тестировании Мы решили изменить модель -> получмли error,

когда разобрались оказалось ,по факту ,что после каждого изменения этот ID меняется .....

С атрибутами и именами мы работаем, да вот в интерактиве они пользователю доступны,

поэтому никакой гарантии .....

Так гарантии все равно нет - пользователь может просто удалить этот объект

и Вы его не найдете

Если так хотите спрятать что-то от пользователя сделайте UDO и добавте Ваш объект в owning link

можно еще в link типа 1 (см док) - чтоб вычищалось все при удалении

В UDO можете положить необходимую Вам информацию

Тут уж обычный пользователь точно до аттрибутов не доберется

Если только UGII_DISPLAY_DEBUG ему поможет

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

Если только UGII_DISPLAY_DEBUG ему поможет

Исключительно в целях самообразования, а что за переменная UGII_DISPLAY_DEBUG? Посмотрел в ugii_env.dat - ее там нет.
Ссылка на сообщение
Поделиться на других сайтах

to nut888

Вот как раз ситуацию с удалением и обыгрываем ....

Алексей! Большое СПАСИБО !!!

Судя по всему заработает как надо (ещё не проверили)

Теперь стало понятно что handle_of_tag это не просто ID(tag),

а код в котором зашифровано много информации в том числе и нужный ID.

ещё раз СПАСИБО .....

Спасибо Всем за предложения, вопрос решен, тема закрыта.

to nut888

присоединяюсь к avd :

Исключительно в целях самообразования, а что за переменная UGII_DISPLAY_DEBUG?

Тоже интересно ....

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

to nut888

Вот как раз ситуацию с удалением и обыгрываем ....

Алексей! Большое СПАСИБО !!!

Судя по всему заработает как надо (ещё не проверили)

Теперь стало понятно что handle_of_tag это не просто ID(tag),

а код в котором зашифровано много информации в том числе и нужный ID.

ещё раз СПАСИБО .....

Спасибо Всем за предложения, вопрос решен, тема закрыта.

to nut888

присоединяюсь к avd :

Исключительно в целях самообразования, а что за переменная UGII_DISPLAY_DEBUG?

Тоже интересно ....

Если установить переменную окружения

UGII_DISPLAY_DEBUG=1 (К внешней документации это не относится этого там нет и не будет никогда)

то в Help кажется появится новое приложение

Debager для анализа prt

Им в частности очень удобно смотреть номера tag выбирая с экрана объекты

Поля структур связанных с объектами

тип, ссылки на другие объкты, аттрибуты occurencs ....

Удобно также искать объекты на экране по известному tag

Вообще большое приложение точнее сборник приложений

Да кстати по поводу удаления

С помощью UDO

в принципе можно сделать так что вы объект который создали своей программой

только своей программой и удалите и никак иначе

Выбирать при этом его будет можно

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

Если установить переменную окружения

UGII_DISPLAY_DEBUG=1 (К внешней документации это не относится этого там нет и не будет никогда)

то в Help кажется появится новое приложение

Debager для анализа prt

Им в частности очень удобно смотреть номера tag выбирая с экрана объекты

Поля структур связанных с объектами

тип, ссылки на другие объкты, аттрибуты occurencs ....

Удобно также искать объекты на экране по известному tag

Вообще большое приложение точнее сборник приложений

:lighten::blink:

Век живи век учись, а помирать не охото!

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

2 All

При этом не стоит забывать о том, что после save as или clone, сохраненный в виде строки (как значение атрибута или строка в UDO ) Persistent Handle в новой части будет невалидным :(

Regardzzz ...

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

по поводу handle'ра:

например:

RMmyfilename_R01235879

первая его часть - имя файла (кроме RM)

вторая\(начиная с "_R") - идентификатор объекта (этот идентификатор всегда постоянный, не меняется после перезугруки файла)

достаточно запомнить вторую часть handle'ра

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

2 AVetal

НЕ достаточно запомнить вторую часть handle'ра :)

Быстрый пример:

Я просканил тестовую часть (сборка) через UF_OBJ_cycle_all и вытащил UF_TAG_ask_handle_of_tag для каждого тега и

распечатал в формате "handler / char".

смотрим, что получилось ...

RM_sub_machinetool.prt R000003fe00000021 / 26763

[skipped]

RM_sub_machinetool.prt O00091eb300000000 / 155897

[skipped]

CM_sub_machinetool.prt C0000031d00000024 / 26583

при этом

"_R" - это "линии, sheet body, etc"

"_O" - это LightWeightOccurence

"_C" - это FeatureRecords

соответственно, я НЕ могу рекомендовать запоминание второй части handler-a как универсальный способ идентификации, так как непонятен префикс, который надо подставить перед этой толпой цифр для восстановления тега :)

PS Ой, сорри, вот я натупил-то ... :) - можно же с префиксом и запомнить. а я только на цифровую часть глядел почему-то ....

PPS Мда, ещё раз глянул на дамп - все-таки я прав :) ... второй части все-равно недостаточно. Сравни :

RM_sub_machinetool.prt O00091eb300000000 / 155897

CM_sub_machinetool.prt C0000031d00000024 / 26583

поэтому без дополнительного парсинга первой части handler-a все равно не обойтись ;)

Regardzzz ...

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

Первую часть можно узнать у любого объекта открытого файла, а вторую (которую запомнили) присоединить. Результат - tag объекта, который и нужен.

По поводу второй части - это hex-число (O00091eb300000000 -> 91eb3) имени объекта в журнале, если его перевести в десятичное, то можно узнать, как объект называется для .NET

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

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

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

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

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

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

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

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

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

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

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




×
×
  • Создать...