点击查看详细介绍

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

misnn 9年前 983 0

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


函数结构:
UF_CURVE_ask_offset_direction_2
(
UF_STRING_p_t input_curves,
double offset_direction_vector [ 3 ],
double draft_direction_vector [ 3 ],
double base_point [ 3 ]
)

函数说明:
返回的偏移方向的矢量和用于通风方向矢量曲线的字符串。这些载体定义的正方向。 如果你想在相反的方向偏移,则否定的值距离,高度草案,和/或角度草案。曲线的输入字符串一定是共面。

函数参数:
第1个参数为输入:
input_curves代表参数变量,UF_STRING_p_t 为输入参数类型,指向主字符串(分= 1,最大值=1)INT的String []每个主串段曲线总数/草图ID(分= 1,最大值=402)INT目录的曲线表结构INT NUM总数[]每个主串1=开始的方向结束-1=年底开始tag_t ID []主要使用曲线和UF_MODL_init_string_list的UF_MODL_create_string_list标识符创建输入字符串。使用UF_MODL_free_string_list创建字符串后释放内存。

第2个参数为输出:
输出double 双精度类型的参数,参数的变量格式为offset_direction_vector [ 3 ],正偏移方向

第3个参数为输出:
输出double 双精度类型的参数,参数的变量格式为draft_direction_vector [ 3 ],高度积极的方向草案

第4个参数为输出:
输出double 双精度类型的参数,参数的变量格式为base_point [ 3 ],向量基点

UF_CURVE_ask_offset_direction_2函数实例代码演示:
以下是由示例程序所产生的输出。输入曲线是灰色和由此产生的曲线是绿色的。
[quote]
#include <stdio.h>
#include <uf.h>
#include <uf_defs.h>
#include <uf_modl.h>
#include <uf_part.h>
#include <uf_curve.h>
#include <uf_csys.h>
#include <uf_vec.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 tol[3]={0.1,0.1,0.1};
double value[6], base_point[3];
double direction_vector[3],draft_direction_vector[3],dot = 1;
double x_direction[3]={-1,0,0};
double step = 1.0;
char *part_name="sample";
char distance_str[] = {"0.25"};
char neg_distance_str[] = {"-0.25"};
int units = UF_PART_ENGLISH,num_curves,i;
int align =1,end_point=0,body_type=0, edge_type;
tag_t part_tag,arc1_tag,arc2_tag,face_tag,
sheet_tag,offset_tag,*offset_curves;
tag_t wcs;

UF_STRING_t guide,spine,input_string;

UF_CURVE_arc_t arc_coords;
uf_list_p_t edge_list,face_list;

UF_CURVE_offset_data_t offset_data, ask_offset_data;
UF_CURVE_offset_distance_data_t offset_distance1;
/* Open a new part */

UF_CALL(UF_PART_new(part_name, units, &part_tag));

/* Create 2 arcs for guide strings for ruled surface */

UF_CALL(UF_CSYS_ask_wcs(&wcs));
UF_CALL(UF_CSYS_ask_matrix_of_object(wcs,
&arc_coords.matrix_tag));
arc_coords.start_angle = 78.0 * (PI/180);
arc_coords.end_angle = 101.0 * (PI/180);
arc_coords.arc_center[0] = 0.5;
arc_coords.arc_center[1] = -2.4750;
arc_coords.arc_center[2] = 0.0;
arc_coords.radius = 2.525;

UF_CALL(UF_CURVE_create_arc(&arc_coords,&arc1_tag));

arc_coords.arc_center[0] = 0.5;
arc_coords.arc_center[1] = -1.9750;
arc_coords.arc_center[2] = 0.0;
UF_CALL(UF_CURVE_create_arc(&arc_coords,&arc2_tag));
UF_MODL_create_string_list(2,2,&guide);
guide.num = 2;
guide.string[0] = 1;
guide.dir[0] = 1;
guide.id[0] = arc1_tag;
guide.string[1] = 1;
guide.dir[1] = 1;
guide.id[1] = arc2_tag;
spine.num = 0;

/* Create ruled surface */

