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

NX Open Block Styler -> элементы выбора (С++)


Chaot

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

День добрый.

Возможно, кто-нибудь сталкивался с подобной проблемой:

в Block Styler создается диалог для выбора нескольких кривых. Собственно для выбора используется элемент CurveCollector.

В коде для этого диалога, естественно, нужно что-то делать с выбранными кривыми, но вытащить их из CurveSelector мне так и не удалось. Согласно документации, для этого нужно использовать функцию GetTaggedObjectVector("SelectedObjects"), но когда код доходит до использования возвращаемого ею вектора (хоть вызов size() ), NX вылетает без каких-либо сообщений об ошибках или чего-либо еще.

Дойдя до curves.size() приложение запарывается:

PropertyList* properties = circleSelector->GetProperties();

vector<NXOpen::TaggedObject*, std::allocator<NXOpen::TaggedObject*>> curves = properties->GetTaggedObjectVector("SelectedObjects");

concentricAssConstraint::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, "Here");

if(curves.size() < 2)

{

и т.д.

Прошу помощи - может кто-нибудь использовал Block Styler в связке с c++.

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


С большой вероятностью проблема в stl :lighten:

Для почти гарантированного bugless кода для NX с участием Standard Template Library могу посоветовать следующие пункты:

1. Создавайте ваш С++ проект при помощи соответствующих визардов, поставляемых с версией NX. Это уберегает от 99% ошибок.

2. Если используется STL (std::vector / std::set / std::string ... etc) - собирайте проект только в Release конфигурации.

3. Поверьте, установлен ли параметр SECURE_SCL=0 в настройках препроцессора.

ЗЫ Еще подозрение вызывает явное указание аллокатора для вектора (vector<NXOpen::TaggedObject*, std::allocator<NXOpen::TaggedObject*>>) ... :g: Можно емнип его не указывать (std::vector<NXOpen::TaggedObject*> my_cool_vector = properties->...).

Regardzzz...

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

С большой вероятностью проблема в stl :lighten:

Для почти гарантированного bugless кода для NX с участием Standard Template Library могу посоветовать следующие пункты:

1. Создавайте ваш С++ проект при помощи соответствующих визардов, поставляемых с версией NX. Это уберегает от 99% ошибок.

2. Если используется STL (std::vector / std::set / std::string ... etc) - собирайте проект только в Release конфигурации.

3. Поверьте, установлен ли параметр SECURE_SCL=0 в настройках препроцессора.

ЗЫ Еще подозрение вызывает явное указание аллокатора для вектора (vector<NXOpen::TaggedObject*, std::allocator<NXOpen::TaggedObject*>>) ... :g: Можно емнип его не указывать (std::vector<NXOpen::TaggedObject*> my_cool_vector = properties->...).

Regardzzz...

Визарды использую, правда незначительно подправленные руками, так как визарды для 2008й студии, а используется 2010я.

Что до явного указания аллокатора, то и без него и с ним одна фигня.

А теперь самое вкусное: только что попробовал забилдить релиз и все заработало.

Так что огромное вам спасибо ;)

Изменено пользователем Chaot
Ссылка на сообщение
Поделиться на других сайтах

Наврал - не помогло. Secure_SCL = 0 стоит.

Билдим в релиз. Все равно вылетает.

Перестал выпадать на запросе size() полученного вектора - удалось узнать, что размеры запредельные. То есть вектор инициализируется какой-то фигней.

Изменено пользователем Chaot
Ссылка на сообщение
Поделиться на других сайтах

Хм....

так как визарды для 2008й студии, а используется 2010я

Тогда <noindex> вам сюда </noindex>

Regardzzz ...

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

Спасибо.

Я добился того, чтобы возвращался вектор хоть сколько-то похожий на корректный (vector.size() == количеству выбранного селектором).

Добился благодаря вашему последнему ответу - пришлось проставить поверх 2010й студии компилятор от 2008й.

Огромное спасибо - буду биться дальше.)

Изменено пользователем Chaot
Ссылка на сообщение
Поделиться на других сайтах

2 Chaot

Надо убедиться, что MSVS 2008 подходит для вашей версии NX :) , например для NX7.5 надо ставить Visual Studio 2008 SP1

Оно может без SP1 и не "выстрелит", но это обычно неправильный путь и лучше по чистому ставить то, что рекомендовано :)

PS Вот ещё вспомнил: надо внимательно смотреть, ЧТО стандартный визард NXOpen пихает в

С/C++ -> Code Generation -> Runtime Library

(для NX75 это MultiThreaded Dll /MD).

Если этот параметр неправильно выставить при миграции старых кодов (он рулит подключением crt), то возможны мегавзрывы при передаче указателя или копировании

объекта через "границу" dll (а в нашем случае мы как раз вектор через "границу" библиотеки и передаем) ... точнее не при передаче, а при уничтожении объекта на нашей стороне + <noindex>check this</noindex>

Regardzzz ...

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

2 Chaot

Надо убедиться, что MSVS 2008 подходит для вашей версии NX :) , например для NX7.5 надо ставить Visual Studio 2008 SP1

Оно может без SP1 и не "выстрелит", но это обычно неправильный путь и лучше по чистому ставить то, что рекомендовано :)

PS Вот ещё вспомнил: надо внимательно смотреть, ЧТО стандартный визард NXOpen пихает в

С/C++ -> Code Generation -> Runtime Library

(для NX75 это MultiThreaded Dll /MD).

Если этот параметр неправильно выставить при миграции старых кодов (он рулит подключением crt), то возможны мегавзрывы при передаче указателя или копировании

объекта через "границу" dll (а в нашем случае мы как раз вектор через "границу" библиотеки и передаем) ... точнее не при передаче, а при уничтожении объекта на нашей стороне + <noindex>check this</noindex>

Regardzzz ...

NX - 7.5, студия - 8я SP1. В этом смысле все ок.

Визард ставит <MultiThreaded Dll - о том, что это надо проверять я в доках вычитывал.)

За ссылку спасибо - почитаю.

Теперь вот пытаюсь разобраться с работой самих блоков (UI Blocks). Все никак у меня не получается приспособить хоть какой-нибудь блок для выбора пары ребер от разных компонентов сборки.

Непрекращающаяся война)

Update:

Что-то получилось. Давно у меня такого не было, чтобы копаться, копаться и в самые неожиданные моменты в самых неожиданных местах получать нечто похожее на требуемый результат. Страшное дело.

Изменено пользователем Chaot
Ссылка на сообщение
Поделиться на других сайтах

Теперь вот пытаюсь разобраться с работой самих блоков (UI Blocks). Все никак у меня не получается приспособить хоть какой-нибудь блок для выбора пары ребер от разных компонентов сборки.

Непрекращающаяся война)

Если вы работаете в компании с действующей поддержкой от Siemens PLM, то можно заказать курс

обучения по NXOpen и я с удовольствием приеду и расскажу про все прелести и грабли программинга

под NX. А с учетом того, что вы кодите в cpp - это будет вдвойне круче, так как я сам заядлый cpp-шник :cool:

Regardzzz ...

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

Если вы работаете в компании с действующей поддержкой от Siemens PLM, то можно заказать курс

обучения по NXOpen и я с удовольствием приеду и расскажу про все прелести и грабли программинга

под NX. А с учетом того, что вы кодите в cpp - это будет вдвойне круче, так как я сам заядлый cpp-шник :cool:

Regardzzz ...

Да косяк как раз в том, что не работаю я в такой компании)

Поэтому решения проблем, беспрестанно возникающих в ходе попыток научиться работать с NXOpen, приходится либо вычленять из док, либо искать по кусочкам по форумам и т.п.

Ну или вас забесплатно мучить.)

Тут вот очередная проблема всплыла - рыщу.

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

Да косяк как раз в том, что не работаю я в такой компании)

Поэтому решения проблем, беспрестанно возникающих в ходе попыток научиться работать с NXOpen, приходится либо вычленять из док, либо искать по кусочкам по форумам и т.п.

Метод "научного" поиска выручает всегда :) Сорри за :poster_offtopic:

Ссылка на сообщение
Поделиться на других сайтах
  • 5 месяцев спустя...

Добрый день! Не смотря на дату создания темы, я готов помочь решить вам вашу задачу, если конечно это актуально =) Пишите в ЛС или на почту, выложу решение на форуме.

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

Добрый день! Не смотря на дату создания темы, я готов помочь решить вам вашу задачу, если конечно это актуально =) Пишите в ЛС или на почту, выложу решение на форуме.

Спасибо за участие - большинство из возникших с NX Open проблем уже решено или забыто) Изменено пользователем Chaot
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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