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

📄 dxfout.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"


PRIVATE void dxfout_viewports( AcadDrawing *drawing )

{
int viewport;

dxf_string( 0,"TABLE" );
dxf_string( 2,"VPORT" );
dxf_INT16( 70,drawing->header->viewports );
for( viewport = 1; viewport < drawing->header->viewports; ++viewport )
	{
	AcadViewPort__dxfout( drawing->viewport[ viewport ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_line_types( AcadDrawing *drawing )

{
int line_type;

dxf_string( 0,"TABLE" );
dxf_string( 2,"LTYPE" );
dxf_INT16( 70,drawing->header->line_types );
for( line_type = 0; line_type < drawing->header->line_types; ++line_type )
	{
	AcadLineType__dxfout( drawing->line_type[ line_type ] );
	}

dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_layers( AcadDrawing *drawing )

{
int layer;

dxf_string( 0,"TABLE" );
dxf_string( 2,"LAYER" );
dxf_INT16( 70,drawing->header->layers );
for( layer = 0; layer < drawing->header->layers; ++layer )
	{
	AcadLayer__dxfout( drawing->layer[ layer ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_font_styles( AcadDrawing *drawing )

{
int font_style;

dxf_string( 0,"TABLE" );
dxf_string( 2,"STYLE" );
dxf_INT16( 70,drawing->header->styles );
for( font_style = 0; font_style < drawing->header->styles; ++font_style )
	{
	AcadFontStyle__dxfout( drawing->font_style[ font_style ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_views( AcadDrawing *drawing )

{
int view;

dxf_string( 0,"TABLE" );
dxf_string( 2,"VIEW" );
dxf_INT16( 70,drawing->header->views );
for( view = 0; view < drawing->header->views; ++view )
	{
	AcadView__dxfout( drawing->view[ view ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_ucss( AcadDrawing *drawing )

{
int ucs;

dxf_string( 0,"TABLE" );
dxf_string( 2,"UCS" );
dxf_INT16( 70,drawing->header->ucss );
for( ucs = 0; ucs < drawing->header->ucss; ++ucs )
	{
	AcadUcs__dxfout( drawing->ucs[ ucs ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_appids( AcadDrawing *drawing )

{
int appid;

dxf_string( 0,"TABLE" );
dxf_string( 2,"APPID" );
dxf_INT16( 70,drawing->header->applications );
for( appid = 0; appid < drawing->header->applications; ++appid )
	{
	AcadAppID__dxfout( drawing->appid[ appid ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_dim_styles( AcadDrawing *drawing )

{
int dim_style;

dxf_string( 0,"TABLE" );
dxf_string( 2,"DIMSTYLE" );
dxf_INT16( 70,drawing->header->dimstyles );
for( dim_style = 0; dim_style < drawing->header->dimstyles; ++dim_style )
	{
	AcadDimStyle__dxfout( drawing->dim_style[ dim_style ] );
	}
dxf_string( 0,"ENDTAB" );
}


PRIVATE void dxfout_header( AcadDrawing *drawing )

{
AcadHeader__dxfout( drawing->header );
}


PRIVATE void dxfout_tables( AcadDrawing *drawing )

{
dxf_string( 0,"SECTION" );
dxf_string( 2,"TABLES" );

dxfout_viewports( drawing );
dxfout_line_types( drawing );
dxfout_layers( drawing );
dxfout_font_styles( drawing );
dxfout_views( drawing );
dxfout_ucss( drawing );
if ( drawing->acad11 )
	{
	dxfout_appids( drawing );
	dxfout_dim_styles( drawing );
	}
dxf_string( 0,"ENDSEC" );
}


PRIVATE void dxfout_entities( AcadEntity *entity )

{
for ( ; entity; entity = entity->next )
	{
	switch( entity->type )
		{
		case ACAD_LINE		:AcadLine__dxfout( ( AcadLine * )entity );
					 break;
		case ACAD_ARC		:AcadArc__dxfout( ( AcadArc * )entity );
					 break;
		case ACAD_CIRCLE	:AcadCircle__dxfout( ( AcadCircle * )entity );
					 break;
		case ACAD_POINT		:AcadPoint__dxfout( ( AcadPoint * )entity );
					 break;
		case ACAD_TRACE		:AcadTrace__dxfout( ( AcadTrace * )entity );
					 break;
		case ACAD_LINE3D	:AcadLine3d__dxfout( ( AcadLine3d * )entity );
					 break;
		case ACAD_FACE3D	:AcadFace3d__dxfout( ( AcadFace3d * )entity );
					 break;
		case ACAD_ATTDEF	:AcadAttdef__dxfout( ( AcadAttdef * )entity );
					 break;
		case ACAD_ATTRIB	:AcadAttrib__dxfout( ( AcadAttrib * )entity );
					 break;
		case ACAD_TEXT		:AcadText__dxfout( ( AcadText * )entity );
					 break;
		case ACAD_SOLID		:AcadSolid__dxfout( ( AcadSolid * )entity );
					 break;
		case ACAD_DIMENSION	:AcadDimension__dxfout( ( AcadDimension * )entity );
					 break;
		case ACAD_INSERT	:AcadInsert__dxfout( ( AcadInsert * )entity );
					 break;
		case ACAD_INSERT_BASE	:AcadInsertBase__dxfout( ( AcadInsertBase * )entity );
					 break;
		case ACAD_SHAPE		:AcadShape__dxfout( ( AcadShape * )entity );
					 break;
		case ACAD_ENDBLK	:AcadEndBlk__dxfout( ( AcadEndBlk * )entity );
					 break;
		case ACAD_VERTEX	:AcadVertex__dxfout( ( AcadVertex * )entity );
					 break;
		case ACAD_PLINE		:AcadPline__dxfout( ( AcadPline * )entity );
					 break;
		case ACAD_SEQEND	:AcadSeqend__dxfout( ( AcadSeqend * )entity );
					 break;
		case ACAD_VPORT		:AcadVport__dxfout( ( AcadVport * )entity );
					 break;
		default			:;
					 break;
		}
	}
}


PRIVATE void dxfout_blocks( AcadDrawing *drawing )

{
dxf_string( 0,"SECTION" );
dxf_string( 2,"BLOCKS" );
for( current_block = 0; current_block < drawing->header->blocks; ++current_block )
	{
	if ( debugger ) dprintf( "\n*************** BLOCK %d **************\n\n",current_block );
	if ( drawing->block[ current_block ]->deleted ) continue;
	dxf_string( 0,"BLOCK" );
	if ( !drawing->block[ current_block ]->xref )
		{
		dxfout_entities( drawing->block[ current_block ]->entities );
		}
	}
dxf_string( 0,"ENDSEC" );
}


PRIVATE void dxfout_entity_section( AcadDrawing *drawing )

{
drawing = drawing;
dxf_string( 0,"SECTION" );
dxf_string( 2,"ENTITIES" );
dxfout_entities( drawing->entities );
dxf_string( 0,"ENDSEC" );
}


PUBLIC void dxfout( AcadDrawing *drawing, char *output_name )

{
char dxfout_name[ 256 ];

strcpy( dxfout_name,output_name );
set_extension( dxfout_name,"dxf" );

#ifdef UNIX
if ( ( drawing->dxfout_file = open( dxfout_name,O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 ) ) < 0 ) 
#else
if ( ( drawing->dxfout_file = open( dxfout_name,O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 ) ) < 0 ) 
#endif
	{
	warn_perror( "cannot open [%s]",dxfout_name );
	read_error( "Failed" );
	}

/* now dxfout */
dxfout_header( drawing );
dxfout_tables( drawing );
dxfout_blocks( drawing );
dxfout_entity_section( drawing );
dxf_string( 0,"EOF" );

flush_dxf_buffer();

close( drawing->dxfout_file );
}

⌨️ 快捷键说明

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