diff options
| author | MenTaLguY <mental@rydia.net> | 2006-01-16 02:36:01 +0000 |
|---|---|---|
| committer | mental <mental@users.sourceforge.net> | 2006-01-16 02:36:01 +0000 |
| commit | 179fa413b047bede6e32109e2ce82437c5fb8d34 (patch) | |
| tree | a5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/extension/dxf2svg/tables.cpp | |
| download | inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.tar.gz inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.zip | |
moving trunk for module inkscape
(bzr r1)
Diffstat (limited to 'src/extension/dxf2svg/tables.cpp')
| -rw-r--r-- | src/extension/dxf2svg/tables.cpp | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/src/extension/dxf2svg/tables.cpp b/src/extension/dxf2svg/tables.cpp new file mode 100644 index 000000000..fcaff33c0 --- /dev/null +++ b/src/extension/dxf2svg/tables.cpp @@ -0,0 +1,211 @@ +/* + * Code for the conversion of DXF information in the TABLES section + * + * Author: + * Matt Squires <squiresm@colorado.edu> + * + * Copyright (C) 2005 Matt Squires + * + * Released under GNU GPL and LGPL, read the file 'GPL.txt' and 'LGPL.txt' for details + */ + +#include"tables.h" +#include<iostream> + + + + +int determine_table(char* value){ + // Common Elements as far as I am concerend + if ( strncmp(value,"LAYER",5) == 0 ) return 0; + if ( strncmp(value,"LTYPE",5) == 0 ) return 1; + if ( strncmp(value,"STYLE",5) == 0 ) return 2; + if ( strncmp(value,"UCS",3) == 0 ) return 3; + if ( strncmp(value,"VIEW",4) == 0 ) return 4; + if ( strncmp(value,"VPORT",4) == 0 ) return 5; + if ( strncmp(value,"APPID",5) == 0 ) return 6; + if ( strncmp(value,"BLOCK_RECORD",12) == 0 ) return 7; + else return -1; +} + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// TABLE +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +int table::ret_maxN(){ + return max_number; +} + + + + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// LAYER +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +layer::layer( std::vector< dxfpair > info){ + // Get the vertex information + + //basic_entity( info ); + //static char string[10000]; + char string[10000]; + for (int i = 0; i < info.size(); i++){ + switch( info[i].group_code ){ + case 2: + info[i].value_char(layer_name); + break; + case 6: + info[i].value_char(ltype_name); + break; + + case 62: + info[i].value_char(string); + color_number = atoi(string); + //std::cout << "I found a color and its number = " << color_number << std::endl; + break; + case 290: + info[i].value_char(string); + plotting_flag = atoi(string); + break; + } + } +} + +void layer::display(){ + std::cout << "LAYER\n"; + //std::cout << "\tx = " << x << "\ty = " << y << "\tz = " << z << "\tbulge = " << bulge << std::flush; +} + +char* layer::name(char* string){ + return( strcpy(string,layer_name) ); +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// LTYPE +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +ltype::ltype( std::vector< dxfpair > info){ + // Get the linetype information + + //static char string[10000]; + char string[10000]; + for (int i = 0; i < info.size(); i++){ + switch( info[i].group_code ){ + case 2: + info[i].value_char(ltype_name); + break; + case 3: + info[i].value_char(descriptive_txt); + break; + case 73: + info[i].value_char(string); + num_elements = atoi(string); + break; + case 40: + info[i].value_char(string); + pattern_length = atof(string); + break; + case 49: + info[i].value_char(string); + pattern.push_back( atof(string) ); + break; + } + } +} + + + +char* ltype::name(char* string){ + return( strcpy(string,ltype_name) ); +} + + +std::vector< double > ltype::ret_pattern(){ + return pattern; +} + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// tables +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +tables::tables(std::vector< std::vector< dxfpair > > sections){ + // Read the main information about the entities section and then put it in the enetites class + int value; + char string[10000]; + + for(int i = 0; i < sections.size(); i++){ + //std::cout << "start" << std::endl; + sections[i][0].value_char(string); + value = determine_table(string); + //std::cout << "sections.size() = " << sections.size() << std::endl << "i = " << i << std::endl << "string = " << string << std::endl; + switch( value ){ + case 0: + // LAYER + //std::cout << "tables start layer " << std::endl; + tables_layer.push_back( layer( sections[i] ) ); + //std::cout << "tables end layer " << std::endl; + break; + + case 1: + // LTYPE + //std::cout << "tables start ltype " << std::endl; + tables_ltype.push_back( ltype( sections[i] ) ); + //std::cout << "tables end ltype " << std::endl; + break; + + //case 3: + // break; + + default: + break; + // Nothing here + } + + } + +} + + + + +ltype tables::ret_ltype(char ltype_name[10000], char layer_name[10000]){ + int string_len = 0; + char name[10000]; + char temp[10000]; + // The ltype information may be given in the entitity or in the layer information + // Assume that if there is a name defined in the linetype that it trumps any other layer information + if ( strlen(ltype_name) > 0 ) strcpy(name,ltype_name); + else strcpy(name,layer_name); + for (int i = 0; i < tables_ltype.size();i++){ + string_len = strlen(tables_ltype[i].name(temp)); + if (strncmp(tables_ltype[i].name(temp),name,string_len) == 0 ) return tables_ltype[i]; + } + return tables_ltype[0]; +} + + +layer tables::ret_layer(char layer_name[10000]){ + int string_len = 0; + char temp[10000]; + + for (int i = 0; i < tables_layer.size();i++){ + string_len = strlen(tables_layer[i].name(temp)); + if (strncmp(tables_layer[i].name(temp),layer_name,string_len) == 0 ) return tables_layer[i]; + } + return tables_layer[0]; +} + + +std::vector< layer > tables::ret_layers(){ + return tables_layer; +} |