UF_CALL(UF_MODL_create_ruled(&guide,
&spine,
&align,
value,
&end_point,
&body_type,
UF_NULLSIGN,
tol,
&sheet_tag));
UF_MODL_free_string_list(&guide);
/* Get the tag to the face */

UF_CALL(UF_MODL_ask_body_faces(sheet_tag,
&face_list));

UF_CALL(UF_MODL_ask_list_item(face_list,
0,
&face_tag));
UF_CALL(UF_MODL_delete_list(&face_list));

/* Get the edges of the face */

UF_CALL(UF_MODL_ask_face_edges(face_tag,
&edge_list));

/* Set up a string for the input curves. Find the two linear
edges */
/* opposite the guide strings of the ruled surface to use in
the string. */

UF_MODL_create_string_list(1,8,&input_string);

input_string.num = 1;
input_string.string[0] = 4;
input_string.dir[0] = 1;
input_string.id[0] = arc1_tag;
input_string.id[1] = arc2_tag;
num_curves = 2;
for(i = 0; i < 4; i++)
{
UF_MODL_ask_list_item(edge_list,
i,
&input_string.id[num_curves]);

UF_MODL_ask_edge_type(input_string.id[num_curves],
&edge_type);
if(edge_type == UF_MODL_LINEAR_EDGE)
num_curves++;
}
UF_MODL_delete_list(&edge_list);
/* Compute the direction vectors of the string */
UF_CALL(UF_CURVE_ask_offset_direction(&input_string,
direction_vector,
draft_direction_vector,
base_point));

/* Compute the dot product between the direction vector and the
+X vector */
/* This will be used later to determine if we will use a
positive or
negative */
/* offset distance. */

UF_VEC3_dot(direction_vector,
x_direction,
&dot);


/* Set up the structures to define a non-associative type of
offset */
/* curve. This will use a distance and have a trim method of
fillet. */

offset_data.offset_type = UF_CURVE_OFFSET_DISTANCE_FILLET;
offset_data.input_curves = &input_string;
offset_data.approximation_tolerance = step;
UF_MODL_ask_distance_tolerance(&offset_data.string_tolerance);
offset_data.offset_def.distance_type1 = &offset_distance1;
offset_distance1.distance = distance_str;
if (dot >= 0)
{
offset_distance1.distance = distance_str;
}
else
{
offset_distance1.distance = neg_distance_str;
}

/* Create the offset curves. */


UF_CALL(UF_CURVE_create_offset_curve(&offset_data,
&num_curves,
&offset_curves));

UF_free(offset_curves);

/* Set up the structures to define an associative type of
offset curve. This will use a distance and have a trim
method of extended tangents. Only need to change the type,
all other parameters were set up previously.
*/

offset_data.offset_type = UF_CURVE_OFFSET_DISTANCE_TANGENT;

/* Create the offset curve object. */

UF_CALL(UF_CURVE_create_offset_object(&offset_data,
&offset_tag));
/* Get the tags to the output offset curves. These will be
used as */
/* Input to create the next offset curve object.
*/
UF_CALL(UF_CURVE_ask_offset_curves(offset_tag,
&num_curves,
&offset_curves));

/* Modify the input string to pass in the offset curves as
input. */
input_string.string[0] = num_curves;
for (i=0; i<num_curves; i++)
input_string.id[i] = offset_curves[i];

UF_free(offset_curves);
/* Create the new offset curve object. (This is the way to do
*/
/* multiple copies or multiple Applies interactively.)
*/
UF_CALL(UF_CURVE_create_offset_object(&offset_data,
&offset_tag));
/* Retrieve the parameter information for the last object
created. */
UF_CALL(UF_CURVE_ask_offset_parms(offset_tag,
&ask_offset_data));

/* Change the offset type to have no extenstion/trim. */
ask_offset_data.offset_type = UF_CURVE_OFFSET_DISTANCE_NO_TRIM;
UF_CALL(UF_CURVE_edit_offset_object(&ask_offset_data,
offset_tag));
/* Free underlying structures. */

UF_CALL(UF_CURVE_free_offset_parms(&ask_offset_data));

UF_MODL_free_string_list(&input_string);
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int paramLen)
{
if (!UF_CALL(UF_initialize()))
{
do_ugopen_api();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}



[/quote]

0

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