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

Создать точки на кривой (Points on Curve) NX Open


i.m.p

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

Привет всем.

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

Порядок моего построения:

1. UF_CURVE_create_spline_thru_pts - строю сплайны для построения поверхности

2. UF_MODL_create_thru_curves - строю по полученным выше сплайнам поверхность

3. UF_MODL_create_plane - строю плоскость сечения

4. UF_CURVE_section_from_planes - строю кривую сечения плоскости и поверхности

5. Необходимо получить/построить точки на кривой, полученной в п. 4. Можно, если это технически возможно, получить только точки начала и конца кривой сечения.

ПОМОГИТЕ.

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


Можно, если это технически возможно, получить только точки начала и конца кривой сечения.

// Инициализируем вычислитель выбранной кривойUF_CALL(UF_EVAL_initialize (tag_crv, &eval_crv));// опеределяем пределы кривойUF_CALL(UF_EVAL_ask_limits (eval_crv,limits_crv));// определяем точку на кривой и вектора startUF_CALL(UF_EVAL_evaluate_unit_vectors (eval_crv, limits_crv[0], start_pt, tangent, normal, binormal));// определяем точку на кривой и вектора startUF_CALL(UF_EVAL_evaluate_unit_vectors (eval_crv, limits_crv[1], end_pt, tangent, normal, binormal));UF_CALL(UF_EVAL_free (eval_crv));
Ссылка на сообщение
Поделиться на других сайтах

rez= UF_MODL_ask_curve_points( Curve, ctol, atol, step, &numpts, &pts );

НЕРАБОТАЕТ :wallbash:

tag_t section_curves_tag;

UF_CURVE_section_general_data_t section_data;

UF_CURVE_section_planes_data_t datum_plane_data;

section_data.associate = 1;

section_data.objects = obj1; //lop_tag; temp_tag

section_data.num_objects = 1;

section_data.grouping = 0;

section_data.join_type = 0;

section_data.tolerance = 0.01;

datum_plane_data.planes = obj2;

datum_plane_data.num_planes = 1;

UF_CURVE_section_from_planes (&section_data, &datum_plane_data, &section_curves_tag);

//chord(section_curves_tag,0,1);

int irc;

int ni=10;

double *pts;

irc=UF_MODL_ask_curve_points(section_curves_tag,0.001,0.001,1,∋,&pts);

irc = 875033 а должен быть 0

Может быть перед UF_MODL_ask_curve_points нужно еще чего нибуть прописать.

Хотя в припере ничего другого не нужно. И если строить просто линию/сплайн по точкам и прочее - то команда работает, а с сечением - НЕТ

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

у Вас "section_curves_tag" возвращает tag feature операции сечения(пересечения) они они ассоциативны.

теперь Вам надо по этому feature найти результат - tag линии, а точнее множества линий ...

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

у Вас "section_curves_tag" возвращает tag feature операции сечения(пересечения) они они ассоциативны.

теперь Вам надо по этому feature найти результат - tag линии, а точнее множества линий ...

Можно поподробнее, для тех кто на бронепоезде

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

void faces_solid_blade_bs4::get_curve(double z, tag_t *r1_tag, tag_t *r2_tag, tag_t *srig_tag, tag_t *slef_tag)

