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

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

#define DXF_BUFFER_SIZE (1024*2)
static char *buffer;
static char *buffer_pointer;
static char *buffer_end;


PRIVATE void strip_off_trailing_zeros( char *p )

{
for( ; *p; ++p )
        {
        if ( *p EQ '.' )
                {
                for( ; *p; ++p );  /* go to end */
                --p;  /* back off NULL */
                --p;  /* back off \n */
                --p;  /* back off \r */
                for( ; *p; --p )  /* strip off trailing zeros */
                        {
                        if ( *p NEQ '0' ) break;
                        if ( *p EQ '0' AND *(p-1) NEQ '.' )
                                {
                                *p = '\r';
                                *(p+1) = '\n';
                                *(p+2) = NULL;
                                }
                        }
                break;
                }
        }
}

PUBLIC void flush_dxf_buffer( void )

{
if ( !buffer ) return;
if ( buffer_pointer - buffer ) write( __drawing->dxfout_file,buffer,( int )( buffer_pointer-buffer ) );
free( buffer );
buffer_end = buffer_pointer = buffer = NULL;
}


PUBLIC void dxf( char *string )

{
int size = strlen( string );
if ( buffer_pointer+size >= buffer_end ) flush_dxf_buffer();
if ( !buffer ) 
	{
	buffer_pointer = buffer = get_memory( DXF_BUFFER_SIZE );
	buffer_end = buffer + DXF_BUFFER_SIZE;
	}
memcpy( buffer_pointer,string,size );
buffer_pointer += size;
}


PUBLIC void dxf_DOUBLE_16( int group_code ,DOUBLE value )

{
char line[ 80 ];

sprintf( line,"%3d\r\n",group_code );
dxf( line );
if ( value > 10000000.0 OR value < -10000000.0 ) 
	{
	sprintf( line,"%.6e\r\n",value );
	strupr( line );
	}
else
	{
	sprintf( line,"%.16lf\r\n",value );
	strip_off_trailing_zeros( line );
	if ( strcmp( line,"-0.0\r\n" ) EQ 0 ) strcpy( line,"0.0\r\n" );
	}
dxf( line );
}


PUBLIC void dxf_DOUBLE( int group_code ,DOUBLE value )

{
char line[ 80 ];

sprintf( line,"%3d\r\n",group_code );
dxf( line );
if ( value > 10000000.0 OR value < -10000000.0 ) 
	{
	sprintf( line,"%.6e\r\n",value );
	strupr( line );
	}
else
	{
	sprintf( line,"%.6lf\r\n",value );
	strip_off_trailing_zeros( line );
	if ( strcmp( line,"-0.0\r\n" ) EQ 0 ) strcpy( line,"0.0\r\n" );
	}
dxf( line );
}


PUBLIC void dxf_string( int group_code ,char *value )

{
char line[ 256 ];

sprintf( line,"%3d\r\n%s\r\n",group_code,value );
dxf( line );
}


PUBLIC void dxf_char( int group_code ,char value )

{
char buffer[ 256 ];

sprintf( buffer,"%3d\r\n%6d\r\n",group_code,value&0xff );
dxf( buffer );
}


PUBLIC void dxf_INT16( int group_code ,INT16 value )

{
char buffer[ 256 ];

sprintf( buffer,"%3d\r\n%6d\r\n",group_code,value );
dxf( buffer );
}


PUBLIC void dxf_INT32( int group_code ,INT32 value )

{
char buffer[ 256 ];
sprintf( buffer,"%3d\r\n%6ld\r\n",group_code,value );
dxf( buffer );
}

⌨️ 快捷键说明

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