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

NX Open C программирование


NX-Open-Dummer

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

Подскажите пожалуйста.

Как можно сделать ФОН плоскость(Настройки->ФОН->Изменить фон), а не градуированный (для каркасных видов)? Через журнал не записывается.

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


товарищи, гиганты мысли!

научите уму разуму!

составляю список инструмента. компилятор выдает предупреждения (см. ниже). однако прога работает.

но на 7ке ИНОГДА прога ругается на память и закрывается. причем на ХР ВСЕГДА все работает.

может из-за этих предупреждений? что тут не так?

только не ругайтесь сильно. я - не волшебник, я только учусь...

tag_t *inst[256]; // список тегов инструмента

tag_t tg2_1; // тег операции

tag_t tg3_1; // тег инструмента

/////

// получение тега инструмента

UF_OPER_ask_cutter_group(tg2_1, &tg3_1);

// составление списка инструментов

// проверка на повтор в списке инструментов

flag_inst=0;

for(i1=0; i1<kol_inst; i1++)

{

if(inst[i1]==tg3_1) // warning C4047: '==' : 'tag_t *' differs in levels of indirection from 'tag_t'

flag_inst=1;

}

// если нет повтора, то пишем в список

if(flag_inst!=1)

{

inst[kol_inst]=tg3_1; // warning C4047: '=' : 'tag_t *' differs in levels of indirection from 'tag_t'

kol_inst++;

}

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

tag_t *inst[256]; // список тегов инструмента

tag_t tg2_1; // тег операции

tag_t tg3_1; // тег инструмента

...

if(inst[i1]==tg3_1) // warning C4047: '==' : 'tag_t *' differs in levels of indirection from 'tag_t'

...

...

inst[kol_inst]=tg3_1; // warning C4047: '=' : 'tag_t *' differs in levels of indirection from 'tag_t'

....

Возможно пятница на мне сказывается, но тут Вы получается сравниваете tag_t* с tag_t в первой строчке, где предупреждение.

Во второй строчке вы указателю tag_t* (элемент массива) присваиваете значение типа tag_t.

Типы то разные, или тут какая то хитрая задумка? :blink:

Может быть не tag_t *inst[256], а tag_t inst[256]?

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

Возможно пятница на мне сказывается, но тут Вы получается сравниваете tag_t* с tag_t в первой строчке, где предупреждение.

Во второй строчке вы указателю tag_t* (элемент массива) присваиваете значение типа tag_t.

Типы то разные, или тут какая то хитрая задумка? :blink:

Может быть не tag_t *inst[256], а tag_t inst[256]?

да-да. точно так. тупанул я. :laugh:

уже разобрался. уже хотел удалить сообщение, но вы меня опередили. :clap_1:

все равно спасибо, что не остались равнодушными!

Изменено пользователем NX-Open-Dummer
Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Добрый день. Не бейте сильно за глупые вопросы,только начал осваивать OPEN API.

Что же все таки такое тэг в NX? И как его использовать?(конечно я нашел такую строчку typedef unsigned int tag_t; и интуитивно догадываюсь,но все таки).И еще вопросик, у меня есть тег поверхности,как я могу придать этой поверхности толщину(при помощи какой функции)?.Заранее спасибо.

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

Коллеги! :)

Как сделать, чтобы на одном компьютере можно было компилировать 32- и 64-b dll-ки? Установить VS 64-b + NX 64-b + NX 32-b, а потом в VS в свойствах проекта прописывать пути до соответствующих каталогов NX? Просто теория теорией, а на практике не делал. Потому и спрашиваю. :)

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

Да, именно так. Причем сам NX можно и не устанавливать, например - 32-х битный можно вовсе не ставить, только lib-ы "сложить" в какую нибудь папку и соответственно подсовывать в нужной конфигурации проекта.

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

Добрый день. Не бейте сильно за глупые вопросы,только начал осваивать OPEN API.

Что же все таки такое тэг в NX? И как его использовать?(конечно я нашел такую строчку typedef unsigned int tag_t; и интуитивно догадываюсь,но все таки).И еще вопросик, у меня есть тег поверхности,как я могу придать этой поверхности толщину(при помощи какой функции)?.Заранее спасибо.

tag_t - некий уникальный целочисленный идентификатор объекта модельного пространства,

