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

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


NX-Open-Dummer

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

UF_MODL_ask_minimum_dist

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

хотя бы для начальной оценки

На ней Вы сможете получить максимальную скорось выполнения программы

по сравнению с булевскими

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

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

Заметание произвожу с помошью функции UF_MODL_create_sweep, в начальных данных имеем tag передней грани тела инстпумента (tool_edge_id) и tag кривой вдоль которой перемещается тело (spiral_id).

Помогите пожалуйста, как построить заметание. У функции UF_MODL_create_sweep очень много входных параметров, я никак не могу разобраться какой за что отвечает, просмотрел несколько примеров - результат 0 =(

Буду очень благодарен за помощь =)

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


Пытаюсь разобрать примет с UF_Modl_Create_Sweep(). Постоянно выдает ошибку при вызове функции UF_Modl_Create_Sweep() +++ В экземпляре объекта не задана ссылка на объект. В чем дело понять не могу :helpsmilie:

Вот код на C#

public void doSweep(out Tag body_id)    {        UFCurve.Line line_coords = new UFCurve.Line();        line_coords.start_point = new double[] { 0, 0, 0 };        line_coords.end_point = new double[] { 0, 0, 0 };        StringList s_guide = new StringList();        StringList s_section = new StringList();        StringList s_law = new StringList();        StringList s_spine = new StringList();        MethodList orientation = new MethodList();        MethodList scaling = new MethodList();        int alignment = 1;        int body_type = 1;        int inter = 1;        double[] tol = new double[] { 0, 0, 0 };        /*  Create the guide curves */        theUfSession.Modl.InitStringList(ref s_guide);        theUfSession.Modl.CreateStringList(1, 1, ref s_guide);        s_guide.num = 1;        s_guide._string[0] = 1;        s_guide.dir[0] = 1;        line_coords.end_point[0] = 10;        theUfSession.Curve.CreateLine(ref line_coords, out s_guide.id[0]);        /*  Create the section curves */        theUfSession.Modl.InitStringList(ref s_section);        theUfSession.Modl.CreateStringList(1, 4, ref s_section);        s_section.num = 1;        s_section._string[0] = 4;        s_section.dir[0] = 1;        line_coords.end_point[1] = 1;        theUfSession.Curve.CreateLine(ref line_coords, out s_section.id[0]);        line_coords.end_point[2] = 1;        theUfSession.Curve.CreateLine(ref line_coords, out s_section.id[1]);        line_coords.end_point[1] = 0;        theUfSession.Curve.CreateLine(ref line_coords, out s_section.id[2]);        line_coords.end_point[2] = 0;        theUfSession.Curve.CreateLine(ref line_coords, out s_section.id[3]);        /* Create law curve */        theUfSession.Modl.InitStringList(ref s_law);        theUfSession.Modl.CreateStringList(1, 1, ref s_law);        s_law.num = 1;        s_law._string[0] = 1;        s_law.dir[0] = 1;        line_coords.end_point[0] = 10;        line_coords.end_point[1] = 10;        theUfSession.Curve.CreateLine(ref line_coords, out s_law.id[0]);        /*  No spine */        theUfSession.Modl.InitStringList(ref s_spine);        theUfSession.Modl.CreateStringList(1, 1, ref s_spine);        s_spine.num = 0;        orientation.method = 6;        orientation.s_curve = new StringList[1];        theUfSession.Modl.InitStringList(ref orientation.s_curve[0]);        theUfSession.Modl.CreateStringList(1, 1, ref orientation.s_curve[0]);        orientation.s_curve[0] = s_law;        orientation.value = new double[3];        orientation.value[0] = 0.0;        orientation.value[1] = 1.0;        orientation.value[2] = 0.0;        orientation.id = NXOpen.Tag.Null;        orientation.inter = 0;        scaling.method = 1;        scaling.value = new double[3];        scaling.value[0] = 1.0;        theUfSession.Modl.CreateSweep(ref s_guide,                                      ref s_section,                                      ref s_spine,                                      ref orientation,                                      ref scaling,                                      ref alignment,                                      ref inter,                                      ref body_type,                                      FeatureSigns.Nullsign,                                      tol,                                      out body_id);    }

Ссылка на оригинал <noindex>http://cafe.daum.net/nxopen/7UDu/3?docid=1...320080306143729</noindex>

