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

Получение площади поверхности с помощью UF_SF_face_ask_area


gk3d

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

пытаюсь получить площадь поверхности с помощью функции

UF_SF_face_ask_area

NX с завидной регулярностью выдает ошибку:

an operation was attempted on an invalid or unsuitable om object

face_list - список поверхностей.

count_face - их количество.

for(j=0; j<count_face; j++) // перебираем грани

{

	double area = 0;

	result = UF_SF_face_ask_area(face_list->eid, &area); // ДОЛЖНЫ ПОЛУЧИТЬ ПЛОЩАДЬ.

	

	if (result)

	{	report_error(result, "AREA ERROR");  }

	else

	{	printf("area -  %d \n", area);  }



	// выводятся атрибуты граней.

	while (!(UF_ATTR_cycle(face_list->eid, &indx, UF_ATTR_any, title, &att)) && (indx != 0))

	{

	switch ( att.type )

	{

		case UF_ATTR_integer: sprintf(mstr, "%s = %d (INTEGER)\n", title, att.value.integer);	break;

		case UF_ATTR_real:	sprintf(mstr, "%s = %f (FLOATING POINT)\n", title,att.value.real);	break;

		default:	break;

		}

		fprintf(fn, "	Атрибут %s -  %d грани\n", title, j+1);

	}





	face_list = face_list->next;

}
у меня было предположение, что face_list->eid как-то неверно вычисляется

но.

этот же параметр используется при получении атрибутов (в цикле ниже).

а атрибуты выводятся корректно.

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


пытаюсь получить площадь поверхности с помощью функции

UF_SF_face_ask_area

NX с завидной регулярностью выдает ошибку:

an operation was attempted on an invalid or unsuitable om object

UF_SF -
Open C API interface to the Scenario product

int UF_SF_face_ask_area

(

tag_t cae_tag,

double * pd_area

)

Пользуйтесь

int UF_MODL_ask_mass_props_3d

(

tag_t * objects,

int num_objs,

int type,

int units,

double density,

int accuracy,

double acc_value [ 11 ] ,

double mass_props [ 47 ] ,

double statistics [ 13 ]

)

tag_t * objects Input num_objs

Array of solid or sheet body identifiers,

Solid bodies for analysis type 1,

Sheet bodies for analysis types 2 and 3

int num_objs Input Number of objects

int type Input Type of 3D Analysis

1 = Solid Bodies

2 = Thin Shell - Sheet Bodies

3 = Bounded by Sheet Bodies

int units Input Units of mass and length

1 = Pounds and inches

2 = Pounds and feet

3 = Grams and centimeters

4 = Kilograms and meters

double density Input Density - Mass per unit volume (Mass per unit area for thin

shell). Not used for solid body analysis; for solid bodies

the densities of the solid bodies are used in the analysis

and the density of the combined set of bodies is output

in the mass properties array (mass_props[46]).

int accuracy Input 1 = Use Accuracy

2 = Use Relative Tolerances

double acc_value [ 11 ] Input [0] = Accuracy value between 0.0 and 1.0

if accuracy = 1

[1-10] not used if accuracy = 1

[0] = Relative Tolerance for Area if accuracy = 2

[1] = Relative Tolerance for Volume

[2-4] = Relative Tolerances for First Moments (centroidal)

[5-7] = Relative Tolerances for Moments of Inertia

(centroidal)

[8-10]= Relative Tolerances for Products of Inertia

(centroidal)

double mass_props [ 47 ] Output Mass properties

[0] = Surface Area

[1] = Volume (0.0 For Thin Shell)

[2] = Mass

[3-5] = Center Of Mass (COFM), WCS

[6-8] = First Moments (centroidal)

[9-11] = Moments Of Inertia, WCS

[12-14] = Moments Of Inertia (centroidal)

[15] = Spherical Moment Of Inertia

[16-18] = Inertia Products, WCS

[19-21] = Inertia Products (centroidal)

[22-30] = Principal Axes, WCS

[31-33] = Principal Moments (centroidal)

[34-36] = Radii Of Gyration, WCS

[37-39] = Radii Of Gyration (centroidal)

[40] = Spherical Radius Of Gyration

[41-45] = Unused

[46] = Density

double statistics [ 13 ] Output Errors are Estimates of the Relative Tolerances

achieved if accuracy = 2; otherwise

+/- range errors are given

[0] = Error For Surface Area

[1] = Error For Volume

[2] = Error For Mass

[3] = Radius Of Error Sphere

[4] = Error For Moment XC

[5] = Error For Moment YC

[6] = Error For Moment ZC

[7] = Error For Moment Of Inertia XC

[8] = Error For Moment Of Inertia YC

[9] = Error For Moment Of Inertia ZC

[10] = Error For Product Of Inertia XCYC

[11] = Error For Product Of Inertia YCZC

[12] = Error For Product Of Inertia XCZC

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

посмотрел \ поковырялся...

проблема не очень-то решается этой функцией..

дело во входных параметрах:

tag_t * Array of solid or sheet body identifiers

а я хочу найти площадь поверхности\грани какой-то.

потому, когда я пытаюсь в UF_MODL_ask_mass_props_3d передать tag_t поверхности он начинает ругаться и ничего считать не хочет...

вопрос:

может есть какая-нить еще функция?

или же как-то можно эту самую поверхность конвертировать в листовое тело?

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

посмотрел \ поковырялся...

проблема не очень-то решается этой функцией..

дело во входных параметрах:

tag_t * Array of solid or sheet body identifiers

а я хочу найти площадь поверхности\грани какой-то.

потому, когда я пытаюсь в UF_MODL_ask_mass_props_3d передать tag_t поверхности он начинает ругаться и ничего считать не хочет...

вопрос:

может есть какая-нить еще функция?

или же как-то можно эту самую поверхность конвертировать в листовое тело?

Попробуйте выделить грань (extract face, смотреть в wave geometry linked) - получиться листовое тело (sheet body). Потом удалить. Как вариант сделать метку отмены, выделить грань, посчитать площадь, отмена (я так делал)
Ссылка на сообщение
Поделиться на других сайтах

посмотрел \ поковырялся...

проблема не очень-то решается этой функцией..

дело во входных параметрах:

tag_t * Array of solid or sheet body identifiers

а я хочу найти площадь поверхности\грани какой-то.

потому, когда я пытаюсь в UF_MODL_ask_mass_props_3d передать tag_t поверхности он начинает ругаться и ничего считать не хочет...

вопрос:

может есть какая-нить еще функция?

или же как-то можно эту самую поверхность конвертировать в листовое тело?

int UF_MODL_extract_face

(

tag_t face,

int mode,

tag_t * sheet_body

)

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

большое спасибо, nut888, avd :)

помогло.

использовал примерно следующее ( вдруг кому интересно будя):

tag_t my_f[1];

UF_MODL_extract_face(face_list->eid, 0, &my_f[0]);

result = UF_MODL_ask_mass_props_3d(my_f, 1, 3,   3, 1.0, 1, acc_val, massprop, massprop_stat);
еще раз.

большое спасибо :)

*там, вроде бы, надо будет еще потом удалить тело созданное.

но с этим я, думаю, как-нить разберусь.

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

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

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

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

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

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

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

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

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

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

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




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