00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "pcl_vtk_tools/dxf_writer.h"
00019
00020 dxfwriter::dxfwriter(std::string FileName) :
00021 linfile::File(FileName, true, false),
00022 m_handle(67)
00023 {
00024 WriteConstHeader();
00025 }
00026
00027 dxfwriter::~dxfwriter(void)
00028 {
00029 WriteConstTail();
00030 }
00031
00035 bool dxfwriter::WriteMesh(Mesh_t mesh, std::string FileName)
00036 {
00037 dxfwriter write(FileName);
00038 for(unsigned int i = 0; i < mesh.size(); i++)
00039 {
00040 Polygon_t poly = mesh[i].first;
00041 if(poly.size() == 4)
00042 {
00043 write.WriteSolid(poly[0].x, poly[0].y, poly[0].z, poly[1].x, poly[1].y, poly[1].z,
00044 poly[2].x, poly[2].y, poly[2].z, poly[3].x, poly[3].y, poly[3].z);
00045 }
00046 else if(poly.size() == 3)
00047 {
00048 write.WriteSolid(poly[0].x, poly[0].y, poly[0].z, poly[1].x, poly[1].y, poly[1].z,
00049 poly[2].x, poly[2].y, poly[2].z);
00050 }
00051 }
00052 return true;
00053 }
00054
00055 void dxfwriter::Write3dLINE(double startx, double starty, double startz, double endx, double endy, double endz)
00056 {
00057 WriteLine("LINE\n");
00058 WriteSingleInt(5);
00059 WriteLine("\n");
00060 WriteSingleIntAsHex(m_handle);
00061 WriteLine("\n");
00062 m_handle++;
00063 WriteSingleInt(6);
00064 WriteLine("\n");
00065 WriteLine("BYBLOCK\n");
00066 WriteSingleInt(8);
00067 WriteLine("\n");
00068 WriteSingleInt(0);
00069 WriteLine("\n");
00070 WriteSingleInt(10);
00071 WriteLine("\n");
00072 WriteDoubleLimLength(startx);
00073 WriteLine("\n");
00074 WriteSingleInt(20);
00075 WriteLine("\n");
00076 WriteDoubleLimLength(starty);
00077 WriteLine("\n");
00078 WriteSingleInt(30);
00079 WriteLine("\n");
00080 WriteDoubleLimLength(startz);
00081 WriteLine("\n");
00082 WriteSingleInt(11);
00083 WriteLine("\n");
00084 WriteDoubleLimLength(endx);
00085 WriteLine("\n");
00086 WriteSingleInt(21);
00087 WriteLine("\n");
00088 WriteDoubleLimLength(endy);
00089 WriteLine("\n");
00090 WriteSingleInt(31);
00091 WriteLine("\n");
00092 WriteDoubleLimLength(endz);
00093 WriteLine("\n");
00094 WriteLine("0\n");
00095 }
00096
00097 void dxfwriter::WriteConstHeader()
00098 {
00099 WriteLine("0\n\
00100 SECTION\n\
00101 2\n\
00102 HEADER\n\
00103 9\n\
00104 $ACADVER\n\
00105 1\n\
00106 AC1009\n\
00107 9\n\
00108 $INSBASE\n\
00109 10\n\
00110 0.0\n\
00111 20\n\
00112 0.0\n\
00113 30\n\
00114 0.0\n\
00115 9\n\
00116 $EXTMIN\n\
00117 10\n\
00118 0.0\n\
00119 20\n\
00120 0.0\n\
00121 30\n\
00122 0.0\n\
00123 9\n\
00124 $EXTMAX\n\
00125 10\n\
00126 60.0\n\
00127 20\n\
00128 60.0\n\
00129 30\n\
00130 60.0\n\
00131 9\n\
00132 $LIMMIN\n\
00133 10\n\
00134 0.0\n\
00135 20\n\
00136 0.0\n\
00137 9\n\
00138 $LIMMAX\n\
00139 10\n\
00140 30.0\n\
00141 20\n\
00142 30.0\n\
00143 9\n\
00144 $ORTHOMODE\n\
00145 70\n\
00146 0\n\
00147 9\n\
00148 $REGENMODE\n\
00149 70\n\
00150 1\n\
00151 9\n\
00152 $FILLMODE\n\
00153 70\n\
00154 1\n\
00155 9\n\
00156 $QTEXTMODE\n\
00157 70\n\
00158 0\n\
00159 9\n\
00160 $MIRRTEXT\n\
00161 70\n\
00162 0\n\
00163 9\n\
00164 $DRAGMODE\n\
00165 70\n\
00166 2\n\
00167 9\n\
00168 $LTSCALE\n\
00169 40\n\
00170 1.0\n\
00171 9\n\
00172 $OSMODE\n\
00173 70\n\
00174 37\n\
00175 9\n\
00176 $ATTMODE\n\
00177 70\n\
00178 1\n\
00179 9\n\
00180 $TEXTSIZE\n\
00181 40\n\
00182 2.5\n\
00183 9\n\
00184 $TRACEWID\n\
00185 40\n\
00186 0.05\n\
00187 9\n\
00188 $TEXTSTYLE\n\
00189 7\n\
00190 STANDARD\n\
00191 9\n\
00192 $CLAYER\n\
00193 8\n\
00194 0\n\
00195 9\n\
00196 $CELTYPE\n\
00197 6\n\
00198 CONTINUOUS\n\
00199 9\n\
00200 $CECOLOR\n\
00201 62\n\
00202 256\n\
00203 9\n\
00204 $DIMSCALE\n\
00205 40\n\
00206 1.0\n\
00207 9\n\
00208 $DIMASZ\n\
00209 40\n\
00210 2.5\n\
00211 9\n\
00212 $DIMEXO\n\
00213 40\n\
00214 0.625\n\
00215 9\n\
00216 $DIMDLI\n\
00217 40\n\
00218 0.38\n\
00219 9\n\
00220 $DIMRND\n\
00221 40\n\
00222 0.0\n\
00223 9\n\
00224 $DIMDLE\n\
00225 40\n\
00226 0.0\n\
00227 9\n\
00228 $DIMEXE\n\
00229 40\n\
00230 1.25\n\
00231 9\n\
00232 $DIMTP\n\
00233 40\n\
00234 0.0\n\
00235 9\n\
00236 $DIMTM\n\
00237 40\n\
00238 0.0\n\
00239 9\n\
00240 $DIMTXT\n\
00241 40\n\
00242 2.5\n\
00243 9\n\
00244 $DIMCEN\n\
00245 40\n\
00246 0.09\n\
00247 9\n\
00248 $DIMTSZ\n\
00249 40\n\
00250 0.0\n\
00251 9\n\
00252 $DIMTOL\n\
00253 70\n\
00254 0\n\
00255 9\n\
00256 $DIMLIM\n\
00257 70\n\
00258 0\n\
00259 9\n\
00260 $DIMTIH\n\
00261 70\n\
00262 1\n\
00263 9\n\
00264 $DIMTOH\n\
00265 70\n\
00266 1\n\
00267 9\n\
00268 $DIMSE1\n\
00269 70\n\
00270 0\n\
00271 9\n\
00272 $DIMSE2\n\
00273 70\n\
00274 0\n\
00275 9\n\
00276 $DIMTAD\n\
00277 70\n\
00278 0\n\
00279 9\n\
00280 $DIMZIN\n\
00281 70\n\
00282 0\n\
00283 9\n\
00284 $DIMBLK\n\
00285 1\n\
00286 \n\
00287 9\n\
00288 $DIMASO\n\
00289 70\n\
00290 1\n\
00291 9\n\
00292 $DIMSHO\n\
00293 70\n\
00294 1\n\
00295 9\n\
00296 $DIMPOST\n\
00297 1\n\
00298 \n\
00299 9\n\
00300 $DIMAPOST\n\
00301 1\n\
00302 \n\
00303 9\n\
00304 $DIMALT\n\
00305 70\n\
00306 0\n\
00307 9\n\
00308 $DIMALTD\n\
00309 70\n\
00310 2\n\
00311 9\n\
00312 $DIMALTF\n\
00313 40\n\
00314 25.399999999999999\n\
00315 9\n\
00316 $DIMLFAC\n\
00317 40\n\
00318 1.0\n\
00319 9\n\
00320 $DIMTOFL\n\
00321 70\n\
00322 0\n\
00323 9\n\
00324 $DIMTVP\n\
00325 40\n\
00326 0.0\n\
00327 9\n\
00328 $DIMTIX\n\
00329 70\n\
00330 0\n\
00331 9\n\
00332 $DIMSOXD\n\
00333 70\n\
00334 0\n\
00335 9\n\
00336 $DIMSAH\n\
00337 70\n\
00338 0\n\
00339 9\n\
00340 $DIMBLK1\n\
00341 1\n\
00342 \n\
00343 9\n\
00344 $DIMBLK2\n\
00345 1\n\
00346 \n\
00347 9\n\
00348 $DIMSTYLE\n\
00349 2\n\
00350 STANDARD\n\
00351 9\n\
00352 $DIMCLRD\n\
00353 70\n\
00354 0\n\
00355 9\n\
00356 $DIMCLRE\n\
00357 70\n\
00358 0\n\
00359 9\n\
00360 $DIMCLRT\n\
00361 70\n\
00362 0\n\
00363 9\n\
00364 $DIMTFAC\n\
00365 40\n\
00366 1.0\n\
00367 9\n\
00368 $DIMGAP\n\
00369 40\n\
00370 0.625\n\
00371 9\n\
00372 $LUNITS\n\
00373 70\n\
00374 2\n\
00375 9\n\
00376 $LUPREC\n\
00377 70\n\
00378 4\n\
00379 9\n\
00380 $SKETCHINC\n\
00381 40\n\
00382 0.1\n\
00383 9\n\
00384 $FILLETRAD\n\
00385 40\n\
00386 0.0\n\
00387 9\n\
00388 $AUNITS\n\
00389 70\n\
00390 0\n\
00391 9\n\
00392 $AUPREC\n\
00393 70\n\
00394 2\n\
00395 9\n\
00396 $MENU\n\
00397 1\n\
00398 .\n\
00399 9\n\
00400 $ELEVATION\n\
00401 40\n\
00402 0.0\n\
00403 9\n\
00404 $PELEVATION\n\
00405 40\n\
00406 0.0\n\
00407 9\n\
00408 $THICKNESS\n\
00409 40\n\
00410 0.0\n\
00411 9\n\
00412 $LIMCHECK\n\
00413 70\n\
00414 0\n\
00415 9\n\
00416 $BLIPMODE\n\
00417 70\n\
00418 0\n\
00419 9\n\
00420 $CHAMFERA\n\
00421 40\n\
00422 0.0\n\
00423 9\n\
00424 $CHAMFERB\n\
00425 40\n\
00426 0.0\n\
00427 9\n\
00428 $SKPOLY\n\
00429 70\n\
00430 0\n\
00431 9\n\
00432 $TDCREATE\n\
00433 40\n\
00434 2454169.4542739\n\
00435 9\n\
00436 $TDUPDATE\n\
00437 40\n\
00438 2454169.4545730208\n\
00439 9\n\
00440 $TDINDWG\n\
00441 40\n\
00442 0.0003005671\n\
00443 9\n\
00444 $TDUSRTIMER\n\
00445 40\n\
00446 0.0003005671\n\
00447 9\n\
00448 $USRTIMER\n\
00449 70\n\
00450 1\n\
00451 9\n\
00452 $ANGBASE\n\
00453 50\n\
00454 0.0\n\
00455 9\n\
00456 $ANGDIR\n\
00457 70\n\
00458 0\n\
00459 9\n\
00460 $PDMODE\n\
00461 70\n\
00462 0\n\
00463 9\n\
00464 $PDSIZE\n\
00465 40\n\
00466 0.0\n\
00467 9\n\
00468 $PLINEWID\n\
00469 40\n\
00470 0.0\n\
00471 9\n\
00472 $COORDS\n\
00473 70\n\
00474 1\n\
00475 9\n\
00476 $SPLFRAME\n\
00477 70\n\
00478 0\n\
00479 9\n\
00480 $SPLINETYPE\n\
00481 70\n\
00482 6\n\
00483 9\n\
00484 $SPLINESEGS\n\
00485 70\n\
00486 8\n\
00487 9\n\
00488 $ATTDIA\n\
00489 70\n\
00490 0\n\
00491 9\n\
00492 $ATTREQ\n\
00493 70\n\
00494 1\n\
00495 9\n\
00496 $HANDLING\n\
00497 70\n\
00498 1\n\
00499 9\n\
00500 $HANDSEED\n\
00501 5\n\
00502 10033\n\
00503 9\n\
00504 $SURFTAB1\n\
00505 70\n\
00506 6\n\
00507 9\n\
00508 $SURFTAB2\n\
00509 70\n\
00510 6\n\
00511 9\n\
00512 $SURFTYPE\n\
00513 70\n\
00514 6\n\
00515 9\n\
00516 $SURFU\n\
00517 70\n\
00518 6\n\
00519 9\n\
00520 $SURFV\n\
00521 70\n\
00522 6\n\
00523 9\n\
00524 $UCSNAME\n\
00525 2\n\
00526 \n\
00527 9\n\
00528 $UCSORG\n\
00529 10\n\
00530 0.0\n\
00531 20\n\
00532 0.0\n\
00533 30\n\
00534 0.0\n\
00535 9\n\
00536 $UCSXDIR\n\
00537 10\n\
00538 1.0\n\
00539 20\n\
00540 0.0\n\
00541 30\n\
00542 0.0\n\
00543 9\n\
00544 $UCSYDIR\n\
00545 10\n\
00546 0.0\n\
00547 20\n\
00548 1.0\n\
00549 30\n\
00550 0.0\n\
00551 9\n\
00552 $PUCSNAME\n\
00553 2\n\
00554 \n\
00555 9\n\
00556 $PUCSORG\n\
00557 10\n\
00558 0.0\n\
00559 20\n\
00560 0.0\n\
00561 30\n\
00562 0.0\n\
00563 9\n\
00564 $PUCSXDIR\n\
00565 10\n\
00566 1.0\n\
00567 20\n\
00568 0.0\n\
00569 30\n\
00570 0.0\n\
00571 9\n\
00572 $PUCSYDIR\n\
00573 10\n\
00574 0.0\n\
00575 20\n\
00576 1.0\n\
00577 30\n\
00578 0.0\n\
00579 9\n\
00580 $USERI1\n\
00581 70\n\
00582 0\n\
00583 9\n\
00584 $USERI2\n\
00585 70\n\
00586 0\n\
00587 9\n\
00588 $USERI3\n\
00589 70\n\
00590 0\n\
00591 9\n\
00592 $USERI4\n\
00593 70\n\
00594 0\n\
00595 9\n\
00596 $USERI5\n\
00597 70\n\
00598 0\n\
00599 9\n\
00600 $USERR1\n\
00601 40\n\
00602 0.0\n\
00603 9\n\
00604 $USERR2\n\
00605 40\n\
00606 0.0\n\
00607 9\n\
00608 $USERR3\n\
00609 40\n\
00610 0.0\n\
00611 9\n\
00612 $USERR4\n\
00613 40\n\
00614 0.0\n\
00615 9\n\
00616 $USERR5\n\
00617 40\n\
00618 0.0\n\
00619 9\n\
00620 $WORLDVIEW\n\
00621 70\n\
00622 1\n\
00623 9\n\
00624 $SHADEDGE\n\
00625 70\n\
00626 3\n\
00627 9\n\
00628 $SHADEDIF\n\
00629 70\n\
00630 70\n\
00631 9\n\
00632 $TILEMODE\n\
00633 70\n\
00634 1\n\
00635 9\n\
00636 $MAXACTVP\n\
00637 70\n\
00638 64\n\
00639 9\n\
00640 $PLIMCHECK\n\
00641 70\n\
00642 0\n\
00643 9\n\
00644 $PEXTMIN\n\
00645 10\n\
00646 1.0000000000000000E+020\n\
00647 20\n\
00648 1.0000000000000000E+020\n\
00649 30\n\
00650 1.0000000000000000E+020\n\
00651 9\n\
00652 $PEXTMAX\n\
00653 10\n\
00654 -1.0000000000000000E+020\n\
00655 20\n\
00656 -1.0000000000000000E+020\n\
00657 30\n\
00658 -1.0000000000000000E+020\n\
00659 9\n\
00660 $PLIMMIN\n\
00661 10\n\
00662 0.0\n\
00663 20\n\
00664 0.0\n\
00665 9\n\
00666 $PLIMMAX\n\
00667 10\n\
00668 210.0\n\
00669 20\n\
00670 297.0\n\
00671 9\n\
00672 $UNITMODE\n\
00673 70\n\
00674 0\n\
00675 9\n\
00676 $VISRETAIN\n\
00677 70\n\
00678 1\n\
00679 9\n\
00680 $PLINEGEN\n\
00681 70\n\
00682 0\n\
00683 9\n\
00684 $PSLTSCALE\n\
00685 70\n\
00686 1\n\
00687 0\n\
00688 ENDSEC\n\
00689 0\n\
00690 SECTION\n\
00691 2\n\
00692 TABLES\n\
00693 0\n\
00694 TABLE\n\
00695 2\n\
00696 VPORT\n\
00697 70\n\
00698 1\n\
00699 0\n\
00700 VPORT\n\
00701 2\n\
00702 *ACTIVE\n\
00703 70\n\
00704 0\n\
00705 10\n\
00706 0.0\n\
00707 20\n\
00708 0.0\n\
00709 11\n\
00710 1.0\n\
00711 21\n\
00712 1.0\n\
00713 12\n\
00714 286.30555555555537\n\
00715 22\n\
00716 277.18754423213011\n\
00717 13\n\
00718 0.0\n\
00719 23\n\
00720 0.0\n\
00721 14\n\
00722 10.0\n\
00723 24\n\
00724 10.0\n\
00725 15\n\
00726 10.0\n\
00727 25\n\
00728 10.0\n\
00729 16\n\
00730 0.0\n\
00731 26\n\
00732 0.0\n\
00733 36\n\
00734 1.0\n\
00735 17\n\
00736 0.0\n\
00737 27\n\
00738 0.0\n\
00739 37\n\
00740 0.0\n\
00741 40\n\
00742 554.37508846426022\n\
00743 41\n\
00744 1.0328947368421051\n\
00745 42\n\
00746 50.0\n\
00747 43\n\
00748 0.0\n\
00749 44\n\
00750 0.0\n\
00751 50\n\
00752 0.0\n\
00753 51\n\
00754 0.0\n\
00755 71\n\
00756 0\n\
00757 72\n\
00758 100\n\
00759 73\n\
00760 1\n\
00761 74\n\
00762 3\n\
00763 75\n\
00764 1\n\
00765 76\n\
00766 1\n\
00767 77\n\
00768 0\n\
00769 78\n\
00770 0\n\
00771 0\n\
00772 ENDTAB\n\
00773 0\n\
00774 TABLE\n\
00775 2\n\
00776 LTYPE\n\
00777 70\n\
00778 19\n\
00779 0\n\
00780 LTYPE\n\
00781 2\n\
00782 CONTINUOUS\n\
00783 70\n\
00784 0\n\
00785 3\n\
00786 Solid line\n\
00787 72\n\
00788 65\n\
00789 73\n\
00790 0\n\
00791 40\n\
00792 0.0\n\
00793 0\n\
00794 LTYPE\n\
00795 2\n\
00796 DOT\n\
00797 70\n\
00798 0\n\
00799 3\n\
00800 Dot . . . . . . . . . . . . . . . . . . . . . .\n\
00801 72\n\
00802 65\n\
00803 73\n\
00804 2\n\
00805 40\n\
00806 6.3499999999999988\n\
00807 49\n\
00808 0.0\n\
00809 49\n\
00810 -6.3499999999999988\n\
00811 0\n\
00812 LTYPE\n\
00813 2\n\
00814 DOT2\n\
00815 70\n\
00816 0\n\
00817 3\n\
00818 Dot (.5x) .....................................\n\
00819 72\n\
00820 65\n\
00821 73\n\
00822 2\n\
00823 40\n\
00824 3.1749999999999989\n\
00825 49\n\
00826 0.0\n\
00827 49\n\
00828 -3.1749999999999989\n\
00829 0\n\
00830 LTYPE\n\
00831 2\n\
00832 DOTX2\n\
00833 70\n\
00834 0\n\
00835 3\n\
00836 Dot (2x) . . . . . . . . . . . . .\n\
00837 72\n\
00838 65\n\
00839 73\n\
00840 2\n\
00841 40\n\
00842 12.699999999999999\n\
00843 49\n\
00844 0.0\n\
00845 49\n\
00846 -12.699999999999999\n\
00847 0\n\
00848 LTYPE\n\
00849 2\n\
00850 DASHED\n\
00851 70\n\
00852 0\n\
00853 3\n\
00854 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _\n\
00855 72\n\
00856 65\n\
00857 73\n\
00858 2\n\
00859 40\n\
00860 19.050000000000001\n\
00861 49\n\
00862 12.699999999999999\n\
00863 49\n\
00864 -6.3499999999999988\n\
00865 0\n\
00866 LTYPE\n\
00867 2\n\
00868 DASHED2\n\
00869 70\n\
00870 0\n\
00871 3\n\
00872 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\
00873 72\n\
00874 65\n\
00875 73\n\
00876 2\n\
00877 40\n\
00878 9.5250000000000004\n\
00879 49\n\
00880 6.3499999999999988\n\
00881 49\n\
00882 -3.1749999999999989\n\
00883 0\n\
00884 LTYPE\n\
00885 2\n\
00886 DASHEDX2\n\
00887 70\n\
00888 0\n\
00889 3\n\
00890 Dashed (2x) ____ ____ ____ ____ ____ ___\n\
00891 72\n\
00892 65\n\
00893 73\n\
00894 2\n\
00895 40\n\
00896 38.100000000000001\n\
00897 49\n\
00898 25.399999999999999\n\
00899 49\n\
00900 -12.699999999999999\n\
00901 0\n\
00902 LTYPE\n\
00903 2\n\
00904 DASHDOT\n\
00905 70\n\
00906 0\n\
00907 3\n\
00908 Dash dot __ . __ . __ . __ . __ . __ . __ . __\n\
00909 72\n\
00910 65\n\
00911 73\n\
00912 4\n\
00913 40\n\
00914 25.399999999999999\n\
00915 49\n\
00916 12.699999999999999\n\
00917 49\n\
00918 -6.3499999999999988\n\
00919 49\n\
00920 0.0\n\
00921 49\n\
00922 -6.3499999999999988\n\
00923 0\n\
00924 LTYPE\n\
00925 2\n\
00926 DASHDOT2\n\
00927 70\n\
00928 0\n\
00929 3\n\
00930 Dash dot (.5x) _._._._._._._._._._._._._._._.\n\
00931 72\n\
00932 65\n\
00933 73\n\
00934 4\n\
00935 40\n\
00936 12.699999999999999\n\
00937 49\n\
00938 6.3499999999999988\n\
00939 49\n\
00940 -3.1749999999999989\n\
00941 49\n\
00942 0.0\n\
00943 49\n\
00944 -3.1749999999999989\n\
00945 0\n\
00946 LTYPE\n\
00947 2\n\
00948 DASHDOTX2\n\
00949 70\n\
00950 0\n\
00951 3\n\
00952 Dash dot (2x) ____ . ____ . ____ . ___\n\
00953 72\n\
00954 65\n\
00955 73\n\
00956 4\n\
00957 40\n\
00958 50.799999999999997\n\
00959 49\n\
00960 25.399999999999999\n\
00961 49\n\
00962 -12.699999999999999\n\
00963 49\n\
00964 0.0\n\
00965 49\n\
00966 -12.699999999999999\n\
00967 0\n\
00968 LTYPE\n\
00969 2\n\
00970 DIVIDE\n\
00971 70\n\
00972 0\n\
00973 3\n\
00974 Divide ____ . . ____ . . ____ . . ____ . . ____\n\
00975 72\n\
00976 65\n\
00977 73\n\
00978 6\n\
00979 40\n\
00980 31.75\n\
00981 49\n\
00982 12.699999999999999\n\
00983 49\n\
00984 -6.3499999999999988\n\
00985 49\n\
00986 0.0\n\
00987 49\n\
00988 -6.3499999999999988\n\
00989 49\n\
00990 0.0\n\
00991 49\n\
00992 -6.3499999999999988\n\
00993 0\n\
00994 LTYPE\n\
00995 2\n\
00996 DIVIDE2\n\
00997 70\n\
00998 0\n\
00999 3\n\
01000 Divide (.5x) __..__..__..__..__..__..__..__.._\n\
01001 72\n\
01002 65\n\
01003 73\n\
01004 6\n\
01005 40\n\
01006 15.875\n\
01007 49\n\
01008 6.3499999999999988\n\
01009 49\n\
01010 -3.1749999999999989\n\
01011 49\n\
01012 0.0\n\
01013 49\n\
01014 -3.1749999999999989\n\
01015 49\n\
01016 0.0\n\
01017 49\n\
01018 -3.1749999999999989\n\
01019 0\n\
01020 LTYPE\n\
01021 2\n\
01022 DIVIDEX2\n\
01023 70\n\
01024 0\n\
01025 3\n\
01026 Divide (2x) ________ . . ________ . . _\n\
01027 72\n\
01028 65\n\
01029 73\n\
01030 6\n\
01031 40\n\
01032 63.5\n\
01033 49\n\
01034 25.399999999999999\n\
01035 49\n\
01036 -12.699999999999999\n\
01037 49\n\
01038 0.0\n\
01039 49\n\
01040 -12.699999999999999\n\
01041 49\n\
01042 0.0\n\
01043 49\n\
01044 -12.699999999999999\n\
01045 0\n\
01046 LTYPE\n\
01047 2\n\
01048 CENTER\n\
01049 70\n\
01050 0\n\
01051 3\n\
01052 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____\n\
01053 72\n\
01054 65\n\
01055 73\n\
01056 4\n\
01057 40\n\
01058 50.799999999999997\n\
01059 49\n\
01060 31.75\n\
01061 49\n\
01062 -6.3499999999999988\n\
01063 49\n\
01064 6.3499999999999988\n\
01065 49\n\
01066 -6.3499999999999988\n\
01067 0\n\
01068 LTYPE\n\
01069 2\n\
01070 CENTER2\n\
01071 70\n\
01072 0\n\
01073 3\n\
01074 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___\n\
01075 72\n\
01076 65\n\
01077 73\n\
01078 4\n\
01079 40\n\
01080 28.574999999999999\n\
01081 49\n\
01082 19.050000000000001\n\
01083 49\n\
01084 -3.1749999999999989\n\
01085 49\n\
01086 3.1749999999999989\n\
01087 49\n\
01088 -3.1749999999999989\n\
01089 0\n\
01090 LTYPE\n\
01091 2\n\
01092 CENTERX2\n\
01093 70\n\
01094 0\n\
01095 3\n\
01096 Center (2x) ________ __ ________ __ _____\n\
01097 72\n\
01098 65\n\
01099 73\n\
01100 4\n\
01101 40\n\
01102 101.59999999999999\n\
01103 49\n\
01104 63.5\n\
01105 49\n\
01106 -12.699999999999999\n\
01107 49\n\
01108 12.699999999999999\n\
01109 49\n\
01110 -12.699999999999999\n\
01111 0\n\
01112 LTYPE\n\
01113 2\n\
01114 BORDER\n\
01115 70\n\
01116 0\n\
01117 3\n\
01118 Border __ __ . __ __ . __ __ . __ __ . __ __ .\n\
01119 72\n\
01120 65\n\
01121 73\n\
01122 6\n\
01123 40\n\
01124 44.450000000000003\n\
01125 49\n\
01126 12.699999999999999\n\
01127 49\n\
01128 -6.3499999999999988\n\
01129 49\n\
01130 12.699999999999999\n\
01131 49\n\
01132 -6.3499999999999988\n\
01133 49\n\
01134 0.0\n\
01135 49\n\
01136 -6.3499999999999988\n\
01137 0\n\
01138 LTYPE\n\
01139 2\n\
01140 BORDER2\n\
01141 70\n\
01142 0\n\
01143 3\n\
01144 Border (.5x) __.__.__.__.__.__.__.__.__.__.__.\n\
01145 72\n\
01146 65\n\
01147 73\n\
01148 6\n\
01149 40\n\
01150 22.225000000000001\n\
01151 49\n\
01152 6.3499999999999988\n\
01153 49\n\
01154 -3.1749999999999989\n\
01155 49\n\
01156 6.3499999999999988\n\
01157 49\n\
01158 -3.1749999999999989\n\
01159 49\n\
01160 0.0\n\
01161 49\n\
01162 -3.1749999999999989\n\
01163 0\n\
01164 LTYPE\n\
01165 2\n\
01166 BORDERX2\n\
01167 70\n\
01168 0\n\
01169 3\n\
01170 Border (2x) ____ ____ . ____ ____ . ___\n\
01171 72\n\
01172 65\n\
01173 73\n\
01174 6\n\
01175 40\n\
01176 88.900000000000006\n\
01177 49\n\
01178 25.399999999999999\n\
01179 49\n\
01180 -12.699999999999999\n\
01181 49\n\
01182 25.399999999999999\n\
01183 49\n\
01184 -12.699999999999999\n\
01185 49\n\
01186 0.0\n\
01187 49\n\
01188 -12.699999999999999\n\
01189 0\n\
01190 ENDTAB\n\
01191 0\n\
01192 TABLE\n\
01193 2\n\
01194 LAYER\n\
01195 70\n\
01196 1\n\
01197 0\n\
01198 LAYER\n\
01199 2\n\
01200 0\n\
01201 70\n\
01202 0\n\
01203 62\n\
01204 7\n\
01205 6\n\
01206 CONTINUOUS\n\
01207 0\n\
01208 ENDTAB\n\
01209 0\n\
01210 TABLE\n\
01211 2\n\
01212 STYLE\n\
01213 70\n\
01214 1\n\
01215 0\n\
01216 STYLE\n\
01217 2\n\
01218 STANDARD\n\
01219 70\n\
01220 0\n\
01221 40\n\
01222 0.0\n\
01223 41\n\
01224 0.75\n\
01225 50\n\
01226 0.0\n\
01227 71\n\
01228 0\n\
01229 42\n\
01230 2.5\n\
01231 3\n\
01232 txt\n\
01233 4\n\
01234 \n\
01235 0\n\
01236 ENDTAB\n\
01237 0\n\
01238 TABLE\n\
01239 2\n\
01240 VIEW\n\
01241 70\n\
01242 0\n\
01243 0\n\
01244 ENDTAB\n\
01245 0\n\
01246 TABLE\n\
01247 2\n\
01248 UCS\n\
01249 70\n\
01250 0\n\
01251 0\n\
01252 ENDTAB\n\
01253 0\n\
01254 TABLE\n\
01255 2\n\
01256 APPID\n\
01257 70\n\
01258 1\n\
01259 0\n\
01260 APPID\n\
01261 2\n\
01262 ACAD\n\
01263 70\n\
01264 0\n\
01265 0\n\
01266 ENDTAB\n\
01267 0\n\
01268 TABLE\n\
01269 2\n\
01270 DIMSTYLE\n\
01271 70\n\
01272 1\n\
01273 0\n\
01274 DIMSTYLE\n\
01275 2\n\
01276 STANDARD\n\
01277 70\n\
01278 0\n\
01279 3\n\
01280 \n\
01281 4\n\
01282 \n\
01283 5\n\
01284 \n\
01285 6\n\
01286 \n\
01287 7\n\
01288 \n\
01289 40\n\
01290 1.0\n\
01291 41\n\
01292 2.5\n\
01293 42\n\
01294 0.625\n\
01295 43\n\
01296 3.75\n\
01297 44\n\
01298 1.25\n\
01299 45\n\
01300 0.0\n\
01301 46\n\
01302 0.0\n\
01303 47\n\
01304 0.0\n\
01305 48\n\
01306 0.0\n\
01307 140\n\
01308 2.5\n\
01309 141\n\
01310 2.5\n\
01311 142\n\
01312 0.0\n\
01313 143\n\
01314 0.03937007874016\n\
01315 144\n\
01316 1.0\n\
01317 145\n\
01318 0.0\n\
01319 146\n\
01320 1.0\n\
01321 147\n\
01322 0.625\n\
01323 71\n\
01324 0\n\
01325 72\n\
01326 0\n\
01327 73\n\
01328 0\n\
01329 74\n\
01330 0\n\
01331 75\n\
01332 0\n\
01333 76\n\
01334 0\n\
01335 77\n\
01336 1\n\
01337 78\n\
01338 8\n\
01339 170\n\
01340 0\n\
01341 171\n\
01342 3\n\
01343 172\n\
01344 1\n\
01345 173\n\
01346 0\n\
01347 174\n\
01348 0\n\
01349 175\n\
01350 0\n\
01351 176\n\
01352 0\n\
01353 177\n\
01354 0\n\
01355 178\n\
01356 0\n\
01357 0\n\
01358 ENDTAB\n\
01359 0\n\
01360 ENDSEC\n\
01361 0\n\
01362 SECTION\n\
01363 2\n\
01364 BLOCKS\n\
01365 0\n\
01366 BLOCK\n\
01367 8\n\
01368 0\n\
01369 2\n\
01370 $MODEL_SPACE\n\
01371 70\n\
01372 0\n\
01373 10\n\
01374 0.0\n\
01375 20\n\
01376 0.0\n\
01377 30\n\
01378 0.0\n\
01379 3\n\
01380 $MODEL_SPACE\n\
01381 1\n\
01382 \n\
01383 0\n\
01384 ENDBLK\n\
01385 5\n\
01386 21\n\
01387 8\n\
01388 0\n\
01389 0\n\
01390 BLOCK\n\
01391 67\n\
01392 1\n\
01393 8\n\
01394 0\n\
01395 2\n\
01396 $PAPER_SPACE\n\
01397 70\n\
01398 0\n\
01399 10\n\
01400 0.0\n\
01401 20\n\
01402 0.0\n\
01403 30\n\
01404 0.0\n\
01405 3\n\
01406 $PAPER_SPACE\n\
01407 1\n\
01408 \n\
01409 0\n\
01410 ENDBLK\n\
01411 5\n\
01412 1D\n\
01413 67\n\
01414 1\n\
01415 8\n\
01416 0\n\
01417 0\n\
01418 ENDSEC\n\
01419 0\n\
01420 SECTION\n\
01421 2\n\
01422 ENTITIES\n\
01423 0\n");
01424 }
01425
01426 void dxfwriter::WriteConstTail()
01427 {
01428 WriteLine("ENDSEC\n\
01429 0\n\
01430 EOF\n");
01431 }
01432
01433 void dxfwriter::WriteGroup(std::string st, int value)
01434 {
01435 WriteLine(st.c_str());
01436 WriteLine("\n");
01437 WriteSingleInt(value);
01438 WriteLine("\n");
01439 }
01440
01441 void dxfwriter::WriteGroup(std::string st, double value)
01442 {
01443 WriteLine(st.c_str());
01444 WriteLine("\n");
01445 WriteSingleDouble(value);
01446 WriteLine("\n");
01447 }
01448
01449 void dxfwriter::WriteGroup(int st, int value)
01450 {
01451 WriteSingleInt(st);
01452 WriteLine("\n");
01453 WriteSingleInt(value);
01454 WriteLine("\n");
01455 }
01456
01457 void dxfwriter::WriteGroup(int st, double value)
01458 {
01459 WriteSingleInt(st);
01460 WriteLine("\n");
01461 WriteSingleDouble(value);
01462 WriteLine("\n");
01463 }
01464
01465 void dxfwriter::WriteGroupHex(int st, double value)
01466 {
01467 WriteSingleInt(st);
01468 WriteLine("\n");
01469 WriteSingleIntAsHex((int)value);
01470 WriteLine("\n");
01471 }
01472
01473 void dxfwriter::WriteSolid(double dx0, double dy0, double dz0,
01474 double dx1, double dy1, double dz1,
01475 double dx2, double dy2, double dz2,
01476 double dx3, double dy3, double dz3)
01477 {
01478 WriteLine("3DFACE\n");
01479 WriteGroupHex(5, m_handle);
01480 m_handle++;
01481 WriteGroup(8,0);
01482 WriteGroup(10, dx0);
01483 WriteGroup(20, dy0);
01484 WriteGroup(30, dz0);
01485 WriteGroup(11, dx1);
01486 WriteGroup(21, dy1);
01487 WriteGroup(31, dz1);
01488 WriteGroup(12, dx2);
01489 WriteGroup(22, dy2);
01490 WriteGroup(32, dz2);
01491 WriteGroup(13, dx3);
01492 WriteGroup(23, dy3);
01493 WriteGroup(33, dz3);
01494 WriteLine("0\n");
01495 }
01496
01497 void dxfwriter::WriteSolid(double dx0, double dy0, double dz0,
01498 double dx1, double dy1, double dz1,
01499 double dx2, double dy2, double dz2)
01500 {
01501 WriteLine("3DFACE\n");
01502 WriteGroupHex(5, m_handle);
01503 m_handle++;
01504 WriteGroup(8,0);
01505 WriteGroup(10, dx0);
01506 WriteGroup(20, dy0);
01507 WriteGroup(30, dz0);
01508 WriteGroup(11, dx1);
01509 WriteGroup(21, dy1);
01510 WriteGroup(31, dz1);
01511 WriteGroup(12, dx2);
01512 WriteGroup(22, dy2);
01513 WriteGroup(32, dz2);
01514 WriteGroup(13, dx2);
01515 WriteGroup(23, dy2);
01516 WriteGroup(33, dz2);
01517 WriteLine("0\n");
01518 }
01519
01520 void dxfwriter::WriteBox(double offsetx, double offsety, double offsetz, double sizex, double sizey, double sizez)
01521 {
01522 double x0 = offsetx;
01523 double xd = offsetx + sizex;
01524 double y0 = offsety;
01525 double yd = offsety + sizey;
01526 double z0 = offsetz;
01527 double zd = offsetz + sizez;
01528
01529 WriteSolid(x0,y0,z0,xd,y0,z0,xd,yd,z0,x0,yd,z0);
01530 WriteSolid(x0,y0,z0,x0,yd,z0,x0,yd,zd,x0,y0,zd);
01531 WriteSolid(x0,y0,z0,x0,y0,zd,xd,y0,zd,xd,y0,z0);
01532
01533
01534 WriteSolid(xd,yd,zd,x0 - 0.1 + sizex / 2,yd,zd,x0 - 0.1+ sizex / 2,y0,zd,xd,y0,zd);
01535 WriteSolid(xd - sizex / 2,yd,zd,x0,yd,zd,x0,y0,zd,xd - sizex / 2,y0,zd);
01536 WriteSolid(xd,yd,zd + 0.01,xd - 0.4 - sizex / 4,yd,zd + 0.01,xd,yd - sizey / 2,zd + 0.01,xd,yd,zd + 0.01);
01537
01538 WriteSolid(xd,yd,zd,xd,y0,zd,xd,y0,z0,xd,yd,z0);
01539 WriteSolid(xd,yd,zd,x0,yd,zd,x0,yd,z0,xd,yd,z0);
01540
01541 Write3dLINE(x0,y0,z0,xd,y0,z0);
01542 Write3dLINE(xd,y0,z0,xd,yd,z0);
01543 Write3dLINE(xd,yd,z0,x0,yd,z0);
01544 Write3dLINE(x0,yd,z0,x0,y0,z0);
01545
01546 Write3dLINE(x0,y0,z0,x0,yd,z0);
01547 Write3dLINE(x0,yd,z0,x0,yd,zd);
01548 Write3dLINE(x0,yd,zd,x0,y0,zd);
01549 Write3dLINE(x0,y0,zd,x0,y0,z0);
01550
01551 Write3dLINE(x0,y0,z0,x0,y0,zd);
01552 Write3dLINE(x0,y0,zd,xd,y0,zd);
01553 Write3dLINE(xd,y0,zd,xd,y0,z0);
01554 Write3dLINE(xd,y0,z0,x0,y0,z0);
01555
01556 Write3dLINE(xd,yd,zd,x0,yd,zd);
01557 Write3dLINE(x0,yd,zd,x0,y0,zd);
01558 Write3dLINE(x0,y0,zd,xd,y0,zd);
01559 Write3dLINE(xd,y0,zd,xd,yd,zd);
01560
01561 Write3dLINE(xd,yd,zd,xd,y0,zd);
01562 Write3dLINE(xd,y0,zd,xd,y0,z0);
01563 Write3dLINE(xd,y0,z0,xd,yd,z0);
01564 Write3dLINE(xd,yd,z0,xd,yd,zd);
01565
01566 Write3dLINE(xd,yd,zd,x0,yd,zd);
01567 Write3dLINE(x0,yd,zd,x0,yd,z0);
01568 Write3dLINE(x0,yd,z0,xd,yd,z0);
01569 Write3dLINE(xd,yd,z0,xd,yd,zd);
01570 }
01571
01572 #define line(a,b) Write3dLINE(dx##a, dy##a, dz##a, dx##b, dy##b, dz##b)
01573 #define SOLID(a,b,c,e) WriteSolid(dx##a, dy##a, dz##a, dx##b, dy##b, dz##b,dx##c, dy##c, dz##c,dx##e, dy##e, dz##e)
01574
01575 void dxfwriter::WriteBoxFromPoints(double dx0, double dy0, double dz0,
01576 double dx1, double dy1, double dz1,
01577 double dx2, double dy2, double dz2,
01578 double dx3, double dy3, double dz3,
01579 double dx4, double dy4, double dz4,
01580 double dx5, double dy5, double dz5,
01581 double dx6, double dy6, double dz6,
01582 double dx7, double dy7, double dz7)
01583 {
01584
01585 SOLID(0,1,2,3);
01586 line(0,1);
01587 line(1,2);
01588 line(2,3);
01589 line(3,0);
01590 SOLID(0,1,5,4);
01591 line(0,1);
01592 line(1,5);
01593 line(5,4);
01594 line(4,0);
01595 SOLID(4,5,6,7);
01596 line(4,5);
01597 line(5,6);
01598 line(6,7);
01599 line(7,4);
01600 SOLID(6,7,3,2);
01601 line(6,7);
01602 line(7,3);
01603 line(3,2);
01604 line(2,6);
01605 SOLID(1,2,6,5);
01606 line(1,2);
01607 line(2,6);
01608 line(6,5);
01609 line(5,1);
01610 SOLID(3,0,4,7);
01611 line(3,0);
01612 line(0,4);
01613 line(4,7);
01614 line(7,3);
01615 }
01616
01617 void dxfwriter::WriteCylinder(double centerx0, double centery0, double centerz0,
01618 double radius, double height, double angleX)
01619 {
01620 int num_faces = 16;
01621 double step = 2*M_PI / num_faces;
01622 double facelength = radius * sin(step / 2) + (radius - radius * cos(step / 2)) / cos(step / 2);
01623 double dx0, dy0, dz0, dx1, dy1, dz1, dx2, dy2, dz2, dx3, dy3, dz3;
01624 for(int i = 0; i < num_faces; i++)
01625 {
01626 double angle = i * step;
01627 dx0 = dx1 = dx2 = dx3 = centerx0 + radius * cos(angle);
01628 dx0 -= facelength * sin(angle);
01629 dx3 -= facelength * sin(angle);
01630 dx1 += facelength * sin(angle);
01631 dx2 += facelength * sin(angle);
01632
01633 dy0 = dy1 = dy2 = dy3 = centery0 + radius * sin(angle) * sin(angleX);
01634 double temp = facelength * cos(angle) * sin(angleX);
01635 dy0 += temp ;
01636 dy3 += temp + height * cos(angleX);
01637 dy1 -= temp ;
01638 dy2 -= temp - height * cos(angleX);
01639
01640 dz0 = dz1 = dz2 = dz3 = centerz0+ radius * sin(angle) * cos(angleX);
01641 temp = facelength * cos(angle) * cos(angleX);
01642 dz0 += temp ;
01643 dz3 += temp - height * sin(angleX);
01644 dz1 -= temp ;
01645 dz2 -= temp + height * sin(angleX);
01646
01647 SOLID(0,1,2,3);
01648 line(0,1);
01649 line(1,2);
01650 line(2,3);
01651 line(3,0);
01652 }
01653 }
01654