Прошу помощи, уважаемые профессионалы!

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

C предыдушим вопросом вроде разобрался.

Подскажите пожалуйста как правильно задать направление заметания при помощи функции

int UF_MODL_create_sweep

(

UF_STRING_p_t s_guide,

UF_STRING_p_t s_section,

UF_STRING_p_t s_spine,

UF_METHOD_p_t orientation,

UF_METHOD_p_t scaling,

int * alignment,

int * inter,

int * body_type,

UF_FEATURE_SIGN boolean,

double tol [ 3 ] ,

tag_t * body_obj_id

)

Как я понял, за это отвечает параметр UF_METHOD_p_t orientation, пробывал его изменять, но требуемого результата так и не получил =(

То что получается у меня:

post-32938-1337680590_thumb.jpg

То что требуется получить:

post-32938-1337680564_thumb.jpg

Как правильно задать UF_METHOD_p_t orientation, чтобы получить требуемый результат?

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

товарищи! давненько я вам не писал! :)

подскажите, пжлст, как из dll-ки (программки для NX на Си) вызвать другую dll-ку? какой функцией?

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

товарищи! давненько я вам не писал! :)

подскажите, пжлст, как из dll-ки (программки для NX на Си) вызвать другую dll-ку? какой функцией?

Если средствами Win32 API, то:

1) LoadLibrary (<noindex>LoadLibrary на MSDN</noindex>)

2) К полученному хэндлу - GetProcAddress (<noindex>GetProcAddress на MSDN</noindex>)

3) К полученному адресу - вызов функции.

P.S.: В случае вызова этих функций из DllMain могут возникнуть ограничения, почитать можно <noindex>здесь</noindex>.

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

всем здравствуйте. вот в этой теме <noindex>http://fsapr2000.ru/index.php?showtopic=82...быстрые+клавиши</noindex>

есть пост с кодом от niki (4 сент. 2003).

я его взяла, dll-ку сделала, но nx её запускать не хочет. nx 7.5.2.5, студия 9.0

выдаёт ошибку "невозможно загрузить изображение - см. журнал. имя файла с:\users...моя dll-ка.dll. имя функции: ufusr"

смотрю журнал, там «The reason C:\Users\...\NX7 Open Wizard2.dll failed to load was:

Native license authentication failed and no CPP license is available»

в моей лицензии nx нет возможности писать пользовательские кусочки?

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

как с этим справиться? платить денюшку сименсу?

вот ещё ответьте, пожалуйста: где должна лежать dll, чтобы она запускалась при сохранении файла?

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

Подскажите что делать. У меня есть сборка, я в цикле перебираю все объекты в этой сборке с помощью функции feature = (UF_OBJ_cycle_all(UF_PART_ask_display_part(), feature));

Когда в сборку входят компоненты с деформацией, при переборе объектов перебираются объекты деформаций, а это замедляет работу и приводит к отрицательному результату. Так при переборе фьючеров, к фьючерам самой сборки добавляются фьючеры деформаций. Как при переборе исключить объекты деформаций?

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

Еще один вопросик.

При переборе объектов, у меня в типе 158 (UF_smart_model_instance_type) отображаются шероховатости PMI, нумерации PMI и общие замечания PMI. Как их можно различить между собой? По имени не получилось, т.к. имя не отображается.

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

товарищи!

хотелось бы как-то защитить все то, что было создано непосильным трудом.:)

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

но не хотелось бы ничего сложного.

как вариант... в журнале NX можно прочитать:

************** System Environment Variables **************

CLASSPATH ...

PATH ...

PATHEXT ...

TEMP ...

TMP ...

UGII_BASE_DIR ...

UGII_LANG ...

UGII_ROOT_DIR ...

UGS_LICENSE_SERVER ...

USERDNSDOMAIN ...

USERDOMAIN ...

USERNAME ...

USERPROFILE ...

а как получить на OPEN C например переменную USERDOMAIN для последующего сравнения с доменом конторы? какой функцией?

если будут другие варианты и предложения по защите, то буду рад.:)

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

Можно поробовать стандартной функцией С для получения значения системной что-нибудь вроде char *getenv( char *ИМЯ ); точно не знаю, на Jave UGII_USER_DIR получала str=System.getenv("UGII_USER_DIR")

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

