iCAx开思网

标题: 请教大家怎样才能得到一个已有曲线的id呢?急 [打印本页]

作者: liyupeng1985    时间: 2009-7-13 20:09
标题: 请教大家怎样才能得到一个已有曲线的id呢?急
请教大家怎样才能得到一个已有曲线的id呢?急。

因为要使用UF_MODL_ask_curve_points()

谢谢大家了。
作者: zjs    时间: 2009-7-13 20:52
你必须先选择曲线吧。或者根据条件地曲线进行筛选。
作者: liyupeng1985    时间: 2009-7-13 21:06
用什么选呢?UF_UI_select_with_class_dialog()吗?

我想在对话框下用的话可以吗?刚才试了下好像不行呢?那里边的UF_CALL是怎么回事呢?

2# zjs
作者: liyupeng1985    时间: 2009-7-13 21:09
用遍历的话可以找到曲线的ID吗?还是必须要用那个悬着的对话框呢。

2# zjs
作者: liyupeng1985    时间: 2009-7-13 21:36
我找了一个别人写的函数,就是下面的这个,下面的我已经试了可以满足要求是正确的。现在我想把它的功能移植到一个对话框的函数中就是按一个按钮后,再弹出下面的特征选着的对话框,应该怎么改才好呢?

#include <stdio.h>
#include <uf.h>
#include <uf_modl.h>
#include <uf_curve.h>
#include <uf_csys.h>
#include <uf_object_types.h>
#include <uf_ui.h>
#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 *message = "Select Spline";
char buffer[UF_UI_MAX_STRING_LEN];
UF_UI_selection_options_t opts;
UF_UI_mask_t mask = {UF_spline_type, 0, 0};
int response;
tag_p_t objects;
int j,count,nn;
int off = 0;
int numpts;
double *pts;
double point[3], parm, curve_pnt[3], pnt[3];
double tangent[3], p_norm[3], b_norm[3], torsion, rad_of_cur;
opts.other_options = 0;
opts.reserved = NULL;
opts.num_mask_triples = 1;
opts.scope = UF_UI_SEL_SCOPE_WORK_PART_AND_OCC;
opts.mask_triples = &mask;
if(!UF_CALL(UF_UI_select_by_class( message,&opts,&response,&count,&objects)))
{
  UF_CALL(UF_UI_open_listing_window()); //打开信息窗口
  if (objects != NULL)
  {
   for (j=0; j < count; j++)
   {
    UF_DISP_set_highlight(objects[j],off);
    //按照弦高误差离散曲线
    UF_MODL_ask_curve_points(objects[j], 0.1, 0, 0, &numpts, &pts);
    sprintf(buffer, "\ncurve %d: total points:%d\n", j, numpts);
    UF_UI_write_listing_window(buffer); //离散后总共得到numpts 个离散点,输出到信息窗口中。注意,得到的离散点是按x,y,z 的顺序存储在一维数组pts 中的。
     for (nn=0; nn<numpts; nn++)
     {
      point[0] = pts[3*nn];
      point[1] = pts[3*nn+1];
      point[2] = pts[3*nn+2];
      //根据点的坐标信息获取其在曲线的参数值
      UF_MODL_ask_curve_parm(objects[j], point, &parm, curve_pnt);
      sprintf(buffer, "point data:\t%.3f\t%.3f\t%.3f\n", point[0], point[1], point[2]);
      UF_UI_write_listing_window(buffer);
      sprintf(buffer, "point parm:%.3f\n", parm);
      UF_UI_write_listing_window(buffer);
      //根据点在曲线上的参数值获取曲线上该点处的切矢,主法向,副法向等参数。
      UF_MODL_ask_curve_props(objects[j], parm, pnt, tangent, p_norm,
       b_norm, &torsion, &rad_of_cur);
      sprintf(buffer, "tangent:\t%.3f\t%.3f\t%.3f\n", tangent[0], tangent[1],
       tangent[2]);
      UF_UI_write_listing_window(buffer);
      sprintf(buffer, "p_norm:\t%.3f\t%.3f\t%.3f\n", p_norm[0], p_norm[1],
       p_norm[2]);
      UF_UI_write_listing_window(buffer);
      sprintf(buffer, "b_norm:\t%.3f\t%.3f\t%.3f\n", b_norm[0], b_norm[1],
       b_norm[2]);
      UF_UI_write_listing_window(buffer);
      sprintf(buffer, "torsion:\t%.3f\nrad_of_cur:\t%.3f\n", torsion, rad_of_cur);
      UF_UI_write_listing_window(buffer);
     }
   }
  }
}
UF_free(objects);
}
/*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);
}




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3