/* * The following example creates a revolved section line similar to an * existing revolved section line. */ #include #include #include #include #include #include #include #include void ufusr(char *param, int *retcod, int param_len) { int ifail = 0; int numchrs; int num_sxviews; int num_sxsegs; int num_user_defined_sxsegs = 0; int num_user_defined_sxsegs_in_leg1=0; int seg_ndx; int num_leg1_sxsegs; int len; tag_t sxline1_tag; tag_t pview_tag; tag_t dwg_tag; tag_t curve_tag; tag_t new_sxview_tag; tag_t * sxview_tags = NULL; tag_t * sxseg_tags = NULL; double step_dir[3]; double arrow_dir[3]; double view_placement_pt[2]; double sxview_scale = 1.0; char error_message[133]; char * sxline1 = "rev_sxline1"; char dwg_name[MAX_FSPEC_SIZE +1]; char sxview_name[MAX_FSPEC_SIZE +1]; UF_DRAW_sxline_status_t sxline_status; UF_DRAW_sxseg_info_t sxseg_info; UF_DRF_object_p_t object; UF_DRF_object_t rotpt_object; UF_DRAW_sxline_sxsegs_t rev_sxsegs[99]; UF_DRAW_sxline_leg_t cut_plane_leg; ifail = UF_initialize(); if( !ifail ) { /* Find the tag of the section line from its name. */ numchrs = strlen( sxline1 ); ifail = uc5028( sxline1, numchrs, &sxline1_tag ); } if( !ifail ) { /* Retrieve information about a revolved section line. */ ifail = UF_DRAW_ask_revolved_sxline( sxline1_tag, step_dir, arrow_dir, &pview_tag, &rotpt_object, &num_sxviews, &sxview_tags, &num_sxsegs, &num_leg1_sxsegs, &cut_plane_leg, &sxseg_tags, &sxline_status ); } if( !ifail ) { /* Read current drawing name. */ ifail = uc6492( dwg_name ); } if( !ifail ) { /* Get section view name from its tag. */ ifail = uc5027( sxview_tags[0], sxview_name, &len ); } if( !ifail ) { /* Find the drawing location of the section view. */ ifail = uc6483( dwg_name, sxview_name, view_placement_pt ); } if( !ifail ) { /* Get the section line segment information. */ for( seg_ndx = 0; seg_ndx < num_sxsegs; seg_ndx++ ) { ifail = UF_DRAW_ask_sxline_sxseg( sxseg_tags[seg_ndx], &sxseg_info, &curve_tag, &object ); if( ifail ) break; /* Save only user defined sxsegs. */ if( sxseg_info.sxseg_mode == UF_DRAW_user_defined_sxseg ) { rev_sxsegs[num_user_defined_sxsegs].sxseg_type = sxseg_info.sxseg_type; rev_sxsegs[num_user_defined_sxsegs].sxseg_object = object; num_user_defined_sxsegs++; if( seg_ndx < num_leg1_sxsegs ) num_user_defined_sxsegs_in_leg1++; } else UF_free( object ); } } if( !ifail ) { /* Get tag from drawing name. */ len = strlen( dwg_name ); ifail = uc5028( dwg_name, len, &dwg_tag ); } /* Create a similar revolved section line. */ if( !ifail ) { ifail = UF_DRAW_create_revolved_sxview( dwg_tag, sxview_scale, step_dir, arrow_dir, pview_tag, &rotpt_object, num_user_defined_sxsegs, num_user_defined_sxsegs_in_leg1, rev_sxsegs, view_placement_pt, &new_sxview_tag ); } if( num_user_defined_sxsegs > 0 ) { for( seg_ndx = 0; seg_ndx