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

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 пользователей

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




  • Сообщения

    • nicomed
      Поднял старые записи. Из того что было максимально похоже на то, что можно было назвать "получалось" :   Самому не совсем понятно поведение СкетчМенеджера при отрисовке линии от координат 0,0,0 - частенько слетает в произвольное место на виде. 
    • maxx2000
      на втором  скрине PLC сообщает что-то типа "старт программы запрещён потому что оси ХУ не связаны". Возможно станок в режиме точения должен заблокировать перемещение У, включить тормоз или что-то ещё для произвольного смещения под нагрузкой. Возможно косяк в тексте программы.
    • maxx2000
      @sneg0vik как это? Если ХУ не перпендикулярны то это уже не У, а скажем ось В. Нет, конечно в теории можно построить станок с неперпендикулярными ХУ. Вопрос зачем? Gildemeister CTX 420 это же токарно-фрезерный с осью У
    • sneg0vik
      На станке ось "X" является наклонной по отношению к оси "Y" (т. е. они не перпендикулярны). Поэтому надо полагать (учитывая текст ошибки) у вас отключена связь оси "Y" с осью "X".   Проверьте меняются ли координаты оси "X", когда вы двигаете ось "Y". И наоборот. Если - нет, то ищите как включить (наверное через параметры) взаимосвязь оси "Y" с осью "X".
    • ДОБРЯК
      Если ваш Заказчик и такую работу примет, то необходимо в шпоночное отверстие добавить и массу воды. Примерно 1/4 от той массы которую вы будете добавлять.  Да и еще и не забыть добавить момент инерции от воды.
    • Soprin
      В функции MOVE по F7.3 должно же из R270 переносить в R278?
    • niagara39
      Причина все еще не найдена... Но заметил, что сразу после включения в меню диагностики появляется следующее предупреждающее сообщение: 10155 M: Y-axis: Y-axis and X-axis not coupled , но причина его появления и его смысл неизвестны
    • maxx2000
      скажите, Вам уже делали эти детали? Вы себе представляете как и главное  чем, можно обработать внутренние углы без скругления на вашей детали? Разве что проволокой. НО оно же стоить будет как крыло от боинга. 
    • Sivolap36
      Спасибо за информацию. А как определили, что нижний  инкрементный? Спасибо. Как то я пролистал наверное. Благодарю
    • Jesse
      deleted этого я и хотел узнать у товарищей форумчан :-) вот для сферы оценка есть: присоед. масса воды равна половине от объёма сферы может кто в справочнике каком видел сколько для рабочих колёс присоединять надо..) мне тоже кажется там серьёзная отстройка должна получиться..   не спец в насосах и лопаточных машинах..)) у меня вот тяк: да это геморр... ещё и приложить его надо как-то к валу. Кстати, я вообще говоря собирался для модальника взять модель только вала, с колёса учесть в виде сосредоточ. масс с моментами инерции. Законно ли это, не сильно исказит расчёт СЧ? И ещё непонятка: куда присоединять эту массу? Прям в шпоночное отверстие вала?: Или вдоль всей окружности куда садится колесО?   не не , там не биссектриса. \Гляньте мою картинку выше из Вики. И все картинки такие для ДК что в сети нашлись. Там явно BW и  FW явно не зеркальные отражения друг друга относ-но гориз-й прямой, проведённой через ординату СЧ для нулевой частоты вращения ротора...   откуда вы знаете что сбалансировано? идеальной балансировки не существует   вот прям так в отчёте и напишу!:D точка Меня другой вопрос волнует.. Что центробеж. сила и гироскоп. момент пропорц-ны квадрату частоты вращенеия, т.е. на больших частотах может появиться вилка... Мне нужно где-то найти оценку, возможно опять таки относительно СЧ когда нет вращения..
×
×
  • Создать...