点击查看详细介绍

UF_MODL_ask_body_boundaries() 函数的参数解释说明、函数详细用法,以及实例代码演示

misnn 8年前 900 0

购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008  QQ号:85585969  


函数结构:
UF_MODL_ask_body_boundaries
(
tag_t body_tag,
int * num_boundaries,
int * * num_edges,
tag_t * * edge_tags
)

函数说明:
返回片体的边界边缘的数量,数在每个这些边界的边缘,并在标签中的每个边缘边界。这些边缘结合仅在输入发现单个面片体。阵列num_edges由边界数尺寸发现(例如包括孔的边界)。阵列中的每个元件包含在相应的边界的边的数目。该阵列edge_tags的尺寸足够大,可以容纳所有的标签在所有的边界的所有的边。属于边界边缘1阵列中的第一家上市,紧跟着的边缘边界2,等等。如果BODY_TAG是一个发生,则返回的值是相对于所述发生,而不是该原型。

函数参数:
第1个参数为输入:
body_tag代表参数变量,tag_t 为输入参数类型,片体的标签,以检查边界

第2个参数为输出:
输出int * 整数型的参数,参数的变量格式为num_boundaries,发现边界数

第3个参数为输出:
输出int * * 整数型的参数,参数的变量格式为num_edges,在每个边界边数阵中。这必须通过调用UF_free释放。

第4个参数为输出:
edge_tags代表参数变量,tag_t * * 为输出参数类型,在每个边界边标记的数组。这必须通过调用UF_free释放。

UF_MODL_ask_body_boundaries函数实例代码演示:
下面的例子中,需要一个包含片体的一部分。 这个程序使用UF_UI_select_single得到的片材的身体标记身体再写入信息窗口的报告。

#include <stdlib.h>
#include <stdio.h>
#include <uf.h>
#include <uf_disp.h>
#include <uf_modl.h>
#include <uf_ui.h>
#include <uf_object_types.h>
static void get_body_type(tag_t body);
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
  if (irc)
  {
     char    messg[133];
     printf("%s, line %d:  %s\n", file, line, call);
     (UF_get_fail_message(irc, messg)) ?
       printf("    returned a %d\n", irc) :
       printf("    returned error %d:  %s\n", irc, messg);
  }
  return(irc);
}
static void do_ugopen_api(void)
{
  char buffer[UF_UI_MAX_STRING_LEN+1];
  double cursor[3];
  int err = 0, response =2;
  int num_bnd=0, *num_edges, i, count=0;
  UF_UI_selection_options_t opts;
  UF_UI_mask_t mask = {UF_solid_type,0,UF_UI_SEL_FEATURE_BODY};
  tag_t body, view, *edge_tags;
  opts.num_mask_triples = 1;
  opts.mask_triples = &mask;
  opts.scope = UF_UI_SEL_SCOPE_WORK_PART;  UF_UI_open_listing_window();
  response = 4;
  do
  {
  err = UF_UI_select_single("Select a solid body", &opts,
                            &response, &body,
                            cursor, &view);
  if((response == 4) || (response == 5))
  {
    get_body_type(body);
  }
  if(!err && response !=1 && response !=2)
  {/* If there's no error and response is not CANCEL or BACK */
UF_CALL(UF_MODL_ask_body_boundaries(body,&num_bnd,&num_edges,&edge_tags));
    if(num_bnd != 0)
    {
      for(i = 0; i < num_bnd; i++)
      {
        sprintf(buffer, "num_edges[%d] = %d\n", i, num_edges[i]);
        UF_UI_write_listing_window(buffer);
        count += num_edges[i];
      }
      sprintf(buffer,"\nThe total number of edges is: %d\n\n",count);
      UF_UI_write_listing_window(buffer);
      for(i = 0; i < count; i++)
      {
        sprintf(buffer, "edge_tags[%d] = %d\n", i, edge_tags[i]);
        UF_UI_write_listing_window(buffer);
      }
      UF_free(edge_tags);
      UF_free(num_edges);
      count = 0;
    }
    else
    {
      sprintf(buffer,"The number of boundaries was: %d\n",num_bnd);
      UF_UI_write_listing_window(buffer);
    }
  }
  UF_CALL(UF_DISP_set_highlight(body,0));
  }while((response == 4) || (response == 5));
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
  if (!UF_CALL(UF_initialize()))
  {
    do_ugopen_api();
    UF_CALL(UF_terminate());
  }
}
int ufusr_ask_unload(void)
{
  return (UF_UNLOAD_IMMEDIATELY);
}
static void get_body_type(tag_t body)
{
  int err, type;
  char err_msg[MAX_LINE_SIZE+1];
  char buffer[UF_UI_MAX_STRING_LEN+1];
  err = UF_MODL_ask_body_type(body,&type);
  if(err)
  {
    UF_get_fail_message(err,err_msg);
    sprintf(buffer, "ERROR in ask body type: %s\n", err_msg);
    UF_UI_write_listing_window(buffer);
  }
  else
  {
    switch(type)
    {
      case UF_MODL_SOLID_BODY:
        UF_UI_write_listing_window("\nThis is a solid body.\n");
        break;
      case UF_MODL_SHEET_BODY:
        UF_UI_write_listing_window("\nThis is a sheet body.\n");
        break;
      case 0:
        UF_UI_write_listing_window("\nThis was not a solid or sheet body.\n");
        break;
      default:
        UF_UI_write_listing_window("\nUnacceptable input, terminating...\n");
        break;
    }
  }
}


0

最新回复 (0)
请登录后发表新帖