/*
 * This example retrieves the drawing info structure, changes some
 * values, and resets the drawing info.
*/
#include <stdlib.h>
#include <stdio.h>
#include <uf.h>
#include <uf_defs.h>
#include <uf_draw.h>
#include <uf_draw_types.h>
#include <uf_obj.h>
#include <uf_part.h>
void ufusr(char *param, int *retcod, int param_len)
{
  int         ifail = 0;
  tag_t       drawing_tag = NULL_TAG;
  tag_t       part_tag = NULL_TAG;
  UF_DRAW_info_t drawing_info;
  char        error_message[133];
  char  *draw_name = "SH1";

  ifail = UF_initialize();

  if( !ifail )
      part_tag = UF_PART_ask_display_part();

  if( !ifail && part_tag != NULL_TAG )
      ifail = UF_OBJ_cycle_by_name( draw_name, &drawing_tag );

  if( !ifail && part_tag != NULL_TAG && drawing_tag != NULL_TAG
)
  {

      ifail = UF_DRAW_ask_drawing_info( drawing_tag,
                                                    &drawing_info
);
  }
  printf( "UF_DRAW_ask_drawing_info() " );
  if( ifail )
  {
      ifail = UF_get_fail_message( ifail, error_message );
      printf( "fails.\nError is: %s\n", error_message );
  }
  else if ( part_tag == NULL_TAG )
      printf( "fails.\nError is: no active part.\n" );
  else if ( drawing_tag == NULL_TAG )
      printf( "fails.\nError is: no current drawing.\n" );
  else
  {
      printf( "is successful.\n" );
      printf( "The value of the drawing info structure is.\n" );
      printf( "size_state:  %d\n", drawing_info.size_state );
      if(drawing_info.size_state == UF_DRAW_METRIC_SIZE )
          printf( "standard metric size %d\n",
drawing_info.size.metric_size_code );
      else if(drawing_info.size_state == UF_DRAW_ENGLISH_SIZE )
          printf( "standard english size %d\n",
drawing_info.size.english_size_code );
      else
          printf("custom size = %f,  %f\n",
drawing_info.size.custom_size[0],

drawing_info.size.custom_size[1] );
      printf( "scale:  %f\n", drawing_info.drawing_scale );
      if(drawing_info.projection_angle ==
UF_DRAW_THIRD_ANGLE_PROJECTION )
          printf(" projection angle : third \n" );
      else
          printf(" projection angle : first \n" );

   }

   /* Now change the values */

   if( !ifail && part_tag != NULL_TAG && drawing_tag != NULL_TAG
 )
   {
       drawing_info.size_state = UF_DRAW_CUSTOM_SIZE;
       drawing_info.size.custom_size[0] = 30.0;
       drawing_info.size.custom_size[1] = 45.0;
       drawing_info.drawing_scale = 1.5;
       drawing_info.units = UF_PART_ENGLISH;
       /* leave the projection angle the same, for simplicity */

       ifail = UF_DRAW_set_drawing_info( drawing_tag, &drawing_info
);
  }
  printf( "UF_DRAW_set_drawing_info() " );
  if( ifail )
  {
      ifail = UF_get_fail_message( ifail, error_message );
      printf( "fails.\nError is: %s\n", error_message );
  }
  else if ( part_tag == NULL_TAG )
      printf( "fails.\nError is: no active part.\n" );
  else if ( drawing_tag == NULL_TAG )
      printf( "fails.\nError is: no current drawing.\n" );
  else
      printf( "is successful.\n" );

  ifail = UF_terminate();
}

