📄 extended.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 "xstring.c"
#include "xapp.c"
#include "xlayer.c"
#include "xbindata.c"
#include "xhandle.c"
#include "x3real.c"
#include "xwrldpos.c"
#include "xwrlddis.c"
#include "xwrlddir.c"
#include "xcstring.c"
#include "xreal.c"
#include "xdist.c"
#include "xscale.c"
#include "xint.c"
#include "xlong.c"
#include "xbrace.c"
PRIVATE void add_x_entity( AcadEntity *me, AcadExtendedEntity *x_entity )
{
if ( me->extended_entity )
{
me->last_extended_entity->next = x_entity;
me->last_extended_entity = x_entity;
}
else me->last_extended_entity = me->extended_entity = x_entity;
me->last_extended_entity->next = NULL;
}
PUBLIC void AcadEntity__read_extended_data( AcadEntity *me )
{
INT16 length;
UINT8 flag;
unsigned char type;
AcadExtendedEntity *x_entity;
get_UINT8( &flag );
if ( flag&0x4 ) me->paper_space = true;
if ( debugger ) dprintf( "Reading extended data flag = %xH\n",flag );
if ( !(flag&0x2) ) return; /* no data */
get_INT16( &length );
while ( length > 0 )
{
get_UINT8( &type );
length -= sizeof( type );
switch( type )
{
case 0x0 :x_entity = ( AcadExtendedEntity * )XString__create();
XString__read( ( XString * )x_entity );
break;
case 0x1 :x_entity = ( AcadExtendedEntity * )XApplicationName__create();
XApplicationName__read( ( XApplicationName * )x_entity );
break;
case 0x2 :x_entity = ( AcadExtendedEntity * )XBrace__create();
XBrace__read( ( XBrace * )x_entity );
break;
case 0x3 :x_entity = ( AcadExtendedEntity * )XLayer__create();
XLayer__read( ( XLayer * )x_entity );
break;
case 0x4 :x_entity = ( AcadExtendedEntity * )XBinaryData__create();
XBinaryData__read( ( XBinaryData * )x_entity );
file_seek( __drawing->file_position );
break;
case 0x5 :x_entity = ( AcadExtendedEntity * )XDataBaseHandle__create();
XDataBaseHandle__read( ( XDataBaseHandle * )x_entity );
break;
case 0xa :x_entity = ( AcadExtendedEntity * )X3Real__create();
X3Real__read( ( X3Real * )x_entity );
break;
case 0xb :x_entity = ( AcadExtendedEntity * )XWorldSpacePosition__create();
XWorldSpacePosition__read( ( XWorldSpacePosition * )x_entity );
break;
case 0xc :x_entity = ( AcadExtendedEntity * )XWorldSpaceDisplacement__create();
XWorldSpaceDisplacement__read( ( XWorldSpaceDisplacement * )x_entity );
break;
case 0xd :x_entity = ( AcadExtendedEntity * )XWorldDirection__create();
XWorldDirection__read( ( XWorldDirection * )x_entity );
break;
case 0x12 :x_entity = ( AcadExtendedEntity * )XControlString__create();
XControlString__read( ( XControlString * )x_entity );
break;
case 0x28 :x_entity = ( AcadExtendedEntity * )XReal__create();
XReal__read( ( XReal * )x_entity );
break;
case 0x29 :x_entity = ( AcadExtendedEntity * )XDistance__create();
XDistance__read( ( XDistance * )x_entity );
break;
case 0x2a :x_entity = ( AcadExtendedEntity * )XScaleFactor__create();
XScaleFactor__read( ( XScaleFactor * )x_entity );
break;
case 0x46 :x_entity = ( AcadExtendedEntity * )XInteger__create();
XInteger__read( ( XInteger * )x_entity );
break;
case 0x47 :x_entity = ( AcadExtendedEntity * )XLong__create();
XLong__read( ( XLong * )x_entity );
break;
default :read_error( "Unknown extended data type %xH",type );
}
length -= x_entity->size;
x_entity->type = type;
add_x_entity( me,x_entity );
}
}
PUBLIC void AcadExtendedEntity__dump_to_debug_file( AcadExtendedEntity *x_entity )
{
for ( ; x_entity; x_entity = x_entity->next )
{
switch( x_entity->type )
{
case 0x0 :XString__dump_to_debug_file( ( XString * )x_entity );
break;
case 0x1 :XApplicationName__dump_to_debug_file( ( XApplicationName * )x_entity );
break;
case 0x2 :XBrace__dump_to_debug_file( ( XBrace * )x_entity );
break;
case 0x3 :XLayer__dump_to_debug_file( ( XLayer * )x_entity );
break;
case 0x4 :XBinaryData__dump_to_debug_file( ( XBinaryData * )x_entity );
break;
case 0x5 :XDataBaseHandle__dump_to_debug_file( ( XDataBaseHandle * )x_entity );
break;
case 0xa :X3Real__dump_to_debug_file( ( X3Real * )x_entity );
break;
case 0xb :XWorldSpacePosition__dump_to_debug_file( ( XWorldSpacePosition * )x_entity );
break;
case 0xc :XWorldSpaceDisplacement__dump_to_debug_file( ( XWorldSpaceDisplacement * )x_entity );
break;
case 0xd :XWorldDirection__dump_to_debug_file( ( XWorldDirection * )x_entity );
break;
case 0x12 :XControlString__dump_to_debug_file( ( XControlString * )x_entity );
break;
case 0x28 :XReal__dump_to_debug_file( ( XReal * )x_entity );
break;
case 0x29 :XDistance__dump_to_debug_file( ( XDistance * )x_entity );
break;
case 0x2a :XScaleFactor__dump_to_debug_file( ( XScaleFactor * )x_entity );
break;
case 0x46 :XInteger__dump_to_debug_file( ( XInteger * )x_entity );
break;
case 0x47 :XLong__dump_to_debug_file( ( XLong * )x_entity );
break;
}
}
}
PUBLIC void AcadExtendedEntity__dxfout( AcadExtendedEntity *x_entity )
{
for ( ; x_entity; x_entity = x_entity->next )
{
switch( x_entity->type )
{
case 0x0 :XString__dxfout( ( XString * )x_entity );
break;
case 0x1 :XApplicationName__dxfout( ( XApplicationName * )x_entity );
break;
case 0x2 :XBrace__dxfout( ( XBrace * )x_entity );
break;
case 0x3 :XLayer__dxfout( ( XLayer * )x_entity );
break;
case 0x4 :XBinaryData__dxfout( ( XBinaryData * )x_entity );
break;
case 0x5 :XDataBaseHandle__dxfout( ( XDataBaseHandle * )x_entity );
break;
case 0xa :X3Real__dxfout( ( X3Real * )x_entity );
break;
case 0xb :XWorldSpacePosition__dxfout( ( XWorldSpacePosition * )x_entity );
break;
case 0xc :XWorldSpaceDisplacement__dxfout( ( XWorldSpaceDisplacement * )x_entity );
break;
case 0xd :XWorldDirection__dxfout( ( XWorldDirection * )x_entity );
break;
case 0x12 :XControlString__dxfout( ( XControlString * )x_entity );
break;
case 0x28 :XReal__dxfout( ( XReal * )x_entity );
break;
case 0x29 :XDistance__dxfout( ( XDistance * )x_entity );
break;
case 0x2a :XScaleFactor__dxfout( ( XScaleFactor * )x_entity );
break;
case 0x46 :XInteger__dxfout( ( XInteger * )x_entity );
break;
case 0x47 :XLong__dxfout( ( XLong * )x_entity );
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -