⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attdef.c

📁 AutoCAD DWG-file viewer
💻 C
字号:
/****************************************************************/
/*			COPYRIGHT NOTICE			*/
/*			----------------			*/
/*  All software in this listing remain the strict copyright	*/
/*  of Ilija Kovacevic and cannot be copied or used in any way	*/
/*  except by written permission of Ilija Kovacevic.		*/
/*								*/
/*	Copyright (c) 1992 Ilija Kovacevic			*/
/*	www.kov.com   email ilija@kov.com			*/
/****************************************************************/

#include "dwgin.h"


PUBLIC AcadAttdef *AcadAttdef__create( void )

{
AcadAttdef *me;

me = ( AcadAttdef * )get_memory( sizeof( AcadAttdef ) );
me->default_value = NULL;
me->prompt_string = NULL;
me->tag_string = NULL;
return( me );
}


PUBLIC void AcadAttdef__delete( AcadAttdef *me )

{
if ( me->default_value ) free( me->default_value );
if ( me->prompt_string ) free( me->prompt_string );
if ( me->tag_string ) free( me->tag_string );
free( ( char * )me );
}


PUBLIC int AcadAttdef__length( AcadAttdef *me )

{
return( me->common.size );
}


PUBLIC void AcadAttdef__read( AcadAttdef *me )

{
INT16 length;

AcadEntity__read_elevation_etc( &me->common,true,true );

get_DOUBLE( &me->x );
get_DOUBLE( &me->y );
get_DOUBLE( &me->height );

get_INT16( &length );
if ( length > 256 ) length = 0;
me->default_value = get_memory( length+1 );
get_array( me->default_value,length );
me->default_value[ length ] = NULL;

get_INT16( &length );
if ( length > 256 ) length = 0;
me->prompt_string = get_memory( length+1 );
get_array( me->prompt_string,length );
me->prompt_string[ length ] = NULL;

get_INT16( &length );
if ( length > 256 ) length = 0;
me->tag_string = get_memory( length+1 );
get_array( me->tag_string,length );
me->tag_string[ length ] = NULL;

get_UINT8( &me->attribute_flags );
if ( me->common.pflags & 0x1 ) get_UINT8( &me->field_length );
else me->field_length = 0;
if ( me->common.pflags & 0x2 ) get_DOUBLE( &me->angle );
else me->angle = 0.0;
if ( me->common.pflags & 0x4 ) get_DOUBLE( &me->x_scale );
else me->x_scale = 1.0;
if ( me->common.pflags & 0x8 ) get_DOUBLE( &me->obliquing_angle );
else me->obliquing_angle = 0.0;
if ( me->common.pflags & 0x10 ) get_UINT8( &me->text_style );
else me->text_style = 0;

me->backward = backward_font( me->text_style );
me->vertical = vertical_font( me->text_style );
me->upsidedown = upsidedown_font( me->text_style );

if ( me->common.pflags & 0x20 ) 
	{
	get_UINT8( &me->text_generation_flags );
	}
else me->text_generation_flags = 0;

if ( me->common.pflags & 0x40 ) get_UINT8( &me->horizontal_text_justify_type );
else me->horizontal_text_justify_type = 0;

if ( me->common.pflags & 0x80 )
	{
	get_DOUBLE( &me->alignment_x );
	get_DOUBLE( &me->alignment_y );
	}
else me->alignment_x = me->alignment_y = 0.0;

if ( me->common.pflags & 0x200 ) get_UINT8( &me->vertical_text_justify_type );
else me->vertical_text_justify_type = 0;

if ( ( __drawing->acad10 OR __drawing->acad11 ) AND me->common.pflags & 0x100 ) AcadEntity__get_ucs_directions( &me->common );
}


PUBLIC void AcadAttdef__dump_to_debug_file( AcadAttdef *me )


{
dprintf( "ATTDEF\n" );
dprintf( "\tat %lf,%lf\n",me->x,me->y );
dprintf( "\theight %lf\n",me->height );
dprintf( "\tdefault value [%s]\n",me->default_value );
dprintf( "\tprompt string [%s]\n",me->prompt_string );
dprintf( "\ttag string [%s]\n",me->tag_string );
dprintf( "\tgeneration flags %xH\n",me->text_style );
dprintf( "\tattribute flags %xH\n",me->attribute_flags );
dprintf( "\tfield length %xH\n",me->field_length );
dprintf( "\thorizontal_text_justify type %xH\n",me->horizontal_text_justify_type );
dprintf( "\tvertical_text_justify type %xH\n",me->vertical_text_justify_type );
dprintf( "\tangle %lf\n",me->angle );
dprintf( "\talignment %lf,%lf\n",me->alignment_x,me->alignment_y );
dprintf( "\tobliquing angle %lf\n",me->obliquing_angle );
dprintf( "\tx scale %lf\n",me->x_scale );
if ( me->upsidedown ) dprintf( "\tupsidedown\n" );
if ( me->backward ) dprintf( "\tbackward\n" );
if ( me->vertical ) dprintf( "\tvertical\n" );
AcadEntity__dump_to_debug_file( &me->common );
}


