Files Classes Functions Hierarchy
#include <cassert>#include <iostream>#include <fstream>#include <GL/glut.h>#include <GL/gl.h>#include <zpr.h>#include <graphmisc.h>#include <commandline.h>#include <gobj.h>#include <pointsdisplay.h>#include <random.h>#include <print.h>#include <point.h>#include <d3tess.h>#include <d3tessdraw.h>#include <d2func.h>#include <d2circle.h>#include <halfspaceD2.h>#include <aclock.h>#include <d3meshpointreader.h>#include <d3minboundary.h>#include <d3minrecursive.h>#include <d3mincircle.h>#include <d3mincentroid.h>#include <d3mincentroid2.h>#include <message.h>#include <typedefs.h>#include <trianglespace.h>
Go to the source code of this file.
| void addpoint | ( | pt2 const & | x | ) |
Definition at line 994 of file main.cpp.
References d2func::make(), d3tess::pt, point2< T >::x, and point2< T >::y.
Referenced by partitionstest::addstar().
| boolc addpointinsidemesh | ( | ) |
Definition at line 101 of file main.cpp.
References d3tess::addpoint(), d2func::eval(), messageglobal(), d3tess::pt, gobjContainer::push(), r, gobjQuadric::radius, d3tess::searchminimizetowardspoint(), point2< T >::x, and point2< T >::y.
Referenced by keyboard().
00102 { 00103 00104 00105 static gobjQuadric q4; 00106 q4.radius=0.005; 00107 00108 xGraphics.push( new gobjglColor3f(1.0,0.0,0.0) ); 00109 00110 uint k= mesh->pt.size(); 00111 00112 pt2 x(-1.0+2.0*r(),-1.0+2.0*r()); 00113 mesh->pt.push_back(pt3(x.x,x.y,p2dfunc->eval(x))); 00114 xGraphics.push( new gobjMySphereDraw( x, &q4 ) ); 00115 00116 if (mesh->searchminimizetowardspoint(k)) 00117 { 00118 00119 00120 messageglobal() << "addpointinsidemesh()" << "\n"; 00121 messageglobal() << *mesh << "\n\n"; 00122 00123 messageglobal() << "k=" << k << "\n"; 00124 00125 mesh->addpoint(k); 00126 messageglobal() << *mesh << "\n\n"; 00127 return true; 00128 } 00129 00130 return false; 00131 }
| void addrandompointtomesh | ( | ) |
Definition at line 140 of file main.cpp.
References d3tess::addpoint(), addrandompointtomeshptvector(), d3tess::pt, gobjContainer::push(), and gobjQuadric::radius.
Referenced by keyboard(), searchStats(), timmingexperiment00(), and timmingexperiment01().
00141 { 00142 static gobjQuadric q3; 00143 q3.radius=0.005; 00144 00145 xGraphics.push( new gobjglColor3f(1.0,0.0,0.0) ); 00146 00147 uint k= mesh->pt.size(); 00148 00149 pt2 x; 00150 addrandompointtomeshptvector(x); 00151 //pt2 x(-1.0+2.0*r(),-1.0+2.0*r()); 00152 //mesh->pt.push_back(pt3(x.x,x.y,p2dfunc->eval(x))); 00153 xGraphics.push( new gobjMySphereDraw( x, &q3 ) ); 00154 00155 mesh->addpoint(k); 00156 }
| void addrandompointtomeshptvector | ( | pt2 & | x | ) |
Definition at line 133 of file main.cpp.
References d2func::eval(), d3tess::pt, r, point2< T >::x, and point2< T >::y.
Referenced by addrandompointtomesh(), and searchStats().
00134 { 00135 x = pt2(-1.0+2.0*r(),-1.0+2.0*r()); 00136 mesh->pt.push_back(pt3(x.x,x.y,p2dfunc->eval(x))); 00137 }
| void display | ( | ) |
Definition at line 957 of file main.cpp.
References gobjMyCircleDraw::draw(), gobjContainer::draw(), d3tessdraw::draw(), enabletargetcurve(), glerrordisplay(), and targetcurve.
00958 { 00959 //glMatrix temp; 00960 myglPushMatrix temp; 00961 00962 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 00963 00964 //axes(0.5); 00965 00966 meshdraw->draw(); 00967 00968 xGraphics.draw(); 00969 00970 glerrordisplay(); 00971 00972 { 00973 glPushMatrix(); 00974 00975 glPushAttrib(GL_CURRENT_BIT); 00976 glPushAttrib(GL_LIGHTING_BIT); 00977 00978 glColor3f(1.0,1.0,0.0); 00979 glEnable(GL_LIGHTING); 00980 00981 if (enabletargetcurve) 00982 targetcurve.draw(); 00983 00984 glPopAttrib(); 00985 glPopAttrib(); 00986 00987 glPopMatrix(); 00988 } 00989 glerrordisplay(); 00990 00991 glutSwapBuffers(); 00992 }
| void displaymenu | ( | ) |
Definition at line 737 of file main.cpp.
References getInputString(), d3tessdraw::graphicsDeffered, d3tessdraw::graphicsImmediate, gobjContainerSwitch::gswitch, and d3tessdraw::meshupdate().
Referenced by mainmenu().
00738 { 00739 cout << endl; 00740 cout << "Display Menu" << endl; 00741 cout << endl; 00742 cout << " 0: points numbering toggle" << endl; 00743 cout << " 1: triangles numbering toggle" << endl; 00744 cout << " 2: winding toggle" << endl; 00745 cout << " 3: grid toggle" << endl; 00746 cout << " 4: cp toggle" << endl; 00747 cout << " 5: surface toggle" << endl; 00748 cout << " 6: cp circle toggle" << endl; 00749 cout << " 7: circles through triangles" << endl; 00750 cout << " 8: cp voronoi local polygons about base vertices" << endl; 00751 cout << " 9: multicolored triangles" << endl; 00752 cout << " 10: voronoi diagram" << endl; 00753 00754 cout << " Enter a choice "; 00755 00756 string const s = getInputString(); 00757 if (s.empty()) 00758 { 00759 cout << "No Choice Executed" << endl; 00760 cout << "End of Display Menu" << endl; 00761 return; 00762 } 00763 00764 if (s=="0") 00765 { 00766 meshdraw->graphicsDeffered.gswitch[0]->toggle(); 00767 meshdraw->meshupdate(); 00768 } 00769 00770 if (s=="1") 00771 { 00772 meshdraw->graphicsDeffered.gswitch[1]->toggle(); 00773 meshdraw->meshupdate(); 00774 } 00775 00776 if (s=="9") 00777 { 00778 meshdraw->graphicsDeffered.gswitch[2]->toggle(); 00779 meshdraw->meshupdate(); 00780 } 00781 00782 if (s=="10") 00783 { 00784 meshdraw->graphicsDeffered.gswitch[3]->toggle(); 00785 meshdraw->meshupdate(); 00786 } 00787 00788 if (s=="2") 00789 meshdraw->graphicsImmediate.gswitch[0]->toggle(); 00790 00791 if (s=="3") 00792 meshdraw->graphicsImmediate.gswitch[1]->toggle(); 00793 00794 if (s=="4") 00795 meshdraw->graphicsImmediate.gswitch[2]->toggle(); 00796 00797 if (s=="5") 00798 meshdraw->graphicsImmediate.gswitch[3]->toggle(); 00799 00800 if (s=="6") 00801 meshdraw->graphicsImmediate.gswitch[4]->toggle(); 00802 00803 if (s=="7") 00804 meshdraw->graphicsImmediate.gswitch[5]->toggle(); 00805 00806 if (s=="8") 00807 meshdraw->graphicsImmediate.gswitch[6]->toggle(); 00808 00809 00810 00811 cout << "End of Display Menu" << endl; 00812 }
| void filemenu | ( | ) |
Definition at line 632 of file main.cpp.
References filereadingmesh(), filewritingmesh(), getInputString(), timmingexperiment02(), timmingexperiment03(), and timmingexperiment04().
Referenced by mainmenu().
00633 { 00634 cout << endl; 00635 cout << "File Menu" << endl; 00636 cout << endl; 00637 cout << " 0: Read a tessellation in from a file." << endl; 00638 cout << " 1: Write a tessellation out to a file." << endl; 00639 cout << " 2: Read points from file." << endl; 00640 cout << " 3: Create a new data set by writing 2D random data points to a file." << endl; 00641 cout << " 4: Create a new data set by writing 3D random data points to a file." << endl; 00642 00643 cout << " Enter a choice "; 00644 00645 string const s = getInputString(); 00646 if (s.empty()) 00647 { 00648 cout << "No Choice Executed" << endl; 00649 cout << "End of File Menu" << endl; 00650 return; 00651 } 00652 00653 if (s=="0") 00654 filereadingmesh(); 00655 00656 if (s=="1") 00657 filewritingmesh(); 00658 00659 if (s=="2") 00660 timmingexperiment02(); 00661 00662 if (s=="3") 00663 timmingexperiment03(); 00664 00665 if (s=="4") 00666 timmingexperiment04(); 00667 00668 }
| void filereadingmesh | ( | ) |
Definition at line 608 of file main.cpp.
References getInputString().
00609 { 00610 cout << endl; 00611 cout << " Reading a mesh in." << endl; 00612 cout << endl; 00613 cout << " Enter the filename: "; 00614 00615 string fname(getInputString()); 00616 00617 if (fname.empty()) 00618 return; 00619 00620 ifstream targ(fname.c_str()); 00621 00622 if (targ.good()==false) 00623 { 00624 cout << "error: could not read the file." << endl; 00625 return; 00626 } 00627 00628 targ >> *mesh; 00629 }
| void filereadingmesh | ( | d3meshpointreader & | mr | ) |
Definition at line 200 of file main.cpp.
References aclock::diff_s(), d3meshpointreader::eval(), and aclock::measure().
Referenced by filemenu(), main(), and timmingexperiment02().
00203 { 00204 00205 cout << "Starting insertion of points into the mesh" << endl; 00206 00207 aclock c; 00208 c.measure(); 00209 mr.eval(); 00210 c.measure(); 00211 00212 cout << "Finished insertion of points into the mesh" << endl << endl; 00213 cout << "Time without graphics: "; 00214 cout << c.diff_s() << "s" << endl; 00215 }
| void filewritingmesh | ( | ) |
Definition at line 585 of file main.cpp.
References getInputString().
Referenced by filemenu().
00586 { 00587 cout << endl; 00588 cout << " Writing the mesh out." << endl; 00589 cout << endl; 00590 cout << " Enter the filename: "; 00591 00592 string fname(getInputString()); 00593 00594 if (fname.empty()) 00595 return; 00596 00597 ofstream targ(fname.c_str()); 00598 00599 if (targ.good()==false) 00600 { 00601 cout << "error: could not write the file out." << endl; 00602 return; 00603 } 00604 00605 targ << *mesh; 00606 }
| string getInputString | ( | ) |
Definition at line 75 of file main.cpp.
Referenced by displaymenu(), filemenu(), filereadingmesh(), filewritingmesh(), mainmenu(), minimizermenu(), searchmenu(), and timmingsmenu().
00076 { 00077 string s; 00078 cin >> s; 00079 return s; 00080 /* 00081 string s; 00082 char ch; 00083 for ( ; ; ) 00084 { 00085 ch = cin.peek(); 00086 cin.ignore(); 00087 00088 if (ch=='\n') 00089 return s; 00090 00091 s += ch; 00092 } 00093 00094 assert(false); 00095 return s; 00096 */ 00097 }
| void help | ( | ) |
Definition at line 1032 of file main.cpp.
Referenced by maze005::keyboard01(), simplexD2tessapp01::keyboard02(), delaunaysimpleD2test::keyboard02(), and main().
01033 { 01034 cout << "Command Line Options" << endl; 01035 cout << "For boolean values true and 1, false and 0 are equivalent" << endl; 01036 cout << "file=filename - read in points from a file" << endl; 01037 cout << "cp=true - current pointer" << endl; 01038 cout << "winding=true - display the triangle windings" << endl; 01039 cout << "surface=true - draw the surface" << endl; 01040 cout << "grid=true - draw the triangles as blue grid" << endl; 01041 cout << "points=true - number each point with its integer index" << endl; 01042 cout << "debug=0 - only use when NDEBUG is undefined so checkdebug() is not excecuted" << endl; 01043 cout << "triangles=1 - number each triangle with its integer index" << endl; 01044 cout << "cpcircle=1 - draw a circle through the cp's simplex." << endl; 01045 cout << "circles=1 - draw circles through every simplex." << endl; 01046 cout << "cpvoronoi=1 - display voronoi polygons about the cp." << endl; 01047 cout << "multcolor=1 - display the triangles with random colorings" << endl; 01048 cout << "voronoi=1 - display strict voronoi polygons" << endl; 01049 01050 01051 cout << endl; 01052 cout << "Keyboard Commands" << endl; 01053 cout << "'T' enters you into the main menu which is displayed at the" << endl; 01054 cout << " command line rather than the application." << endl << endl; 01055 cout << "'a' 'A' - rotate anticlockwise or clockwise the cp triangle." << endl; 01056 cout << "'j' 'k' - move left, right and down on current triangle" << endl; 01057 cout << " 'm'" << endl; 01058 cout << "'b' - orient the current triangle to the boundary if possible" << endl; 01059 cout << "'w' 'e' - First orient the cp to the boundary with 'b'. Then move" << endl; 01060 cout << " on the surface left and right respectively." << endl; 01061 cout << "'z' - the flip operator" << endl; 01062 01063 cout << endl; 01064 cout << "Minimizers" << endl; 01065 cout << " Explore mesh balancing." << endl; 01066 cout << " By default no mesh balancing is performed." << endl; 01067 cout << "minb=1 - boundary minimization on insertion" << endl; 01068 cout << "minbr=1 - boundary minimization with recursion" << endl; 01069 cout << "minc=1 - circle minimization on insertion" << endl; 01070 cout << "minDT=1 - Delauny Triangulation - recursive circle minimization" << endl; 01071 cout << "mincentroid=1 - circle by average points and radius, insertion" << endl; 01072 cout << "mincentroid2r=1 - circle by average points and min radius, recursive" << endl; 01073 //cout << "greedy=true - very bad mesh generated." << endl; 01074 //cout << "greedy2=true - very experimental, do I know what I am doing?" << endl; 01075 01076 }
| void init00 | ( | ) |
Definition at line 1004 of file main.cpp.
References d2func::make(), d3tess::pt, and d3tess::vi.
01005 { 01006 cout << endl; 01007 cout << "Test Mesh" << endl; 01008 01009 mesh->pt.push_back(p2dfunc->make(0.0,0.0)); 01010 mesh->pt.push_back(p2dfunc->make(1.0,0.0)); 01011 mesh->pt.push_back(p2dfunc->make(1.0,1.0)); 01012 01013 mesh->vi.push_back( simplexD2linked(1,2,3, 0,0,0) ); 01014 }
| void init02 | ( | ) |
Definition at line 1016 of file main.cpp.
References d4tess::debugcheck(), d3func::eval(), d3tess::initialize(), d2func::make(), d4tess::pt, d3tess::pt, r, d4tess::viadd(), point4< T >::x, point4< T >::y, and point4< T >::z.
Referenced by main(), mainmenu(), searchStats(), and timmingexperiment01().
01017 { 01018 cout << endl; 01019 cout << "Test Mesh" << endl; 01020 cout << "Adding three random points to make the first" << endl; 01021 cout << " simplex or triangle in the mesh." << endl; 01022 01023 for (uint i=0; i<3; ++i) 01024 mesh->pt.push_back( 01025 p2dfunc->make(-1.0+2.0*r(),-1.0+2.0*r()) ); 01026 01027 mesh->initialize(); 01028 }
| void keyboard | ( | unsigned char | key, | |
| int | x, | |||
| int | y | |||
| ) |
Definition at line 868 of file main.cpp.
References addpointinsidemesh(), addrandompointtomesh(), virtualtriangle::anticlockwise(), d3tess::boundaryorient(), virtualtriangle::clockwise(), d3tess::flip(), mainmenu(), d3tessdraw::meshupdate(), d3tess::movedown(), d3tess::moveleft(), d3tess::moveright(), d3tess::surfaceleft(), d3tess::surfaceright(), and d3tess::vs.
00869 { 00870 switch (key) 00871 { 00872 case 27: 00873 delete mesh; 00874 mesh=0; 00875 delete meshdraw; 00876 meshdraw=0; 00877 delete p2dfunc; 00878 p2dfunc=0; 00879 00880 exit(0); 00881 break; 00882 00883 case 'a': 00884 mesh->vs.anticlockwise(); 00885 break; 00886 00887 case 'A': 00888 mesh->vs.clockwise(); 00889 break; 00890 00891 case 'j': 00892 mesh->moveleft(); 00893 break; 00894 00895 case 'k': 00896 mesh->moveright(); 00897 break; 00898 00899 case 'm': 00900 mesh->movedown(); 00901 break; 00902 00903 case 'b': 00904 mesh->boundaryorient(); 00905 break; 00906 00907 case 'w': 00908 mesh->surfaceleft(); 00909 break; 00910 case 'e': 00911 mesh->surfaceright(); 00912 break; 00913 00914 case 'R': 00915 { 00916 for (; !addpointinsidemesh(); ); 00917 00918 meshdraw->meshupdate(); 00919 } 00920 break; 00921 00922 00923 case 'r': 00924 addrandompointtomesh(); 00925 meshdraw->meshupdate(); 00926 break; 00927 00928 case 't': 00929 for (uint i=0; i<100; ++i) 00930 addrandompointtomesh(); 00931 meshdraw->meshupdate(); 00932 break; 00933 00934 case 'T': 00935 mainmenu(); 00936 break; 00937 00938 case 'p': 00939 cout << endl; 00940 cout << *mesh; 00941 break; 00942 00943 case 'z': 00944 mesh->flip(); 00945 meshdraw->meshupdate(); 00946 break; 00947 00948 case 'l': 00949 cout << "l=" << mesh->cpbasemeasure() << endl; 00950 break; 00951 00952 } 00953 00954 glutPostRedisplay(); 00955 }
| int main | ( | int | argc, | |
| char ** | argv | |||
| ) |
Definition at line 1079 of file main.cpp.
References d3tessdraw::circle, d3tessdraw::circles, d3tessdraw::cp, d3tess::debugenable, display(), enabletargetcurve(), error, filereadingmesh(), message::globalset(), d3tessdraw::graphicsDeffered, d3tessdraw::graphicsImmediate, d3tessdraw::grid, gobjContainerSwitch::gswitch, help(), init02(), keyboard(), commandline::mapvar(), d3tessdraw::meshupdate(), d3tess::minimizerSet(), d3tessdraw::multicolor, d3tessdraw::points, random11< T, G >::rg, randomgenerator::seed(), gobjContainer::set(), d3tessdraw::simplexes, d3tessdraw::surface, d3tessdraw::voronoi, d3tessdraw::voronoip, and d3tessdraw::winding.
01080 { 01081 glutInit(&argc,argv); 01082 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 01083 uintc wx=800; 01084 uintc wy=800; 01085 01086 glutInitWindowSize(wx,wy); 01087 01088 glutCreateWindow(""); 01089 01090 glutDisplayFunc(display); 01091 glutKeyboardFunc(keyboard); 01092 01093 OpenGLinitialisation(); 01094 01095 glEnable(GL_DEPTH_TEST); 01096 01097 //glDisable(GL_CULL_FACE); 01098 glEnable(GL_CULL_FACE); 01099 01100 glEnable(GL_NORMALIZE); 01101 01102 xGraphics.set(); 01103 01104 //error.setMessageGlobal(); 01105 error.globalset(); 01106 01107 help(); 01108 01109 commandline cmd(argc,argv); 01110 01111 uint N(1000); 01112 cmd.mapvar(N,"N"); 01113 01114 mesh = new d3tess(N); 01115 01116 cmd.mapvar(mesh->debugenable,"debug"); 01117 01118 meshdraw = new d3tessdraw(*mesh); 01119 01120 cmd.mapvar(meshdraw->graphicsDeffered.gswitch[d3tessdraw::points]->isdrawn,"points"); 01121 cmd.mapvar(meshdraw->graphicsDeffered.gswitch[d3tessdraw::simplexes]->isdrawn,"triangles"); 01122 cmd.mapvar(meshdraw->graphicsDeffered.gswitch[d3tessdraw::multicolor]->isdrawn,"multicolor"); 01123 cmd.mapvar(meshdraw->graphicsDeffered.gswitch[d3tessdraw::voronoi]->isdrawn,"voronoi"); 01124 01125 01126 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::winding]->isdrawn,"winding"); 01127 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::grid]->isdrawn,"grid",true); 01128 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::cp]->isdrawn,"cp",true); 01129 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::surface]->isdrawn,"surface"); 01130 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::circle]->isdrawn,"cpcircle"); 01131 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::circles]->isdrawn,"circles"); 01132 cmd.mapvar(meshdraw->graphicsImmediate.gswitch[d3tessdraw::voronoip]->isdrawn,"cpvoronoi"); 01133 01134 01135 01136 bool enableminb(false); 01137 cmd.mapvar(enableminb,"minb"); 01138 if (enableminb) 01139 mesh->minimizerSet( new d3minboundary(*mesh) ); 01140 01141 bool enableminbr(false); 01142 cmd.mapvar(enableminbr,"minbr"); 01143 if (enableminbr) 01144 mesh->minimizerSet 01145 ( 01146 new d3minrecursiveoperator(*mesh,new d3minboundary(*mesh)) 01147 ); 01148 01149 bool enableminc(false); 01150 cmd.mapvar(enableminc,"minc"); 01151 if (enableminc) 01152 mesh->minimizerSet( new d3mincircle(*mesh) ); 01153 01154 bool enableminDT(false); 01155 cmd.mapvar(enableminDT,"minDT"); 01156 if (enableminDT) 01157 mesh->minimizerSet 01158 ( 01159 new d3minrecursiveoperator(*mesh,new d3mincircle(*mesh)) 01160 ); 01161 01162 bool enablemincentroid(false); 01163 cmd.mapvar(enablemincentroid,"mincentroid"); 01164 if (enablemincentroid) 01165 mesh->minimizerSet( new d3mincentroid(*mesh) ); 01166 01167 bool enablemincentroid2r(false); 01168 cmd.mapvar(enablemincentroid2r,"mincentroid2r"); 01169 if (enablemincentroid2r) 01170 mesh->minimizerSet 01171 ( 01172 new d3minrecursiveoperator(*mesh,new d3mincentroid2(*mesh)) 01173 ); 01174 01175 cmd.mapvar(enabletargetcurve,"targetcurve"); 01176 01177 //test01(); 01178 01179 r.rg.seed(17); 01180 01181 string fname; 01182 cmd.mapvar(fname,"file"); 01183 bool fileread(false); 01184 01185 if (fname.empty()==false) 01186 { 01187 d3meshpointreader mr(fileread,*mesh,fname); 01188 01189 if (fileread) 01190 filereadingmesh(mr); 01191 else 01192 cout << "error: could not read file " << fname << endl; 01193 } 01194 01195 if (fileread==false) 01196 init02(); 01197 01198 meshdraw->meshupdate(); 01199 01200 zpr zz; 01201 01202 glutPostRedisplay(); 01203 01204 glutMainLoop(); 01205 01206 return 0; 01207 }
| void mainmenu | ( | ) |
Definition at line 815 of file main.cpp.
References displaymenu(), filemenu(), getInputString(), init02(), d3tessdraw::meshupdate(), minimizermenu(), d3tess::reset(), searchmenu(), and timmingsmenu().
Referenced by keyboard(), and menusystemtest::test02().
00816 { 00817 for (; ; ) 00818 { 00819 00820 cout << endl; 00821 cout << "Main Menu" << endl; 00822 cout << endl; 00823 cout << " 0: Timmings Menu" << endl; 00824 cout << " 1: Display Menu" << endl; 00825 cout << " 2: File Menu" << endl; 00826 00827 cout << " 5: Change the Minimizer." << endl; 00828 cout << " 6: Reset the mesh." << endl; 00829 cout << " 9: Search Menu" << endl; 00830 00831 cout << " Enter a choice "; 00832 00833 00834 string const s = getInputString(); 00835 if (s.empty()) 00836 { 00837 cout << "No Choice Executed" << endl; 00838 cout << "End of Main Menu" << endl; 00839 return; 00840 } 00841 00842 if (s=="0") 00843 timmingsmenu(); 00844 00845 if (s=="1") 00846 displaymenu(); 00847 00848 if (s=="2") 00849 filemenu(); 00850 00851 if (s=="5") 00852 minimizermenu(); 00853 00854 if (s=="6") 00855 { 00856 mesh->reset(); 00857 init02(); 00858 meshdraw->meshupdate(); 00859 } 00860 00861 if (s=="9") 00862 searchmenu(); 00863 00864 } 00865 }
| void minimizermenu | ( | ) |
Definition at line 418 of file main.cpp.
References getInputString(), and d3tess::minimizerSet().
Referenced by mainmenu().
00419 { 00420 cout << endl; 00421 cout << "Minimizer Menu" << endl; 00422 cout << endl; 00423 cout << "The tessellator has a minimizer." << endl; 00424 cout << "Setting the minimizer affects all future mesh insertions." << endl; 00425 cout << endl; 00426 cout << " 0: No minimizer" << endl; 00427 cout << " 1: minb - minimize the boundary on insertion" << endl; 00428 cout << " 2: minbr" << endl; 00429 cout << " 3: minc" << endl; 00430 cout << " 4: minDT - Delaunay Triangulation" << endl; 00431 cout << " 5: mincentroid" << endl; 00432 cout << " 6: mincentroidr" << endl; 00433 00434 cout << " Enter a choice "; 00435 00436 string const s = getInputString(); 00437 if (s.empty()) 00438 { 00439 cout << "No Choice Executed" << endl; 00440 cout << "End of Minimizer Menu" << endl; 00441 return; 00442 } 00443 00444 if (s=="0") 00445 mesh->minimizerSet( new d3minoperator(*mesh) ); 00446 00447 if (s=="1") 00448 mesh->minimizerSet( new d3minboundary(*mesh) ); 00449 00450 if (s=="2") 00451 mesh->minimizerSet 00452 ( 00453 new d3minrecursiveoperator(*mesh,new d3minboundary(*mesh)) 00454 ); 00455 00456 if (s=="3") 00457 mesh->minimizerSet( new d3mincircle(*mesh) ); 00458 00459 if (s=="4") 00460 mesh->minimizerSet 00461 ( 00462 new d3minrecursiveoperator(*mesh,new d3mincircle(*mesh)) 00463 ); 00464 00465 if (s=="5") 00466 mesh->minimizerSet( new d3mincentroid(*mesh) ); 00467 00468 if (s=="6") 00469 mesh->minimizerSet 00470 ( 00471 new d3minrecursiveoperator(*mesh,new d3mincentroid2(*mesh)) 00472 ); 00473 00474 cout << "End of Choice Menu" << endl; 00475 }
| void searchexp01 | ( | ) |
Definition at line 533 of file main.cpp.
References d3tessdraw::meshupdate(), searchStats(), and SHOW.
Referenced by searchmenu().
00534 { 00535 cout << "Enter the number of points: "; 00536 uint n; 00537 cin >> n; 00538 00539 double searchlongest; 00540 double searchaverage; 00541 00542 searchStats(searchlongest,searchaverage,n); 00543 00544 cout << SHOW(searchlongest) << endl; 00545 cout << SHOW(searchaverage) << endl; 00546 00547 meshdraw->meshupdate(); 00548 }
| void searchexp02 | ( | ) |
Definition at line 550 of file main.cpp.
References searchStats().
Referenced by searchmenu().
00551 { 00552 uint nmax = 1000000; 00553 00554 cout << "Writing search results to search.txt" << endl; 00555 cout << "The number of points is capped at " << nmax << endl; 00556 00557 string fname("search.txt"); 00558 ofstream f(fname.c_str()); 00559 00560 if (f.good()==false) 00561 { 00562 cout << "error: can not open file: " << fname << endl; 00563 return; 00564 } 00565 00566 uint n = 8; 00567 uint N = 3; 00568 00569 cout << "Enter the initial number of points u and the number of times" << endl; 00570 cout << " this is doubled." << endl; 00571 cin >> n; 00572 cin >> N; 00573 00574 double searchlongest; 00575 double searchaverage; 00576 00577 for (uint i=0; i<N; ++i) 00578 { 00579 searchStats(searchlongest,searchaverage,n); 00580 f << n << " " << searchaverage << endl; 00581 n *= 2; 00582 } 00583 }
| void searchmenu | ( | ) |
Definition at line 671 of file main.cpp.
References getInputString(), searchexp01(), and searchexp02().
Referenced by mainmenu().
00672 { 00673 cout << endl; 00674 cout << "Search Menu" << endl; 00675 cout << endl; 00676 cout << " 0: Calculate the shortes, longest and average lengths" << endl; 00677 cout << " of a n point data set with n random inside searches." << endl; 00678 cout << " 1: Write the average search lengths to a file search.txt ." << endl; 00679 00680 cout << " Enter a choice "; 00681 00682 string const s = getInputString(); 00683 if (s.empty()) 00684 { 00685 cout << "No Choice Executed" << endl; 00686 cout << "End of Search Menu" << endl; 00687 return; 00688 } 00689 00690 if (s=="0") 00691 searchexp01(); 00692 00693 if (s=="1") 00694 searchexp02(); 00695 00696 cout << "End of Search Menu" << endl; 00697 }
| void searchStats | ( | double & | searchlongest, | |
| double & | searchaverage, | |||
| uintc | n | |||
| ) |
Definition at line 479 of file main.cpp.
References addrandompointtomesh(), addrandompointtomeshptvector(), d3tess::cp, init02(), d3tess::movecounter, d3tess::pt, d3tess::reset(), and d3tess::searchminimizetowardspoint().
Referenced by searchexp01(), and searchexp02().
00484 { 00485 // Create the mesh first. 00486 mesh->reset(); 00487 init02(); 00488 00489 for (uint i=3; i<n; ++i) 00490 addrandompointtomesh(); 00491 00492 // Create a vector of points inside the mesh 00493 vector<uint> v; 00494 00495 pt2 x; 00496 uint k; 00497 for ( ; v.size()<n; ) 00498 { 00499 k = mesh->pt.size(); 00500 addrandompointtomeshptvector(x); 00501 if (mesh->searchminimizetowardspoint(k)) 00502 v.push_back(k); 00503 } 00504 00505 // Set the cp to some random point inside the mesh 00506 mesh->cp = (rand()% n)+1; 00507 00508 mesh->searchminimizetowardspoint(v[0]); 00509 double c = mesh->movecounter; 00510 searchlongest = c; 00511 searchaverage = c; 00512 00513 for (uint i=1, sz=v.size(); i<sz; ++i) 00514 { 00515 #ifndef NDEBUG 00516 assert( mesh->searchminimizetowardspoint(v[i]) ); 00517 #else 00518 mesh->searchminimizetowardspoint(v[i]); 00519 #endif 00520 00521 c = mesh->movecounter; 00522 if (c>searchlongest) 00523 searchlongest = c; 00524 00525 searchaverage += c; 00526 } 00527 00528 searchaverage *= 1.0/n; 00529 }
| void timmingexperiment00 | ( | ) |
Definition at line 399 of file main.cpp.
References addrandompointtomesh(), aclock::diff_s(), aclock::measure(), d3tessdraw::meshupdate(), and d3tess::vi.
Referenced by timmingsmenu().
00400 { 00401 cout << "Timing experiment." << endl; 00402 cout << "Enter the number of points n: "; 00403 uint n; 00404 cin >> n; 00405 mesh->vi.reserve(n); 00406 00407 aclock c; 00408 c.measure(); 00409 for (uint i=0; i<n; ++i) 00410 addrandompointtomesh(); 00411 c.measure(); 00412 cout << "Time without graphics: "; 00413 cout << c.diff_s() << "s" << endl; 00414 00415 meshdraw->meshupdate(); 00416 }
| void timmingexperiment01 | ( | ) |
Definition at line 240 of file main.cpp.
References addrandompointtomesh(), aclock::diff_s(), init02(), aclock::measure(), d3tess::reset(), SHOW, and d3tess::vi.
Referenced by timmingsmenu().
00241 { 00242 cout << "Multiple timing experiments" << endl; 00243 cout << endl; 00244 cout << "Enter the filename: "; 00245 string fname; 00246 cin >> fname; 00247 00248 ofstream fil(fname.c_str()); 00249 00250 cout << "Enter number of measurements M: "; 00251 uint M; 00252 cin >> M; 00253 00254 uint n=100; 00255 00256 aclock c; 00257 00258 for (uint k=0; k<M; ++k) 00259 { 00260 cout << SHOW(k) << endl; 00261 cout << SHOW(n) << endl; 00262 mesh->vi.reserve(n); 00263 00264 c.measure(); 00265 for (uint i=0; i<n; ++i) 00266 addrandompointtomesh(); 00267 c.measure(); 00268 fil << n << " " << c.diff_s() << endl; 00269 00270 mesh->reset(); 00271 00272 init02(); 00273 00274 n *= 2; 00275 } 00276 cout << "out of loop" << endl; 00277 exit(0); 00278 00279 }
| void timmingexperiment02 | ( | ) |
Definition at line 217 of file main.cpp.
References filereadingmesh().
Referenced by filemenu(), and keyboard().
00218 { 00219 cout << "Reading Points from a File" << endl; 00220 cout << "Expecting the file to have 2 or 3 columns of numbers." << endl; 00221 cout << endl; 00222 cout << " Enter the filename: "; 00223 string fname; 00224 00225 //fname = "dataset2D08.txt"; 00226 //cout << fname << endl; 00227 cin >> fname; 00228 00229 bool res; 00230 d3meshpointreader mr(res,*mesh,fname); 00231 00232 if (res==false) 00233 return; 00234 00235 filereadingmesh(mr); 00236 }
| void timmingexperiment03 | ( | ) |
Definition at line 180 of file main.cpp.
References r.
Referenced by filemenu(), and keyboard().
00181 { 00182 cout << "Creating a 2D Data Set" << endl; 00183 cout << "Writing Points to a File" << endl; 00184 cout << " Enter the filename: "; 00185 string fname; 00186 cin >> fname; 00187 cout << " Enter the number of points: "; 00188 uint n; 00189 cin >> n; 00190 00191 ofstream targ(fname.c_str()); 00192 00193 for (uint i=0; i<n; ++i) 00194 targ << -1.0+2.0*r() << " " << -1.0+2.0*r() << endl; 00195 00196 cout << "Finished writing file: " << fname << endl << endl; 00197 }
| void timmingexperiment04 | ( | ) |
Definition at line 158 of file main.cpp.
References d2func::eval(), r, point2< T >::x, and point2< T >::y.
Referenced by filemenu().
00159 { 00160 cout << "Creating a 3D Data Set" << endl; 00161 cout << "Writing Points to a File" << endl; 00162 cout << " Enter the filename: "; 00163 string fname; 00164 cin >> fname; 00165 cout << " Enter the number of points: "; 00166 uint n; 00167 cin >> n; 00168 00169 ofstream targ(fname.c_str()); 00170 00171 for (uint i=0; i<n; ++i) 00172 { 00173 pt2 x(-1.0+2.0*r(),-1.0+2.0*r()); 00174 targ << x.x << " " << x.y << " " << p2dfunc->eval(x) << endl; 00175 } 00176 00177 cout << "Finished writing file: " << fname << endl << endl; 00178 }
| void timmingexperiment05 | ( | ) |
Definition at line 281 of file main.cpp.
References d3meshpointreader::eval().
Referenced by timmingsmenu().
00282 { 00283 cout << "Multiple Timing Experiments." << endl; 00284 cout << "The results are stored in timings.txt" << endl; 00285 00286 cout << "Enter the filename with a list of 2D data files to be timed: "; 00287 string filenames; 00288 //cin >> filenames; 00289 filenames="dataset2Dlist.txt"; 00290 cout << filenames << endl; 00291 00292 ifstream filelist(filenames.c_str()); 00293 00294 ofstream filtim("timings.txt"); 00295 00296 if (filelist.good()==false) 00297 { 00298 cout << "error: can not open file: " << filenames << endl; 00299 return; 00300 } 00301 00302 while (filelist.eof()==false) 00303 { 00304 string f1; 00305 filelist >> f1; 00306 00307 if (f1.empty()) 00308 continue; 00309 00310 cout << "Started reading file: " << f1 << endl; 00311 bool res; 00312 d3meshpointreader mr(res,*mesh,f1); 00313 if (res==false) 00314 { 00315 cout << "error: could not read file:" << f1 << "." << endl; 00316 continue; 00317 } 00318 cout << "Finished reading file: " << f1 << endl; 00319 cout << "Timing file:" << f1 << "." << endl; 00320 00321 cout << "Starting insertion of points into the mesh" << endl; 00322 mr.eval(filtim); 00323 cout << "Finished insertion of points into the mesh" << endl << endl; 00324 } 00325 }
| void timmingexperiment06 | ( | ) |
Definition at line 330 of file main.cpp.
References d3meshpointreader::eval().
Referenced by timmingsmenu().
00331 { 00332 cout << "Simulating Multiple Timing Experiments." << endl; 00333 cout << "The results are stored in timings.txt" << endl; 00334 cout << "This is testing an algorithm not yet build." << endl; 00335 cout << " It has the same complexity as this one." << endl; 00336 cout << " A O(n) operation is applied after this step." << endl; 00337 cout << endl; 00338 cout << "A bounding box is first inserted. All the points " << endl; 00339 cout << " should lie well within the bounding box." << endl; 00340 cout << endl; 00341 cout << "For a preordered data set I am expecting linear results" << endl; 00342 00343 00344 cout << "Enter the filename with a list of 2D data files to be timed: "; 00345 string filenames; 00346 //cin >> filenames; 00347 filenames="datasetlist.txt"; 00348 cout << filenames << endl; 00349 00350 ifstream filelist(filenames.c_str()); 00351 00352 ofstream filtim("timings.txt"); 00353 00354 if (filelist.good()==false) 00355 { 00356 cout << "error: can not open file: " << filenames << endl; 00357 return; 00358 } 00359 00360 // Points defining the bounding box. 00361 vector< pt3 > vbox; 00362 vbox.push_back( pt3(-2.0,-2.0,0.0) ); 00363 vbox.push_back( pt3(2.0,-2.0,0.0) ); 00364 vbox.push_back( pt3(2.0,2.0,0.0) ); 00365 vbox.push_back( pt3(-2.0,2.0,0.0) ); 00366 00367 00368 while (filelist.eof()==false) 00369 { 00370 string f1; 00371 filelist >> f1; 00372 00373 if (f1.empty()) 00374 continue; 00375 00376 cout << "Started reading file: " << f1 << endl; 00377 bool res; 00378 d3meshpointreader mr(res,*mesh,vbox,f1); 00379 if (res==false) 00380 { 00381 cout << "error: could not read file:" << f1 << "." << endl; 00382 continue; 00383 } 00384 cout << "Finished reading file: " << f1 << endl; 00385 cout << "Timing file:" << f1 << "." << endl; 00386 00387 cout << "Starting insertion of points into the mesh" << endl; 00388 mr.eval(filtim); 00389 cout << "Finished insertion of points into the mesh" << endl << endl; 00390 } 00391 }
| void timmingsmenu | ( | ) |
Definition at line 699 of file main.cpp.
References getInputString(), timmingexperiment00(), timmingexperiment01(), timmingexperiment05(), and timmingexperiment06().
Referenced by mainmenu().
00700 { 00701 cout << endl; 00702 cout << "Timmings Menu" << endl; 00703 cout << endl; 00704 cout << " 0: One tessellation with n points measured." << endl; 00705 cout << " 1: Multiple timing measurements to file." << endl; 00706 cout << " 2: Multiple timmings on 2D data files" << endl; 00707 cout << " 3: Simulating Multiple timmings on my Bounded Algorithm" << endl; 00708 cout << " Enter a choice "; 00709 00710 00711 string const s = getInputString(); 00712 if (s.empty()) 00713 { 00714 cout << "No Choice Executed" << endl; 00715 cout << "End of Timmings Menu" << endl; 00716 return; 00717 } 00718 00719 if (s=="0") 00720 timmingexperiment00(); 00721 00722 if (s=="1") 00723 timmingexperiment01(); 00724 00725 if (s=="2") 00726 timmingexperiment05(); 00727 00728 if (s=="3") 00729 timmingexperiment06(); 00730 00731 cout << "End of Timmings Menu" << endl; 00732 }
| messagefile error("error.txt", true) |
| d2func* p2dfunc = new d2circle(targetcenter,targetradius) |
Definition at line 69 of file main.cpp.
Referenced by protractor::addAngleRuler(), addpointinsidemesh(), protractor::addRadiusRuler(), addrandompointtomeshptvector(), pointgrid3D::createIndexedTriangles(), d3writefile(), tessD1draw01linesmulticolor< TESS, PT >::draw(), triangledisplaygergonnepoint< TR >::draw(), triangledisplayincenter< TR >::draw(), triangledisplaycircumcenter< TR >::draw(), tessD2draw02circles< TESS, PT, INDX >::draw(), regionD2tessdisplaymesh< TS, Indx >::draw(), writemulticolorobj::draw(), d4mingreedy2::eval(), trianglevisualize< T >::eval(), tessD2disp01< PT >::eval(), polytopeD2tessdisp01< VPTS, VPOLY >::eval(), generateRandomPointsInCircle< T, D, RG >::generateRandomPointsInCircle(), generateRandomPointsInSphere< T, D, RG >::generateRandomPointsInSphere(), visconvex::handlecommand(), mazematrixD2createmaze< T >::impropermaze01(), init02(), particle::isIntersecting(), keyboard(), integration< D, F >::LJcalc(), d2homogeneous::matrixMultiply(), zprmouse::mouseratio(), d2homogeneous::operator*=(), halfspaceD2draw::rotate(), d2homogeneous::setRotateAboutPoint(), gausselim< T >::substitute(), randomtest::test01(), histogramtest::test01(), delaunaysimpleD2test::test01(), test01(), spiralindextest::test02(), randomtest::test02(), delaunaysimpleD2test::test02(), test02(), randomtest::test03(), halfspaceD3test::test03(), triangles3Tdisplaytest::test03(), test03(), spiralindextest::test04(), randomtest::test04(), triangles3Tdisplaytest::test04(), partitionstest::test06(), test13(), timmingexperiment03(), timmingexperiment04(), triangles3Tdisplaymulticolored< T, W >::triangles3Tdisplaymulticolored(), pointgrid3Ddraw::update(), pointgrid3Dbilineardraw::update(), and rpnp_to_c::visit().
| gobjMyCircleDraw targetcurve(targetradius, pt3(targetcenter.x, targetcenter.y, 0.0), targetcircle) |
Referenced by display().
| doublec targetradius = 0.6 |
1.5.8