📄 text.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 AcadText *AcadText__create( void )
{
AcadText *me;
me = ( AcadText * )get_memory( sizeof( AcadText ) );
me->text = NULL;
return( me );
}
PUBLIC void AcadText__delete( AcadText *me )
{
if ( me->text ) free( me->text );
free( ( char * )me );
}
PUBLIC int AcadText__length( AcadText *me )
{
return( me->common.size );
}
PUBLIC void AcadText__read( AcadText *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 );
me->text = get_memory( length+1 );
memcpy( me->text,__drawing->file_pointer,length );
me->text[ length ] = NULL;
__drawing->file_position += length;
__drawing->file_pointer += length;
if ( me->common.pflags&0x1 ) get_DOUBLE( &me->angle );
else me->angle = 0.0;
if ( me->common.pflags&0x2 ) get_DOUBLE( &me->x_scale );
else me->x_scale = 1.0;
if ( me->common.pflags&0x4 ) get_DOUBLE( &me->obliquing_angle );
else me->obliquing_angle = 0.0;
if ( me->common.pflags&0x8 ) get_UINT8( &me->text_style );
else me->text_style = 0;
if ( me->common.pflags&0x10 ) get_UINT8( &me->generation_flags );
else me->generation_flags = 0;
if ( me->generation_flags&2 ) me->backward = true;
else me->backward = false;
if ( me->generation_flags&4 ) me->upsidedown = true;
else me->upsidedown = false;
if ( me->common.pflags & 0x20 ) get_UINT8( &me->horizontal_text_justify_type );
else me->horizontal_text_justify_type = 0;
if ( me->common.pflags & 0x40 )
{
get_DOUBLE( &me->alignment_x );
get_DOUBLE( &me->alignment_y );
}
else me->alignment_x = me->alignment_y = 0.0;
if ( me->common.pflags & 0x100 ) get_UINT8( &me->vertical_text_justify_type );
else me->vertical_text_justify_type = 0;
if ( me->common.pflags&0x80 ) AcadEntity__get_ucs_directions( &me->common );
}
PUBLIC void AcadText__dump_to_debug_file( AcadText *me )
{
dprintf( "TEXT\n" );
dprintf( "\tat %lf,%lf\n",me->x,me->y );
dprintf( "\theight %lf\n",me->height );
dprintf( "\ttext [%s]\n",me->text );
dprintf( "\tgeneration flags %xH\n",me->generation_flags );
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" );
}
PUBLIC void AcadText__dxfout( AcadText *me )
{
dxf_string( 0,"TEXT" );
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->text );
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 ) dxf_DOUBLE( 51,rad_to_degrees( me->obliquing_angle ) );
if ( me->common.pflags&0x8 ) dxf_string( 7,style_name( me->text_style ) );
if ( me->generation_flags ) dxf_char( 71,me->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( 73,me->vertical_text_justify_type );
AcadExtendedEntity__dump_to_debug_file( me->common.extended_entity );
AcadEntity__dxfout_ucs( &me->common );
}
PUBLIC void AcadText__write( AcadText *me )
{
INT16 length;
int size;
put_UINT8( 7 ); /* TEXT TYPE */
size = sizeof( DOUBLE )*3+1;
size += strlen( me->text ) + 2;
if ( me->common.pflags&0x1 ) size += sizeof( me->angle );
if ( me->common.pflags&0x2 ) size += sizeof( me->x_scale );
if ( me->common.pflags&0x4 ) size += sizeof( me->obliquing_angle );
if ( me->common.pflags&0x8 ) ++size;
if ( me->common.pflags&0x10 ) ++size;
if ( me->common.pflags & 0x20 ) ++size;
if ( me->common.pflags & 0x40 )size += sizeof( DOUBLE )*2;
if ( me->common.pflags & 0x100 ) ++size;
if ( me->common.ucs ) size += sizeof( DOUBLE )*3;
AcadEntity__write_elevation_etc( &me->common,true,true,size );
if ( debugger ) dprintf( "\ttext entity\n" );
put_DOUBLE( me->x );
put_DOUBLE( me->y );
put_DOUBLE( me->height );
length = strlen( me->text );
put_INT16( length );
put_array( me->text,length );
if ( me->common.pflags&0x1 ) put_DOUBLE( me->angle );
if ( me->common.pflags&0x2 ) put_DOUBLE( me->x_scale );
if ( me->common.pflags&0x4 ) put_DOUBLE( me->obliquing_angle );
if ( me->common.pflags&0x8 ) put_UINT8( me->text_style );
if ( me->common.pflags&0x10 ) put_UINT8( me->generation_flags );
if ( me->common.pflags & 0x20 ) put_UINT8( me->horizontal_text_justify_type );
if ( me->common.pflags & 0x40 )
{
put_DOUBLE( me->alignment_x );
put_DOUBLE( me->alignment_y );
}
if ( me->common.pflags & 0x100 ) 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 + -