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