00001 00005 /* Copyright (c) 2010-2011 Taneli Kalvas. All rights reserved. 00006 * 00007 * You can redistribute this software and/or modify it under the terms 00008 * of the GNU General Public License as published by the Free Software 00009 * Foundation; either version 2 of the License, or (at your option) 00010 * any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, but 00013 * WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this library (file "COPYING" included in the package); 00019 * if not, write to the Free Software Foundation, Inc., 51 Franklin 00020 * Street, Fifth Floor, Boston, MA 02110-1301 USA 00021 * 00022 * If you have questions about your rights to use or distribute this 00023 * software, please contact Berkeley Lab's Technology Transfer 00024 * Department at TTD@lbl.gov. Other questions, comments and bug 00025 * reports should be sent directly to the author via email at 00026 * taneli.kalvas@jyu.fi. 00027 * 00028 * NOTICE. This software was developed under partial funding from the 00029 * U.S. Department of Energy. As such, the U.S. Government has been 00030 * granted for itself and others acting on its behalf a paid-up, 00031 * nonexclusive, irrevocable, worldwide license in the Software to 00032 * reproduce, prepare derivative works, and perform publicly and 00033 * display publicly. Beginning five (5) years after the date 00034 * permission to assert copyright is obtained from the U.S. Department 00035 * of Energy, and subject to any subsequent five (5) year renewals, 00036 * the U.S. Government is granted for itself and others acting on its 00037 * behalf a paid-up, nonexclusive, irrevocable, worldwide license in 00038 * the Software to reproduce, prepare derivative works, distribute 00039 * copies to the public, perform publicly and display publicly, and to 00040 * permit others to do so. 00041 */ 00042 00043 #ifndef MY_DXF_TABLES_HPP 00044 #define MY_DXF_TABLES_HPP 1 00045 00046 00047 #include <vector> 00048 #include <string> 00049 #include <stdint.h> 00050 #include "mydxffile.hpp" 00051 00052 00055 class MyDXFTableEntry 00056 { 00057 00058 std::string _handle; // 5 (for others) or 105 (for DIMSTYLE) 00059 std::string _handle_to_owner; // 330 00060 00061 protected: 00062 00065 MyDXFTableEntry(); 00066 00069 void process_group( class MyDXFFile *dxf ); 00070 00073 void write_common( class MyDXFFile *dxf, std::ofstream &ostr ); 00074 00077 void debug_print_common( std::ostream &os ) const; 00078 00079 public: 00080 00083 virtual ~MyDXFTableEntry() {}; 00084 00087 virtual void write( class MyDXFFile *dxf, std::ofstream &ostr ) = 0; 00088 00091 virtual void debug_print( std::ostream &os ) const = 0; 00092 00093 friend std::ostream &operator<<( std::ostream &os, const MyDXFTableEntry &e ); 00094 }; 00095 00096 00097 00100 class MyDXFTableEntryBlockRecord : public MyDXFTableEntry 00101 { 00102 00103 std::string _name; // 2 00104 int16_t _units; // 70 00105 int8_t _explodability; // 280 00106 int8_t _scalability; // 281 00107 std::string _handle_to_layout; // 340 00108 00109 public: 00110 00113 MyDXFTableEntryBlockRecord( class MyDXFFile *dxf ); 00114 00117 virtual ~MyDXFTableEntryBlockRecord(); 00118 00121 virtual void write( class MyDXFFile *dxf, std::ofstream &ostr ); 00122 00125 virtual void debug_print( std::ostream &os ) const; 00126 }; 00127 00128 00129 00132 class MyDXFTableEntryLayer : public MyDXFTableEntry 00133 { 00134 00135 std::string _name; // 2 00136 std::string _linetype; // 6 00137 int16_t _flags; // 70 00138 int16_t _color; // 62 (negative if layer off) 00139 bool _plotting; // 290 00140 int8_t _lineweight; // 370 00141 00142 std::string _handle_to_plot_style_name; // 390 00143 std::string _handle_to_material; // 347 00144 00145 public: 00146 00149 MyDXFTableEntryLayer( class MyDXFFile *dxf ); 00150 00153 virtual ~MyDXFTableEntryLayer(); 00154 00157 const std::string &name( void ) const { return( _name ); } 00158 00161 void set_name( const std::string &name ) { _name = name; } 00162 00165 virtual void write( class MyDXFFile *dxf, std::ofstream &ostr ); 00166 00169 virtual void debug_print( std::ostream &os ) const; 00170 }; 00171 00172 00173 00176 class MyDXFTable 00177 { 00178 std::string _name; // 2 00179 std::string _handle; // 5 00180 std::string _handle_to_owner; // 330 00181 00182 std::vector<MyDXFTableEntry *> _entries; // 70 (size) 00183 00184 public: 00185 00186 MyDXFTable( const std::string &name, class MyDXFFile *dxf ); 00187 ~MyDXFTable(); 00188 00191 uint32_t size() const { return( _entries.size() ); } 00192 00195 const MyDXFTableEntry *get_entry( uint32_t a ) const { return( _entries[a] ); } 00196 00199 MyDXFTableEntry *get_entry( uint32_t a ) { return( _entries[a] ); } 00200 00203 void write( class MyDXFFile *dxf, std::ofstream &ostr ); 00204 00207 void debug_print( std::ostream &os ) const; 00208 }; 00209 00210 00211 00216 class MyDXFTables 00217 { 00218 00219 MyDXFTable *_blockrecord; 00220 MyDXFTable *_layer; 00221 00222 public: 00223 00224 MyDXFTables( class MyDXFFile *dxf ); 00225 ~MyDXFTables(); 00226 00229 const MyDXFTable *get_layers_table( void ) const { return( _layer ); } 00230 00233 MyDXFTable *get_layers_table( void ) { return( _layer ); } 00234 00237 void write( class MyDXFFile *dxf, std::ofstream &ostr ); 00238 00241 void debug_print( std::ostream &os ) const; 00242 }; 00243 00244 00245 00246 00247 00248 #endif 00249 00250 00251 00252