1/* -*- c -*- */ 2/*****************************************************************************/ 3/* LibreDWG - free implementation of the DWG file format */ 4/* */ 5/* Copyright (C) 2018-2019 Free Software Foundation, Inc. */ 6/* */ 7/* This library is free software, licensed under the terms of the GNU */ 8/* General Public License as published by the Free Software Foundation, */ 9/* either version 3 of the License, or (at your option) any later version. */ 10/* You should have received a copy of the GNU General Public License */ 11/* along with this program. If not, see <http://www.gnu.org/licenses/>. */ 12/*****************************************************************************/ 13 14/* 15 * header_variables_dxf.spec: DXF header variables specification 16 * written by Reini Urban 17 */ 18 19#include "spec.h" 20 21 SECTION (HEADER); 22 23 HEADER_VALUE_TV (ACADVER, 1, version_codes[dwg->header.version]); 24 25 if (minimal) { 26 HEADER_VALUE (HANDSEED, RL, 5, _obj->HANDSEED->handleref.value); 27 ENDSEC (); 28 return 0; 29 } 30 31 VERSIONS (R_13, R_2013) { 32 HEADER_VALUE (ACADMAINTVER, RS, 70, dwg->header.maint_version); 33 } 34 SINCE (R_2018) { 35 HEADER_VALUE (ACADMAINTVER, RL, 90, dwg->header.maint_version); 36 } 37 SINCE (R_10) { 38 HEADER_VALUE_TV (DWGCODEPAGE, 3, codepage); 39 } 40 SINCE (R_2004) { 41 // usually only since 2010 42 HEADER_VALUE_TU0 (TITLE, 1, dwg->summaryinfo.TITLE); 43 HEADER_VALUE_TU0 (SUBJECT, 1, dwg->summaryinfo.SUBJECT); 44 HEADER_VALUE_TU0 (AUTHOR, 1, dwg->summaryinfo.AUTHOR); 45 HEADER_VALUE_TU0 (KEYWORDS, 1, dwg->summaryinfo.KEYWORDS); 46 HEADER_VALUE_TU0 (COMMENTS, 1, dwg->summaryinfo.COMMENTS); 47 HEADER_VALUE_TU0 (LASTSAVEDBY, 1, dwg->summaryinfo.LASTSAVEDBY); 48 HEADER_VALUE_TU0 (REVISIONNUMBER, 1, dwg->summaryinfo.REVISIONNUMBER); 49 for (rcount2 = 0; rcount2 < dwg->summaryinfo.num_props; rcount2++) 50 { 51 if (!bit_empty_T (dat, (BITCODE_T)dwg->summaryinfo.props[rcount2].tag)) 52 { 53 HEADER_VALUE_TU (CUSTOMPROPERTYTAG, 1, dwg->summaryinfo.props[rcount2].tag); 54 HEADER_VALUE_TU (CUSTOMPROPERTY, 1, dwg->summaryinfo.props[rcount2].value); 55 } 56 } 57 } 58 SINCE (R_2013) { 59 HEADER_BLL (REQUIREDVERSIONS, 160); 60 } 61 UNTIL (R_9) { 62 HEADER_2D (INSBASE); 63 } LATER_VERSIONS { 64 HEADER_3D (INSBASE); 65 } 66 UNTIL (R_10) { 67 HEADER_2D (EXTMIN); 68 HEADER_2D (EXTMAX); 69 } LATER_VERSIONS { 70 HEADER_3D (EXTMIN); 71 HEADER_3D (EXTMAX); 72 } 73 HEADER_2D (LIMMIN); 74 HEADER_2D (LIMMAX); 75 76 HEADER_RS (ORTHOMODE, 70); 77 HEADER_RS (REGENMODE, 70); 78 HEADER_RS (FILLMODE, 70); 79 HEADER_RS (QTEXTMODE, 70); 80 SINCE (R_9c1) { 81 HEADER_RS (MIRRTEXT, 70); 82 } 83 UNTIL (R_14) { 84 HEADER_RS (DRAGMODE, 70); 85 } 86 HEADER_RD (LTSCALE, 40); 87 UNTIL (R_14) { 88 HEADER_RS (OSMODE, 70); 89 } 90 HEADER_RS (ATTMODE, 70); 91 HEADER_RD (TEXTSIZE, 40); 92 HEADER_RD (TRACEWID, 40); 93 94 HEADER_HANDLE_NAME (TEXTSTYLE, 7, STYLE); 95 HEADER_HANDLE_NAME (CLAYER, 8, LAYER); 96 HEADER_HANDLE_NAME (CELTYPE, 6, LTYPE); 97 HEADER_CMC (CECOLOR, 62); 98 SINCE (R_13) { 99 HEADER_RD (CELTSCALE, 40); 100 UNTIL (R_14) { 101 HEADER_RS (DELOBJ, 70); 102 } 103 HEADER_RS (DISPSILH, 70); // this is WIREFRAME 104 HEADER_RD (DIMSCALE, 40); 105 } 106 HEADER_RD (DIMASZ, 40); 107 HEADER_RD (DIMEXO, 40); 108 HEADER_RD (DIMDLI, 40); 109 HEADER_RD (DIMRND, 40); 110 HEADER_RD (DIMDLE, 40); 111 HEADER_RD (DIMEXE, 40); 112 HEADER_RD (DIMTP, 40); 113 HEADER_RD (DIMTM, 40); 114 HEADER_RD (DIMTXT, 40); 115 HEADER_RD (DIMCEN, 40); 116 HEADER_RD (DIMTSZ, 40); 117 HEADER_RS (DIMTOL, 70); 118 HEADER_RS (DIMLIM, 70); 119 HEADER_RS (DIMTIH, 70); 120 HEADER_RS (DIMTOH, 70); 121 HEADER_RS (DIMSE1, 70); 122 HEADER_RS (DIMSE2, 70); 123 HEADER_RS (DIMTAD, 70); 124 HEADER_RS (DIMZIN, 70); 125 HEADER_HANDLE_NAME (DIMBLK, 1, BLOCK_HEADER); 126 HEADER_RS (DIMASO, 70); 127 HEADER_RS (DIMSHO, 70); 128 //HEADER_RS (DIMSAV, 70); // not in DXF 129 HEADER_T (DIMPOST, 1); 130 HEADER_T (DIMAPOST, 1); 131 SINCE (R_2010) { 132 HEADER_T0 (DIMALTMZS, 1); 133 HEADER_T0 (DIMMZS, 1); 134 } 135 HEADER_RS (DIMALT, 70); 136 HEADER_RS (DIMALTD, 70); 137 HEADER_RD (DIMALTF, 40); 138 HEADER_RD (DIMLFAC, 40); 139 HEADER_RS (DIMTOFL, 70); 140 HEADER_RD (DIMTVP, 40); 141 HEADER_RS (DIMTIX, 70); 142 HEADER_RS (DIMSOXD, 70); 143 HEADER_RS (DIMSAH, 70); 144 HEADER_HANDLE_NAME (DIMBLK1, 1, BLOCK_HEADER); 145 HEADER_HANDLE_NAME (DIMBLK2, 1, BLOCK_HEADER); 146 HEADER_HANDLE_NAME (DIMSTYLE, 2, DIMSTYLE); 147 HEADER_CMC (DIMCLRD, 70); 148 HEADER_CMC (DIMCLRE, 70); 149 HEADER_CMC (DIMCLRT, 70); 150 HEADER_RD (DIMTFAC, 40); 151 HEADER_RD (DIMGAP, 40); 152 SINCE (R_13) { 153 HEADER_RS (DIMJUST, 70); 154 HEADER_RS (DIMSD1, 70); 155 HEADER_RS (DIMSD2, 70); 156 HEADER_RS (DIMTOLJ, 70); 157 HEADER_RS (DIMTZIN, 70); 158 HEADER_RS (DIMALTZ, 70); 159 HEADER_RS (DIMALTTZ, 70); 160 HEADER_RS0 (DIMFIT, 70); 161 HEADER_RS (DIMUPT, 70); 162 HEADER_RS0 (DIMUNIT, 70); 163 HEADER_RS (DIMDEC, 70); 164 HEADER_RS (DIMTDEC, 70); 165 HEADER_RS (DIMALTU, 70); 166 HEADER_RS (DIMALTTD, 70); 167 HEADER_HANDLE_NAME (DIMTXSTY, 7, STYLE); 168 HEADER_RS (DIMAUNIT, 70); 169 } 170 SINCE (R_2000) { 171 HEADER_RS (DIMADEC, 70); 172 HEADER_RD (DIMALTRND, 40); 173 HEADER_RS (DIMAZIN, 70); 174 HEADER_RS (DIMDSEP, 70); 175 HEADER_RS (DIMATFIT, 70); 176 HEADER_RS (DIMFRAC, 70); 177 HEADER_HANDLE_NAME (DIMLDRBLK, 1, BLOCK_HEADER); 178 HEADER_RS (DIMLUNIT, 70); 179 //HEADER_RS (DIMLWD, 70); convert from unsigned to signed 180 //HEADER_RS (DIMLWE, 70); 181 HEADER_BSd (DIMLWD, 70); 182 HEADER_BSd (DIMLWE, 70); 183 HEADER_RS (DIMTMOVE, 70); 184 } 185 SINCE (R_2007) 186 { 187 HEADER_BD (DIMFXL, 40); 188 HEADER_B (DIMFXLON, 70); 189 HEADER_BD (DIMJOGANG, 40); 190 HEADER_BS (DIMTFILL, 70); 191 HEADER_CMC (DIMTFILLCLR, 70); 192 HEADER_BS (DIMARCSYM, 70); 193 HEADER_HANDLE_NAME (DIMLTYPE, 6, LTYPE); 194 HEADER_HANDLE_NAME (DIMLTEX1, 6, LTYPE); 195 HEADER_HANDLE_NAME (DIMLTEX2, 6, LTYPE); 196 } 197 SINCE (R_2010) { 198 HEADER_RS (DIMTXTDIRECTION, 70); 199 } 200 HEADER_RS (LUNITS, 70); 201 HEADER_RS (LUPREC, 70); 202 HEADER_RD (SKETCHINC, 40); 203 HEADER_RD (FILLETRAD, 40); 204 HEADER_RS (AUNITS, 70); 205 HEADER_RS (AUPREC, 70); 206 HEADER_TV (MENU, 1); 207 HEADER_RD (ELEVATION, 40); 208 SINCE (R_10c1) { 209 HEADER_RD (PELEVATION, 40); 210 } 211 HEADER_RD (THICKNESS, 40); 212 HEADER_RS (LIMCHECK, 70); 213 UNTIL (R_14) { 214 HEADER_RS0 (BLIPMODE, 70); //documented but nowhere found 215 } 216 HEADER_RD (CHAMFERA, 40); 217 HEADER_RD (CHAMFERB, 40); 218 SINCE (R_13) { 219 HEADER_RD (CHAMFERC, 40); 220 HEADER_RD (CHAMFERD, 40); 221 } 222 HEADER_RS (SKPOLY, 70); 223 224 HEADER_TIMEBLL (TDCREATE, 40); 225 SINCE (R_2000) 226 HEADER_TIMEBLL (TDUCREATE, 40); 227 HEADER_TIMEBLL (TDUPDATE, 40); 228 SINCE (R_2000) 229 HEADER_TIMEBLL (TDUUPDATE, 40); 230 HEADER_TIMEBLL (TDINDWG, 40); 231 HEADER_TIMEBLL (TDUSRTIMER, 40); 232 233 HEADER_VALUE (USRTIMER, RS, 70, 1); // 1 234 HEADER_RD (ANGBASE, 50); 235 HEADER_RS (ANGDIR, 70); 236 HEADER_RS (PDMODE, 70); 237 HEADER_RD (PDSIZE, 40); 238 HEADER_RD (PLINEWID, 40); 239 UNTIL (R_14) { 240 HEADER_RS (COORDS, 70); // 2 241 } 242 SINCE (R_9) 243 HEADER_RS (SPLFRAME, 70); 244 SINCE (R_2_6) 245 HEADER_RS (SPLINETYPE, 70); 246 SINCE (R_9) 247 HEADER_RS (SPLINESEGS, 70); 248 UNTIL (R_14) { 249 HEADER_RS (ATTDIA, 70); //default 1 250 HEADER_RS (ATTREQ, 70); //default 1 251 HEADER_RS (HANDLING, 70); //default 1 252 } 253 254 //HEADER_H (HANDSEED, 5); //default: 20000, before r13: 0xB8BC 255 SINCE (R_9) 256 FIELD_DATAHANDLE (HANDSEED, 0, 5); 257 258 HEADER_RS (SURFTAB1, 70); // 6 259 HEADER_RS (SURFTAB2, 70); // 6 260 HEADER_RS (SURFTYPE, 70); // 6 261 HEADER_RS (SURFU, 70); // 6 262 HEADER_RS (SURFV, 70); // 6 263 SINCE (R_2000) { 264 HEADER_HANDLE_NAME (UCSBASE, 2, UCS); 265 } 266 HEADER_HANDLE_NAME (UCSNAME, 2, UCS); 267 HEADER_3D (UCSORG); 268 HEADER_3D (UCSXDIR); 269 HEADER_3D (UCSYDIR); 270 SINCE (R_2000) { 271 HEADER_HANDLE_NAME (UCSORTHOREF, 2, UCS); 272 HEADER_RS (UCSORTHOVIEW, 70); 273 HEADER_3D (UCSORGTOP); 274 HEADER_3D (UCSORGBOTTOM); 275 HEADER_3D (UCSORGLEFT); 276 HEADER_3D (UCSORGRIGHT); 277 HEADER_3D (UCSORGFRONT); 278 HEADER_3D (UCSORGBACK); 279 HEADER_HANDLE_NAME (PUCSBASE, 2, UCS); 280 } 281 SINCE (R_10c1) { 282 HEADER_HANDLE_NAME (PUCSNAME, 2, UCS); 283 HEADER_3D (PUCSORG); 284 HEADER_3D (PUCSXDIR); 285 HEADER_3D (PUCSYDIR); 286 } 287 SINCE (R_2000) { 288 HEADER_HANDLE_NAME (PUCSORTHOREF, 2, UCS); 289 HEADER_RS (PUCSORTHOVIEW, 70); 290 HEADER_3D (PUCSORGTOP); 291 HEADER_3D (PUCSORGBOTTOM); 292 HEADER_3D (PUCSORGLEFT); 293 HEADER_3D (PUCSORGRIGHT); 294 HEADER_3D (PUCSORGFRONT); 295 HEADER_3D (PUCSORGBACK); 296 } 297 298 HEADER_RS (USERI1, 70); 299 HEADER_RS (USERI2, 70); 300 HEADER_RS (USERI3, 70); 301 HEADER_RS (USERI4, 70); 302 HEADER_RS (USERI5, 70); 303 HEADER_RD (USERR1, 40); 304 HEADER_RD (USERR2, 40); 305 HEADER_RD (USERR3, 40); 306 HEADER_RD (USERR4, 40); 307 HEADER_RD (USERR5, 40); 308 309 SINCE (R_2_6) 310 HEADER_RS (WORLDVIEW, 70); 311 UNTIL (R_10) 312 return 0; 313 314 //VERSION (R_13) { 315 // HEADER_RS (WIREFRAME, 70); //Undocumented 316 //} 317 HEADER_RS (SHADEDGE, 70); 318 HEADER_RS (SHADEDIF, 70); 319 HEADER_RS (TILEMODE, 70); 320 HEADER_RS (MAXACTVP, 70); 321 322 SINCE (R_9) 323 HEADER_3D (PINSBASE); 324 HEADER_RS (PLIMCHECK, 70); 325 HEADER_3D (PEXTMIN); 326 HEADER_3D (PEXTMAX); 327 HEADER_2D (PLIMMIN); 328 HEADER_2D (PLIMMAX); 329 330 HEADER_RS (UNITMODE, 70); 331 HEADER_RS (VISRETAIN, 70); 332 VERSION (R_13) // undocumented and unhandled in ODA 333 HEADER_RS (DELOBJ, 70); 334 HEADER_RS (PLINEGEN, 70); 335 HEADER_RS (PSLTSCALE, 70); 336 337 HEADER_RS (TREEDEPTH, 70); 338 UNTIL (R_11) { 339 HEADER_VALUE_TV (DWGCODEPAGE, 3, codepage); 340 } 341 VERSIONS (R_10, R_2000) { 342 HEADER_RS0 (PICKSTYLE, 70); 343 } 344 HEADER_HANDLE_NAME (CMLSTYLE, 2, MLINESTYLE); //default: Standard 345 HEADER_RS (CMLJUST, 70); 346 HEADER_RD (CMLSCALE, 40); //default: 20 347 VERSION (R_13) { 348 HEADER_9 (SAVEIMAGES); 349 VALUE (1, RS, 70); 350 } 351 SINCE (R_13c3) { 352 HEADER_RS (PROXYGRAPHICS, 70); 353 HEADER_RS (MEASUREMENT, 70); 354 } 355 SINCE (R_2000) { 356 HEADER_RS (CELWEIGHT, 370); 357 HEADER_RS (ENDCAPS, 280); 358 HEADER_RS (JOINSTYLE, 280); 359 HEADER_B (LWDISPLAY, 290); 360 HEADER_RS (INSUNITS, 70); 361 HEADER_T (HYPERLINKBASE, 1); 362 HEADER_T (STYLESHEET, 1); 363 HEADER_B (XEDIT, 290); 364 HEADER_RS (CEPSNTYPE, 380); 365 if (dwg->header_vars.CEPSNTYPE == 3) 366 { 367 HEADER_HANDLE_NAME (CPSNID, 390, LTYPE); 368 } 369 HEADER_B (PSTYLEMODE, 290); 370 HEADER_T (FINGERPRINTGUID, 2); 371 HEADER_T (VERSIONGUID, 2); 372 HEADER_B (EXTNAMES, 290); 373 HEADER_RD (PSVPSCALE, 40); 374 HEADER_B (OLESTARTUP, 290); 375 } 376 377 SINCE (R_2004) { 378 HEADER_RC (SORTENTS, 280); 379 HEADER_RC (INDEXCTL, 280); 380 HEADER_RC (HIDETEXT, 280); 381 SINCE (R_2010) { 382 HEADER_RC (XCLIPFRAME, 280); 383 } else { 384 HEADER_B (XCLIPFRAME, 290); 385 } 386 PRE (R_2007) { 387 HEADER_RC (DIMASSOC, 280); 388 } 389 HEADER_RC (HALOGAP, 280); 390 HEADER_RS (OBSCOLOR, 70); 391 HEADER_RC (OBSLTYPE, 280); 392 HEADER_RC (INTERSECTIONDISPLAY, 280); 393 HEADER_RS (INTERSECTIONCOLOR, 70); 394 HEADER_RC (DIMASSOC, 280); 395 HEADER_T (PROJECTNAME, 1); 396 } 397 398 SINCE (R_2007) { 399 HEADER_B (CAMERADISPLAY, 290); 400 HEADER_BD (LENSLENGTH, 40); 401 HEADER_BD (CAMERAHEIGHT, 40); 402 HEADER_BD (STEPSPERSEC, 40); 403 HEADER_BD (STEPSIZE, 40); 404 HEADER_VALUE (3DDWFPREC, BD, 40, _obj->_3DDWFPREC); 405 HEADER_BD (PSOLWIDTH, 40); 406 HEADER_BD (PSOLHEIGHT, 40); 407 HEADER_BD (LOFTANG1, 40); //no rad2deg, ok 408 HEADER_BD (LOFTANG2, 40); //no rad2deg, ok 409 HEADER_BD (LOFTMAG1, 40); 410 HEADER_BD (LOFTMAG2, 40); 411 HEADER_RS (LOFTPARAM, 70); 412 HEADER_RC (LOFTNORMALS, 280); 413 HEADER_BD (LATITUDE, 40); 414 HEADER_BD (LONGITUDE, 40); 415 HEADER_BD (NORTHDIRECTION, 40); 416 HEADER_BLd (TIMEZONE, 70); 417 HEADER_RC (LIGHTGLYPHDISPLAY, 280); 418 HEADER_RC (TILEMODELIGHTSYNCH, 280); 419 HEADER_H0 (CMATERIAL, 347); 420 HEADER_RC (SOLIDHIST, 280); 421 HEADER_RC (SHOWHIST, 280); 422 HEADER_RC (DWFFRAME, 280); 423 HEADER_RC (DGNFRAME, 280); 424 HEADER_B (REALWORLDSCALE, 290); 425 HEADER_CMC (INTERFERECOLOR, 62); 426 HEADER_H0 (INTERFEREOBJVS, 345); 427 HEADER_H0 (INTERFEREVPVS, 346); 428 HEADER_H0 (DRAGVS, 349); 429 HEADER_RC (CSHADOW, 280); 430 HEADER_BD (SHADOWPLANELOCATION, 40); 431 } 432 433 ENDSEC (); 434