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

📄 pline.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 AcadPline *AcadPline__create( void )

{
return( ( AcadPline * )get_memory( sizeof( AcadPline ) ) );
}


PUBLIC void AcadPline__delete( AcadPline *me )

{
free( ( char * )me );
}


PUBLIC int AcadPline__length( AcadPline *me )

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


PUBLIC void AcadPline__read( AcadPline *me )

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

me->closed_in_N_direction = me->closed = me->threeDmesh = me->polyface = me->threeD = false;
if ( me->common.pflags & 0x1 )
	{
	get_UINT8( &me->flags );
	if ( me->flags&0x1 ) me->closed = true;
	if ( me->flags&0x8 ) me->threeD = true;
	if ( me->flags&0x10 ) me->threeDmesh = true;
	if ( me->flags&0x20 ) me->closed_in_N_direction = true;
	if ( __drawing->acad11 AND me->flags&0x40 ) 
		{
		me->polyface_index = 1;
		me->polyface = true;
		}
	}
else me->flags = 0;
if ( me->common.pflags & 0x2 )
	{
	get_DOUBLE( &me->start_width );
	}
else me->start_width = 0.0;
if ( me->common.pflags & 0x4 )
	{
	get_DOUBLE( &me->end_width );
	}
else me->end_width = 0.0;
me->ucs = false;
if ( ( __drawing->acad10 OR __drawing->acad11 ) AND me->common.pflags&0x8 ) AcadEntity__get_ucs_directions( &me->common );
	
me->polyface_vertices = me->polyface_faces = me->mesh_m = me->mesh_n = 0;
if ( __drawing->acad10 OR __drawing->acad11 )
	{
	if ( me->common.pflags & 0x10 ) 
		{
		if ( me->polyface ) get_INT16( &me->polyface_vertices );
		else get_INT16( &me->mesh_m );
		}
	if ( me->common.pflags & 0x20 ) 
		{
		if ( me->polyface ) get_INT16( &me->polyface_faces );
		else get_INT16( &me->mesh_n );
		}
	}
}


PUBLIC void AcadPline__dump_to_debug_file( AcadPline *me )

{
dprintf( "\tPoly flags %xH\n",me->flags );
dprintf( "\tstart width %lf\n",me->start_width );
dprintf( "\tend width %lf\n",me->end_width );
if ( __drawing->acad10 OR __drawing->acad11 )
	{
	if ( me->closed ) dprintf( "\tClosed\n" );
	if ( me->threeD ) dprintf( "\t3D pline\n" );
	if ( me->threeDmesh ) dprintf( "\t3D mesh\n" );
	if ( me->polyface ) dprintf( "\tThis is a polyface\n" );
	if ( me->common.pflags&0x10 ) 
		{
		if ( me->polyface ) dprintf( "\tPolyface vertices %d\n",me->polyface_vertices );
		else dprintf( "\tMesh m %d\n",me->mesh_m );
		}
	if ( me->common.pflags&0x20 )
		{
		if ( me->polyface ) dprintf( "\tPolyface faces %d\n",me->polyface_faces );
		else dprintf( "\tMesh n %d\n",me->mesh_n );
		}
	}
AcadEntity__dump_to_debug_file( &me->common );
}


PUBLIC void AcadPline__dxfout( AcadPline *me )

{
dxf_string( 0,"POLYLINE" );
AcadEntity__dxfout( &me->common );
dxf_INT16( 66,1 );
if ( !__drawing->header->flatland )
	{
	dxf_DOUBLE( 10,0.0 );
	dxf_DOUBLE( 20,0.0 );
	dxf_DOUBLE( 30,me->common.elevation );
	}
if ( me->flags ) dxf_char( 70,me->flags );
if ( me->start_width OR me->end_width )
	{
	dxf_DOUBLE( 40,me->start_width );
	dxf_DOUBLE( 41,me->end_width );
	}
if ( me->polyface )
	{
	dxf_INT16( 71,me->polyface_vertices );
	dxf_INT16( 72,me->polyface_faces );
	}
else if ( me->mesh_m OR me->mesh_n )
	{
	dxf_INT16( 71,me->mesh_m );
	dxf_INT16( 72,me->mesh_n );
	}
AcadEntity__dxfout_ucs( &me->common );
}


PUBLIC void AcadPline__write( AcadPline *me )

{
int size;

put_UINT8( 0x13 );  /* PLINE TYPE */
size = 1;
if ( me->common.ucs ) size += sizeof( DOUBLE )*3;
if ( me->common.pflags & 0x1 ) size += sizeof( UINT8 );
if ( me->common.pflags & 0x2 ) size += sizeof( DOUBLE );
if ( me->common.pflags & 0x4 ) size += sizeof( DOUBLE );
if ( me->common.pflags & 0x10 ) size += sizeof( INT16 );
if ( me->common.pflags & 0x20 ) size += sizeof( INT16 );
AcadEntity__write_elevation_etc( &me->common,false,true,size );

if ( debugger ) dprintf( "\tpline entity\n" );
if ( me->common.pflags & 0x1 ) put_UINT8( me->flags );
if ( me->common.pflags & 0x2 ) put_DOUBLE( me->start_width );
if ( me->common.pflags & 0x4 ) put_DOUBLE( me->end_width );
if ( me->common.pflags & 0x10 ) 
	{
	if ( me->polyface ) put_INT16( me->polyface_vertices );
	else put_INT16( me->mesh_m );
	}
if ( me->common.pflags & 0x20 ) 
	{
	if ( me->polyface ) put_INT16( me->polyface_faces );
	else put_INT16( me->mesh_n );
	}
if ( me->common.ucs ) AcadEntity__put_ucs_directions( &me->common );
}


⌨️ 快捷键说明

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