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

Как взять точки у объекта?


Gleb_Brain

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



Сам прочти свое сообщение еще раз. Какие точки? С какого объекта? Точка - тоже объект Unigraphics? сколько точек можно взять с точки?! Поверхность - с нее пару миллионов точек можно взять, можно и больше.

:confused_1:

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

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

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

А как взять точки у сетки, которая наложена на объект? Сетку я получил след. образом: Симуляция проектирования -> 3d тетраэдаьная сетка, тип CTETRA(4)

При разбитие объекта создается симуляция, и у меня не получается к ней обратиться.

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

Спс valeo-ua.

Да, отчет выводит всю нужную мне информацию, нажимаю Ctrl + I, выделяю объект, ОК, получаю инфу ввиде текстового файла.

Можно ли получить эту же инфу програмно?

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

А как взять точки у сетки, которая наложена на объект? Сетку я получил след. образом: Симуляция проектирования -> 3d тетраэдаьная сетка, тип CTETRA(4)

При разбитие объекта создается симуляция, и у меня не получается к ней обратиться.

Если Тебе нужны просто Точки внутри объекта то насчитай их сам

int UF_MODL_ask_point_containment

(

double point [ 3 ] , 

tag_t body, 

int * pt_status 

)



int UF_MODL_ask_bounding_box

(

tag_t object, 

double bounding_box [ 6 ] 

)

Или поэффективнее

int UF_MODL_trace_a_ray

(

int num_bodies, 

tag_t * bodies, 

double origin [ 3 ] , 

double direction [ 3 ] , 

double transform [ 16 ] , 

int num_desired, 

int * num_results, 

UF_MODL_ray_hit_point_info_p_t * hit_list 

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

Спасибо.

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

Все это есть в "Информация" -> "Объект (Ctrl+I)".

Могу конечно всю эту информацию взять из тхт после его создания, но в конечном счете это будет гемор для пользователя (ему нужно будет выделить все части объекта, создать отчет, сохранить его, потом указать его в моей программе)

Может эта вся информация сразу(во время создания объекта) где-то сохраняется?

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

int UF_MODL_trace_a_ray

(

int num_bodies, 

tag_t * bodies, 

double origin [ 3 ] , 

double direction [ 3 ] , 

double transform [ 16 ] , 

int num_desired, 

int * num_results, 

UF_MODL_ray_hit_point_info_p_t * hit_list 

)

Я чет вообще не пойму что вписывать в эту функцию чтобы получить точки

я переделываю исходник <noindex>Gabarit'a</noindex>, эта програма берет габариты объекта, в ней есть функция взятия габарита, которую я и дополняю:


int Get_all_vertices(tag_t facet_model,double *min_vertex,double *max_vertex,bool first) 

 {

// Функция возврашает максимальную и минимальную точки

// фасеточной модели, при установленном first в true

// функция присваиваит переменным min_vertex и max_vertex 

// значения первой найденной точки.

   int		  nomer_facets=0; 

   int		  max_vertices_in_facet=0;

   double	  (* vertices_in_facet)[3];

   int		  facet_nom;

   int		  facet_no = 0;

   int		  i;

   int		  required_array_size;

   UF_FACET_ask_n_facets_in_model(facet_model, &nomer_facets ); // Взять количество facet в модели

   UF_FACET_ask_max_facet_verts( facet_model, &max_vertices_in_facet );	// Спросить максимально возможное количество вершин в каждой из facets

   required_array_size = 3*max_vertices_in_facet*sizeof(double); // Подсчетать количество элементов

   // массива для точек

   vertices_in_facet = (double(*)[3])malloc(required_array_size); // Резервирование места под массив

   facet_nom = UF_FACET_NULL_FACET_ID;

   UF_FACET_cycle_facets(facet_model,&facet_nom );// Начать перебор всех facets

   while ( facet_nom != UF_FACET_NULL_FACET_ID )

	 {

		  // здесь цикл идет по всем фасетам находит макс и мин вершины..

		 }

   free( vertices_in_facet );// Очистка памяти

   return 0;

}

Как мне ее изменить так, чтобы получить список точек объекта?

я уже попробовал сделать вот так:

UF_FACET_cycle_facets(facet_model,&facet_nom );// Начать 



перебор всех facets

	UF_FACET_ask_max_facet_verts( facet_model, 



&max_vertices_in_facet );

	required_array_size = 3*max_vertices_in_facet*sizeof(double); // 



Подсчетать количество элементов

	// массива для точек

	vertices_in_facet = (double(*)[3])malloc(required_array_size); // 



Резервирование места под массив

	facet_nom = UF_FACET_NULL_FACET_ID;

	UF_FACET_cycle_facets(facet_model,&facet_nom );// Начать 



перебор всех facets



	ofstream osss("I:\\a\\vert_points_sss.txt");

	osss <<"Name facet model: "<<facet_model<<"\n";

	for (j=0;j<=facet_nom;j++)

	{

		osss <<"Nomer faceta: "<<&facet_nom<<"\n";

		osss <<"Vertices 1 faceta: "<<vertices_in_facet[0]<<"\n";

		osss <<"Vertices 2 faceta: "<<vertices_in_facet[1]<<"\n";

		osss <<"Vertices 3 faceta: "<<vertices_in_facet[2]<<"\n";

		osss <<"Vertices 4 faceta: "<<vertices_in_facet[3]<<"\n";

		UF_FACET_cycle_facets( facet_model, &facet_nom );

	}	

osss.close();

но в файл вывело фигню какаю-то:

Name facet model: 18524

Nomer faceta: 0022ECD0

Vertices 1 faceta: 0FE49C30

Vertices 2 faceta: 0FE49C48

Vertices 3 faceta: 0FE49C60

Vertices 4 faceta: 0FE49C78

Nomer faceta: 0022ECD0

Vertices 1 faceta: 0FE49C30

Vertices 2 faceta: 0FE49C48

Vertices 3 faceta: 0FE49C60

Vertices 4 faceta: 0FE49C78

Nomer faceta: 0022ECD0

Vertices 1 faceta: 0FE49C30

Vertices 2 faceta: 0FE49C48

Vertices 3 faceta: 0FE49C60

Vertices 4 faceta: 0FE49C78

Nomer faceta: 0022ECD0

Vertices 1 faceta: 0FE49C30

...

и тд до 0022ECD0 = 2288848

но чет получилось не совсем то что я хотел :(

Объясните пожалуйста как правильно работаь с этой функцией UF_MODL_trace_a_ray()

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

но чет получилось не совсем то что я хотел :(

Объясните пожалуйста как правильно работаь с этой функцией UF_MODL_trace_a_ray()

Функция имеет на входе массив твердых тел

Матрицу трансформации - можно взять единичную если все в одном файле

Луч заданный точкой и вектором

Предельное число точек пересечения с гранями 0 - если все

Н выходе имеет координаты пересечений луча и граней твердых тел и вектора нормалей также

Зная габариты тела или тел

легко организовать двойной цикл по любой из проекций габаритов тел

гарантированно покрыв тела плоскопаралельным массивом лучей

Получив точки пересечения лучей с нормалями для каждого луча можно найти

интермалы которые будут внутри тела или тел

Их можно разбить получив множество точек лежащий внутри тела (тел)

Очевидно что этом метод будет работать намного быстрее

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

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

внутреннему объему твердого тела

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

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

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

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

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

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

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

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

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

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

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




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