summaryrefslogtreecommitdiffstats
path: root/src/extension/dxf2svg/tables.cpp
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2006-01-16 02:36:01 +0000
committermental <mental@users.sourceforge.net>2006-01-16 02:36:01 +0000
commit179fa413b047bede6e32109e2ce82437c5fb8d34 (patch)
treea5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/extension/dxf2svg/tables.cpp
downloadinkscape-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.cpp211
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;
+}