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

📄 extended.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 "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 + -