Можно поробовать стандартной функцией С для получения значения системной что-нибудь вроде char *getenv( char *ИМЯ ); точно не знаю, на Jave UGII_USER_DIR получала str=System.getenv("UGII_USER_DIR")

да, "char *getenv( char *ИМЯ );".

проще наверно не бывает. Александра, спасибо! :smile:

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

Помогите разобраться

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

do

{

UF_OBJ_cycle_objs_in_part(UF_ASSEM_ask_work_part(),5,&feature);

if (feature == NULL_TAG)

{

break;

}

int afs = UF_OBJ_ask_status(feature);

if (afs == 3)

{

Arc *arc1(dynamic_cast<Arc *>(NXOpen::NXObjectManager::Get(feature)));

if (arc1 != 0)

{

if(arc1->OwningComponent()== 0)

{

UF_OBJ_set_layer(feature,2);

}

}

}

}while(feature != NULL_TAG);

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

товарищи!!! :helpsmilie:

в NX-файле нужно организовать массив данных.

причем запись и чтение из массива (или таблицы) должны быть на программном уровне (на Си).

запись и чтение в атрибуты не подходит.

кто-нибудь может помочь или что-нибудь подсказать? :surrender:

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

товарищи!!! :helpsmilie:

в NX-файле нужно организовать массив данных.

причем запись и чтение из массива (или таблицы) должны быть на программном уровне (на Си).

запись и чтение в атрибуты не подходит.

кто-нибудь может помочь или что-нибудь подсказать? :surrender:

Возможно есть во мне что-то от Сусанина, но может User Defined Objects/Free Form Data (какое-то описание в справке в разделе Open C есть, сам с этим не работал, поэтому конкретизировать не могу) под это дело можно приспособить?

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

мне тут помощь предложили "за соответствующее вознаграждение"! :)) нет, не Ленивый, другой. :)

ладно, спасибо и на этом!:))

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

...

ладно, спасибо и на этом!:))

И всё же, я думаю, UDO (типа Free Form Data) вполне могут подойти.

Пара сложностей:

1) Надо продраться сквозь дебри справочной системы (лично я смотрел Open C Programmer's Guide, последний раздел под названием User Defined Objects)

2) Конкретно в этом случае суть работы объясняется в файлах примеров, что осложняет чтение.

Небольшой оффтоп, конечно, но:

мне тут помощь предложили "за соответствующее вознаграждение"! :)) нет, не Ленивый, другой. :)

Ну а что вы хотели? :)

Меня лично учёба в ВУЗе научила тому, что за бесплатную помощь человеку тебе этот же человек может, образно выражаясь, ещё и в рожу плюнуть, и на шею попытаться сесть в дальнейшем и т.д. и т.п.

