|
UG按一定的规则访问曲线上的点还有信息输出练习
好久没发过帖子了,不知道自己论文写完以后还会不会搞UG的二次开发,不过自己学习的一些内容还是做一些分享把。以后说不定会去试试solidworks的二次开发。这篇主要介绍UF_MODL_ask_curve_points()
int UF_MODL_ask_curve_points
(
tag_t curve_id, //曲线ID
double ctol, //弦高误差,如果是0就忽略
double atol, //弧度误差,如果是0就忽略
double stol, //最大步长,如果是0就忽略
int * numpts, //点的数目
double * * pts //点坐标的一维数组,xyz,xyz,xyz
)
另外,对UG中输出信息的方式,先记录两种,以后再慢慢做总结。
第一种:
UF_CALL(UF_UI_open_listing_window());//打开消息输出窗口
sprintf(buffer,"The points are: %f\n",pts);//将消息压入到buffer中,buffer是一个字符串数组,作为输出缓存
UF_CALL(UF_UI_write_listing_window(buffer)); //将buffer中的信息打印到信息框中去
还有用到的就是
sprintf(message, " section curves feature tag is %d\n", section_curves_feature);
uc1601(message,1); 输出信息
下面的程序是建立一个圆弧,并输出按弦高误差来输出圆弧上的几个点。
#include <uf.h>
#include <uf_modl.h>
#include <uf_curve.h>
#include <uf_csys.h>
#include <uf_obj.h>
#include <stdio.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)
{
double ctol = 0.07612046748871;
double atol = 0.0;
double stol = 0.76536686473018;
double *pts;
char buffer[256];//输出缓存
int numpts, i;
tag_t arc, wcs_tag;
UF_CURVE_arc_t arc_coords;
UF_CALL(UF_CSYS_ask_wcs(&wcs_tag));
UF_CALL(UF_CSYS_ask_matrix_of_object(wcs_tag,
&arc_coords.matrix_tag));
arc_coords.start_angle = 0.0;
arc_coords.end_angle = PI;
arc_coords.arc_center[0] = 0.0;
arc_coords.arc_center[1] = 0.0;
arc_coords.arc_center[2] = 0.0;
arc_coords.radius = 1.0;
UF_CURVE_create_arc(&arc_coords, &arc);
UF_MODL_ask_curve_points(arc,ctol,atol,stol,
&numpts, &pts);
for(i = 0; i < 3 * numpts; i++)
{ UF_CALL(UF_UI_open_listing_window());
sprintf(buffer,"The points are: %f\n",pts);
UF_CALL(UF_UI_write_listing_window(buffer));
}
UF_free(pts);
}
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);
}
|
-
程序结果
|