Changeset 4635
- Timestamp:
- Sep 18, 2014 2:01:56 PM (9 years ago)
- Location:
- geovis/trunk
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
geovis/trunk/Makefile.in
r4629 r4635 145 145 SERVER=geovis 146 146 147 .PHONY: all docs install clean clean-docs distclean 147 resources = \ 148 $(srcdir)/resources/placemark32.png \ 149 $(srcdir)/resources/world.tif 150 151 .PHONY: all docs install install-resources clean clean-docs distclean 148 152 149 153 all: $(SERVER) … … 156 160 $(CXX) -o $@ $(SERVER_OBJS) $(LIBS) 157 161 158 install: all 162 install: install-server install-resources 163 164 install-server: all 159 165 $(INSTALL_PROGRAM) $(SERVER) $(bindir) 166 167 install-resources: 168 $(MKDIR_P) $(libdir)/resources 169 @for i in $(resources) ; do \ 170 echo "installing $$i..." ; \ 171 $(INSTALL_DATA) $$i $(libdir)/resources ; \ 172 done 160 173 161 174 %.o: %.cpp -
geovis/trunk/RenderServer.cpp
r4632 r4635 292 292 signal(SIGPIPE, SIG_IGN); 293 293 294 //const char *resourcePath = NULL;294 std::string resourcePath; 295 295 while (1) { 296 296 int c = getopt(argc, argv, "p:i:o:"); … … 300 300 switch (c) { 301 301 case 'p': 302 //resourcePath = optarg;302 resourcePath = optarg; 303 303 break; 304 304 case 'i': { … … 351 351 g_renderer = new Renderer(); 352 352 g_inBufPtr = new ReadBuffer(g_fdIn, 1<<12); 353 354 if (resourcePath.empty()) { 355 resourcePath = "/usr/share/osgearth/data"; 356 } 357 g_renderer->setResourcePath(resourcePath); 353 358 354 359 Tcl_Interp *interp = Tcl_CreateInterp(); -
geovis/trunk/Renderer.cpp
r4632 r4635 78 78 (((t2).tv_sec - (t1).tv_sec))*1.0e+3 + (double)((t2).tv_usec - (t1).tv_usec)/1.0e+3) 79 79 80 #define BASE_IMAGE " /usr/share/osgearth/data/world.tif"81 #define PIN_ICON " /usr/share/osgearth/data/placemark32.png"80 #define BASE_IMAGE "world.tif" 81 #define PIN_ICON "placemark32.png" 82 82 83 83 using namespace GeoVis; … … 107 107 TRACE("Setting base URI: %s", _baseURI.c_str()); 108 108 } 109 110 #if 0111 initViewer();112 113 osgEarth::MapOptions mapOpts;114 mapOpts.coordSysType() = osgEarth::MapOptions::CSTYPE_PROJECTED;115 mapOpts.profile() = osgEarth::ProfileOptions("global-mercator");116 osgEarth::Map *map = new osgEarth::Map(mapOpts);117 _map = map;118 osgEarth::Drivers::GDALOptions bopts;119 bopts.url() = BASE_IMAGE;120 addImageLayer("base", bopts);121 #ifdef USE_OSGEARTH_TRUNK122 osgEarth::Drivers::MPTerrainEngine::MPTerrainEngineOptions mpOpt;123 #else124 osgEarth::Drivers::MPTerrainEngineOptions mpOpt;125 #endif126 // Set background layer color127 mpOpt.color() = osg::Vec4(1, 1, 1, 1);128 //mpOpt.minLOD() = 1;129 osgEarth::MapNodeOptions mapNodeOpts(mpOpt);130 mapNodeOpts.enableLighting() = false;131 osgEarth::MapNode *mapNode = new osgEarth::MapNode(map, mapNodeOpts);132 _mapNode = mapNode;133 _sceneRoot = new osg::Group;134 _sceneRoot->addChild(mapNode);135 _viewer->setSceneData(_sceneRoot.get());136 137 initEarthManipulator();138 initControls();139 140 finalizeViewer();141 #endif142 143 #ifdef DEBUG144 if (_viewer.valid() && _viewer->getViewerStats() != NULL) {145 TRACE("Enabling stats");146 _viewer->getViewerStats()->collectStats("scene", true);147 }148 #endif149 #if 0150 if (_viewer.valid()) {151 osgViewer::ViewerBase::Windows windows;152 _viewer->getWindows(windows);153 if (windows.size() == 1) {154 windows[0]->setSyncToVBlank(false);155 } else {156 ERROR("Num windows: %lu", windows.size());157 }158 }159 #endif160 109 } 161 110 … … 179 128 180 129 TRACE("Leave"); 130 } 131 132 std::string Renderer::getBaseImage() 133 { 134 std::ostringstream oss; 135 oss << _resourcePath << "/" << BASE_IMAGE; 136 return oss.str(); 137 } 138 139 std::string Renderer::getPinIcon() 140 { 141 std::ostringstream oss; 142 oss << _resourcePath << "/" << PIN_ICON; 143 return oss.str(); 181 144 } 182 145 … … 301 264 _viewer->addEventHandler(_stateManip); 302 265 //_viewer->addEventHandler(new osgViewer::StatsHandler()); 266 267 #ifdef DEBUG 268 if (_viewer->getViewerStats() != NULL) { 269 TRACE("Enabling stats"); 270 _viewer->getViewerStats()->collectStats("scene", true); 271 } 272 #endif 273 #if 0 274 osgViewer::ViewerBase::Windows windows; 275 _viewer->getWindows(windows); 276 if (windows.size() == 1) { 277 windows[0]->setSyncToVBlank(false); 278 } else { 279 ERROR("Num windows: %lu", windows.size()); 280 } 281 #endif 303 282 } 304 283 … … 709 688 _map = map; 710 689 osgEarth::Drivers::GDALOptions bopts; 711 bopts.url() = BASE_IMAGE;690 bopts.url() = getBaseImage(); 712 691 addImageLayer("base", bopts); 713 692 #ifdef USE_OSGEARTH_TRUNK … … 1255 1234 1256 1235 osgEarth::Symbology::Style pin; 1257 pin.getOrCreate<osgEarth::Symbology::IconSymbol>()->url()->setLiteral( PIN_ICON);1236 pin.getOrCreate<osgEarth::Symbology::IconSymbol>()->url()->setLiteral(getPinIcon()); 1258 1237 osgEarth::Annotation::AnnotationNode *anno = new osgEarth::Annotation::PlaceNode(_mapNode, osgEarth::GeoPoint(geoSRS, longitude, latitude), labelText, pin); 1259 1238 _placeNodes->addChild(anno); -
geovis/trunk/Renderer.h
r4632 r4635 129 129 virtual ~Renderer(); 130 130 131 void setResourcePath(std::string& path) 132 { 133 TRACE("Set resource path to %s", path.c_str()); 134 _resourcePath = path; 135 } 136 137 std::string getBaseImage(); 138 139 std::string getPinIcon(); 140 131 141 // Colormaps 132 142 … … 453 463 ColorMapHashmap _colorMaps; 454 464 465 std::string _resourcePath; 455 466 std::string _baseURI; 456 467 std::string _cacheDir; -
geovis/trunk/RendererCmd.cpp
r4632 r4635 13 13 #include <string> 14 14 #include <sstream> 15 #include <limits> 15 16 #include <vector> 16 17 #include <unistd.h> … … 766 767 return (*proc) (clientData, interp, objc, objv); 767 768 } 768 769 #if 1 770 static int 771 MapCoordsOp(ClientData clientData, Tcl_Interp *interp, int objc, 772 Tcl_Obj *const *objv) 773 { 774 int tokenLength; 775 const char *token = Tcl_GetStringFromObj(objv[2], &tokenLength); 776 int numCoords; 777 Tcl_Obj **coords; 778 if (Tcl_ListObjGetElements(interp, objv[3], &numCoords, &coords) != TCL_OK) { 779 return TCL_ERROR; 780 } 781 if (numCoords == 0) { 782 Tcl_AppendResult(interp, "no x,y coordinates in list", (char *)NULL); 783 return TCL_ERROR; 784 } 785 if (numCoords & 1) { 786 Tcl_AppendResult(interp, "odd number of x, y coordinates in list", 787 (char *)NULL); 788 return TCL_ERROR; 789 } 790 const osgEarth::SpatialReference *outSRS = NULL; 791 if (objc > 4) { 792 std::string srsInit; 793 std::string verticalDatum; 794 srsInit = Tcl_GetString(objv[4]); 795 if (objc > 5) { 796 verticalDatum = Tcl_GetString(objv[5]); 797 } 798 outSRS = osgEarth::SpatialReference::get(srsInit, verticalDatum); 799 if (outSRS == NULL) { 800 Tcl_AppendResult(interp, "bad SRS \"", srsInit.c_str(), "\"", 801 (char*)NULL); 802 return TCL_ERROR; 803 } 804 } 805 Tcl_Obj *listObjPtr = Tcl_NewListObj(0, (Tcl_Obj **)NULL); 806 std::vector<osg::Vec3d> coordVec; 807 for (int i = 0; i < numCoords; i += 2) { 808 int x, y; 809 if ((Tcl_GetIntFromObj(interp, coords[i], &x) != TCL_OK) || 810 (Tcl_GetIntFromObj(interp, coords[i+1], &y) != TCL_OK)) { 811 return TCL_ERROR; 812 } 813 osgEarth::GeoPoint mapPoint; 814 if (g_renderer->mapMouseCoords(x, y, mapPoint)) { 815 // altmode absolute 816 coordVec.push_back(osg::Vec3d(mapPoint.x(), mapPoint.y(), mapPoint.z())); 817 #if 0 818 if (outSRS != NULL) { 819 mapPoint = mapPoint.transform(outSRS); 820 if (!mapPoint.isValid()) { 821 Tcl_DecrRefCount(listObjPtr); 822 Tcl_AppendResult(interp, "Could not transform map point to requested SRS", (char*)NULL); 823 return TCL_ERROR; 824 } 825 } 826 Tcl_Obj *objPtr = Tcl_NewDoubleObj(mapPoint.x()); 827 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 828 objPtr = Tcl_NewDoubleObj(mapPoint.y()); 829 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 830 objPtr = Tcl_NewDoubleObj(mapPoint.z()); 831 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 832 #endif 833 } else { 834 coordVec.push_back(osg::Vec3d(std::numeric_limits<double>::quiet_NaN(), 835 std::numeric_limits<double>::quiet_NaN(), 836 std::numeric_limits<double>::quiet_NaN())); 837 #if 0 838 Tcl_Obj *objPtr = Tcl_NewStringObj("NaN", 3); 839 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 840 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 841 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 842 #endif 843 } 844 } 845 if (outSRS != NULL) { 846 g_renderer->getMapSRS()->transform(coordVec, outSRS); 847 } else { 848 outSRS = g_renderer->getMapSRS(); 849 } 850 for (std::vector<osg::Vec3d>::iterator itr = coordVec.begin(); 851 itr != coordVec.end(); ++itr) { 852 Tcl_Obj *objPtr = Tcl_NewDoubleObj(itr->x()); 853 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 854 objPtr = Tcl_NewDoubleObj(itr->y()); 855 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 856 objPtr = Tcl_NewDoubleObj(itr->z()); 857 Tcl_ListObjAppendElement(interp, listObjPtr, objPtr); 858 } 859 // send coords to client 860 int listLength; 861 const char *string = Tcl_GetStringFromObj(listObjPtr, &listLength); 862 size_t length = listLength + tokenLength + 863 outSRS->getHorizInitString().length() + 864 outSRS->getVertInitString().length() + 865 25; 866 char *mesg = new char[length]; 867 length = snprintf(mesg, length, "nv>map coords %s {%s} {%s} {%s}\n", token, string, 868 outSRS->getHorizInitString().c_str(), 869 outSRS->getVertInitString().c_str()); 870 Tcl_DecrRefCount(listObjPtr); 871 queueResponse(mesg, length, Response::VOLATILE); 872 delete [] mesg; 873 return TCL_OK; 874 } 875 #else 769 876 static int 770 877 MapCoordsOp(ClientData clientData, Tcl_Interp *interp, int objc, … … 821 928 return TCL_OK; 822 929 } 823 930 #endif 824 931 static int 825 932 MapGraticuleOp(ClientData clientData, Tcl_Interp *interp, int objc, … … 1636 1743 1637 1744 static CmdSpec mapOps[] = { 1638 {"coords", 1, MapCoordsOp, 5, 7, "token x y?srs? ?verticalDatum?"},1745 {"coords", 1, MapCoordsOp, 4, 6, "token coords ?srs? ?verticalDatum?"}, 1639 1746 {"grid", 1, MapGraticuleOp, 3, 4, "bool ?type?"}, 1640 1747 {"layer", 2, MapLayerOp, 3, 0, "op ?params...?"},
Note: See TracChangeset
for help on using the changeset viewer.