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#
作者:
liyupeng1985
时间:
2009-7-13 21:09
用遍历的话可以找到曲线的ID吗?还是必须要用那个悬着的对话框呢。
2#
作者:
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://t.icax.org/)
Powered by Discuz! X3.3