00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #ifndef AXES_HH
00020 #define AXES_HH
00021 
00022 #include <iostream>
00023 #include <fstream>
00024 
00025 
00026 class Axes;
00027 std::ostream& operator<<(std::ostream &stream, const Axes& axes);
00028 
00029 class Axes
00030 {
00031   public:
00032     Axes(double len = 1.) : 
00033       _len(len)
00034     {}
00035 
00036     double getLen() const { return _len; }
00037 
00038     void saveToFile(const char* filename, bool append = false)
00039     {
00040       if (append) {
00041         std::ofstream fout(filename, std::ios::app);
00042         fout << *this;
00043         fout.close();
00044       } else {
00045         std::ofstream fout(filename);
00046         fout << *this;
00047         fout.close();
00048       }
00049     }
00050 
00051   private:
00052     double _len;
00053 };
00054 
00055 inline std::ostream& operator<<(std::ostream &stream, const Axes& axes)
00056 {
00057   double len = axes.getLen();
00058 
00059   
00060   stream << "#coordinate axes" << std::endl;
00061   stream << "Transform {\n";
00062   stream << "   translation 0 0 0\n";
00063   stream << "   children [\n";
00064 
00065   stream << "Shape {\n";
00066   stream << "  appearance Appearance {" << std::endl;
00067   stream << "    material Material { " << std::endl;
00068   stream << "         diffuseColor 0.8 0.8 0.8 " << std::endl;
00069   stream << "         ambientIntensity 0.2 " << std::endl;
00070   stream << "         emissiveColor 0.0 0.0 0.0 " << std::endl;
00071   stream << "         specularColor 0.0 0.0 0.0 " << std::endl;
00072   stream << "         shininess 0.2 " << std::endl;
00073   stream << "         transparency 0.0 " << std::endl;
00074   stream << "    } " << std::endl;
00075   stream << "  } " << std::endl;
00076   stream << "  geometry IndexedLineSet {\n";
00077   stream << "     coord Coordinate {\n";
00078   stream << "        point [ 0 0 0, " << len << " 0 0, 0 " << len << " 0, 0 0 " << len << "]\n";
00079   stream << "     }\n";
00080   stream << "     coordIndex [ 0 1 -1 0 2 -1 0 3 -1]\n";
00081   stream << "     color Color {\n"
00082          << "       color [0.8 0.0 0.0, 0.0 0.8 0.0, 0.0 0.0 0.8]\n"
00083          << "     }\n";
00084   stream << "     colorPerVertex FALSE\n";
00085   stream << "    }\n";
00086   stream << "}\n";
00087 
00088   
00089   stream << "Transform {\n";
00090   stream << "   rotation 0 0 1 -1.5707963\n";
00091   stream << "   translation " <<  len << " 0 0\n";
00092   stream << "   children [\n";
00093   stream << "   Shape {\n";
00094   stream << "     appearance Appearance {" << std::endl;
00095   stream << "       material Material { " << std::endl;
00096   stream << "          diffuseColor 0.8 0.0 0.0 " << std::endl;
00097   stream << "          ambientIntensity 0.2 " << std::endl;
00098   stream << "          emissiveColor 0.0 0.0 0.0 " << std::endl;
00099   stream << "          specularColor 0.0 0.0 0.0 " << std::endl;
00100   stream << "          shininess 0.2 " << std::endl;
00101   stream << "          transparency 0.0 " << std::endl;
00102   stream << "       } " << std::endl;
00103   stream << "     } " << std::endl;
00104   stream << "     geometry Cone {\n";
00105   stream << "        bottomRadius " << len / 100. << "\n";
00106   stream << "        height " << len /10. << "\n";
00107   stream << "        }\n";
00108   stream << "     }\n";
00109   stream << "     ]\n";
00110   stream << "}\n";
00111 
00112   
00113   stream << "Transform {\n";
00114   stream << "   translation " <<  .95 * len << " " << -len/40. << " " << len/ 30. << "\n";
00115   stream << "   children [\n";
00116   stream << "   Shape {\n";
00117   stream << "     appearance Appearance {" << std::endl;
00118   stream << "       material Material { " << std::endl;
00119   stream << "          diffuseColor 0.8 0.0 0.0 " << std::endl;
00120   stream << "          ambientIntensity 0.2 " << std::endl;
00121   stream << "          emissiveColor 0.0 0.0 0.0 " << std::endl;
00122   stream << "          specularColor 0.0 0.0 0.0 " << std::endl;
00123   stream << "          shininess 0.2 " << std::endl;
00124   stream << "          transparency 0.0 " << std::endl;
00125   stream << "       } " << std::endl;
00126   stream << "     } " << std::endl;
00127   stream << "     geometry Text {\n";
00128   stream << "       string \"X\"";
00129   stream << "       fontStyle FontStyle {\n";
00130   stream << "         size " <<  len /15. << "\n";
00131   stream << "           }\n";
00132   stream << "        }\n";
00133   stream << "       }\n";
00134   stream << "     ]\n";
00135   stream << "    }\n";
00136 
00137   
00138   stream << "Transform {\n";
00139   stream << "   rotation 0 0 1 0\n";
00140   stream << "   translation 0 " <<  len << " 0\n";
00141   stream << "   children [\n";
00142   stream << "   Shape {\n";
00143   stream << "     appearance Appearance {" << std::endl;
00144   stream << "       material Material { " << std::endl;
00145   stream << "          diffuseColor 0.0 0.8 0.0 " << std::endl;
00146   stream << "          ambientIntensity 0.2 " << std::endl;
00147   stream << "          emissiveColor 0.0 0.0 0.0 " << std::endl;
00148   stream << "          specularColor 0.0 0.0 0.0 " << std::endl;
00149   stream << "          shininess 0.2 " << std::endl;
00150   stream << "          transparency 0.0 " << std::endl;
00151   stream << "       } " << std::endl;
00152   stream << "     } " << std::endl;
00153   stream << "     geometry Cone {\n";
00154   stream << "        bottomRadius " << len / 100. << "\n";
00155   stream << "        height " << len /10. << "\n";
00156   stream << "        }\n";
00157   stream << "     }\n";
00158   stream << "     ]\n";
00159   stream << "}\n";
00160 
00161   
00162   stream << "Transform {\n";
00163   stream << "   translation " << -len/40. << " " <<  .95 * len << " " << len/ 30. << "\n";
00164   stream << "   children [\n";
00165   stream << "   Shape {\n";
00166   stream << "     appearance Appearance {" << std::endl;
00167   stream << "       material Material { " << std::endl;
00168   stream << "          diffuseColor 0.0 0.8 0.0 " << std::endl;
00169   stream << "          ambientIntensity 0.2 " << std::endl;
00170   stream << "          emissiveColor 0.0 0.0 0.0 " << std::endl;
00171   stream << "          specularColor 0.0 0.0 0.0 " << std::endl;
00172   stream << "          shininess 0.2 " << std::endl;
00173   stream << "          transparency 0.0 " << std::endl;
00174   stream << "       } " << std::endl;
00175   stream << "     } " << std::endl;
00176   stream << "     geometry Text {\n";
00177   stream << "       string \"Y\"";
00178   stream << "       fontStyle FontStyle {\n";
00179   stream << "         size " <<  len /15. << "\n";
00180   stream << "           }\n";
00181   stream << "        }\n";
00182   stream << "       }\n";
00183   stream << "     ]\n";
00184   stream << "    }\n";
00185 
00186   
00187   stream << "Transform {\n";
00188   stream << "   rotation 1 0 0 1.5707963 \n";
00189   stream << "   translation 0 0 " <<  .96 * len << " \n";
00190   stream << "   children [\n";
00191   stream << "   Shape {\n";
00192   stream << "     appearance Appearance {" << std::endl;
00193   stream << "       material Material { " << std::endl;
00194   stream << "          diffuseColor 0.0 0.0 0.8 " << std::endl;
00195   stream << "          ambientIntensity 0.2 " << std::endl;
00196   stream << "          emissiveColor 0.0 0.0 0.0 " << std::endl;
00197   stream << "          specularColor 0.0 0.0 0.0 " << std::endl;
00198   stream << "          shininess 0.2 " << std::endl;
00199   stream << "          transparency 0.0 " << std::endl;
00200   stream << "       } " << std::endl;
00201   stream << "     } " << std::endl;
00202   stream << "     geometry Cone {\n";
00203   stream << "        bottomRadius " << len / 100. << "\n";
00204   stream << "        height " << len /10. << "\n";
00205   stream << "        }\n";
00206   stream << "     }\n";
00207   stream << "     ]\n";
00208   stream << "}\n";
00209 
00210   
00211   stream << "Transform {\n";
00212   stream << "   rotation 0 1 0 -1.5707963 \n";
00213   stream << "   translation "  << -len/30. << " " << -len/ 40. <<  " " << .95 * len << "\n";
00214   stream << "   children [\n";
00215   stream << "   Shape {\n";
00216   stream << "     appearance Appearance {" << std::endl;
00217   stream << "       material Material { " << std::endl;
00218   stream << "          diffuseColor 0.0 0.0 0.8 " << std::endl;
00219   stream << "          ambientIntensity 0.2 " << std::endl;
00220   stream << "          emissiveColor 0.0 0.0 0.0 " << std::endl;
00221   stream << "          specularColor 0.0 0.0 0.0 " << std::endl;
00222   stream << "          shininess 0.2 " << std::endl;
00223   stream << "          transparency 0.0 " << std::endl;
00224   stream << "       } " << std::endl;
00225   stream << "     } " << std::endl;
00226   stream << "     geometry Text {\n";
00227   stream << "       string \"Z\"";
00228   stream << "       fontStyle FontStyle {\n";
00229   stream << "         size " <<  len /15. << "\n";
00230   stream << "           }\n";
00231   stream << "        }\n";
00232   stream << "       }\n";
00233   stream << "     ]\n";
00234   stream << "    }\n";
00235 
00236   
00237   stream << "  ]\n";
00238   stream << "}\n";
00239   
00240   return stream;
00241 }
00242 
00243 #endif