позволяющий программным способом производить создание или удаление

объекта, придавать ему определенные свойства или статус (цвет, слой,

погашен/высвечен и т.п.).

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

Коллеги! :)

Как сделать, чтобы на одном компьютере можно было компилировать 32- и 64-b dll-ки? Установить VS 64-b + NX 64-b + NX 32-b, а потом в VS в свойствах проекта прописывать пути до соответствующих каталогов NX? Просто теория теорией, а на практике не делал. Потому и спрашиваю. :)

Нет не так

Такой проект будет непереносим между машинами

Лучше написать батник для запуска компилятора и в нем определять необходимые NX переменные

Тогда Тебе при компиляции придется перезапускать компилятор другим батником для сборки на другой платформе

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

Добрый день! И хорошего Вам конца света! =)

Подскажите пожалуйста, с помощью какой фукции можно добавить объект в дерево?

И еще один вопрос, для выбора элементов сборки пользователем использую UF_UI_select_by_class, все работает отлично, только возникла проблема, второй раз выбрать этот же элемент нельзя, он так и остается выделенным (после звершения работы программы). Подскажите с помощью какой фунции можно снять выделение объекта или как правильно настроить UF_UI_select_by_class чтобы выделение не оставалось активным после работы программы?

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

int unhighlight=0;

UF_DISP_set_highlight(*comp_id,unhighlight);

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

int unhighlight=0;

UF_DISP_set_highlight(*comp_id,unhighlight);

Спасибо =) То, что искал =)

А насчет добавления элемента в историю модели ничего подсказать не можете?

Или, задам вопрос по-другому, как добавить кривую, построенную программно, в дерево сборки?

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

Спасибо =) То, что искал =)

А насчет добавления элемента в историю модели ничего подсказать не можете?

Или, задам вопрос по-другому, как добавить кривую, построенную программно, в дерево сборки?

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

Кривая кривой рознь - вообще необходимо создать feature какой-нибудь

Прямая или окружность, созданная с помощью UF_CURVE_create_line или UF_CURVE_create_arc.

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

Прямая или окружность, созданная с помощью UF_CURVE_create_line или UF_CURVE_create_arc.

Наверное все таки в дерево модели а не сборки

Ты ассоциативную кривую (набор кривых) хочешь

Тогда создаешь UF_UDOBJ - фичер и добавляешь свои кривые как owning link

добавляешь линки от которых они (кривые зависят)

Регистрируешь как минимум метод update который будет вызываться автоматически после изменения линк

в нем Ты будешь редактировать свои кривые

И у Тебя появится свой ассоцианивный фичер

После создания объекта UF_MODL_update не забудь а то дерево модели сразу не обновиться

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

Наверное все таки в дерево модели а не сборки

Ты ассоциативную кривую (набор кривых) хочешь

Тогда создаешь UF_UDOBJ - фичер и добавляешь свои кривые как owning link

добавляешь линки от которых они (кривые зависят)

Регистрируешь как минимум метод update который будет вызываться автоматически после изменения линк

в нем Ты будешь редактировать свои кривые

И у Тебя появится свой ассоцианивный фичер

После создания объекта UF_MODL_update не забудь а то дерево модели сразу не обновиться

Да, дерево модели.

Я пишу на C#, нашел класс UFUdobj, но там нет ни UF_UDOBJ_add_owning_links, ни UF_UDOBJ_create_udo и т.д.

Описание класса UFUdobj из NXOpen .Net API Reference

public class UFUdobj : NXRemotableObjectAsyncProcessMessage(IMessage, IMessageSink)  // Asynchronously processes the given message. (Inherited from NXRemotableObject.) CreateObjRef(Type) // Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject.) Equals(Object) // Determines whether the specified Object is equal to the current Object. (Inherited from Object.) GetHashCode() // Serves as a hash function for a particular type. (Inherited from Object.) GetLifetimeService() // Retrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject.) GetType() // Gets the Type of the current instance. (Inherited from Object.) InitializeLifetimeService() // Obtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject.) NextSink // Gets the next message sink in the sink chain. (Inherited from NXRemotableObject.) SyncProcessMessage(IMessage) // Synchronously processes the given message. (Inherited from NXRemotableObject.) ToString() // Returns a String that represents the current Object. (Inherited from Object.)