{ int irc;

  double ppp[3], dir[3];

  tag_t dplane_tag;

  UF_MODL_intersect_info_p_t *int_data;

  int j, n_int;

  try

  {

   if(z > zmax || z < zmin)

	{

	err e(THIS_FILE, __LINE__, "invaliz z=%lf interval(%lf %lf)", z, zmin, zmax);

	throw e;

	}

   ppp[0]=ppp[1]=0.0; ppp[2]=z; dir[0]=dir[1]=0.0; dir[2]=1.0;

   irc=UF_MODL_create_fixed_dplane(ppp, dir, &dplane_tag);



	 irc=UF_MODL_intersect_objects(dplane_tag, sur_f1_tag, solid_blade::dist_tol, &n_int, &int_data);

	 if(irc)

	  {

	  err e(THIS_FILE, __LINE__, irc);

	  if(UF_OBJ_delete_object(dplane_tag)) e.trace(THIS_FILE, __LINE__);

	  throw e;

	  }

	 if(n_int == 1)

	   {

		 *r1_tag=(int_data[0])->intersect.curve.identifier;

	   } else  throw err(THIS_FILE, __LINE__,"error in number intersections %d", n_int);

	 for(j=0; j<n_int; j++) UF_free(int_data[j]); UF_free(int_data);



	 irc=UF_MODL_intersect_objects(dplane_tag, sur_f2_tag, solid_blade::dist_tol, &n_int, &int_data);

	 if(irc)

	  {

	  err e(THIS_FILE, __LINE__, irc);

	  if(UF_OBJ_delete_object(dplane_tag)) e.trace(THIS_FILE, __LINE__);

	  throw e;

	  }

	 if(n_int == 1)

	   {

		 *r2_tag=(int_data[0])->intersect.curve.identifier;

	   } else  throw err(THIS_FILE, __LINE__,"error in number intersections %d", n_int);

	 for(j=0; j<n_int; j++) UF_free(int_data[j]); UF_free(int_data);



	 irc=UF_MODL_intersect_objects(dplane_tag, sur_flef_tag, solid_blade::dist_tol, &n_int, &int_data);

	 if(irc)

	  {

	  err e(THIS_FILE, __LINE__, irc);

	  if(UF_OBJ_delete_object(dplane_tag)) e.trace(THIS_FILE, __LINE__);

	  throw e;

	  }

	 if(n_int == 1)

	   {

		 *slef_tag=(int_data[0])->intersect.curve.identifier;

	   } else  throw err(THIS_FILE, __LINE__,"error in number intersections %d", n_int);

	 for(j=0; j<n_int; j++) UF_free(int_data[j]); UF_free(int_data);



	 irc=UF_MODL_intersect_objects(dplane_tag, sur_frig_tag, solid_blade::dist_tol, &n_int, &int_data);

	 if(irc)

	  {

	  err e(THIS_FILE, __LINE__, irc);

	  if(UF_OBJ_delete_object(dplane_tag)) e.trace(THIS_FILE, __LINE__);

	  throw e;

	  }

	 if(n_int == 1)

	   {

		 *srig_tag=(int_data[0])->intersect.curve.identifier;

	   } else  throw err(THIS_FILE, __LINE__,"error in number intersections %d", n_int);

	 for(j=0; j<n_int; j++) UF_free(int_data[j]); UF_free(int_data);



  irc=UF_OBJ_delete_object(dplane_tag);

  if(irc) throw err(THIS_FILE, __LINE__, irc);

  }

  catch(err &e) { e.trace(THIS_FILE, __LINE__); throw; }

  catch(...)	{ err e(THIS_FILE, __LINE__, "error ..."); throw e; }  

}

UF_MODL_ask_curve_points( Curve, ctol, atol, step, &numpts, &pts );
Этим пользоваться не советую - некрасивый результат - распределение точек сильно не оптимально

Можно поподробнее, для тех кто на бронепоезде

Распечатай таг и посмотри его тип в дебагере UG

или используй UF_OBJ_type_and_subtype

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

Распечатай таг и посмотри его тип в дебагере UG

или используй UF_OBJ_type_and_subtype

В моем NХ 5,0 такой функции/процедуры НЕТ :wallbash:

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

rez= UF_CURVE_create_int_object( one, &Object[0],

one, &D_plane,

&int_curve_feat);

rez= UF_MODL_put_list_item( feat_list_1, int_curve_feat );

if (rez) report_error( rez, "UF_MODL_put_list_item" );

rez= UF_MODL_ask_object_feat( D_plane, &D_plane_feat);

rez= UF_MODL_put_list_item( feat_list_2, D_plane_feat );

if (rez) report_error( rez, "UF_MODL_put_list_item" );

rez= UF_CURVE_ask_feature_curves( int_curve_feat,

&count, &Curve );

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

ВСЕ ОТКЛИКНУВШИМСЯ - БОЛЬШОЕ СПАСИБО.

ОСОБАЯ БЛАГОДАРНОСТЬ IgP.

Проблема решилась следующим кодом:

UF_CURVE_section_from_planes (&section_data, &datum_plane_data, &section_curves_tag);
int count;
tag_t *Curve;
UF_CURVE_ask_feature_curves( section_curves_tag,&count, &Curve );

int irc;
int ni;
int i;
double *pts;
irc=UF_MODL_ask_curve_points(Curve[0],0,0,1,∋,&pts);

Проблема у меня была в неиспользовании UF_CURVE_ask_feature_curves( section_curves_tag,&count, &Curve );

PS. Ну не знал я как с этим работать.

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

Ребята всем привет!

Помогите разобраться с проблемой.

Мне необходимо по набору сплайнов построить поверхность.

Я пользуюсь функцией
 UF_MODL_create_thru_curves - строю по полученным выше сплайнам поверхность
 

Пример кода:

 

