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

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

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




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