/* The following example retrieves information about an unfolded section line and then creates a similar section line and view. */ #include #include #include #include #include #include #include void ufusr(char *param, int *retcod, int param_len) { int ifail = 0; int num_sxviews; int num_sxsegs; int num_user_defined_sxsegs = 0; int seg_ndx; 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 = "unfolded_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_DRAW_sxline_sxsegs_t unfolded_sxsegs[99]; ifail = UF_initialize(); if( ifail == 0 ) /* Find the tag of the section line from its name. */ ifail = UF_OBJ_cycle_by_name( sxline1, &sxline1_tag ); if( ifail == 0 ) { /* Retrieve information about an unfolded section line. */ ifail = UF_DRAW_ask_unfolded_sxline( sxline1_tag, step_dir, arrow_dir, &pview_tag, &num_sxviews, &sxview_tags, &num_sxsegs, &sxseg_tags, &sxline_status ); } if( ifail == 0 ) { /* Read current drawing name. */ ifail = uc6492( dwg_name ); } if( ifail == 0 ) /* Get section view name from its tag. */ ifail = UF_OBJ_ask_name( sxview_tags[0], sxview_name ); if( ifail == 0 ) { /* Find the drawing location of the section view. */ ifail = uc6483( dwg_name, sxview_name, view_placement_pt ); /* Move it slightly in the x direction. */ view_placement_pt[0] += 1.0; } if( ifail == 0 ) { /* 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 ) { unfolded_sxsegs[num_user_defined_sxsegs].sxseg_type = sxseg_info.sxseg_type; unfolded_sxsegs[num_user_defined_sxsegs].sxseg_object= object; unfolded_sxsegs[num_user_defined_sxsegs].sxseg_angle = sxseg_info.sxseg_angle; num_user_defined_sxsegs++; } else UF_free( object ); } } if( ifail == 0 ) { /* Get the current drawing tag. */ ifail = UF_DRAW_ask_current_drawing( &dwg_tag ); } /* Create a similar unfolded section line. */ if( ifail == 0 ) { ifail = UF_DRAW_create_unfolded_sxview( dwg_tag, sxview_scale, step_dir, arrow_dir, pview_tag, num_user_defined_sxsegs, unfolded_sxsegs, view_placement_pt, &new_sxview_tag ); } if( num_user_defined_sxsegs > 0 ) { for( seg_ndx = 0; seg_ndx