PUBLIC void AcadAttdef__dxfout( AcadAttdef *me )

{
dxf_string( 0,"ATTDEF" );
AcadEntity__dxfout( &me->common );
dxf_DOUBLE( 10,me->x );
dxf_DOUBLE( 20,me->y );
if ( !__drawing->header->flatland ) dxf_DOUBLE( 30,me->common.elevation );
dxf_DOUBLE( 40,me->height );
dxf_string( 1,me->default_value );
dxf_string( 3,me->prompt_string );
dxf_string( 2,me->tag_string );
dxf_char( 70,me->attribute_flags );
if ( me->field_length ) dxf_char( 73,me->field_length );
if ( me->angle ) dxf_DOUBLE( 50,rad_to_degrees( me->angle ) );
if ( me->x_scale NEQ 1.0 ) dxf_DOUBLE( 41,me->x_scale );
if ( me->obliquing_angle NEQ 0.0 ) dxf_DOUBLE( 51,rad_to_degrees( me->obliquing_angle ) );
if ( me->text_style ) dxf_string( 7,style_name( me->text_style ) );
if ( me->text_generation_flags ) dxf_char( 71,me->text_generation_flags );
if ( me->horizontal_text_justify_type ) dxf_char( 72,me->horizontal_text_justify_type );
if ( me->horizontal_text_justify_type OR me->vertical_text_justify_type ) 
	{
	dxf_DOUBLE( 11,me->alignment_x );
	dxf_DOUBLE( 21,me->alignment_y );
	if ( !__drawing->header->flatland ) dxf_DOUBLE( 31,me->common.elevation );
	}
if ( me->vertical_text_justify_type ) dxf_char( 74,me->vertical_text_justify_type );
AcadEntity__dxfout_ucs( &me->common );
}


PUBLIC void AcadAttdef__write( AcadAttdef *me )

{
int size;
INT16 length;

put_UINT8( 0xf );  /* ATTDEF TYPE */
size = sizeof( DOUBLE )*3 + sizeof( UINT8 ) + 1;
size += sizeof( strlen( me->default_value ) ) + 2;
size += sizeof( strlen( me->prompt_string  ) ) + 2;
size += sizeof( strlen( me->tag_string ) ) + 2;
if ( me->common.ucs ) size += sizeof( DOUBLE )*3;
if ( me->common.pflags & 0x1 ) ++size;
if ( me->common.pflags & 0x2 ) size += sizeof( me->angle );
if ( me->common.pflags & 0x4 ) size += sizeof( me->x_scale );
if ( me->common.pflags & 0x8 ) size += sizeof( me->obliquing_angle );
if ( me->common.pflags & 0x10 ) ++size;
if ( me->common.pflags & 0x20 ) ++size;
if ( me->common.pflags & 0x40 ) ++size;
if ( me->common.pflags & 0x80 ) size += sizeof( DOUBLE )*2;
if ( me->common.pflags & 0x200 ) ++size;

AcadEntity__write_elevation_etc( &me->common,true,true,size );
if ( debugger ) dprintf( "\tattdef entity\n" );

put_DOUBLE( me->x );
put_DOUBLE( me->y );
put_DOUBLE( me->height );

length = strlen( me->default_value );
put_INT16( length );
put_array( me->default_value,length );

length = strlen( me->prompt_string );
put_INT16( length );
put_array( me->prompt_string,length );

length = strlen( me->tag_string );
put_INT16( length );
put_array( me->tag_string,length );

put_UINT8( me->attribute_flags );

if ( me->common.pflags & 0x1 ) put_UINT8( me->field_length );
if ( me->common.pflags & 0x2 ) put_DOUBLE( me->angle );
if ( me->common.pflags & 0x4 ) put_DOUBLE( me->x_scale );
if ( me->common.pflags & 0x8 ) put_DOUBLE( me->obliquing_angle );
if ( me->common.pflags & 0x10 ) put_UINT8( me->text_style );
if ( me->common.pflags & 0x20 ) put_UINT8( me->text_generation_flags );
if ( me->common.pflags & 0x40 ) put_UINT8( me->horizontal_text_justify_type );
if ( me->common.pflags & 0x80 )
	{
	put_DOUBLE( me->alignment_x );
	put_DOUBLE( me->alignment_y );
	}
if ( me->common.pflags & 0x200 ) put_UINT8( me->vertical_text_justify_type );

if ( me->common.ucs ) AcadEntity__put_ucs_directions( &me->common );
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -