下面是相关的一段代码:(base_pt是点构造器生成的点,arc1是以base_pt为中心生成的圆)
UF_MODL_create_list([$loop_list)]
if(edge!=NULL_TAG)
{
UF_MODL_ask_edge_faces(edge,[$face_list)]
p3=face_list;
while(p3!=NULL)
{
UF_MODL_ask_face_parm(p3->eid,base_pt,parm,face_pt);
UF_MODL_ask_face_props(p3->eid,parm,point,[$u1,&v1,&u2,&v2,unit_norm,&radii)]
UF_VEC3_is_parallel(unit_norm,direction,tolerance,[$is_parallel)]
if(is_parallel!=1)
{
face=p3->eid;
break;
}
p3=p3->next;
}
UF_MODL_create_curve_from_edge(edge,[$curve)]
UF_MODL_ask_curve_parm(curve,base_pt,[$param,curve_pt)]
double tolerance=0.0254;
int num_intersections;
UF_MODL_intersect_info_p_t *intersections;
UF_MODL_intersect_objects(curve,arc1,tolerance,[$num_intersections,&intersections)]
for(int kk=0;kk<3;kk++)
{
curve1_pt[kk]=intersections[0]->intersect.point.coords[kk];
curve2_pt[kk]=intersections[1]->intersect.point.coords[kk];
}
UF_MODL_ask_face_parm(face,curve_pt,parm,face_pt);
UF_MODL_ask_face_props(face,parm,point,[$u1,&v1,&u2,&v2,unit_norm,&radii)]
for(int i=0;i<3;i++)
{
second_pt=curve_pt+unit_norm*3.5;
}
UF_MODL_ask_face_parm(face,curve1_pt,parm,face_pt);
UF_MODL_ask_face_props(face,parm,point,[$u1,&v1,&u2,&v2,unit_norm,&radii)]
for(i=0;i<3;i++)
{
first_pt=curve1_pt+unit_norm*0.5;
}
sline.start_point[0]=curve1_pt[0];
sline.start_point[1]=curve1_pt[1];
sline.start_point[2]=curve1_pt[2];
sline.end_point[0]=first_pt[0];
sline.end_point[1]=first_pt[1];
sline.end_point[2]=first_pt[2];
UF_CURVE_create_line([$sline,&line1)]
UF_MODL_put_list_item(loop_list,line1);
UF_MODL_ask_face_parm(face,curve2_pt,parm,face_pt);
UF_MODL_ask_face_props(face,parm,point,[$u1,&v1,&u2,&v2,unit_norm,&radii)]
for(i=0;i<3;i++)
{
third_pt=curve2_pt+unit_norm*0.5;
}
sline.start_point[0]=curve2_pt[0];
sline.start_point[1]=curve2_pt[1];
sline.start_point[2]=curve2_pt[2];
sline.end_point[0]=third_pt[0];
sline.end_point[1]=third_pt[1];
sline.end_point[2]=third_pt[2];
UF_CURVE_create_line([$sline,&line2)]
UF_MODL_put_list_item(loop_list,line2);
sline.start_point[0]=curve1_pt[0];
sline.start_point[1]=curve1_pt[1];
sline.start_point[2]=curve1_pt[2];
sline.end_point[0]=curve2_pt[0];
sline.end_point[1]=curve2_pt[1];
sline.end_point[2]=curve2_pt[2];
UF_CURVE_create_line([$sline,&line3)]
UF_MODL_put_list_item(loop_list,line3);
UF_CURVE_create_arc_thru_3pts(create_flag,first_pt,second_pt,third_pt,[$arc_tag)]
UF_MODL_put_list_item(loop_list,arc_tag);
UF_CURVE_ask_arc_data(arc_tag,[$arc)]
UF_CURVE_arc_t arc_coords;
tag_t circle;
tag_t body;
arc_coords.matrix_tag=arc.matrix_tag;
for(i=0;i<3;i++)
arc_coords.arc_center=arc.arc_center;
arc_coords.start_angle=0;
arc_coords.end_angle=360*DEGRA;
arc_coords.radius=1;
UF_CURVE_create_arc([$arc_coords,&circle)]
UF_MODL_put_list_item(loop_list,circle);
rc=UF_MODL_create_extruded(loop_list,taper_angle,limit,ref_pt,direction,create,[$feature)]
if(rc)
{
UF_get_fail_message(rc,msg);
printf("error=%s\n",msg);
}
loop_list包含的5段曲线都是有值的 |