1 /******************************************************************************
2 ** libDXFrw - Library to read/write DXF files (ascii & binary) **
3 ** **
4 ** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com **
5 ** **
6 ** This library is free software, licensed under the terms of the GNU **
7 ** General Public License as published by the Free Software Foundation, **
8 ** either version 2 of the License, or (at your option) any later version. **
9 ** You should have received a copy of the GNU General Public License **
10 ** along with this program. If not, see <http://www.gnu.org/licenses/>. **
11 ******************************************************************************/
12
13 #include "drw_header.h"
14 #include "intern/dxfreader.h"
15 #include "intern/dxfwriter.h"
16 #include "intern/drw_dbg.h"
17 #include "intern/dwgbuffer.h"
18
DRW_Header()19 DRW_Header::DRW_Header() {
20 linetypeCtrl = layerCtrl = styleCtrl = dimstyleCtrl = appidCtrl = 0;
21 blockCtrl = viewCtrl = ucsCtrl = vportCtrl = vpEntHeaderCtrl = 0;
22 version = DRW::AC1021;
23 curr = NULL;
24 }
25
addComment(std::string c)26 void DRW_Header::addComment(std::string c){
27 if (!comments.empty())
28 comments += '\n';
29 comments += c;
30 }
31
parseCode(int code,dxfReader * reader)32 void DRW_Header::parseCode(int code, dxfReader *reader){
33 if (NULL == curr && 9 != code) {
34 DRW_DBG("invalid header code: ");
35 DRW_DBG(code);
36 DRW_DBG("\n");
37 return;
38 }
39
40 switch (code) {
41 case 9:
42 curr = new DRW_Variant();
43 name = reader->getString();
44 if (version < DRW::AC1015 && name == "$DIMUNIT")
45 name="$DIMLUNIT";
46 vars[name]=curr;
47 break;
48 case 1:
49 curr->addString(code, reader->getUtf8String());
50 if (name =="$ACADVER") {
51 reader->setVersion(curr->content.s, true);
52 version = reader->getVersion();
53 }
54 break;
55 case 2:
56 curr->addString(code, reader->getUtf8String());
57 break;
58 case 3:
59 curr->addString(code, reader->getUtf8String());
60 if (name =="$DWGCODEPAGE") {
61 reader->setCodePage(curr->content.s);
62 curr->addString(code, reader->getCodePage());
63 }
64 break;
65 case 6:
66 curr->addString(code, reader->getUtf8String());
67 break;
68 case 7:
69 curr->addString(code, reader->getUtf8String());
70 break;
71 case 8:
72 curr->addString(code, reader->getUtf8String());
73 break;
74 case 10:
75 curr->addCoord(code, DRW_Coord(reader->getDouble(), 0.0, 0.0));
76 break;
77 case 20:
78 curr->setCoordY(reader->getDouble());
79 break;
80 case 30:
81 curr->setCoordZ(reader->getDouble());
82 break;
83 case 40:
84 curr->addDouble(code, reader->getDouble());
85 break;
86 case 50:
87 curr->addDouble(code, reader->getDouble());
88 break;
89 case 62:
90 curr->addInt(code, reader->getInt32());
91 break;
92 case 70:
93 curr->addInt(code, reader->getInt32());
94 break;
95 case 280:
96 curr->addInt(code, reader->getInt32());
97 break;
98 case 290:
99 curr->addInt(code, reader->getInt32());
100 break;
101 case 370:
102 curr->addInt(code, reader->getInt32());
103 break;
104 case 380:
105 curr->addInt(code, reader->getInt32());
106 break;
107 case 390:
108 curr->addString(code, reader->getUtf8String());
109 break;
110 default:
111 break;
112 }
113 }
114
write(dxfWriter * writer,DRW::Version ver)115 void DRW_Header::write(dxfWriter *writer, DRW::Version ver){
116 /*RLZ: TODO complete all vars to AC1024*/
117 double varDouble;
118 int varInt;
119 std::string varStr;
120 DRW_Coord varCoord;
121 writer->writeString(2, "HEADER");
122 writer->writeString(9, "$ACADVER");
123 switch (ver) {
124 case DRW::AC1006: //unsupported version acad 10
125 case DRW::AC1009: //acad 11 & 12
126 varStr = "AC1009";
127 break;
128 case DRW::AC1012: //unsupported version acad 13
129 case DRW::AC1014: //acad 14
130 varStr = "AC1014";
131 break;
132 case DRW::AC1015: //acad 2000
133 varStr = "AC1015";
134 break;
135 case DRW::AC1018: //acad 2004
136 varStr = "AC1018";
137 break;
138 /* case DRW::AC1021: //acad 2007
139 varStr = "AC1021";
140 break;*/
141 case DRW::AC1024: //acad 2010
142 varStr = "AC1024";
143 break;
144 case DRW::AC1027: //acad 2013
145 varStr = "AC1027";
146 break;
147 default: //acad 2007 default version
148 varStr = "AC1021";
149 break;
150 }
151 writer->writeString(1, varStr);
152 writer->setVersion(&varStr, true);
153
154 getStr("$ACADVER", &varStr);
155 getStr("$ACADMAINTVER", &varStr);
156
157 if (!getStr("$DWGCODEPAGE", &varStr)) {
158 varStr = "ANSI_1252";
159 }
160 writer->writeString(9, "$DWGCODEPAGE");
161 writer->setCodePage(&varStr);
162 writer->writeString(3, writer->getCodePage() );
163 writer->writeString(9, "$INSBASE");
164 if (getCoord("$INSBASE", &varCoord)) {
165 writer->writeDouble(10, varCoord.x);
166 writer->writeDouble(20, varCoord.y);
167 writer->writeDouble(30, varCoord.z);
168 } else {
169 writer->writeDouble(10, 0.0);
170 writer->writeDouble(20, 0.0);
171 writer->writeDouble(30, 0.0);
172 }
173 writer->writeString(9, "$EXTMIN");
174 if (getCoord("$EXTMIN", &varCoord)) {
175 writer->writeDouble(10, varCoord.x);
176 writer->writeDouble(20, varCoord.y);
177 writer->writeDouble(30, varCoord.z);
178 } else {
179 writer->writeDouble(10, 1.0000000000000000E+020);
180 writer->writeDouble(20, 1.0000000000000000E+020);
181 writer->writeDouble(30, 1.0000000000000000E+020);
182 }
183 writer->writeString(9, "$EXTMAX");
184 if (getCoord("$EXTMAX", &varCoord)) {
185 writer->writeDouble(10, varCoord.x);
186 writer->writeDouble(20, varCoord.y);
187 writer->writeDouble(30, varCoord.z);
188 } else {
189 writer->writeDouble(10, -1.0000000000000000E+020);
190 writer->writeDouble(20, -1.0000000000000000E+020);
191 writer->writeDouble(30, -1.0000000000000000E+020);
192 }
193 writer->writeString(9, "$LIMMIN");
194 if (getCoord("$LIMMIN", &varCoord)) {
195 writer->writeDouble(10, varCoord.x);
196 writer->writeDouble(20, varCoord.y);
197 } else {
198 writer->writeDouble(10, 0.0);
199 writer->writeDouble(20, 0.0);
200 }
201 writer->writeString(9, "$LIMMAX");
202 if (getCoord("$LIMMAX", &varCoord)) {
203 writer->writeDouble(10, varCoord.x);
204 writer->writeDouble(20, varCoord.y);
205 } else {
206 writer->writeDouble(10, 420.0);
207 writer->writeDouble(20, 297.0);
208 }
209 writer->writeString(9, "$ORTHOMODE");
210 if (getInt("$ORTHOMODE", &varInt))
211 writer->writeInt16(70, varInt);
212 else
213 writer->writeInt16(70, 0);
214 writer->writeString(9, "$REGENMODE");
215 if (getInt("$REGENMODE", &varInt))
216 writer->writeInt16(70, varInt);
217 else
218 writer->writeInt16(70, 1);
219 writer->writeString(9, "$FILLMODE");
220 if (getInt("$FILLMODE", &varInt))
221 writer->writeInt16(70, varInt);
222 else
223 writer->writeInt16(70, 1);
224 writer->writeString(9, "$QTEXTMODE");
225 if (getInt("$QTEXTMODE", &varInt))
226 writer->writeInt16(70, varInt);
227 else
228 writer->writeInt16(70, 0);
229 writer->writeString(9, "$MIRRTEXT");
230 if (getInt("$MIRRTEXT", &varInt))
231 writer->writeInt16(70, varInt);
232 else
233 writer->writeInt16(70, 0);
234 if (ver == DRW::AC1009){
235 writer->writeString(9, "$DRAGMODE");
236 if (getInt("$DRAGMODE", &varInt))
237 writer->writeInt16(70, varInt);
238 else
239 writer->writeInt16(70, 2);
240 }
241 writer->writeString(9, "$LTSCALE");
242 if (getDouble("$LTSCALE", &varDouble))
243 writer->writeDouble(40, varDouble);
244 else
245 writer->writeDouble(40, 1.0);
246 if (ver == DRW::AC1009){
247 writer->writeString(9, "$OSMODE");
248 if (getInt("$OSMODE", &varInt))
249 writer->writeInt16(70, varInt);
250 else
251 writer->writeInt16(70, 0);
252 }
253 writer->writeString(9, "$ATTMODE");
254 if (getInt("$ATTMODE", &varInt))
255 writer->writeInt16(70, varInt);
256 else
257 writer->writeInt16(70, 0);
258 writer->writeString(9, "$TEXTSIZE");
259 if (getDouble("$TEXTSIZE", &varDouble))
260 writer->writeDouble(40, varDouble);
261 else
262 writer->writeDouble(40, 2.5);
263 writer->writeString(9, "$TRACEWID");
264 if (getDouble("$TRACEWID", &varDouble))
265 writer->writeDouble(40, varDouble);
266 else
267 writer->writeDouble(40, 15.68);
268 writer->writeString(9, "$TEXTSTYLE");
269 if (getStr("$TEXTSTYLE", &varStr))
270 if (ver == DRW::AC1009)
271 writer->writeUtf8Caps(7, varStr);
272 else
273 writer->writeUtf8String(7, varStr);
274 else
275 writer->writeString(7, "STANDARD");
276 writer->writeString(9, "$CLAYER");
277 if (getStr("$CLAYER", &varStr))
278 if (ver == DRW::AC1009)
279 writer->writeUtf8Caps(8, varStr);
280 else
281 writer->writeUtf8String(8, varStr);
282 else
283 writer->writeString(8, "0");
284 writer->writeString(9, "$CELTYPE");
285 if (getStr("$CELTYPE", &varStr))
286 if (ver == DRW::AC1009)
287 writer->writeUtf8Caps(6, varStr);
288 else
289 writer->writeUtf8String(6, varStr);
290 else
291 writer->writeString(6, "BYLAYER");
292 writer->writeString(9, "$CECOLOR");
293 if (getInt("$CECOLOR", &varInt))
294 writer->writeInt16(62, varInt);
295 else
296 writer->writeInt16(62, 256);
297 if (ver > DRW::AC1009){
298 writer->writeString(9, "$CELTSCALE");
299 if (getDouble("$CELTSCALE", &varDouble))
300 writer->writeDouble(40, varDouble);
301 else
302 writer->writeDouble(40, 1.0);
303 writer->writeString(9, "$DISPSILH");
304 if (getInt("$DISPSILH", &varInt))
305 writer->writeInt16(70, varInt);
306 else
307 writer->writeInt16(70, 0);
308 }
309
310 writer->writeString(9, "$DIMSCALE");
311 if (getDouble("$DIMSCALE", &varDouble))
312 writer->writeDouble(40, varDouble);
313 else
314 writer->writeDouble(40, 2.5);
315 writer->writeString(9, "$DIMASZ");
316 if (getDouble("$DIMASZ", &varDouble))
317 writer->writeDouble(40, varDouble);
318 else
319 writer->writeDouble(40, 2.5);
320 writer->writeString(9, "$DIMEXO");
321 if (getDouble("$DIMEXO", &varDouble))
322 writer->writeDouble(40, varDouble);
323 else
324 writer->writeDouble(40, 0.625);
325 writer->writeString(9, "$DIMDLI");
326 if (getDouble("$DIMDLI", &varDouble))
327 writer->writeDouble(40, varDouble);
328 else
329 writer->writeDouble(40, 3.75);
330 writer->writeString(9, "$DIMRND");
331 if (getDouble("$DIMRND", &varDouble))
332 writer->writeDouble(40, varDouble);
333 else
334 writer->writeDouble(40, 0.0);
335 writer->writeString(9, "$DIMDLE");
336 if (getDouble("$DIMDLE", &varDouble))
337 writer->writeDouble(40, varDouble);
338 else
339 writer->writeDouble(40, 0.0);
340 writer->writeString(9, "$DIMEXE");
341 if (getDouble("$DIMEXE", &varDouble))
342 writer->writeDouble(40, varDouble);
343 else
344 writer->writeDouble(40, 1.25);
345 writer->writeString(9, "$DIMTP");
346 if (getDouble("$DIMTP", &varDouble))
347 writer->writeDouble(40, varDouble);
348 else
349 writer->writeDouble(40, 0.0);
350 writer->writeString(9, "$DIMTM");
351 if (getDouble("$DIMTM", &varDouble))
352 writer->writeDouble(40, varDouble);
353 else
354 writer->writeDouble(40, 0.0);
355 writer->writeString(9, "$DIMTXT");
356 if (getDouble("$DIMTXT", &varDouble))
357 writer->writeDouble(40, varDouble);
358 else
359 writer->writeDouble(40, 2.5);
360 writer->writeString(9, "$DIMCEN");
361 if (getDouble("$DIMCEN", &varDouble))
362 writer->writeDouble(40, varDouble);
363 else
364 writer->writeDouble(40, 2.5);
365 writer->writeString(9, "$DIMTSZ");
366 if (getDouble("$DIMTSZ", &varDouble))
367 writer->writeDouble(40, varDouble);
368 else
369 writer->writeDouble(40, 0.0);
370 writer->writeString(9, "$DIMTOL");
371 if (getInt("$DIMTOL", &varInt))
372 writer->writeInt16(70, varInt);
373 else
374 writer->writeInt16(70, 0);
375 writer->writeString(9, "$DIMLIM");
376 if (getInt("$DIMLIM", &varInt))
377 writer->writeInt16(70, varInt);
378 else
379 writer->writeInt16(70, 0);
380 writer->writeString(9, "$DIMTIH");
381 if (getInt("$DIMTIH", &varInt))
382 writer->writeInt16(70, varInt);
383 else
384 writer->writeInt16(70, 0);
385 writer->writeString(9, "$DIMTOH");
386 if (getInt("$DIMTOH", &varInt))
387 writer->writeInt16(70, varInt);
388 else
389 writer->writeInt16(70, 0);
390 writer->writeString(9, "$DIMSE1");
391 if (getInt("$DIMSE1", &varInt))
392 writer->writeInt16(70, varInt);
393 else
394 writer->writeInt16(70, 0);
395 writer->writeString(9, "$DIMSE2");
396 if (getInt("$DIMSE2", &varInt))
397 writer->writeInt16(70, varInt);
398 else
399 writer->writeInt16(70, 0);
400 writer->writeString(9, "$DIMTAD");
401 if (getInt("$DIMTAD", &varInt))
402 writer->writeInt16(70, varInt);
403 else
404 writer->writeInt16(70, 1);
405 writer->writeString(9, "$DIMZIN");
406 if (getInt("$DIMZIN", &varInt))
407 writer->writeInt16(70, varInt);
408 else
409 writer->writeInt16(70, 8);
410 writer->writeString(9, "$DIMBLK");
411 if (getStr("$DIMBLK", &varStr))
412 if (ver == DRW::AC1009)
413 writer->writeUtf8Caps(1, varStr);
414 else
415 writer->writeUtf8String(1, varStr);
416 else
417 writer->writeString(1, "");
418 writer->writeString(9, "$DIMASO");
419 if (getInt("$DIMASO", &varInt))
420 writer->writeInt16(70, varInt);
421 else
422 writer->writeInt16(70, 1);
423 writer->writeString(9, "$DIMSHO");
424 if (getInt("$DIMSHO", &varInt))
425 writer->writeInt16(70, varInt);
426 else
427 writer->writeInt16(70, 1);
428 writer->writeString(9, "$DIMPOST");
429 if (getStr("$DIMPOST", &varStr))
430 if (ver == DRW::AC1009)
431 writer->writeUtf8Caps(1, varStr);
432 else
433 writer->writeUtf8String(1, varStr);
434 else
435 writer->writeString(1, "");
436 writer->writeString(9, "$DIMAPOST");
437 if (getStr("$DIMAPOST", &varStr))
438 if (ver == DRW::AC1009)
439 writer->writeUtf8Caps(1, varStr);
440 else
441 writer->writeUtf8String(1, varStr);
442 else
443 writer->writeString(1, "");
444 writer->writeString(9, "$DIMALT");
445 if (getInt("$DIMALT", &varInt))
446 writer->writeInt16(70, varInt);
447 else
448 writer->writeInt16(70, 0);
449 writer->writeString(9, "$DIMALTD");
450 if (getInt("$DIMALTD", &varInt))
451 writer->writeInt16(70, varInt);
452 else
453 writer->writeInt16(70, 3);
454 writer->writeString(9, "$DIMALTF");
455 if (getDouble("$DIMALTF", &varDouble))
456 writer->writeDouble(40, varDouble);
457 else
458 writer->writeDouble(40, 0.03937);
459 writer->writeString(9, "$DIMLFAC");
460 if (getDouble("$DIMLFAC", &varDouble))
461 writer->writeDouble(40, varDouble);
462 else
463 writer->writeDouble(40, 1.0);
464 writer->writeString(9, "$DIMTOFL");
465 if (getInt("$DIMTOFL", &varInt))
466 writer->writeInt16(70, varInt);
467 else
468 writer->writeInt16(70, 1);
469 writer->writeString(9, "$DIMTVP");
470 if (getDouble("$DIMTVP", &varDouble))
471 writer->writeDouble(40, varDouble);
472 else
473 writer->writeDouble(40, 0.0);
474 writer->writeString(9, "$DIMTIX");
475 if (getInt("$DIMTIX", &varInt))
476 writer->writeInt16(70, varInt);
477 else
478 writer->writeInt16(70, 0);
479 writer->writeString(9, "$DIMSOXD");
480 if (getInt("$DIMSOXD", &varInt))
481 writer->writeInt16(70, varInt);
482 else
483 writer->writeInt16(70, 0);
484 writer->writeString(9, "$DIMSAH");
485 if (getInt("$DIMSAH", &varInt))
486 writer->writeInt16(70, varInt);
487 else
488 writer->writeInt16(70, 0);
489 writer->writeString(9, "$DIMBLK1");
490 if (getStr("$DIMBLK1", &varStr))
491 if (ver == DRW::AC1009)
492 writer->writeUtf8Caps(1, varStr);
493 else
494 writer->writeUtf8String(1, varStr);
495 else
496 writer->writeString(1, "");
497 writer->writeString(9, "$DIMBLK2");
498 if (getStr("$DIMBLK2", &varStr))
499 if (ver == DRW::AC1009)
500 writer->writeUtf8Caps(1, varStr);
501 else
502 writer->writeUtf8String(1, varStr);
503 else
504 writer->writeString(1, "");
505 writer->writeString(9, "$DIMSTYLE");
506 if (getStr("$DIMSTYLE", &varStr))
507 if (ver == DRW::AC1009)
508 writer->writeUtf8Caps(2, varStr);
509 else
510 writer->writeUtf8String(2, varStr);
511 else
512 writer->writeString(2, "STANDARD");
513 writer->writeString(9, "$DIMCLRD");
514 if (getInt("$DIMCLRD", &varInt))
515 writer->writeInt16(70, varInt);
516 else
517 writer->writeInt16(70, 0);
518 writer->writeString(9, "$DIMCLRE");
519 if (getInt("$DIMCLRE", &varInt))
520 writer->writeInt16(70, varInt);
521 else
522 writer->writeInt16(70, 0);
523 writer->writeString(9, "$DIMCLRT");
524 if (getInt("$DIMCLRT", &varInt))
525 writer->writeInt16(70, varInt);
526 else
527 writer->writeInt16(70, 0);
528 writer->writeString(9, "$DIMTFAC");
529 if (getDouble("$DIMTFAC", &varDouble))
530 writer->writeDouble(40, varDouble);
531 else
532 writer->writeDouble(40, 1.0);
533 writer->writeString(9, "$DIMGAP");
534 if (getDouble("$DIMGAP", &varDouble))
535 writer->writeDouble(40, varDouble);
536 else
537 writer->writeDouble(40, 0.625);
538 //post r12 dim vars
539 if (ver > DRW::AC1009) {
540 writer->writeString(9, "$DIMJUST");
541 if (getInt("$DIMJUST", &varInt))
542 writer->writeInt16(70, varInt);
543 else
544 writer->writeInt16(70, 0);
545 writer->writeString(9, "$DIMSD1");
546 if (getInt("$DIMSD1", &varInt))
547 writer->writeInt16(70, varInt);
548 else
549 writer->writeInt16(70, 0);
550 writer->writeString(9, "$DIMSD2");
551 if (getInt("$DIMSD2", &varInt))
552 writer->writeInt16(70, varInt);
553 else
554 writer->writeInt16(70, 0);
555 writer->writeString(9, "$DIMTOLJ");
556 if (getInt("$DIMTOLJ", &varInt))
557 writer->writeInt16(70, varInt);
558 else
559 writer->writeInt16(70, 0);
560 writer->writeString(9, "$DIMTZIN");
561 if (getInt("$DIMTZIN", &varInt))
562 writer->writeInt16(70, varInt);
563 else
564 writer->writeInt16(70, 8);
565 writer->writeString(9, "$DIMALTZ");
566 if (getInt("$DIMALTZ", &varInt))
567 writer->writeInt16(70, varInt);
568 else
569 writer->writeInt16(70, 0);
570 writer->writeString(9, "$DIMALTTZ");
571 if (getInt("$DIMALTTZ", &varInt))
572 writer->writeInt16(70, varInt);
573 else
574 writer->writeInt16(70, 0);
575 writer->writeString(9, "$DIMUPT");
576 if (getInt("$DIMUPT", &varInt))
577 writer->writeInt16(70, varInt);
578 else
579 writer->writeInt16(70, 0);
580 writer->writeString(9, "$DIMDEC");
581 if (getInt("$DIMDEC", &varInt))
582 writer->writeInt16(70, varInt);
583 else
584 writer->writeInt16(70, 2);
585 writer->writeString(9, "$DIMTDEC");
586 if (getInt("$DIMTDEC", &varInt))
587 writer->writeInt16(70, varInt);
588 else
589 writer->writeInt16(70, 2);
590 writer->writeString(9, "$DIMALTU");
591 if (getInt("$DIMALTU", &varInt))
592 writer->writeInt16(70, varInt);
593 else
594 writer->writeInt16(70, 2);
595 writer->writeString(9, "$DIMALTTD");
596 if (getInt("$DIMALTTD", &varInt))
597 writer->writeInt16(70, varInt);
598 else
599 writer->writeInt16(70, 3);
600 writer->writeString(9, "$DIMTXSTY");
601 if (getStr("$DIMTXSTY", &varStr))
602 if (ver == DRW::AC1009)
603 writer->writeUtf8Caps(7, varStr);
604 else
605 writer->writeUtf8String(7, varStr);
606 else
607 writer->writeString(7, "STANDARD");
608 writer->writeString(9, "$DIMAUNIT");
609 if (getInt("$DIMAUNIT", &varInt))
610 writer->writeInt16(70, varInt);
611 else
612 writer->writeInt16(70, 0);
613 writer->writeString(9, "$DIMADEC");
614 if (getInt("$DIMADEC", &varInt))
615 writer->writeInt16(70, varInt);
616 else
617 writer->writeInt16(70, 0);
618 writer->writeString(9, "$DIMALTRND");
619 if (getDouble("$DIMALTRND", &varDouble))
620 writer->writeDouble(40, varDouble);
621 else
622 writer->writeDouble(40, 0.0);
623 writer->writeString(9, "$DIMAZIN");
624 if (getInt("$DIMAZIN", &varInt))
625 writer->writeInt16(70, varInt);
626 else
627 writer->writeInt16(70, 0);
628 writer->writeString(9, "$DIMDSEP");
629 if (getInt("$DIMDSEP", &varInt))
630 writer->writeInt16(70, varInt);
631 else
632 writer->writeInt16(70, 44);
633 writer->writeString(9, "$DIMATFIT");
634 if (getInt("$DIMATFIT", &varInt))
635 writer->writeInt16(70, varInt);
636 else
637 writer->writeInt16(70, 3);
638 writer->writeString(9, "$DIMFRAC");
639 if (getInt("$DIMFRAC", &varInt))
640 writer->writeInt16(70, varInt);
641 else
642 writer->writeInt16(70, 0);
643 writer->writeString(9, "$DIMLDRBLK");
644 if (getStr("$DIMLDRBLK", &varStr))
645 if (ver == DRW::AC1009)
646 writer->writeUtf8Caps(1, varStr);
647 else
648 writer->writeUtf8String(1, varStr);
649 else
650 writer->writeString(1, "STANDARD");
651 //verify if exist "$DIMLUNIT" or obsolete "$DIMUNIT" (pre v2000)
652 if ( !getInt("$DIMLUNIT", &varInt) ){
653 if (!getInt("$DIMUNIT", &varInt))
654 varInt = 2;
655 }
656 //verify valid values from 1 to 6
657 if (varInt<1 || varInt>6)
658 varInt = 2;
659 if (ver > DRW::AC1014) {
660 writer->writeString(9, "$DIMLUNIT");
661 writer->writeInt16(70, varInt);
662 } else {
663 writer->writeString(9, "$DIMUNIT");
664 writer->writeInt16(70, varInt);
665 }
666 writer->writeString(9, "$DIMLWD");
667 if (getInt("$DIMLWD", &varInt))
668 writer->writeInt16(70, varInt);
669 else
670 writer->writeInt16(70, -2);
671 writer->writeString(9, "$DIMLWE");
672 if (getInt("$DIMLWE", &varInt))
673 writer->writeInt16(70, varInt);
674 else
675 writer->writeInt16(70, -2);
676 writer->writeString(9, "$DIMTMOVE");
677 if (getInt("$DIMTMOVE", &varInt))
678 writer->writeInt16(70, varInt);
679 else
680 writer->writeInt16(70, 0);
681
682 if (ver > DRW::AC1018) {// and post v2004 dim vars
683 writer->writeString(9, "$DIMFXL");
684 if (getDouble("$DIMFXL", &varDouble))
685 writer->writeDouble(40, varDouble);
686 else
687 writer->writeDouble(40, 1.0);
688 writer->writeString(9, "$DIMFXLON");
689 if (getInt("$DIMFXLON", &varInt))
690 writer->writeInt16(70, varInt);
691 else
692 writer->writeInt16(70, 0);
693 writer->writeString(9, "$DIMJOGANG");
694 if (getDouble("$DIMJOGANG", &varDouble))
695 writer->writeDouble(40, varDouble);
696 else
697 writer->writeDouble(40, 0.7854);
698 writer->writeString(9, "$DIMTFILL");
699 if (getInt("$DIMTFILL", &varInt))
700 writer->writeInt16(70, varInt);
701 else
702 writer->writeInt16(70, 0);
703 writer->writeString(9, "$DIMTFILLCLR");
704 if (getInt("$DIMTFILLCLR", &varInt))
705 writer->writeInt16(70, varInt);
706 else
707 writer->writeInt16(70, 0);
708 writer->writeString(9, "$DIMARCSYM");
709 if (getInt("$DIMARCSYM", &varInt))
710 writer->writeInt16(70, varInt);
711 else
712 writer->writeInt16(70, 0);
713 writer->writeString(9, "$DIMLTYPE");
714 if (getStr("$DIMLTYPE", &varStr))
715 if (ver == DRW::AC1009)
716 writer->writeUtf8Caps(6, varStr);
717 else
718 writer->writeUtf8String(6, varStr);
719 else
720 writer->writeString(6, "");
721 writer->writeString(9, "$DIMLTEX1");
722 if (getStr("$DIMLTEX1", &varStr))
723 if (ver == DRW::AC1009)
724 writer->writeUtf8Caps(6, varStr);
725 else
726 writer->writeUtf8String(6, varStr);
727 else
728 writer->writeString(6, "");
729 writer->writeString(9, "$DIMLTEX2");
730 if (getStr("$DIMLTEX2", &varStr))
731 if (ver == DRW::AC1009)
732 writer->writeUtf8Caps(6, varStr);
733 else
734 writer->writeUtf8String(6, varStr);
735 else
736 writer->writeString(6, "");
737 if (ver > DRW::AC1021) {// and post v2007 dim vars
738 writer->writeString(9, "$DIMTXTDIRECTION");
739 if (getInt("$DIMTXTDIRECTION", &varInt))
740 writer->writeInt16(70, varInt);
741 else
742 writer->writeInt16(70, 0);
743 }
744 }// end post v2004 dim vars
745 }//end post r12 dim vars
746
747 writer->writeString(9, "$LUNITS");
748 if (getInt("$LUNITS", &varInt))
749 writer->writeInt16(70, varInt);
750 else
751 writer->writeInt16(70, 2);
752 writer->writeString(9, "$LUPREC");
753 if (getInt("$LUPREC", &varInt))
754 writer->writeInt16(70, varInt);
755 else
756 writer->writeInt16(70, 4);
757 writer->writeString(9, "$SKETCHINC");
758 if (getDouble("$SKETCHINC", &varDouble))
759 writer->writeDouble(40, varDouble);
760 else
761 writer->writeDouble(40, 1.0);
762 writer->writeString(9, "$FILLETRAD");
763 if (getDouble("$FILLETRAD", &varDouble))
764 writer->writeDouble(40, varDouble);
765 else
766 writer->writeDouble(40, 0.0);
767 writer->writeString(9, "$AUNITS");
768 if (getInt("$AUNITS", &varInt))
769 writer->writeInt16(70, varInt);
770 else
771 writer->writeInt16(70, 0);
772 writer->writeString(9, "$AUPREC");
773 if (getInt("$AUPREC", &varInt))
774 writer->writeInt16(70, varInt);
775 else
776 writer->writeInt16(70, 2);
777 writer->writeString(9, "$MENU");
778 if (getStr("$MENU", &varStr))
779 if (ver == DRW::AC1009)
780 writer->writeUtf8Caps(1, varStr);
781 else
782 writer->writeUtf8String(1, varStr);
783 else
784 writer->writeString(1, ".");
785 writer->writeString(9, "$ELEVATION");
786 if (getDouble("$ELEVATION", &varDouble))
787 writer->writeDouble(40, varDouble);
788 else
789 writer->writeDouble(40, 0.0);
790 writer->writeString(9, "$PELEVATION");
791 if (getDouble("$PELEVATION", &varDouble))
792 writer->writeDouble(40, varDouble);
793 else
794 writer->writeDouble(40, 0.0);
795 writer->writeString(9, "$THICKNESS");
796 if (getDouble("$THICKNESS", &varDouble))
797 writer->writeDouble(40, varDouble);
798 else
799 writer->writeDouble(40, 0.0);
800 writer->writeString(9, "$LIMCHECK");
801 if (getInt("$LIMCHECK", &varInt))
802 writer->writeInt16(70, varInt);
803 else
804 writer->writeInt16(70, 0);
805 if (ver < DRW::AC1015) {
806 writer->writeString(9, "$BLIPMODE");
807 if (getInt("$BLIPMODE", &varInt))
808 writer->writeInt16(70, varInt);
809 else
810 writer->writeInt16(70, 0);
811 }
812 writer->writeString(9, "$CHAMFERA");
813 if (getDouble("$CHAMFERA", &varDouble))
814 writer->writeDouble(40, varDouble);
815 else
816 writer->writeDouble(40, 0.0);
817 writer->writeString(9, "$CHAMFERB");
818 if (getDouble("$CHAMFERB", &varDouble))
819 writer->writeDouble(40, varDouble);
820 else
821 writer->writeDouble(40, 0.0);
822 if (ver > DRW::AC1009) {
823 writer->writeString(9, "$CHAMFERC");
824 if (getDouble("$CHAMFERC", &varDouble))
825 writer->writeDouble(40, varDouble);
826 else
827 writer->writeDouble(40, 0.0);
828 writer->writeString(9, "$CHAMFERD");
829 if (getDouble("$CHAMFERD", &varDouble))
830 writer->writeDouble(40, varDouble);
831 else
832 writer->writeDouble(40, 0.0);
833 }
834 writer->writeString(9, "$SKPOLY");
835 if (getInt("$SKPOLY", &varInt)) {
836 writer->writeInt16(70, varInt);
837 } else
838 writer->writeInt16(70, 0);
839 //rlz: todo, times
840 writer->writeString(9, "$USRTIMER");
841 if (getInt("$USRTIMER", &varInt)) {
842 writer->writeInt16(70, varInt);
843 } else
844 writer->writeInt16(70, 1);
845 writer->writeString(9, "$ANGBASE");
846 if (getDouble("$ANGBASE", &varDouble))
847 writer->writeDouble(50, varDouble);
848 else
849 writer->writeDouble(50, 0.0);
850 writer->writeString(9, "$ANGDIR");
851 if (getInt("$ANGDIR", &varInt)) {
852 writer->writeInt16(70, varInt);
853 } else
854 writer->writeInt16(70, 0);
855 writer->writeString(9, "$PDMODE");
856 if (getInt("$PDMODE", &varInt)) {
857 writer->writeInt16(70, varInt);
858 } else
859 writer->writeInt16(70, 34);
860 writer->writeString(9, "$PDSIZE");
861 if (getDouble("$PDSIZE", &varDouble))
862 writer->writeDouble(40, varDouble);
863 else
864 writer->writeDouble(40, 0.0);
865 writer->writeString(9, "$PLINEWID");
866 if (getDouble("$PLINEWID", &varDouble))
867 writer->writeDouble(40, varDouble);
868 else
869 writer->writeDouble(40, 0.0);
870 if (ver < DRW::AC1012) {
871 writer->writeString(9, "$COORDS");
872 if (getInt("$COORDS", &varInt)) {
873 writer->writeInt16(70, varInt);
874 } else
875 writer->writeInt16(70, 2);
876 }
877 writer->writeString(9, "$SPLFRAME");
878 if (getInt("$SPLFRAME", &varInt)) {
879 writer->writeInt16(70, varInt);
880 } else
881 writer->writeInt16(70, 0);
882 writer->writeString(9, "$SPLINETYPE");
883 if (getInt("$SPLINETYPE", &varInt)) {
884 writer->writeInt16(70, varInt);
885 } else
886 writer->writeInt16(70, 2);
887 writer->writeString(9, "$SPLINESEGS");
888 if (getInt("$SPLINESEGS", &varInt)) {
889 writer->writeInt16(70, varInt);
890 } else
891 writer->writeInt16(70, 8);
892 if (ver < DRW::AC1012) {
893 writer->writeString(9, "$ATTDIA");
894 if (getInt("$ATTDIA", &varInt)) {
895 writer->writeInt16(70, varInt);
896 } else
897 writer->writeInt16(70, 1);
898 writer->writeString(9, "$ATTREQ");
899 if (getInt("$ATTREQ", &varInt)) {
900 writer->writeInt16(70, varInt);
901 } else
902 writer->writeInt16(70, 1);
903 writer->writeString(9, "$HANDLING");
904 if (getInt("$HANDLING", &varInt)) {
905 writer->writeInt16(70, varInt);
906 } else
907 writer->writeInt16(70, 1);
908 }
909 writer->writeString(9, "$HANDSEED");
910 //RLZ dxfHex(5, 0xFFFF);
911 writer->writeString(5, "20000");
912 writer->writeString(9, "$SURFTAB1");
913 if (getInt("$SURFTAB1", &varInt)) {
914 writer->writeInt16(70, varInt);
915 } else
916 writer->writeInt16(70, 6);
917 writer->writeString(9, "$SURFTAB2");
918 if (getInt("$SURFTAB2", &varInt)) {
919 writer->writeInt16(70, varInt);
920 } else
921 writer->writeInt16(70, 6);
922 writer->writeString(9, "$SURFTYPE");
923 if (getInt("$SURFTYPE", &varInt)) {
924 writer->writeInt16(70, varInt);
925 } else
926 writer->writeInt16(70, 6);
927 writer->writeString(9, "$SURFU");
928 if (getInt("$SURFU", &varInt)) {
929 writer->writeInt16(70, varInt);
930 } else
931 writer->writeInt16(70, 6);
932 writer->writeString(9, "$SURFV");
933 if (getInt("$SURFV", &varInt)) {
934 writer->writeInt16(70, varInt);
935 } else
936 writer->writeInt16(70, 6);
937 if (ver > DRW::AC1009) {
938 writer->writeString(9, "$UCSBASE");
939 if (getStr("$UCSBASE", &varStr))
940 if (ver == DRW::AC1009)
941 writer->writeUtf8Caps(2, varStr);
942 else
943 writer->writeUtf8String(2, varStr);
944 else
945 writer->writeString(2, "");
946 }
947 writer->writeString(9, "$UCSNAME");
948 if (getStr("$UCSNAME", &varStr))
949 if (ver == DRW::AC1009)
950 writer->writeUtf8Caps(2, varStr);
951 else
952 writer->writeUtf8String(2, varStr);
953 else
954 writer->writeString(2, "");
955 writer->writeString(9, "$UCSORG");
956 if (getCoord("$UCSORG", &varCoord)) {
957 writer->writeDouble(10, varCoord.x);
958 writer->writeDouble(20, varCoord.y);
959 writer->writeDouble(30, varCoord.z);
960 } else {
961 writer->writeDouble(10, 0.0);
962 writer->writeDouble(20, 0.0);
963 writer->writeDouble(30, 0.0);
964 }
965 writer->writeString(9, "$UCSXDIR");
966 if (getCoord("$UCSXDIR", &varCoord)) {
967 writer->writeDouble(10, varCoord.x);
968 writer->writeDouble(20, varCoord.y);
969 writer->writeDouble(30, varCoord.z);
970 } else {
971 writer->writeDouble(10, 1.0);
972 writer->writeDouble(20, 0.0);
973 writer->writeDouble(30, 0.0);
974 }
975 writer->writeString(9, "$UCSYDIR");
976 if (getCoord("$UCSYDIR", &varCoord)) {
977 writer->writeDouble(10, varCoord.x);
978 writer->writeDouble(20, varCoord.y);
979 writer->writeDouble(30, varCoord.z);
980 } else {
981 writer->writeDouble(10, 0.0);
982 writer->writeDouble(20, 1.0);
983 writer->writeDouble(30, 0.0);
984 }
985 if (ver > DRW::AC1009) { //begin post r12 UCS vars
986 writer->writeString(9, "$UCSORTHOREF");
987 if (getStr("$UCSORTHOREF", &varStr))
988 if (ver == DRW::AC1009)
989 writer->writeUtf8Caps(2, varStr);
990 else
991 writer->writeUtf8String(2, varStr);
992 else
993 writer->writeString(2, "");
994 writer->writeString(9, "$UCSORTHOVIEW");
995 if (getInt("$UCSORTHOVIEW", &varInt))
996 writer->writeInt16(70, varInt);
997 else
998 writer->writeInt16(70, 0);
999 writer->writeString(9, "$UCSORGTOP");
1000 if (getCoord("$UCSORGTOP", &varCoord)) {
1001 writer->writeDouble(10, varCoord.x);
1002 writer->writeDouble(20, varCoord.y);
1003 writer->writeDouble(30, varCoord.z);
1004 } else {
1005 writer->writeDouble(10, 0.0);
1006 writer->writeDouble(20, 0.0);
1007 writer->writeDouble(30, 0.0);
1008 }
1009 writer->writeString(9, "$UCSORGBOTTOM");
1010 if (getCoord("$UCSORGBOTTOM", &varCoord)) {
1011 writer->writeDouble(10, varCoord.x);
1012 writer->writeDouble(20, varCoord.y);
1013 writer->writeDouble(30, varCoord.z);
1014 } else {
1015 writer->writeDouble(10, 0.0);
1016 writer->writeDouble(20, 0.0);
1017 writer->writeDouble(30, 0.0);
1018 }
1019 writer->writeString(9, "$UCSORGLEFT");
1020 if (getCoord("$UCSORGLEFT", &varCoord)) {
1021 writer->writeDouble(10, varCoord.x);
1022 writer->writeDouble(20, varCoord.y);
1023 writer->writeDouble(30, varCoord.z);
1024 } else {
1025 writer->writeDouble(10, 0.0);
1026 writer->writeDouble(20, 0.0);
1027 writer->writeDouble(30, 0.0);
1028 }
1029 writer->writeString(9, "$UCSORGRIGHT");
1030 if (getCoord("$UCSORGRIGHT", &varCoord)) {
1031 writer->writeDouble(10, varCoord.x);
1032 writer->writeDouble(20, varCoord.y);
1033 writer->writeDouble(30, varCoord.z);
1034 } else {
1035 writer->writeDouble(10, 0.0);
1036 writer->writeDouble(20, 0.0);
1037 writer->writeDouble(30, 0.0);
1038 }
1039 writer->writeString(9, "$UCSORGFRONT");
1040 if (getCoord("$UCSORGFRONT", &varCoord)) {
1041 writer->writeDouble(10, varCoord.x);
1042 writer->writeDouble(20, varCoord.y);
1043 writer->writeDouble(30, varCoord.z);
1044 } else {
1045 writer->writeDouble(10, 0.0);
1046 writer->writeDouble(20, 0.0);
1047 writer->writeDouble(30, 0.0);
1048 }
1049 writer->writeString(9, "$UCSORGBACK");
1050 if (getCoord("$UCSORGBACK", &varCoord)) {
1051 writer->writeDouble(10, varCoord.x);
1052 writer->writeDouble(20, varCoord.y);
1053 writer->writeDouble(30, varCoord.z);
1054 } else {
1055 writer->writeDouble(10, 0.0);
1056 writer->writeDouble(20, 0.0);
1057 writer->writeDouble(30, 0.0);
1058 }
1059 writer->writeString(9, "$PUCSBASE");
1060 if (getStr("$PUCSBASE", &varStr))
1061 if (ver == DRW::AC1009)
1062 writer->writeUtf8Caps(2, varStr);
1063 else
1064 writer->writeUtf8String(2, varStr);
1065 else
1066 writer->writeString(2, "");
1067 } //end post r12 UCS vars
1068 writer->writeString(9, "$PUCSNAME");
1069 if (getStr("$PUCSNAME", &varStr))
1070 if (ver == DRW::AC1009)
1071 writer->writeUtf8Caps(2, varStr);
1072 else
1073 writer->writeUtf8String(2, varStr);
1074 else
1075 writer->writeString(2, "");
1076 writer->writeString(9, "$PUCSORG");
1077 if (getCoord("$PUCSORG", &varCoord)) {
1078 writer->writeDouble(10, varCoord.x);
1079 writer->writeDouble(20, varCoord.y);
1080 writer->writeDouble(30, varCoord.z);
1081 } else {
1082 writer->writeDouble(10, 0.0);
1083 writer->writeDouble(20, 0.0);
1084 writer->writeDouble(30, 0.0);
1085 }
1086 writer->writeString(9, "$PUCSXDIR");
1087 if (getCoord("$PUCSXDIR", &varCoord)) {
1088 writer->writeDouble(10, varCoord.x);
1089 writer->writeDouble(20, varCoord.y);
1090 writer->writeDouble(30, varCoord.z);
1091 } else {
1092 writer->writeDouble(10, 1.0);
1093 writer->writeDouble(20, 0.0);
1094 writer->writeDouble(30, 0.0);
1095 }
1096 writer->writeString(9, "$PUCSYDIR");
1097 if (getCoord("$PUCSYDIR", &varCoord)) {
1098 writer->writeDouble(10, varCoord.x);
1099 writer->writeDouble(20, varCoord.y);
1100 writer->writeDouble(30, varCoord.z);
1101 } else {
1102 writer->writeDouble(10, 0.0);
1103 writer->writeDouble(20, 1.0);
1104 writer->writeDouble(30, 0.0);
1105 }
1106 if (ver > DRW::AC1009) { //begin post r12 PUCS vars
1107 writer->writeString(9, "$PUCSORTHOREF");
1108 if (getStr("$PUCSORTHOREF", &varStr))
1109 if (ver == DRW::AC1009)
1110 writer->writeUtf8Caps(2, varStr);
1111 else
1112 writer->writeUtf8String(2, varStr);
1113 else
1114 writer->writeString(2, "");
1115 writer->writeString(9, "$PUCSORTHOVIEW");
1116 if (getInt("$PUCSORTHOVIEW", &varInt))
1117 writer->writeInt16(70, varInt);
1118 else
1119 writer->writeInt16(70, 0);
1120 writer->writeString(9, "$PUCSORGTOP");
1121 if (getCoord("$PUCSORGTOP", &varCoord)) {
1122 writer->writeDouble(10, varCoord.x);
1123 writer->writeDouble(20, varCoord.y);
1124 writer->writeDouble(30, varCoord.z);
1125 } else {
1126 writer->writeDouble(10, 0.0);
1127 writer->writeDouble(20, 0.0);
1128 writer->writeDouble(30, 0.0);
1129 }
1130 writer->writeString(9, "$PUCSORGBOTTOM");
1131 if (getCoord("$PUCSORGBOTTOM", &varCoord)) {
1132 writer->writeDouble(10, varCoord.x);
1133 writer->writeDouble(20, varCoord.y);
1134 writer->writeDouble(30, varCoord.z);
1135 } else {
1136 writer->writeDouble(10, 0.0);
1137 writer->writeDouble(20, 0.0);
1138 writer->writeDouble(30, 0.0);
1139 }
1140 writer->writeString(9, "$PUCSORGLEFT");
1141 if (getCoord("$PUCSORGLEFT", &varCoord)) {
1142 writer->writeDouble(10, varCoord.x);
1143 writer->writeDouble(20, varCoord.y);
1144 writer->writeDouble(30, varCoord.z);
1145 } else {
1146 writer->writeDouble(10, 0.0);
1147 writer->writeDouble(20, 0.0);
1148 writer->writeDouble(30, 0.0);
1149 }
1150 writer->writeString(9, "$PUCSORGRIGHT");
1151 if (getCoord("$PUCSORGRIGHT", &varCoord)) {
1152 writer->writeDouble(10, varCoord.x);
1153 writer->writeDouble(20, varCoord.y);
1154 writer->writeDouble(30, varCoord.z);
1155 } else {
1156 writer->writeDouble(10, 0.0);
1157 writer->writeDouble(20, 0.0);
1158 writer->writeDouble(30, 0.0);
1159 }
1160 writer->writeString(9, "$PUCSORGFRONT");
1161 if (getCoord("$PUCSORGFRONT", &varCoord)) {
1162 writer->writeDouble(10, varCoord.x);
1163 writer->writeDouble(20, varCoord.y);
1164 writer->writeDouble(30, varCoord.z);
1165 } else {
1166 writer->writeDouble(10, 0.0);
1167 writer->writeDouble(20, 0.0);
1168 writer->writeDouble(30, 0.0);
1169 }
1170 writer->writeString(9, "$PUCSORGBACK");
1171 if (getCoord("$PUCSORGBACK", &varCoord)) {
1172 writer->writeDouble(10, varCoord.x);
1173 writer->writeDouble(20, varCoord.y);
1174 writer->writeDouble(30, varCoord.z);
1175 } else {
1176 writer->writeDouble(10, 0.0);
1177 writer->writeDouble(20, 0.0);
1178 writer->writeDouble(30, 0.0);
1179 }
1180 } //end post r12 PUCS vars
1181
1182 writer->writeString(9, "$USERI1");
1183 if (getInt("$USERI1", &varInt))
1184 writer->writeInt16(70, varInt);
1185 else
1186 writer->writeInt16(70, 0);
1187 writer->writeString(9, "$USERI2");
1188 if (getInt("$USERI2", &varInt))
1189 writer->writeInt16(70, varInt);
1190 else
1191 writer->writeInt16(70, 0);
1192 writer->writeString(9, "$USERI3");
1193 if (getInt("$USERI3", &varInt))
1194 writer->writeInt16(70, varInt);
1195 else
1196 writer->writeInt16(70, 0);
1197 writer->writeString(9, "$USERI4");
1198 if (getInt("$USERI4", &varInt))
1199 writer->writeInt16(70, varInt);
1200 else
1201 writer->writeInt16(70, 0);
1202 writer->writeString(9, "$USERI5");
1203 if (getInt("$USERI5", &varInt))
1204 writer->writeInt16(70, varInt);
1205 else
1206 writer->writeInt16(70, 0);
1207 writer->writeString(9, "$USERR1");
1208 if (getDouble("$USERR1", &varDouble))
1209 writer->writeDouble(40, varDouble);
1210 else
1211 writer->writeDouble(40, 0.0);
1212 writer->writeString(9, "$USERR2");
1213 if (getDouble("$USERR2", &varDouble))
1214 writer->writeDouble(40, varDouble);
1215 else
1216 writer->writeDouble(40, 0.0);
1217 writer->writeString(9, "$USERR3");
1218 if (getDouble("$USERR3", &varDouble))
1219 writer->writeDouble(40, varDouble);
1220 else
1221 writer->writeDouble(40, 0.0);
1222 writer->writeString(9, "$USERR4");
1223 if (getDouble("$USERR4", &varDouble))
1224 writer->writeDouble(40, varDouble);
1225 else
1226 writer->writeDouble(40, 0.0);
1227 writer->writeString(9, "$USERR5");
1228 if (getDouble("$USERR5", &varDouble))
1229 writer->writeDouble(40, varDouble);
1230 else
1231 writer->writeDouble(40, 0.0);
1232 writer->writeString(9, "$WORLDVIEW");
1233 if (getInt("$WORLDVIEW", &varInt))
1234 writer->writeInt16(70, varInt);
1235 else
1236 writer->writeInt16(70, 1);
1237 writer->writeString(9, "$SHADEDGE");
1238 if (getInt("$SHADEDGE", &varInt))
1239 writer->writeInt16(70, varInt);
1240 else
1241 writer->writeInt16(70, 3);
1242 writer->writeString(9, "$SHADEDIF");
1243 if (getInt("$SHADEDIF", &varInt))
1244 writer->writeInt16(70, varInt);
1245 else
1246 writer->writeInt16(70, 70);
1247 writer->writeString(9, "$TILEMODE");
1248 if (getInt("$TILEMODE", &varInt))
1249 writer->writeInt16(70, varInt);
1250 else
1251 writer->writeInt16(70, 1);
1252 writer->writeString(9, "$MAXACTVP");
1253 if (getInt("$MAXACTVP", &varInt))
1254 writer->writeInt16(70, varInt);
1255 else
1256 writer->writeInt16(70, 64);
1257 if (ver > DRW::AC1009) { //begin post r12 PUCS vars
1258 writer->writeString(9, "$PINSBASE");
1259 if (getCoord("$PINSBASE", &varCoord)) {
1260 writer->writeDouble(10, varCoord.x);
1261 writer->writeDouble(20, varCoord.y);
1262 writer->writeDouble(30, varCoord.z);
1263 } else {
1264 writer->writeDouble(10, 0.0);
1265 writer->writeDouble(20, 0.0);
1266 writer->writeDouble(30, 0.0);
1267 }
1268 }
1269 writer->writeString(9, "$PLIMCHECK");
1270 if (getInt("$PLIMCHECK", &varInt))
1271 writer->writeInt16(70, varInt);
1272 else
1273 writer->writeInt16(70, 0);
1274 writer->writeString(9, "$PEXTMIN");
1275 if (getCoord("$PEXTMIN", &varCoord)) {
1276 writer->writeDouble(10, varCoord.x);
1277 writer->writeDouble(20, varCoord.y);
1278 writer->writeDouble(30, varCoord.z);
1279 } else {
1280 writer->writeDouble(10, 0.0);
1281 writer->writeDouble(20, 0.0);
1282 writer->writeDouble(30, 0.0);
1283 }
1284 writer->writeString(9, "$PEXTMAX");
1285 if (getCoord("$PEXTMAX", &varCoord)) {
1286 writer->writeDouble(10, varCoord.x);
1287 writer->writeDouble(20, varCoord.y);
1288 writer->writeDouble(30, varCoord.z);
1289 } else {
1290 writer->writeDouble(10, 0.0);
1291 writer->writeDouble(20, 0.0);
1292 writer->writeDouble(30, 0.0);
1293 }
1294
1295 /* RLZ: moved to active VPORT, but can write in header if present*/
1296 if (getInt("$GRIDMODE", &varInt)) {
1297 writer->writeString(9, "$GRIDMODE");
1298 writer->writeInt16(70, varInt);
1299 }
1300 if (getInt("$SNAPSTYLE", &varInt)) {
1301 writer->writeString(9, "$SNAPSTYLE");
1302 writer->writeInt16(70, varInt);
1303 }
1304 if (getCoord("$GRIDUNIT", &varCoord)) {
1305 writer->writeString(9, "$GRIDUNIT");
1306 writer->writeDouble(10, varCoord.x);
1307 writer->writeDouble(20, varCoord.y);
1308 }
1309 if (getCoord("$VIEWCTR", &varCoord)) {
1310 writer->writeString(9, "$VIEWCTR");
1311 writer->writeDouble(10, varCoord.x);
1312 writer->writeDouble(20, varCoord.y);
1313 }
1314 /* RLZ: moved to active VPORT, but can write in header if present*/
1315
1316 writer->writeString(9, "$PLIMMIN");
1317 if (getCoord("$PLIMMIN", &varCoord)) {
1318 writer->writeDouble(10, varCoord.x);
1319 writer->writeDouble(20, varCoord.y);
1320 } else {
1321 writer->writeDouble(10, 0.0);
1322 writer->writeDouble(20, 0.0);
1323 }
1324 writer->writeString(9, "$PLIMMAX");
1325 if (getCoord("$PLIMMAX", &varCoord)) {
1326 writer->writeDouble(10, varCoord.x);
1327 writer->writeDouble(20, varCoord.y);
1328 } else {
1329 writer->writeDouble(10, 297.0);
1330 writer->writeDouble(20, 210.0);
1331 }
1332 writer->writeString(9, "$UNITMODE");
1333 if (getInt("$UNITMODE", &varInt))
1334 writer->writeInt16(70, varInt);
1335 else
1336 writer->writeInt16(70, 0);
1337 writer->writeString(9, "$VISRETAIN");
1338 if (getInt("$VISRETAIN", &varInt))
1339 writer->writeInt16(70, varInt);
1340 else
1341 writer->writeInt16(70, 1);
1342 writer->writeString(9, "$PLINEGEN");
1343 if (getInt("$PLINEGEN", &varInt))
1344 writer->writeInt16(70, varInt);
1345 else
1346 writer->writeInt16(70, 0);
1347 writer->writeString(9, "$PSLTSCALE");
1348 if (getInt("$PSLTSCALE", &varInt))
1349 writer->writeInt16(70, varInt);
1350 else
1351 writer->writeInt16(70, 1);
1352 if (ver > DRW::AC1009){//start port r12 vars
1353 writer->writeString(9, "$TREEDEPTH");
1354 if (getInt("$TREEDEPTH", &varInt))
1355 writer->writeInt16(70, varInt);
1356 else
1357 writer->writeInt16(70, 3020);
1358 writer->writeString(9, "$CMLSTYLE");
1359 if (getStr("$CMLSTYLE", &varStr))
1360 if (ver == DRW::AC1009)
1361 writer->writeUtf8Caps(2, varStr);
1362 else
1363 writer->writeUtf8String(2, varStr);
1364 else
1365 writer->writeString(2, "Standard");
1366 writer->writeString(9, "$CMLJUST");
1367 if (getInt("$CMLJUST", &varInt))
1368 writer->writeInt16(70, varInt);
1369 else
1370 writer->writeInt16(70, 0);
1371 writer->writeString(9, "$CMLSCALE");
1372 if (getDouble("$CMLSCALE", &varDouble))
1373 writer->writeDouble(40, varDouble);
1374 else
1375 writer->writeDouble(40, 20.0);
1376 writer->writeString(9, "$PROXYGRAPHICS");
1377 if (getInt("$PROXYGRAPHICS", &varInt))
1378 writer->writeInt16(70, varInt);
1379 else
1380 writer->writeInt16(70, 1);
1381 writer->writeString(9, "$MEASUREMENT");
1382 if (getInt("$MEASUREMENT", &varInt))
1383 writer->writeInt16(70, varInt);
1384 else
1385 writer->writeInt16(70, 1);
1386 writer->writeString(9, "$CELWEIGHT");
1387 if (getInt("$CELWEIGHT", &varInt))
1388 writer->writeInt16(370, varInt);
1389 else
1390 writer->writeInt16(370, -1);
1391 writer->writeString(9, "$ENDCAPS");
1392 if (getInt("$ENDCAPS", &varInt))
1393 writer->writeInt16(280, varInt);
1394 else
1395 writer->writeInt16(280, 0);
1396 writer->writeString(9, "$JOINSTYLE");
1397 if (getInt("$JOINSTYLE", &varInt))
1398 writer->writeInt16(280, varInt);
1399 else
1400 writer->writeInt16(280, 0);
1401 writer->writeString(9, "$LWDISPLAY"); //RLZ bool flag, verify in bin version
1402 if (getInt("$LWDISPLAY", &varInt))
1403 writer->writeInt16(290, varInt);
1404 else
1405 writer->writeInt16(290, 0);
1406 if (ver > DRW::AC1014) {
1407 writer->writeString(9, "$INSUNITS");
1408 if (getInt("$INSUNITS", &varInt))
1409 writer->writeInt16(70, varInt);
1410 else
1411 writer->writeInt16(70, 0);
1412 }
1413 writer->writeString(9, "$HYPERLINKBASE");
1414 if (getStr("$HYPERLINKBASE", &varStr))
1415 if (ver == DRW::AC1009)
1416 writer->writeUtf8Caps(1, varStr);
1417 else
1418 writer->writeUtf8String(1, varStr);
1419 else
1420 writer->writeString(1, "");
1421 writer->writeString(9, "$STYLESHEET");
1422 if (getStr("$STYLESHEET", &varStr))
1423 if (ver == DRW::AC1009)
1424 writer->writeUtf8Caps(1, varStr);
1425 else
1426 writer->writeUtf8String(1, varStr);
1427 else
1428 writer->writeString(1, "");
1429 writer->writeString(9, "$XEDIT"); //RLZ bool flag, verify in bin version
1430 if (getInt("$XEDIT", &varInt))
1431 writer->writeInt16(290, varInt);
1432 else
1433 writer->writeInt16(290, 1);
1434 writer->writeString(9, "$CEPSNTYPE");
1435 if (getInt("$CEPSNTYPE", &varInt))
1436 writer->writeInt16(380, varInt);
1437 else
1438 writer->writeInt16(380, 0);
1439 writer->writeString(9, "$PSTYLEMODE"); //RLZ bool flag, verify in bin version
1440 if (getInt("$PSTYLEMODE", &varInt))
1441 writer->writeInt16(290, varInt);
1442 else
1443 writer->writeInt16(290, 1);
1444 //RLZ: here $FINGERPRINTGUID and $VERSIONGUID, do not add?
1445 writer->writeString(9, "$EXTNAMES"); //RLZ bool flag, verify in bin version
1446 if (getInt("$EXTNAMES", &varInt))
1447 writer->writeInt16(290, varInt);
1448 else
1449 writer->writeInt16(290, 1);
1450 writer->writeString(9, "$PSVPSCALE");
1451 if (getDouble("$PSVPSCALE", &varDouble))
1452 writer->writeDouble(40, varDouble);
1453 else
1454 writer->writeDouble(40, 0.0);
1455 writer->writeString(9, "$OLESTARTUP"); //RLZ bool flag, verify in bin version
1456 if (getInt("$OLESTARTUP", &varInt))
1457 writer->writeInt16(290, varInt);
1458 else
1459 writer->writeInt16(290, 0);
1460 }
1461 if (ver > DRW::AC1015) {// and post v2004 vars
1462 writer->writeString(9, "$SORTENTS");
1463 if (getInt("$SORTENTS", &varInt))
1464 writer->writeInt16(280, varInt);
1465 else
1466 writer->writeInt16(280, 127);
1467 writer->writeString(9, "$INDEXCTL");
1468 if (getInt("$INDEXCTL", &varInt))
1469 writer->writeInt16(280, varInt);
1470 else
1471 writer->writeInt16(280, 0);
1472 writer->writeString(9, "$HIDETEXT");
1473 if (getInt("$HIDETEXT", &varInt))
1474 writer->writeInt16(280, varInt);
1475 else
1476 writer->writeInt16(280, 1);
1477 writer->writeString(9, "$XCLIPFRAME"); //RLZ bool flag, verify in bin version
1478 if (ver > DRW::AC1021) {
1479 if (getInt("$XCLIPFRAME", &varInt))
1480 writer->writeInt16(280, varInt);
1481 else
1482 writer->writeInt16(280, 0);
1483 } else {
1484 if (getInt("$XCLIPFRAME", &varInt))
1485 writer->writeInt16(290, varInt);
1486 else
1487 writer->writeInt16(290, 0);
1488 }
1489 writer->writeString(9, "$HALOGAP");
1490 if (getInt("$HALOGAP", &varInt))
1491 writer->writeInt16(280, varInt);
1492 else
1493 writer->writeInt16(280, 0);
1494 writer->writeString(9, "$OBSCOLOR");
1495 if (getInt("$OBSCOLOR", &varInt))
1496 writer->writeInt16(70, varInt);
1497 else
1498 writer->writeInt16(70, 257);
1499 writer->writeString(9, "$OBSLTYPE");
1500 if (getInt("$OBSLTYPE", &varInt))
1501 writer->writeInt16(280, varInt);
1502 else
1503 writer->writeInt16(280, 0);
1504 writer->writeString(9, "$INTERSECTIONDISPLAY");
1505 if (getInt("$INTERSECTIONDISPLAY", &varInt))
1506 writer->writeInt16(280, varInt);
1507 else
1508 writer->writeInt16(280, 0);
1509 writer->writeString(9, "$INTERSECTIONCOLOR");
1510 if (getInt("$INTERSECTIONCOLOR", &varInt))
1511 writer->writeInt16(70, varInt);
1512 else
1513 writer->writeInt16(70, 257);
1514 writer->writeString(9, "$DIMASSOC");
1515 if (getInt("$DIMASSOC", &varInt))
1516 writer->writeInt16(280, varInt);
1517 else
1518 writer->writeInt16(280, 1);
1519 writer->writeString(9, "$PROJECTNAME");
1520 if (getStr("$PROJECTNAME", &varStr))
1521 writer->writeUtf8String(1, varStr);
1522 else
1523 writer->writeString(1, "");
1524 }
1525 if (ver > DRW::AC1018) {// and post v2007 vars
1526 writer->writeString(9, "$CAMERADISPLAY"); //RLZ bool flag, verify in bin version
1527 if (getInt("$CAMERADISPLAY", &varInt))
1528 writer->writeInt16(290, varInt);
1529 else
1530 writer->writeInt16(290, 0);
1531 writer->writeString(9, "$LENSLENGTH");
1532 if (getDouble("$LENSLENGTH", &varDouble))
1533 writer->writeDouble(40, varDouble);
1534 else
1535 writer->writeDouble(40, 50.0);
1536 writer->writeString(9, "$CAMERAHEIGHT");
1537 if (getDouble("$CAMERAHEIGHT", &varDouble))
1538 writer->writeDouble(40, varDouble);
1539 else
1540 writer->writeDouble(40, 0.0);
1541 writer->writeString(9, "$STEPSPERSEC");
1542 if (getDouble("$STEPSPERSEC", &varDouble))
1543 writer->writeDouble(40, varDouble);
1544 else
1545 writer->writeDouble(40, 2.0);
1546 writer->writeString(9, "$STEPSIZE");
1547 if (getDouble("$STEPSIZE", &varDouble))
1548 writer->writeDouble(40, varDouble);
1549 else
1550 writer->writeDouble(40, 50.0);
1551 writer->writeString(9, "$3DDWFPREC");
1552 if (getDouble("$3DDWFPREC", &varDouble))
1553 writer->writeDouble(40, varDouble);
1554 else
1555 writer->writeDouble(40, 2.0);
1556 writer->writeString(9, "$PSOLWIDTH");
1557 if (getDouble("$PSOLWIDTH", &varDouble))
1558 writer->writeDouble(40, varDouble);
1559 else
1560 writer->writeDouble(40, 5.0);
1561 writer->writeString(9, "$PSOLHEIGHT");
1562 if (getDouble("$PSOLHEIGHT", &varDouble))
1563 writer->writeDouble(40, varDouble);
1564 else
1565 writer->writeDouble(40, 80.0);
1566 writer->writeString(9, "$LOFTANG1");
1567 if (getDouble("$LOFTANG1", &varDouble))
1568 writer->writeDouble(40, varDouble);
1569 else
1570 writer->writeDouble(40, M_PI_2);
1571 writer->writeString(9, "$LOFTANG2");
1572 if (getDouble("$LOFTANG2", &varDouble))
1573 writer->writeDouble(40, varDouble);
1574 else
1575 writer->writeDouble(40, M_PI_2);
1576 writer->writeString(9, "$LOFTMAG1");
1577 if (getDouble("$LOFTMAG1", &varDouble))
1578 writer->writeDouble(40, varDouble);
1579 else
1580 writer->writeDouble(40, 0.0);
1581 writer->writeString(9, "$LOFTMAG2");
1582 if (getDouble("$LOFTMAG2", &varDouble))
1583 writer->writeDouble(40, varDouble);
1584 else
1585 writer->writeDouble(40, 0.0);
1586 writer->writeString(9, "$LOFTPARAM");
1587 if (getInt("$LOFTPARAM", &varInt))
1588 writer->writeInt16(70, varInt);
1589 else
1590 writer->writeInt16(70, 7);
1591 writer->writeString(9, "$LOFTNORMALS");
1592 if (getInt("$LOFTNORMALS", &varInt))
1593 writer->writeInt16(280, varInt);
1594 else
1595 writer->writeInt16(280, 1);
1596 writer->writeString(9, "$LATITUDE");
1597 if (getDouble("$LATITUDE", &varDouble))
1598 writer->writeDouble(40, varDouble);
1599 else
1600 writer->writeDouble(40, 1.0);
1601 writer->writeString(9, "$LONGITUDE");
1602 if (getDouble("$LONGITUDE", &varDouble))
1603 writer->writeDouble(40, varDouble);
1604 else
1605 writer->writeDouble(40, 1.0);
1606 writer->writeString(9, "$NORTHDIRECTION");
1607 if (getDouble("$LONGITUDE", &varDouble))
1608 writer->writeDouble(40, varDouble);
1609 else
1610 writer->writeDouble(40, 0.0);
1611 writer->writeString(9, "$TIMEZONE");
1612 if (getInt("$TIMEZONE", &varInt))
1613 writer->writeInt16(70, varInt);
1614 else
1615 writer->writeInt16(70, -8000);
1616 writer->writeString(9, "$LIGHTGLYPHDISPLAY");
1617 if (getInt("$LIGHTGLYPHDISPLAY", &varInt))
1618 writer->writeInt16(280, varInt);
1619 else
1620 writer->writeInt16(280, 1);
1621 writer->writeString(9, "$TILEMODELIGHTSYNCH");
1622 if (getInt("$TILEMODELIGHTSYNCH", &varInt))
1623 writer->writeInt16(280, varInt);
1624 else
1625 writer->writeInt16(280, 1);
1626 //$CMATERIAL is a handle
1627 writer->writeString(9, "$SOLIDHIST");
1628 if (getInt("$SOLIDHIST", &varInt))
1629 writer->writeInt16(280, varInt);
1630 else
1631 writer->writeInt16(280, 1);
1632 writer->writeString(9, "$SHOWHIST");
1633 if (getInt("$SHOWHIST", &varInt))
1634 writer->writeInt16(280, varInt);
1635 else
1636 writer->writeInt16(280, 1);
1637 writer->writeString(9, "$DWFFRAME");
1638 if (getInt("$DWFFRAME", &varInt))
1639 writer->writeInt16(280, varInt);
1640 else
1641 writer->writeInt16(280, 2);
1642 writer->writeString(9, "$DGNFRAME");
1643 if (getInt("$DGNFRAME", &varInt))
1644 writer->writeInt16(280, varInt);
1645 else
1646 writer->writeInt16(280, 0);
1647 writer->writeString(9, "$REALWORLDSCALE"); //RLZ bool flag, verify in bin version
1648 if (getInt("$REALWORLDSCALE", &varInt))
1649 writer->writeInt16(290, varInt);
1650 else
1651 writer->writeInt16(290, 1);
1652 writer->writeString(9, "$INTERFERECOLOR");
1653 if (getInt("$INTERFERECOLOR", &varInt))
1654 writer->writeInt16(62, varInt);
1655 else
1656 writer->writeInt16(62, 1);
1657 //$INTERFEREOBJVS is a handle
1658 //$INTERFEREVPVS is a handle
1659 writer->writeString(9, "$CSHADOW");
1660 if (getInt("$CSHADOW", &varInt))
1661 writer->writeInt16(280, varInt);
1662 else
1663 writer->writeInt16(280, 0);
1664 writer->writeString(9, "$SHADOWPLANELOCATION");
1665 if (getDouble("$SHADOWPLANELOCATION", &varDouble))
1666 writer->writeDouble(40, varDouble);
1667 else
1668 writer->writeDouble(40, 0.0);
1669 }
1670
1671 #ifdef DRW_DBG
1672 std::map<std::string,DRW_Variant *>::const_iterator it;
1673 for ( it=vars.begin() ; it != vars.end(); ++it ){
1674 DRW_DBG((*it).first); DRW_DBG("\n");
1675 }
1676 #endif
1677 }
1678
addDouble(std::string key,double value,int code)1679 void DRW_Header::addDouble(std::string key, double value, int code){
1680 curr = new DRW_Variant(code, value);
1681 vars[key] =curr;
1682 }
1683
addInt(std::string key,int value,int code)1684 void DRW_Header::addInt(std::string key, int value, int code){
1685 curr = new DRW_Variant(code, value);
1686 vars[key] =curr;
1687 }
1688
addStr(std::string key,std::string value,int code)1689 void DRW_Header::addStr(std::string key, std::string value, int code){
1690 curr = new DRW_Variant(code, value);
1691 vars[key] =curr;
1692 }
1693
addCoord(std::string key,DRW_Coord value,int code)1694 void DRW_Header::addCoord(std::string key, DRW_Coord value, int code){
1695 curr = new DRW_Variant(code, value);
1696 vars[key] =curr;
1697 }
1698
getDouble(std::string key,double * varDouble)1699 bool DRW_Header::getDouble(std::string key, double *varDouble){
1700 bool result = false;
1701 std::map<std::string,DRW_Variant *>::iterator it;
1702 it=vars.find( key);
1703 if (it != vars.end()) {
1704 DRW_Variant *var = (*it).second;
1705 if (var->type() == DRW_Variant::DOUBLE) {
1706 *varDouble = var->content.d;
1707 result = true;
1708 }
1709 delete var;
1710 vars.erase (it);
1711 }
1712 return result;
1713 }
1714
getInt(std::string key,int * varInt)1715 bool DRW_Header::getInt(std::string key, int *varInt){
1716 bool result = false;
1717 std::map<std::string,DRW_Variant *>::iterator it;
1718 it=vars.find( key);
1719 if (it != vars.end()) {
1720 DRW_Variant *var = (*it).second;
1721 if (var->type() == DRW_Variant::INTEGER) {
1722 *varInt = var->content.i;
1723 result = true;
1724 }
1725 delete var;
1726 vars.erase (it);
1727 }
1728 return result;
1729 }
1730
getStr(std::string key,std::string * varStr)1731 bool DRW_Header::getStr(std::string key, std::string *varStr){
1732 bool result = false;
1733 std::map<std::string,DRW_Variant *>::iterator it;
1734 it=vars.find( key);
1735 if (it != vars.end()) {
1736 DRW_Variant *var = (*it).second;
1737 if (var->type() == DRW_Variant::STRING) {
1738 *varStr = *var->content.s;
1739 result = true;
1740 }
1741 delete var;
1742 vars.erase (it);
1743 }
1744 return result;
1745 }
1746
getCoord(std::string key,DRW_Coord * varCoord)1747 bool DRW_Header::getCoord(std::string key, DRW_Coord *varCoord){
1748 bool result = false;
1749 std::map<std::string,DRW_Variant *>::iterator it;
1750 it=vars.find( key);
1751 if (it != vars.end()) {
1752 DRW_Variant *var = (*it).second;
1753 if (var->type() == DRW_Variant::COORD) {
1754 *varCoord = *var->content.v;
1755 result = true;
1756 }
1757 delete var;
1758 vars.erase (it);
1759 }
1760 return result;
1761 }
1762
parseDwg(DRW::Version version,dwgBuffer * buf,dwgBuffer * hBbuf,duint8 mv)1763 bool DRW_Header::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *hBbuf, duint8 mv){
1764 bool result = true;
1765 duint32 size = buf->getRawLong32();
1766 duint32 bitSize = 0;
1767 duint32 endBitPos = 160; //start bit: 16 sentinel + 4 size
1768 DRW_DBG("\nbyte size of data: "); DRW_DBG(size);
1769 if (version > DRW::AC1021 && mv > 3) { //2010+
1770 duint32 hSize = buf->getRawLong32();
1771 endBitPos += 32; //start bit: + 4 hight size
1772 DRW_DBG("\n2010+ & MV> 3, higth 32b: "); DRW_DBG(hSize);
1773 }
1774 //RLZ TODO add $ACADVER var & $DWGCODEPAGE & $MEASUREMENT
1775 //RLZ TODO EN 2000 falta $CELWEIGHT, $ENDCAPS, $EXTNAMES $JOINSTYLE $LWDISPLAY $PSTYLEMODE $TDUCREATE $TDUUPDATE $XEDIT
1776
1777 //bit size of data needed to locate start of string stream in 2007+
1778 //and mark the start of handle stream
1779 //header is one object reads data and continue read strings ???
1780 if (version > DRW::AC1018) {//2007+
1781 bitSize = buf->getRawLong32();
1782 DRW_DBG("\nsize in bits: "); DRW_DBG(bitSize);
1783 endBitPos += bitSize;
1784 hBbuf->setPosition(endBitPos >>3);
1785 hBbuf->setBitPos(endBitPos&7);
1786 }
1787
1788 if (version > DRW::AC1024) {//2013+
1789 duint64 requiredVersions = buf->getBitLongLong();
1790 DRW_DBG("\nREQUIREDVERSIONS var: "); DRW_DBG(requiredVersions);
1791 }
1792 DRW_DBG("\nUnknown1: "); DRW_DBG(buf->getBitDouble());
1793 DRW_DBG("\nUnknown2: "); DRW_DBG(buf->getBitDouble());
1794 DRW_DBG("\nUnknown3: "); DRW_DBG(buf->getBitDouble());
1795 DRW_DBG("\nUnknown4: "); DRW_DBG(buf->getBitDouble());
1796 if (version < DRW::AC1021) {//2007-
1797 DRW_DBG("\nUnknown text1: "); DRW_DBG(buf->getCP8Text());
1798 DRW_DBG("\nUnknown text2: "); DRW_DBG(buf->getCP8Text());
1799 DRW_DBG("\nUnknown text3: "); DRW_DBG(buf->getCP8Text());
1800 DRW_DBG("\nUnknown text4: "); DRW_DBG(buf->getCP8Text());
1801 }
1802 DRW_DBG("\nUnknown long1 (24L): "); DRW_DBG(buf->getBitLong());
1803 DRW_DBG("\nUnknown long2 (0L): "); DRW_DBG(buf->getBitLong());
1804 if (version < DRW::AC1015) {//pre 2000
1805 DRW_DBG("\nUnknown short (0): "); DRW_DBG(buf->getBitShort());
1806 }
1807 if (version < DRW::AC1018) {//pre 2004
1808 dwgHandle hcv = hBbuf->getHandle();
1809 DRW_DBG("\nhandle of current view: "); DRW_DBGHL(hcv.code, hcv.size, hcv.ref);
1810 }
1811 vars["DIMASO"]=new DRW_Variant(70, buf->getBit());
1812 vars["DIMSHO"]=new DRW_Variant(70, buf->getBit());
1813 if (version < DRW::AC1015) {//pre 2000
1814 vars["DIMSAV"]=new DRW_Variant(70, buf->getBit());
1815 }
1816 vars["PLINEGEN"]=new DRW_Variant(70, buf->getBit());
1817 vars["ORTHOMODE"]=new DRW_Variant(70, buf->getBit());
1818 vars["REGENMODE"]=new DRW_Variant(70, buf->getBit());
1819 vars["FILLMODE"]=new DRW_Variant(70, buf->getBit());
1820 vars["QTEXTMODE"]=new DRW_Variant(70, buf->getBit());
1821 vars["PSLTSCALE"]=new DRW_Variant(70, buf->getBit());
1822 vars["LIMCHECK"]=new DRW_Variant(70, buf->getBit());
1823 if (version < DRW::AC1015) {//pre 2000
1824 vars["BLIPMODE"]=new DRW_Variant(70, buf->getBit());
1825 }
1826 if (version > DRW::AC1015) {//2004+
1827 DRW_DBG("\nUndocumented: "); DRW_DBG(buf->getBit());
1828 }
1829 vars["USRTIMER"]=new DRW_Variant(70, buf->getBit());
1830 vars["SKPOLY"]=new DRW_Variant(70, buf->getBit());
1831 vars["ANGDIR"]=new DRW_Variant(70, buf->getBit());
1832 vars["SPLFRAME"]=new DRW_Variant(70, buf->getBit());
1833 if (version < DRW::AC1015) {//pre 2000
1834 vars["ATTREQ"]=new DRW_Variant(70, buf->getBit());
1835 vars["ATTDIA"]=new DRW_Variant(70, buf->getBit());
1836 }
1837 vars["MIRRTEXT"]=new DRW_Variant(70, buf->getBit());
1838 vars["WORLDVIEW"]=new DRW_Variant(70, buf->getBit());
1839 if (version < DRW::AC1015) {//pre 2000
1840 vars["WIREFRAME"]=new DRW_Variant(70, buf->getBit());
1841 }
1842 vars["TILEMODE"]=new DRW_Variant(70, buf->getBit());
1843 vars["PLIMCHECK"]=new DRW_Variant(70, buf->getBit());
1844 vars["VISRETAIN"]=new DRW_Variant(70, buf->getBit());
1845 if (version < DRW::AC1015) {//pre 2000
1846 vars["DELOBJ"]=new DRW_Variant(70, buf->getBit());
1847 }
1848 vars["DISPSILH"]=new DRW_Variant(70, buf->getBit());
1849 vars["PELLIPSE"]=new DRW_Variant(70, buf->getBit());
1850 vars["PROXIGRAPHICS"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit??
1851 if (version < DRW::AC1015) {//pre 2000
1852 vars["DRAGMODE"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit??
1853 }
1854 vars["TREEDEPTH"]=new DRW_Variant(70, buf->getBitShort());//RLZ short or bit??
1855 vars["LUNITS"]=new DRW_Variant(70, buf->getBitShort());
1856 vars["LUPREC"]=new DRW_Variant(70, buf->getBitShort());
1857 vars["AUNITS"]=new DRW_Variant(70, buf->getBitShort());
1858 vars["AUPREC"]=new DRW_Variant(70, buf->getBitShort());
1859 if (version < DRW::AC1015) {//pre 2000
1860 vars["OSMODE"]=new DRW_Variant(70, buf->getBitShort());
1861 }
1862 vars["ATTMODE"]=new DRW_Variant(70, buf->getBitShort());
1863 if (version < DRW::AC1015) {//pre 2000
1864 vars["COORDS"]=new DRW_Variant(70, buf->getBitShort());
1865 }
1866 vars["PDMODE"]=new DRW_Variant(70, buf->getBitShort());
1867 if (version < DRW::AC1015) {//pre 2000
1868 vars["PICKSTYLE"]=new DRW_Variant(70, buf->getBitShort());
1869 }
1870 if (version > DRW::AC1015) {//2004+
1871 DRW_DBG("\nUnknown long 1: "); DRW_DBG(buf->getBitLong());
1872 DRW_DBG("\nUnknown long 2: "); DRW_DBG(buf->getBitLong());
1873 DRW_DBG("\nUnknown long 3: "); DRW_DBG(buf->getBitLong());
1874 }
1875 vars["USERI1"]=new DRW_Variant(70, buf->getBitShort());
1876 vars["USERI2"]=new DRW_Variant(70, buf->getBitShort());
1877 vars["USERI3"]=new DRW_Variant(70, buf->getBitShort());
1878 vars["USERI4"]=new DRW_Variant(70, buf->getBitShort());
1879 vars["USERI5"]=new DRW_Variant(70, buf->getBitShort());
1880 vars["SPLINESEGS"]=new DRW_Variant(70, buf->getBitShort());
1881 vars["SURFU"]=new DRW_Variant(70, buf->getBitShort());
1882 vars["SURFV"]=new DRW_Variant(70, buf->getBitShort());
1883 vars["SURFTYPE"]=new DRW_Variant(70, buf->getBitShort());
1884 vars["SURFTAB1"]=new DRW_Variant(70, buf->getBitShort());
1885 vars["SURFTAB2"]=new DRW_Variant(70, buf->getBitShort());
1886 vars["SPLINETYPE"]=new DRW_Variant(70, buf->getBitShort());
1887 vars["SHADEDGE"]=new DRW_Variant(70, buf->getBitShort());
1888 vars["SHADEDIF"]=new DRW_Variant(70, buf->getBitShort());
1889 vars["UNITMODE"]=new DRW_Variant(70, buf->getBitShort());
1890 vars["MAXACTVP"]=new DRW_Variant(70, buf->getBitShort());
1891 vars["ISOLINES"]=new DRW_Variant(70, buf->getBitShort());//////////////////
1892 vars["CMLJUST"]=new DRW_Variant(70, buf->getBitShort());
1893 vars["TEXTQLTY"]=new DRW_Variant(70, buf->getBitShort());/////////////////////
1894 vars["LTSCALE"]=new DRW_Variant(40, buf->getBitDouble());
1895 vars["TEXTSIZE"]=new DRW_Variant(40, buf->getBitDouble());
1896 vars["TRACEWID"]=new DRW_Variant(40, buf->getBitDouble());
1897 vars["SKETCHINC"]=new DRW_Variant(40, buf->getBitDouble());
1898 vars["FILLETRAD"]=new DRW_Variant(40, buf->getBitDouble());
1899 vars["THICKNESS"]=new DRW_Variant(40, buf->getBitDouble());
1900 vars["ANGBASE"]=new DRW_Variant(50, buf->getBitDouble());
1901 vars["PDSIZE"]=new DRW_Variant(40, buf->getBitDouble());
1902 vars["PLINEWID"]=new DRW_Variant(40, buf->getBitDouble());
1903 vars["USERR1"]=new DRW_Variant(40, buf->getBitDouble());
1904 vars["USERR2"]=new DRW_Variant(40, buf->getBitDouble());
1905 vars["USERR3"]=new DRW_Variant(40, buf->getBitDouble());
1906 vars["USERR4"]=new DRW_Variant(40, buf->getBitDouble());
1907 vars["USERR5"]=new DRW_Variant(40, buf->getBitDouble());
1908 vars["CHAMFERA"]=new DRW_Variant(40, buf->getBitDouble());
1909 vars["CHAMFERB"]=new DRW_Variant(40, buf->getBitDouble());
1910 vars["CHAMFERC"]=new DRW_Variant(40, buf->getBitDouble());
1911 vars["CHAMFERD"]=new DRW_Variant(40, buf->getBitDouble());
1912 vars["FACETRES"]=new DRW_Variant(40, buf->getBitDouble());/////////////////////////
1913 vars["CMLSCALE"]=new DRW_Variant(40, buf->getBitDouble());
1914 vars["CELTSCALE"]=new DRW_Variant(40, buf->getBitDouble());
1915 if (version < DRW::AC1021) {//2004-
1916 vars["MENU"]=new DRW_Variant(1, buf->getCP8Text());
1917 }
1918 ddouble64 msec, day;
1919 day = buf->getBitLong();
1920 msec = buf->getBitLong();
1921 while (msec > 0)
1922 msec /=10;
1923 vars["TDCREATE"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec
1924 // vars["TDCREATE"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec
1925 // vars["TDCREATE"]=new DRW_Variant(40, buf->getBitLong());
1926 day = buf->getBitLong();
1927 msec = buf->getBitLong();
1928 while (msec > 0)
1929 msec /=10;
1930 vars["TDUPDATE"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec
1931 // vars["TDUPDATE"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec
1932 // vars["TDUPDATE"]=new DRW_Variant(40, buf->getBitLong());
1933 if (version > DRW::AC1015) {//2004+
1934 DRW_DBG("\nUnknown long 4: "); DRW_DBG(buf->getBitLong());
1935 DRW_DBG("\nUnknown long 5: "); DRW_DBG(buf->getBitLong());
1936 DRW_DBG("\nUnknown long 6: "); DRW_DBG(buf->getBitLong());
1937 }
1938 day = buf->getBitLong();
1939 msec = buf->getBitLong();
1940 while (msec > 0)
1941 msec /=10;
1942 vars["TDINDWG"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec
1943 // vars["TDINDWG"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec
1944 // vars["TDINDWG"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec
1945 day = buf->getBitLong();
1946 msec = buf->getBitLong();
1947 while (msec > 0)
1948 msec /=10;
1949 vars["TDUSRTIMER"]=new DRW_Variant(40, day+msec);//RLZ: TODO convert to day.msec
1950 // vars["TDUSRTIMER"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec
1951 // vars["TDUSRTIMER"]=new DRW_Variant(40, buf->getBitLong());//RLZ: TODO convert to day.msec
1952 vars["CECOLOR"]=new DRW_Variant(62, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color
1953 dwgHandle HANDSEED = buf->getHandle();//allways present in data stream
1954 DRW_DBG("\nHANDSEED: "); DRW_DBGHL(HANDSEED.code, HANDSEED.size, HANDSEED.ref);
1955 dwgHandle CLAYER = hBbuf->getHandle();
1956 DRW_DBG("\nCLAYER: "); DRW_DBGHL(CLAYER.code, CLAYER.size, CLAYER.ref);
1957 dwgHandle TEXTSTYLE = hBbuf->getHandle();
1958 DRW_DBG("\nTEXTSTYLE: "); DRW_DBGHL(TEXTSTYLE.code, TEXTSTYLE.size, TEXTSTYLE.ref);
1959 dwgHandle CELTYPE = hBbuf->getHandle();
1960 DRW_DBG("\nCELTYPE: "); DRW_DBGHL(CELTYPE.code, CELTYPE.size, CELTYPE.ref);
1961 if (version > DRW::AC1018) {//2007+
1962 dwgHandle CMATERIAL = hBbuf->getHandle();
1963 DRW_DBG("\nCMATERIAL: "); DRW_DBGHL(CMATERIAL.code, CMATERIAL.size, CMATERIAL.ref);
1964 }
1965 dwgHandle DIMSTYLE = hBbuf->getHandle();
1966 DRW_DBG("\nDIMSTYLE: "); DRW_DBGHL(DIMSTYLE.code, DIMSTYLE.size, DIMSTYLE.ref);
1967 dwgHandle CMLSTYLE = hBbuf->getHandle();
1968 DRW_DBG("\nCMLSTYLE: "); DRW_DBGHL(CMLSTYLE.code, CMLSTYLE.size, CMLSTYLE.ref);
1969 if (version > DRW::AC1014) {//2000+
1970 vars["PSVPSCALE"]=new DRW_Variant(40, buf->getBitDouble());
1971 }
1972 vars["PINSBASE"]=new DRW_Variant(10, buf->get3BitDouble());
1973 vars["PEXTMIN"]=new DRW_Variant(10, buf->get3BitDouble());
1974 vars["PEXTMAX"]=new DRW_Variant(10, buf->get3BitDouble());
1975 vars["PLIMMIN"]=new DRW_Variant(10, buf->get2RawDouble());
1976 vars["PLIMMAX"]=new DRW_Variant(10, buf->get2RawDouble());
1977 vars["PELEVATION"]=new DRW_Variant(40, buf->getBitDouble());
1978 vars["PUCSORG"]=new DRW_Variant(10, buf->get3BitDouble());
1979 vars["PUCSXDIR"]=new DRW_Variant(10, buf->get3BitDouble());
1980 vars["PUCSYDIR"]=new DRW_Variant(10, buf->get3BitDouble());
1981 dwgHandle PUCSNAME = hBbuf->getHandle();
1982 DRW_DBG("\nPUCSNAME: "); DRW_DBGHL(PUCSNAME.code, PUCSNAME.size, PUCSNAME.ref);
1983 if (version > DRW::AC1014) {//2000+
1984 dwgHandle PUCSORTHOREF = hBbuf->getHandle();
1985 DRW_DBG("\nPUCSORTHOREF: "); DRW_DBGHL(PUCSORTHOREF.code, PUCSORTHOREF.size, PUCSORTHOREF.ref);
1986 vars["PUCSORTHOVIEW"]=new DRW_Variant(70, buf->getBitShort());
1987 dwgHandle PUCSBASE = hBbuf->getHandle();
1988 DRW_DBG("\nPUCSBASE: "); DRW_DBGHL(PUCSBASE.code, PUCSBASE.size, PUCSBASE.ref);
1989 vars["PUCSORGTOP"]=new DRW_Variant(10, buf->get3BitDouble());
1990 vars["PUCSORGBOTTOM"]=new DRW_Variant(10, buf->get3BitDouble());
1991 vars["PUCSORGLEFT"]=new DRW_Variant(10, buf->get3BitDouble());
1992 vars["PUCSORGRIGHT"]=new DRW_Variant(10, buf->get3BitDouble());
1993 vars["PUCSORGFRONT"]=new DRW_Variant(10, buf->get3BitDouble());
1994 vars["PUCSORGBACK"]=new DRW_Variant(10, buf->get3BitDouble());
1995 }
1996 vars["INSBASE"]=new DRW_Variant(10, buf->get3BitDouble());
1997 vars["EXTMIN"]=new DRW_Variant(10, buf->get3BitDouble());
1998 vars["EXTMAX"]=new DRW_Variant(10, buf->get3BitDouble());
1999 vars["LIMMIN"]=new DRW_Variant(10, buf->get2RawDouble());
2000 vars["LIMMAX"]=new DRW_Variant(10, buf->get2RawDouble());
2001 vars["ELEVATION"]=new DRW_Variant(40, buf->getBitDouble());
2002 vars["UCSORG"]=new DRW_Variant(10, buf->get3BitDouble());
2003 vars["UCSXDIR"]=new DRW_Variant(10, buf->get3BitDouble());
2004 vars["UCSYDIR"]=new DRW_Variant(10, buf->get3BitDouble());
2005 dwgHandle UCSNAME = hBbuf->getHandle();
2006 DRW_DBG("\nUCSNAME: "); DRW_DBGHL(UCSNAME.code, UCSNAME.size, UCSNAME.ref);
2007 if (version > DRW::AC1014) {//2000+
2008 dwgHandle UCSORTHOREF = hBbuf->getHandle();
2009 DRW_DBG("\nUCSORTHOREF: "); DRW_DBGHL(UCSORTHOREF.code, UCSORTHOREF.size, UCSORTHOREF.ref);
2010 vars["UCSORTHOVIEW"]=new DRW_Variant(70, buf->getBitShort());
2011 dwgHandle UCSBASE = hBbuf->getHandle();
2012 DRW_DBG("\nUCSBASE: "); DRW_DBGHL(UCSBASE.code, UCSBASE.size, UCSBASE.ref);
2013 vars["UCSORGTOP"]=new DRW_Variant(10, buf->get3BitDouble());
2014 vars["UCSORGBOTTOM"]=new DRW_Variant(10, buf->get3BitDouble());
2015 vars["UCSORGLEFT"]=new DRW_Variant(10, buf->get3BitDouble());
2016 vars["UCSORGRIGHT"]=new DRW_Variant(10, buf->get3BitDouble());
2017 vars["UCSORGFRONT"]=new DRW_Variant(10, buf->get3BitDouble());
2018 vars["UCSORGBACK"]=new DRW_Variant(10, buf->get3BitDouble());
2019 if (version < DRW::AC1021) {//2004-
2020 vars["DIMPOST"]=new DRW_Variant(1, buf->getCP8Text());
2021 vars["DIMAPOST"]=new DRW_Variant(1, buf->getCP8Text());
2022 }
2023 }
2024 if (version < DRW::AC1015) {//r14-
2025 vars["DIMTOL"]=new DRW_Variant(70, buf->getBit());
2026 vars["DIMLIM"]=new DRW_Variant(70, buf->getBit());
2027 vars["DIMTIH"]=new DRW_Variant(70, buf->getBit());
2028 vars["DIMTOH"]=new DRW_Variant(70, buf->getBit());
2029 vars["DIMSE1"]=new DRW_Variant(70, buf->getBit());
2030 vars["DIMSE2"]=new DRW_Variant(70, buf->getBit());
2031 vars["DIMALT"]=new DRW_Variant(70, buf->getBit());
2032 vars["DIMTOFL"]=new DRW_Variant(70, buf->getBit());
2033 vars["DIMSAH"]=new DRW_Variant(70, buf->getBit());
2034 vars["DIMTIX"]=new DRW_Variant(70, buf->getBit());
2035 vars["DIMSOXD"]=new DRW_Variant(70, buf->getBit());
2036 vars["DIMALTD"]=new DRW_Variant(70, buf->getRawChar8());
2037 vars["DIMZIN"]=new DRW_Variant(70, buf->getRawChar8());
2038 vars["DIMSD1"]=new DRW_Variant(70, buf->getBit());
2039 vars["DIMSD2"]=new DRW_Variant(70, buf->getBit());
2040 vars["DIMTOLJ"]=new DRW_Variant(70, buf->getRawChar8());
2041 vars["DIMJUST"]=new DRW_Variant(70, buf->getRawChar8());
2042 vars["DIMFIT"]=new DRW_Variant(70, buf->getRawChar8());///////////
2043 vars["DIMUPT"]=new DRW_Variant(70, buf->getBit());
2044 vars["DIMTZIN"]=new DRW_Variant(70, buf->getRawChar8());
2045 vars["DIMALTZ"]=new DRW_Variant(70, buf->getRawChar8());
2046 vars["DIMALTTZ"]=new DRW_Variant(70, buf->getRawChar8());
2047 vars["DIMTAD"]=new DRW_Variant(70, buf->getRawChar8());
2048 vars["DIMUNIT"]=new DRW_Variant(70, buf->getBitShort());///////////
2049 vars["DIMAUNIT"]=new DRW_Variant(70, buf->getBitShort());
2050 vars["DIMDEC"]=new DRW_Variant(70, buf->getBitShort());
2051 vars["DIMTDEC"]=new DRW_Variant(70, buf->getBitShort());
2052 vars["DIMALTU"]=new DRW_Variant(70, buf->getBitShort());
2053 vars["DIMALTTD"]=new DRW_Variant(70, buf->getBitShort());
2054 dwgHandle DIMTXSTY = hBbuf->getHandle();
2055 DRW_DBG("\nDIMTXSTY: "); DRW_DBGHL(DIMTXSTY.code, DIMTXSTY.size, DIMTXSTY.ref);
2056 }
2057 vars["DIMSCALE"]=new DRW_Variant(40, buf->getBitDouble());
2058 vars["DIMASZ"]=new DRW_Variant(40, buf->getBitDouble());
2059 vars["DIMEXO"]=new DRW_Variant(40, buf->getBitDouble());
2060 vars["DIMDLI"]=new DRW_Variant(40, buf->getBitDouble());
2061 vars["DIMEXE"]=new DRW_Variant(40, buf->getBitDouble());
2062 vars["DIMRND"]=new DRW_Variant(40, buf->getBitDouble());
2063 vars["DIMDLE"]=new DRW_Variant(40, buf->getBitDouble());
2064 vars["DIMTP"]=new DRW_Variant(40, buf->getBitDouble());
2065 vars["DIMTM"]=new DRW_Variant(40, buf->getBitDouble());
2066 if (version > DRW::AC1018) {//2007+
2067 vars["DIMFXL"]=new DRW_Variant(40, buf->getBitDouble());//////////////////
2068 vars["DIMJOGANG"]=new DRW_Variant(40, buf->getBitDouble());///////////////
2069 vars["DIMTFILL"]=new DRW_Variant(70, buf->getBitShort());
2070 vars["DIMTFILLCLR"]=new DRW_Variant(62, buf->getCmColor(version));
2071 }
2072 if (version > DRW::AC1014) {//2000+
2073 vars["DIMTOL"]=new DRW_Variant(70, buf->getBit());
2074 vars["DIMLIM"]=new DRW_Variant(70, buf->getBit());
2075 vars["DIMTIH"]=new DRW_Variant(70, buf->getBit());
2076 vars["DIMTOH"]=new DRW_Variant(70, buf->getBit());
2077 vars["DIMSE1"]=new DRW_Variant(70, buf->getBit());
2078 vars["DIMSE2"]=new DRW_Variant(70, buf->getBit());
2079 vars["DIMTAD"]=new DRW_Variant(70, buf->getBitShort());
2080 vars["DIMZIN"]=new DRW_Variant(70, buf->getBitShort());
2081 vars["DIMAZIN"]=new DRW_Variant(70, buf->getBitShort());
2082 }
2083 if (version > DRW::AC1018) {//2007+
2084 vars["DIMARCSYM"]=new DRW_Variant(70, buf->getBitShort());
2085 }
2086 vars["DIMTXT"]=new DRW_Variant(40, buf->getBitDouble());
2087 vars["DIMCEN"]=new DRW_Variant(40, buf->getBitDouble());
2088 vars["DIMTSZ"]=new DRW_Variant(40, buf->getBitDouble());
2089 vars["DIMALTF"]=new DRW_Variant(40, buf->getBitDouble());
2090 vars["DIMLFAC"]=new DRW_Variant(40, buf->getBitDouble());
2091 vars["DIMTVP"]=new DRW_Variant(40, buf->getBitDouble());
2092 vars["DIMTFAC"]=new DRW_Variant(40, buf->getBitDouble());
2093 vars["DIMGAP"]=new DRW_Variant(40, buf->getBitDouble());
2094 if (version < DRW::AC1015) {//r14-
2095 vars["DIMPOST"]=new DRW_Variant(1, buf->getCP8Text());
2096 vars["DIMAPOST"]=new DRW_Variant(1, buf->getCP8Text());
2097 vars["DIMBLK"]=new DRW_Variant(1, buf->getCP8Text());
2098 vars["DIMBLK1"]=new DRW_Variant(1, buf->getCP8Text());
2099 vars["DIMBLK2"]=new DRW_Variant(1, buf->getCP8Text());
2100 }
2101 if (version > DRW::AC1014) {//2000+
2102 vars["DIMALTRND"]=new DRW_Variant(40, buf->getBitDouble());
2103 vars["DIMALT"]=new DRW_Variant(70, buf->getBit());
2104 vars["DIMALTD"]=new DRW_Variant(70, buf->getBitShort());
2105 vars["DIMTOFL"]=new DRW_Variant(70, buf->getBit());
2106 vars["DIMSAH"]=new DRW_Variant(70, buf->getBit());
2107 vars["DIMTIX"]=new DRW_Variant(70, buf->getBit());
2108 vars["DIMSOXD"]=new DRW_Variant(70, buf->getBit());
2109 }
2110 vars["DIMCLRD"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color
2111 vars["DIMCLRE"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color
2112 vars["DIMCLRT"]=new DRW_Variant(70, buf->getCmColor(version));//RLZ: TODO read CMC or EMC color
2113 if (version > DRW::AC1014) {//2000+
2114 vars["DIAMDEC"]=new DRW_Variant(70, buf->getBitShort());
2115 vars["DIMDEC"]=new DRW_Variant(70, buf->getBitShort());
2116 vars["DIMTDEC"]=new DRW_Variant(70, buf->getBitShort());
2117 vars["DIMALTU"]=new DRW_Variant(70, buf->getBitShort());
2118 vars["DIMALTTD"]=new DRW_Variant(70, buf->getBitShort());
2119 vars["DIMAUNIT"]=new DRW_Variant(70, buf->getBitShort());
2120 vars["DIMFAC"]=new DRW_Variant(70, buf->getBitShort());///////////////// DIMFAC O DIMFRAC
2121 vars["DIMLUNIT"]=new DRW_Variant(70, buf->getBitShort());
2122 vars["DIMDSEP"]=new DRW_Variant(70, buf->getBitShort());
2123 vars["DIMTMOVE"]=new DRW_Variant(70, buf->getBitShort());
2124 vars["DIMJUST"]=new DRW_Variant(70, buf->getBitShort());
2125 vars["DIMSD1"]=new DRW_Variant(70, buf->getBit());
2126 vars["DIMSD2"]=new DRW_Variant(70, buf->getBit());
2127 vars["DIMTOLJ"]=new DRW_Variant(70, buf->getBitShort());
2128 vars["DIMTZIN"]=new DRW_Variant(70, buf->getBitShort());
2129 vars["DIMALTZ"]=new DRW_Variant(70, buf->getBitShort());
2130 vars["DIMALTTZ"]=new DRW_Variant(70, buf->getBitShort());
2131 vars["DIMUPT"]=new DRW_Variant(70, buf->getBit());
2132 vars["DIMATFIT"]=new DRW_Variant(70, buf->getBitShort());
2133 }
2134 if (version > DRW::AC1018) {//2007+
2135 vars["DIMFXLON"]=new DRW_Variant(70, buf->getBit());////////////////
2136 }
2137 if (version > DRW::AC1021) {//2010+
2138 vars["DIMTXTDIRECTION"]=new DRW_Variant(70, buf->getBit());////////////////
2139 vars["DIMALTMZF"]=new DRW_Variant(40, buf->getBitDouble());////////////////
2140 vars["DIMMZF"]=new DRW_Variant(40, buf->getBitDouble());////////////////
2141 }
2142 if (version > DRW::AC1014) {//2000+
2143 dwgHandle DIMTXSTY = hBbuf->getHandle();
2144 DRW_DBG("\nDIMTXSTY: "); DRW_DBGHL(DIMTXSTY.code, DIMTXSTY.size, DIMTXSTY.ref);
2145 dwgHandle DIMLDRBLK = hBbuf->getHandle();
2146 DRW_DBG("\nDIMLDRBLK: "); DRW_DBGHL(DIMLDRBLK.code, DIMLDRBLK.size, DIMLDRBLK.ref);
2147 dwgHandle DIMBLK = hBbuf->getHandle();
2148 DRW_DBG("\nDIMBLK: "); DRW_DBGHL(DIMBLK.code, DIMBLK.size, DIMBLK.ref);
2149 dwgHandle DIMBLK1 = hBbuf->getHandle();
2150 DRW_DBG("\nDIMBLK1: "); DRW_DBGHL(DIMBLK1.code, DIMBLK1.size, DIMBLK1.ref);
2151 dwgHandle DIMBLK2 = hBbuf->getHandle();
2152 DRW_DBG("\nDIMBLK2: "); DRW_DBGHL(DIMBLK2.code, DIMBLK2.size, DIMBLK2.ref);
2153 }
2154 if (version > DRW::AC1018) {//2007+
2155 dwgHandle DIMLTYPE = hBbuf->getHandle();
2156 DRW_DBG("\nDIMLTYPE: "); DRW_DBGHL(DIMLTYPE.code, DIMLTYPE.size, DIMLTYPE.ref);
2157 dwgHandle DIMLTEX1 = hBbuf->getHandle();
2158 DRW_DBG("\nDIMLTEX1: "); DRW_DBGHL(DIMLTEX1.code, DIMLTEX1.size, DIMLTEX1.ref);
2159 dwgHandle DIMLTEX2 = hBbuf->getHandle();
2160 DRW_DBG("\nDIMLTEX2: "); DRW_DBGHL(DIMLTEX2.code, DIMLTEX2.size, DIMLTEX2.ref);
2161 }
2162 if (version > DRW::AC1014) {//2000+
2163 vars["DIMLWD"]=new DRW_Variant(70, buf->getBitShort());
2164 vars["DIMLWE"]=new DRW_Variant(70, buf->getBitShort());
2165 }
2166 dwgHandle CONTROL = hBbuf->getHandle();
2167 DRW_DBG("\nBLOCK CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2168 blockCtrl = CONTROL.ref;
2169 CONTROL = hBbuf->getHandle();
2170 DRW_DBG("\nLAYER CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2171 layerCtrl = CONTROL.ref;
2172 CONTROL = hBbuf->getHandle();
2173 DRW_DBG("\nSTYLE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2174 styleCtrl = CONTROL.ref;
2175 CONTROL = hBbuf->getHandle();
2176 DRW_DBG("\nLINETYPE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2177 linetypeCtrl = CONTROL.ref;
2178 CONTROL = hBbuf->getHandle();
2179 DRW_DBG("\nVIEW CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2180 viewCtrl = CONTROL.ref;
2181 CONTROL = hBbuf->getHandle();
2182 DRW_DBG("\nUCS CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2183 ucsCtrl = CONTROL.ref;
2184 CONTROL = hBbuf->getHandle();
2185 DRW_DBG("\nVPORT CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2186 vportCtrl = CONTROL.ref;
2187 CONTROL = hBbuf->getHandle();
2188 DRW_DBG("\nAPPID CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2189 appidCtrl = CONTROL.ref;
2190 CONTROL = hBbuf->getHandle();
2191 DRW_DBG("\nDIMSTYLE CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2192 dimstyleCtrl = CONTROL.ref;
2193 if (version < DRW::AC1018) {//r2000-
2194 CONTROL = hBbuf->getHandle();
2195 DRW_DBG("\nVIEWPORT ENTITY HEADER CONTROL: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2196 vpEntHeaderCtrl = CONTROL.ref; //RLZ: only in R13-R15 ????
2197 }
2198 CONTROL = hBbuf->getHandle();
2199 DRW_DBG("\nDICT ACAD_GROUP: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2200 CONTROL = hBbuf->getHandle();
2201 DRW_DBG("\nDICT ACAD_MLINESTYLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2202 CONTROL = hBbuf->getHandle();
2203 DRW_DBG("\nDICT NAMED OBJS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2204
2205 if (version > DRW::AC1014) {//2000+
2206 vars["TSTACKALIGN"]=new DRW_Variant(70, buf->getBitShort());
2207 vars["TSTACKSIZE"]=new DRW_Variant(70, buf->getBitShort());
2208 if (version < DRW::AC1021) {//2004-
2209 vars["HYPERLINKBASE"]=new DRW_Variant(1, buf->getCP8Text());
2210 vars["STYLESHEET"]=new DRW_Variant(1, buf->getCP8Text());
2211 }
2212 CONTROL = hBbuf->getHandle();
2213 DRW_DBG("\nDICT LAYOUTS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2214 CONTROL = hBbuf->getHandle();
2215 DRW_DBG("\nDICT PLOTSETTINGS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2216 CONTROL = hBbuf->getHandle();
2217 DRW_DBG("\nDICT PLOTSTYLES: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2218 }
2219 if (version > DRW::AC1015) {//2004+
2220 CONTROL = hBbuf->getHandle();
2221 DRW_DBG("\nDICT MATERIALS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2222 CONTROL = hBbuf->getHandle();
2223 DRW_DBG("\nDICT COLORS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2224 }
2225 if (version > DRW::AC1018) {//2007+
2226 CONTROL = hBbuf->getHandle();
2227 DRW_DBG("\nDICT VISUALSTYLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2228 }
2229 if (version > DRW::AC1024) {//2013+
2230 CONTROL = hBbuf->getHandle();
2231 DRW_DBG("\nUNKNOWN HANDLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2232 }
2233 if (version > DRW::AC1014) {//2000+
2234 DRW_DBG("\nFlags: "); DRW_DBGH(buf->getBitLong());//RLZ TODO change to 8 vars
2235 vars["INSUNITS"]=new DRW_Variant(70, buf->getBitShort());
2236 duint16 cepsntype = buf->getBitShort();
2237 vars["CEPSNTYPE"]=new DRW_Variant(70, cepsntype);
2238 if (cepsntype == 3){
2239 CONTROL = hBbuf->getHandle();
2240 DRW_DBG("\nCPSNID HANDLE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2241 }
2242 if (version < DRW::AC1021) {//2004-
2243 vars["FINGERPRINTGUID"]=new DRW_Variant(1, buf->getCP8Text());
2244 vars["VERSIONGUID"]=new DRW_Variant(1, buf->getCP8Text());
2245 }
2246 }
2247 if (version > DRW::AC1015) {//2004+
2248 vars["SORTENTS"]=new DRW_Variant(70, buf->getRawChar8());
2249 vars["INDEXCTL"]=new DRW_Variant(70, buf->getRawChar8());
2250 vars["HIDETEXT"]=new DRW_Variant(70, buf->getRawChar8());
2251 vars["XCLIPFRAME"]=new DRW_Variant(70, buf->getRawChar8());
2252 vars["DIMASSOC"]=new DRW_Variant(70, buf->getRawChar8());
2253 vars["HALOGAP"]=new DRW_Variant(70, buf->getRawChar8());
2254 vars["OBSCUREDCOLOR"]=new DRW_Variant(70, buf->getBitShort());
2255 vars["INTERSECTIONCOLOR"]=new DRW_Variant(70, buf->getBitShort());
2256 vars["OBSCUREDLTYPE"]=new DRW_Variant(70, buf->getRawChar8());
2257 vars["INTERSECTIONDISPLAY"]=new DRW_Variant(70, buf->getRawChar8());
2258 if (version < DRW::AC1021) {//2004-
2259 vars["PROJECTNAME"]=new DRW_Variant(1, buf->getCP8Text());
2260 }
2261 }
2262 CONTROL = hBbuf->getHandle();
2263 DRW_DBG("\nBLOCK PAPER_SPACE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2264 CONTROL = hBbuf->getHandle();
2265 DRW_DBG("\nBLOCK MODEL_SPACE: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2266 CONTROL = hBbuf->getHandle();
2267 DRW_DBG("\nLTYPE BYLAYER: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2268 CONTROL = hBbuf->getHandle();
2269 DRW_DBG("\nLTYPE BYBLOCK: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2270 CONTROL = hBbuf->getHandle();
2271 DRW_DBG("\nLTYPE CONTINUOUS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2272 if (version > DRW::AC1018) {//2007+
2273 vars["CAMERADISPLAY"]=new DRW_Variant(70, buf->getBit());
2274 DRW_DBG("\nUnknown 2007+ long1: "); DRW_DBG(buf->getBitLong());
2275 DRW_DBG("\nUnknown 2007+ long2: "); DRW_DBG(buf->getBitLong());
2276 DRW_DBG("\nUnknown 2007+ double2: "); DRW_DBG(buf->getBitDouble());
2277 vars["STEPSPERSEC"]=new DRW_Variant(40, buf->getBitDouble());
2278 vars["STEPSIZE"]=new DRW_Variant(40, buf->getBitDouble());
2279 vars["3DDWFPREC"]=new DRW_Variant(40, buf->getBitDouble());
2280 vars["LENSLENGTH"]=new DRW_Variant(40, buf->getBitDouble());
2281 vars["CAMERAHEIGHT"]=new DRW_Variant(40, buf->getBitDouble());
2282 vars["SOLIDHIST"]=new DRW_Variant(70, buf->getRawChar8());
2283 vars["SHOWHIST"]=new DRW_Variant(70, buf->getRawChar8());
2284 vars["PSOLWIDTH"]=new DRW_Variant(40, buf->getBitDouble());
2285 vars["PSOLHEIGHT"]=new DRW_Variant(40, buf->getBitDouble());
2286 vars["LOFTANG1"]=new DRW_Variant(40, buf->getBitDouble());
2287 vars["LOFTANG2"]=new DRW_Variant(40, buf->getBitDouble());
2288 vars["LOFTMAG1"]=new DRW_Variant(40, buf->getBitDouble());
2289 vars["LOFTMAG2"]=new DRW_Variant(40, buf->getBitDouble());
2290 vars["LOFTPARAM"]=new DRW_Variant(70, buf->getBitShort());
2291 vars["LOFTNORMALS"]=new DRW_Variant(40, buf->getRawChar8());
2292 vars["LATITUDE"]=new DRW_Variant(40, buf->getBitDouble());
2293 vars["LONGITUDE"]=new DRW_Variant(40, buf->getBitDouble());
2294 vars["NORTHDIRECTION"]=new DRW_Variant(40, buf->getBitDouble());
2295 vars["TIMEZONE"]=new DRW_Variant(70, buf->getBitLong());
2296 vars["LIGHTGLYPHDISPLAY"]=new DRW_Variant(70, buf->getRawChar8());
2297 vars["TILEMODELIGHTSYNCH"]=new DRW_Variant(70, buf->getRawChar8());
2298 vars["DWFFRAME"]=new DRW_Variant(70, buf->getRawChar8());
2299 vars["DGNFRAME"]=new DRW_Variant(70, buf->getRawChar8());
2300 DRW_DBG("\nUnknown 2007+ BIT: "); DRW_DBG(buf->getBit());
2301 vars["INTERFERECOLOR"]=new DRW_Variant(70, buf->getCmColor(version));
2302 CONTROL = hBbuf->getHandle();
2303 DRW_DBG("\nINTERFEREOBJVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2304 CONTROL = hBbuf->getHandle();
2305 DRW_DBG("\nINTERFEREVPVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2306 CONTROL = hBbuf->getHandle();
2307 DRW_DBG("\nDRAGVS: "); DRW_DBGHL(CONTROL.code, CONTROL.size, CONTROL.ref);
2308 vars["CSHADOW"]=new DRW_Variant(70, buf->getRawChar8());
2309 DRW_DBG("\nUnknown 2007+ double2: "); DRW_DBG(buf->getBitDouble());
2310 }
2311 if (version > DRW::AC1012) {//R14+
2312 DRW_DBG("\nUnknown R14+ short1: "); DRW_DBG(buf->getBitShort());
2313 DRW_DBG("\nUnknown R14+ short2: "); DRW_DBG(buf->getBitShort());
2314 DRW_DBG("\nUnknown R14+ short3: "); DRW_DBG(buf->getBitShort());
2315 DRW_DBG("\nUnknown R14+ short4: "); DRW_DBG(buf->getBitShort());
2316 }
2317
2318 DRW_DBG("\nbuf position: "); DRW_DBG(buf->getPosition());
2319 DRW_DBG(" buf bit position: "); DRW_DBG(buf->getBitPos());
2320
2321
2322 /**** RLZ: disabled, pending to read all data ***/
2323 //Start reading string stream for 2007 and further
2324 if (version > DRW::AC1018) {//2007+
2325 duint32 strStartPos = endBitPos -1;
2326 buf->setPosition(strStartPos >>3);
2327 buf->setBitPos(strStartPos&7);
2328 if (buf->getBit() == 1){
2329 strStartPos -= 16;
2330 buf->setPosition(strStartPos >>3);
2331 buf->setBitPos(strStartPos&7);
2332 duint32 strDataSize = buf->getRawShort16();
2333 if (strDataSize & 0x8000) {
2334 strStartPos -= 16;//decrement 16 bits
2335 strDataSize &= 0x7FFF; //strip 0x8000;
2336 buf->setPosition(strStartPos >> 3);
2337 buf->setBitPos(strStartPos & 7);
2338 duint32 hiSize = buf->getRawShort16();
2339 strDataSize |= (hiSize << 15);
2340 }
2341 strStartPos -= strDataSize;
2342 buf->setPosition(strStartPos >> 3);
2343 buf->setBitPos(strStartPos & 7);
2344
2345 DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition());
2346 DRW_DBG("\nstring buf bit position: "); DRW_DBG(buf->getBitPos());
2347 }
2348 DRW_DBG("\nUnknown text1: "); DRW_DBG(buf->getUCSText(false));
2349 DRW_DBG("\nUnknown text2: "); DRW_DBG(buf->getUCSText(false));
2350 DRW_DBG("\nUnknown text3: "); DRW_DBG(buf->getUCSText(false));
2351 DRW_DBG("\nUnknown text4: "); DRW_DBG(buf->getUCSText(false));
2352 vars["MENU"]=new DRW_Variant(1, buf->getUCSText(false));
2353 vars["DIMPOST"]=new DRW_Variant(1, buf->getUCSText(false));
2354 vars["DIMAPOST"]=new DRW_Variant(1, buf->getUCSText(false));
2355 if (version > DRW::AC1021) {//2010+
2356 vars["DIMALTMZS"]=new DRW_Variant(70, buf->getUCSText(false));//RLZ: pending to verify//////////////
2357 vars["DIMMZS"]=new DRW_Variant(70, buf->getUCSText(false));//RLZ: pending to verify//////////////
2358 }
2359 vars["HYPERLINKBASE"]=new DRW_Variant(1, buf->getUCSText(false));
2360 vars["STYLESHEET"]=new DRW_Variant(1, buf->getUCSText(false));
2361 vars["FINGERPRINTGUID"]=new DRW_Variant(1, buf->getUCSText(false));
2362 DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition());
2363 DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos());
2364 vars["VERSIONGUID"]=new DRW_Variant(1, buf->getUCSText(false));
2365 DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition());
2366 DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos());
2367 vars["PROJECTNAME"]=new DRW_Variant(1, buf->getUCSText(false));
2368 }
2369 /*** ****/
2370 DRW_DBG("\nstring buf position: "); DRW_DBG(buf->getPosition());
2371 DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos());
2372
2373 if (DRW_DBGGL == DRW_dbg::DEBUG){
2374 for (std::map<std::string,DRW_Variant*>::iterator it=vars.begin(); it!=vars.end(); ++it){
2375 DRW_DBG("\n"); DRW_DBG(it->first); DRW_DBG(": ");
2376 switch (it->second->type()){
2377 case DRW_Variant::INTEGER:
2378 DRW_DBG(it->second->content.i);
2379 break;
2380 case DRW_Variant::DOUBLE:
2381 DRW_DBG(it->second->content.d);
2382 break;
2383 case DRW_Variant::STRING:
2384 DRW_DBG(it->second->content.s->c_str());
2385 break;
2386 case DRW_Variant::COORD:
2387 DRW_DBG("x= "); DRW_DBG(it->second->content.v->x);
2388 DRW_DBG(", y= "); DRW_DBG(it->second->content.v->y);
2389 DRW_DBG(", z= "); DRW_DBG(it->second->content.v->z);
2390 break;
2391 default:
2392 break;
2393 }
2394 DRW_DBG(" code: ");DRW_DBG(it->second->code());
2395 }
2396 }
2397
2398 buf->setPosition(size+16+4); //readed size +16 start sentinel + 4 size
2399 if (version > DRW::AC1021 && mv > 3) { //2010+
2400 buf->getRawLong32();//advance 4 bytes (hisize)
2401 }
2402 DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition());
2403 DRW_DBG("\nHeader CRC: "); DRW_DBGH(buf->getRawShort16());
2404 DRW_DBG("\nbuf position: "); DRW_DBG(buf->getPosition());
2405 DRW_DBG("\ndwg header end sentinel= ");
2406 for (int i=0; i<16;i++) {
2407 DRW_DBGH(buf->getRawChar8()); DRW_DBG(" ");
2408 }
2409
2410 //temporary code to show header end sentinel
2411 // duint64 sz= buf->size()-1;
2412 duint64 sz;
2413 if (version < DRW::AC1018) {//pre 2004
2414 sz= buf->size()-16;
2415 buf->setPosition(sz);
2416 DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition());
2417 DRW_DBG("\ndwg header end sentinel= ");
2418 for (int i=0; i<16;i++) {
2419 DRW_DBGH(buf->getRawChar8()); DRW_DBG(" ");
2420 }
2421 } else if (version == DRW::AC1018) {//2004
2422 // sz= buf->size()-132;
2423 // buf->setPosition(sz);
2424 buf->moveBitPos(-128);
2425 DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition());
2426 DRW_DBG("\ndwg header end sentinel= ");
2427 for (int i=0; i<16;i++) {
2428 DRW_DBGH(buf->getRawChar8()); DRW_DBG(" ");
2429 }
2430 } else if (version == DRW::AC1021) {//2007
2431 sz= buf->size()-16;
2432 buf->setPosition(sz);
2433 DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition());
2434 DRW_DBG("\ndwg header end sentinel= ");
2435 for (int i=0; i<16;i++) {
2436 DRW_DBGH(buf->getRawChar8()); DRW_DBG(" ");
2437 }
2438 } else if (version == DRW::AC1024) {//2010
2439 // sz= buf->size()-93;
2440 // buf->setPosition(sz);
2441 buf->moveBitPos(-128);
2442 DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition());
2443 DRW_DBG("\ndwg header end sentinel= ");
2444 for (int i=0; i<16;i++) {
2445 DRW_DBGH(buf->getRawChar8()); DRW_DBG(" ");
2446 }
2447 } else if (version == DRW::AC1027) {//2013
2448 // sz= buf->size()-76;
2449 // buf->setPosition(sz);
2450 buf->moveBitPos(-128);
2451 DRW_DBG("\nseting position to: "); DRW_DBG(buf->getPosition());
2452 DRW_DBG("\ndwg header end sentinel= ");
2453 for (int i=0; i<16;i++) {
2454 DRW_DBGH(buf->getRawChar8()); DRW_DBG(" ");
2455 }
2456 }
2457
2458 return result;
2459 }
2460
2461