Мне не надо кривые с чем-то ассоциативносвязывать. Задача стоит следующая, автоматически построить несколько кривых, добавить их в дерево. Потом конструктор будет самостоятелно из дерева выбирать эти кривые и вокруг них ассоциативно выполнять все построения.

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

Для начинающего это слишком сложная тема - ради этого в программу придется добавить кода, наверное,

больше, чем там уже есть.

Сначала создать свой класс:

public static UserDefinedClass UDO_curve_class =null;

UDO_curve_class = theSession.UserDefinedClassManager.CreateUserDefinedObjectClass

("UDO_curve", "UDO_curve");

Зарегистрировать обработчики событий:

UDO_curve_class.AddDisplayHandler(new UserDefinedClass.DisplayCallback(curveDisplayCB));

UDO_curve_class.AddAttentionPointHandler(new UserDefinedClass.DisplayCallback(curveDisplayCB));

UDO_curve_class.AddFitHandler(new UserDefinedClass.DisplayCallback(curveDisplayCB));

UDO_curve_class.AddSelectionHandler(new UserDefinedClass.DisplayCallback(curveDisplayCB));

UDO_curve_class.AddEditHandler(new UserDefinedClass.GenericCallback(curveEditCB));

UDO_curve_class.AddInformationHandler(new UserDefinedClass.GenericCallback(curveInfoCB));

Дальше написать сами обработчики...

Создаем UDO и фичу, которая будет в навигаторе отображаться:

Part myBasePart = Program.theSession.Parts.Work;

UserDefinedObjectManager myUDOmanager = myBasePart.UserDefinedObjectManager;

firstUDO = myUDOmanager.CreateUserDefinedObject(Program.UDO_curve_class);

FeatureCollection ff = myBasePart.Features;

UserDefinedObjectFeatureBuilder bb = ff.CreateUserDefinedObjectFeatureBuilder(null);

bb.UserDefinedObject = firstUDO; //а можно только Feature создать по классу

UserDefinedObjectFeature ft = (UserDefinedObjectFeature)bb.CommitFeature();

Добавить линки:

UserDefinedObject.LinkDefinition[] own_link =

new UserDefinedObject.LinkDefinition[own_lst.Count];

for (int i = 0; i < own_lst.Count; i++)

{

TaggedObject obj = NXOpen.Utilities.NXObjectManager.Get(own_lst);

own_link.AssociatedObject = obj;

}

if (own_link.Length != 0)

{

try { firstUDO.SetLinks(UserDefinedObject.LinkType.Owning, own_link); }

catch (NXOpen.NXException ex) { Program.theSession.LogFile.WriteLine(ex.Message); }

}

В общем, замучаешься...

И сначала надо добавить:

using NXOpen.UserDefinedObjects;

класс UFUdobj - он больше не используется в NX (из него удалили всю начинку, с NX6 по моему),

он есть, но пустой.

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

Для начинающего это слишком сложная тема - ради этого в программу придется добавить кода, наверное,

больше, чем там уже есть...

0_0 просто в шоке...

По сути задача стоит наипростейшая, программно построил кривую (UF_CURVE_create_arc), она вывелась на экан и добавилась в дерево модели...

Ведь когда мы создаем поверхность вытягиваением (UF_MODL_create_extruded), полученныой объект добавляется в дерево автоматически, а тут получается чуть ли не шаманский бряд провести надо. Даже если руками делаем Вставить->Кривая->Дуга/Окружность строится кривая и сразу добавляется в дерево.

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

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

UF_CURVE_create_line_point_point как такой?

Нет такого :'(( Справка не находит данный метод =(

Нашел UF_SO_create_line_two_points, но мне не нужен smart object. А если создаем прямую UF_CURVE_Line, то получаем только Tag прямой. Если я правильно понимаю мне надо каким-то неведомым образом Tag line_id нужно перевести в Tag feature_id и тогда будет мне счастье, но как это сделать ума не приложу...

Или все же объектами класса UFSo пользоваться?

Также нашел

int UF_CURVE_create_line_arc

(

UF_CURVE_line_arc_t * line_arc_data,

tag_t * line_arc_feat_id

)

По настройкам очень напоминает построение руками в NX, но как ее настроить, даже на китайских форумах никто не знает =(

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

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

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

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

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

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

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

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

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

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

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




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