// Построение поверхности по сплайнам
void Insert_SurfSpl ( tag_t  *Primary_tag, int n_Prim, tag_t *Surf_tag)
{
    UF_STRING_t  primary, spine;
    int i,
        alignment = 1,
        body_type = 0,
        c_flag[2]  = { 0,0 }, c_num[2] = {0,0},
        patch = 1,
        vdegree = 3,
        vstatus = 0;
    double
        tol[3], value[6];
    tag_t
        *c_face[2] = { NULL, NULL };

    UF_MODL_ask_distance_tolerance(&tol[0]);
    UF_MODL_ask_angle_tolerance(&tol[1]);
    tol[2] = 0.02;
    for (i=0; i<6; i++)
    {
        value = 0.0;
    }

    UF_MODL_init_string_list (&primary);
    UF_MODL_init_string_list (&spine);

    UF_MODL_create_string_list(n_Prim,n_Prim,&primary); /* n_Prim strings with 1 curve each */

    primary.num = n_Prim; /* number of strings for primary curve */
    for ( i = 0; i < n_Prim; i++)
    {
        primary.dir = 1;
        primary.string = 1;    /* number of entities in the prim string */
        primary.id = Primary_tag;
    }

    UF_MODL_create_thru_curves ( &primary, &spine, &patch,
          &alignment, value, &vdegree, &vstatus, &body_type, UF_NULLSIGN,
          tol, *c_face, c_flag, Surf_tag);

    UF_MODL_free_string_list(&primary);
    UF_MODL_free_string_list(&spine);
}

 

в NX2 все работало, этот же код, поверхность строилась.

Теперь мне нужно, чтобы тот же модуль  работал в NX9, я транслирую в Visual Studio 2012 c NXOpen9.0

При выполнении программы на этой функции выдает такую ошибку:

 

Необработанное исключение по адресу 0x000007FECA5375D0 (libufunx.dll) в ugraf.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x0000000000000000.

 

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

ругает именно на функцию

UF_MODL_create_thru_curves ( &primary, &spine, &patch,
          &alignment, value, &vdegree, &vstatus, &body_type, UF_NULLSIGN,
          tol, *c_face, c_flag, Surf_tag);

я думаю дело в параметрах, потому что при переходе на 64-разрядную платформу во многих функциях NXOpen-API я меняла типы, может кто пользовался этой функцией бросьте кусок программы, где идет к ней обращение

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Danil89nur
      Доброе время суток. Столкнулся с проблемой на новой работе. Много деталей у который в свойствах отсутствует раздел "Материал" и приходится каждый раз вручную заходить туда, создавать раздел и выбирать там ""SW-Material@Name.SLDPRT". Возможно кто-то знает, либо сможет помочь с написанием простенького макроса, при нажатии на который в свойствах детали будет создаваться необходимый раздел и в нем сразу написан выбранный материал (желательно, чтоб там было указано сразу наименование материала, а не формула для его получения ""SW-Material@Name.SLDPRT"). Пытался самостоятельно через ChatGPT, но так как в програмировании я 0, то ничего не получилось)
    • Bot
      Коллеги, Благодарю вас за интерес к проекту электронной энциклопедии в области инженерного программного обеспечения PLMpedia, который более 15 лет развивался группой компаний ЛЕДАС. Представленный ниже скриншот передаёт содержание и структуру базы данных энциклопедии, накопленной за эти годы: именно такую начальную страницу, можно было до сегодняшнего дня увидеть, придя по адресу https://plmpedia.ru/ В последние несколько лет ЛЕДАС особенно интенсивно и результативно вкладывает все ресурсы в развитие своего основного бизнеса: см. ниже «О компании ЛЕДАС». Сегодня я с некоторым сожалением констатирую, что у компании ЛЕДАС более нет возможности отвлекать ресурсы своих сотрудников на некоммерческий (фактически волонтерский) проект PLMpedia. Вся база данных ресурса может быть безвозмездно передана любому юридическому или физическому лицу с единственным условием: наш преемник должен будет публично объявить о состоявшейся передаче и взятии на себя [...] View the full article
    • gudstartup
      @NordCom  у вас наверное это так происходит читайте этот раздел itnc_530.pdf
    • fenics555
      интересный индус. А нового то чего?
    • gudstartup
      откудова качаете мне интересно?
    • ДОБРЯК
      Совсем забыл про собственные вектора       собственный тон частота           0.013                        1   Расчет собственных форм и частот   1         1   7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   1         2   7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00       собственный тон частота       15910.75                         2   Расчет собственных форм и частот   1         1   7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   1         2  -7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00        
    • gudstartup
      так я это и написал
    • Viktor2004
      Обычно если сразу по всем осям, тогда это вентилятор БП. А на старых БП вентилятор может быть и на плате управления
    • gudstartup
      @NordCom какого года чпу? посмотрим более древние руководства а в принципе надо setup.elf запустить или у вас с windows?
    • Deunet
      Спасибо Вам! Но на пикчер ссылки не рабочие, пришлите пожалуйста, если у вас есть.
×
×
  • Создать...