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

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

PUBLIC AcadVertex *AcadVertex__create( AcadPline *pline )

{
AcadVertex *me;

me = ( AcadVertex * )get_memory( sizeof( AcadVertex ) );
me->pline = pline;
return( me );
}


PUBLIC void AcadVertex__delete( AcadVertex *me )

{
free( ( char * )me );
}


PUBLIC int AcadVertex__length( AcadVertex *me )

{
return( me->common.size );
}


PUBLIC void AcadVertex__read( AcadVertex *me )

{
AcadEntity__read_elevation_etc( &me->common,true,true );

me->bulge = me->curve_fit_tangent = 0.0;
me->vertex_flags = 0;
if ( me->common.pflags&0xffe0 ) me->x = me->y = 0.0;
else 
	{
	get_DOUBLE( &me->x );
	get_DOUBLE( &me->y );
	}
if ( me->common.pflags & 0x1 )
	get_DOUBLE( &me->start_width );
else
	me->start_width = me->pline->start_width;
if ( me->common.pflags & 0x2 )
	get_DOUBLE( &me->end_width );
else
	me->end_width = me->pline->end_width;
if ( me->common.pflags & 0x4 )
	get_DOUBLE( &me->bulge );
else
	me->bulge = 0.0;
if ( me->common.pflags & 0x8 )
	{
	get_UINT8( &me->vertex_flags );
	if ( me->pline->polyface )
		{
		if ( ( me->vertex_flags&0xc0 ) EQ 0xc0 )	/* vertex */
			{
/*
			if (  me->pline->polyface_index >= MAX_PLINE_VERTICES ) read_error( "Too many vetices in polyface" );
			polyface_vertex[ me->pline->polyface_index ].x = x;
			polyface_vertex[ me->pline->polyface_index ].y = y;
			polyface_vertex[ me->pline->polyface_index ].z = elevation;
			++me->pline->polyface_index;
*/
			}
		else if ( ( me->vertex_flags&0x80 ) EQ 0x80 )	/* face */
			{
			get_INT16( &me->polyface_corners[ 0 ] );
			get_INT16( &me->polyface_corners[ 1 ] );
			get_INT16( &me->polyface_corners[ 2 ] );
			get_INT16( &me->polyface_corners[ 3 ] );
			}
		}
	}
if ( me->common.pflags & 0x10 ) get_DOUBLE( &me->curve_fit_tangent );
}


PUBLIC void AcadVertex__dump_to_debug_file( AcadVertex *me )

{
dprintf( "VERTEX\n" );
dprintf( "\tat %lf,%lf,%lf\n",me->x,me->y,me->common.elevation );
if ( me->common.pflags&0x1 ) dprintf( "\tstart width %lf\n",me->start_width );
if ( me->common.pflags&0x2 ) dprintf( "\tend width %lf\n",me->end_width );
if ( me->common.pflags&0x4 ) dprintf( "\tbulge %lf\n",me->bulge );
if ( me->common.pflags&0x8 ) 
	{
	dprintf( "\tvertex flags %xH\n",me->vertex_flags&0xff );
	if ( me->pline->polyface )
		{
		if ( ( me->vertex_flags&0xc0 ) EQ 0xc0 ) dprintf( "\tPolyface vertex\n" );
		else if ( me->vertex_flags&0x80 ) 
			{
			dprintf( "\tPolyface face\n",me->polyface_corners[ 0 ],me->polyface_corners[ 1 ],me->polyface_corners[ 2 ],me->polyface_corners[ 3 ] );
			}
		}
	}
if ( me->common.pflags&0x10 ) dprintf( "\tcurve fit tangent %lf\n",me->curve_fit_tangent );
AcadEntity__dump_to_debug_file( &me->common );
}


PUBLIC void AcadVertex__dxfout( AcadVertex *me )

{
dxf_string( 0,"VERTEX" );
AcadEntity__dxfout( &me->common );
dxf_DOUBLE( 10,me->x );
dxf_DOUBLE( 20,me->y );
if ( !__drawing->header->flatland ) dxf_DOUBLE( 30,me->common.elevation );
if ( me->common.pflags & 0x1 ) dxf_DOUBLE( 40,me->start_width );
if ( me->common.pflags & 0x2 ) dxf_DOUBLE( 41,me->end_width );
if ( me->common.pflags & 0x4 ) dxf_DOUBLE( 42,me->bulge );
if ( me->common.pflags & 0x8 ) dxf_char( 70,me->vertex_flags );
if ( me->common.pflags & 0x10 ) dxf_DOUBLE( 50,rad_to_degrees( me->curve_fit_tangent ) );
if ( me->common.ucs )
	{
	dxf_INT16( 71,me->polyface_corners[ 0 ] );
	dxf_INT16( 72,me->polyface_corners[ 1 ] );
	dxf_INT16( 73,me->polyface_corners[ 2 ] );
	dxf_INT16( 74,me->polyface_corners[ 3 ] );
	}
}


PUBLIC void AcadVertex__write( AcadVertex *me )

{
int size;

size = 1;
if ( !(me->common.pflags & 0xffe0) )
	{
	size += sizeof( me->x );
	size += sizeof( me->y );
	}
if ( me->common.pflags & 0x1 ) size += sizeof( me->start_width );
if ( me->common.pflags & 0x2 ) size += sizeof( me->end_width );
if ( me->common.pflags & 0x4 ) size += sizeof( me->bulge );
if ( me->common.pflags & 0x8 ) size += sizeof( me->vertex_flags );
if ( me->common.pflags & 0x10 ) size += sizeof( me->curve_fit_tangent );

put_UINT8( 0x14 );  /* LINE TYPE */
AcadEntity__write_elevation_etc( &me->common,false,true,size );
if ( debugger ) dprintf( "\tvertex entity\n" );

if ( !(me->common.pflags & 0xffe0) )
	{
	put_DOUBLE( me->x );
	put_DOUBLE( me->y );
	}
if ( me->common.pflags & 0x1 ) put_DOUBLE( me->start_width );
if ( me->common.pflags & 0x2 ) put_DOUBLE( me->end_width );
if ( me->common.pflags & 0x4 ) put_DOUBLE( me->bulge );
if ( me->common.pflags & 0x8 ) put_UINT8( me->vertex_flags );
if ( me->common.pflags & 0x10 ) put_DOUBLE( me->curve_fit_tangent );
}

⌨️ 快捷键说明

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