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