Так что предложение помощи за деньги, имхо, не является чем-то аморальным.

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Jesse
      скорей всего ДК - это какое-то "общее" требование для всех роторных машин, где есть вал..) вот и копипастят, сами не пойми чего. Ну я уже на 90% уверен, что ДК - это про гироскопику, когда достаточно большой диск кренится вдоль оси и создаёт "гироскопику" - момент, которые гнёт вал и искажает частоты. Наблюдается две ветви - т.н. "вилка". Если эти гироскопич-е эффекты пренебрежимо малы, то это уже не ДК, а просто зав-ть СЧ от оборотов..) Пока так.   да там и от скорости вращения ротора должна зависеть added mass; когда замедляется/ускоряется, везде разная масса получится.  Интересно, а можно из эксперимента определить added mass? ну типа тот же ротор постепенно разгоняешь, и смотришь как меняется основная акустическая мода по времени..
    • Orchestra2603
      @ДОБРЯК: Решил вашу задачку с одним элементом без факторизации...   Частоты:     Формы:  
    • vanek77777
      Вышли проект maxx2000, пусть покажет на практике как надо. А то он мастер размытых ответов) Иногда почему-то Кличко вспоминается, тот что мер Киева) Заодно я и может другие чему новому научимся) Прочитал несколько раз, вот ничего не понятно. Ради бога вышлите ему проект. Мне прям интересно, что имелось ввиду в этом послании
    • Orchestra2603
      Много делал расчетов для общей вибрации корпуса судна. Так вот мы просто вокруг корпуса делали объемную сетку и "заливали" ее элементами акустической жидкости (т.е. из степеней свободы только давление). Получался типа такого параллелипепеда из воды. В тех элементах, которые граничат с конструкции, там нужно включать расширенные набора степеней свободы (давление и еще пермещения), чтобы обеспечить совместность. Если объем достаточно большой, так что в модальнике видно, что на нектором отдалении от границ параллелепипеда давления падают, то размер этот параллелепипеда не влияет на частоты/формы. Знаю, что еще есть всякие полубесконечные специальные элементы, где на одной из граней можно сразу задавать асимптотические условия на бесконечности, но я такими не пользовался сам, так что не знаю, как оно работает. Еще надо понимать, что из-за вот этих интерфейсных элементов жидкости пропадает симметрия матриц, так что там есть еще вычислительные особенности для модальника.   Надо еще понимать, что для разных видов движений (т.е. по сути для разных форм колебаний, если мы говорим о вибрации) присоединенная масса будет отлисчаться. Существует,например, формула для присоединенных масс для поступательного движения циллиндра. И там для бесконечного объема жидкости вокруг циллиндра. Но понятное дело, что это не совсем то, что нужно.    Вообще, что касается гидродинамики (если она там есть), то это вообще отдельная история. Если объем там внутри насоса замкнутый (насколько я понимаю), и скорости существенные, то там куча всякого интеренсого может проиходить. Если прям есть задача или желание заморачиваться, то надо бы тогда и CFD посчитать. Представьте себе... Совсем недавно имел дело с расчетами динамики опорной конструкции для оффшорного ветрогенератора. И там под Cambell diagram они как раз имелли ввиду примерно такой же график!  По оси x - частота вращения, по оси y - частоты.  Там строят графики для частот возбуждения разных порядков (1P, 3P, 6P, ...), которые (ясен пень!) линейны относительно частоты вращения ротора. Еще рисуют горизонтальные прямые, которые соответствуют каким-то собственным частотам и ращным самым формам... Получается картинка, очень похожая на вашу! Я всегда считал, что Campbell diagramm - это про динамическую неустойчивость при вращательном движении. А тут вот - нет! Короче.. Всегда хорошо уточноить у заказчика, что конкретно они хотят получить. Очень может быть, что вам и не нужно сильно заморачиваться. 
    • Говорящий Огурец
      Да, как-то так это и работает. На сколько я помню, "слепки" станка можно делать упрощенные и полные. И заставить работать Sinutrain - та еще задачка...
    • Kelny
      Просто ВАРИАНТы.   Получается не верно.   Как вариант ГОСТ 2.109. В графе кол-во пусто, а в примечании: "1 шт. допускается замена на поз. или поз." (если есть базовый вариант поставки) и для остальных поз. "1 шт. применяется в замен поз. или поз.", которые заменяют друг друга.   Но так понимаю этот вариант не предполагает поставку всех пяток, а только одного варианта.   Выходит правильный вариант всё таки как КОМПЛЕКТ МОНТАЖНЫХ ЧАСТЕЙ с картинками как их правильно установить в паспорте или руководстве по эксплуатации, а не на сборочном чертеже (т.к. сборочный чертёж покупателю вашего изделия поставляться не должен).
    • Павлуха
    • maxx2000
      не, не никакого STL, только твердотельные STEP, IGES
    • maxx2000
      Есть мнение, что обработку надо вести вдоль оси W, как самое простое. Т.е.  деталь должна быть ориентирована на столе вдоль оси Z рабочей плоскости XYZ и  ось W будет совпадать с Z. А наклон будет минимизирован автоматически.
    • ДОБРЯК
      Не посложнее, а алгоритм решения нужен. Слово КАК замените на алгоритм решения.  Есть много алгоритмов или методов решения задачи определения собственных чисел и векторов.  В терминах понятных вам. То что вы решили квадратное уравнение вы не нашли собственную пару (к, u). :=) Есть две разреженные матрицы [К] и [М]. Нужно найти первые собственные числа и вектора.  Или опять не понимаете задачу которую нужно решить... :=) Это задача которая решается в любой КЭ программе. Вы даже задачу не можете понять. А пишете столько умных слов и букв. :=)
×
×
  • Создать...