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