- Timestamp:
- Dec 11, 2015, 12:21:12 AM (9 years ago)
- Location:
- geovis/trunk
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
geovis/trunk/Makefile.in
r5938 r5944 127 127 IData.cpp \ 128 128 Picker.cpp \ 129 Placard.cpp \ 129 130 PPMWriter.cpp \ 130 131 ReadBuffer.cpp \ … … 203 204 idatatest.o: IData.h 204 205 md5.o: md5.h 205 Picker.o: Picker.h Renderer.h Trace.h 206 Picker.o: Picker.h Renderer.h Trace.h Placard.h 207 Placard.o: Placard.h Trace.h 206 208 PPMWriter.o: PPMWriter.h ResponseQueue.h Trace.h 207 209 ReadBuffer.o: ReadBuffer.h Trace.h 208 Renderer.o: Renderer.h Trace.h Picker.h MouseCoordsTool.h ScaleBar.h FileUtil.h Util.h210 Renderer.o: Renderer.h Trace.h Picker.h Placard.h MouseCoordsTool.h ScaleBar.h FileUtil.h Util.h 209 211 RendererCmd.o: Renderer.h ReadBuffer.h ResponseQueue.h Trace.h CmdProc.h PPMWriter.h TGAWriter.h 210 212 RenderServer.o: RenderServer.h RendererCmd.h Renderer.h ReadBuffer.h ResponseQueue.h Trace.h PPMWriter.h TGAWriter.h Stats.h -
geovis/trunk/Picker.cpp
r5942 r5944 22 22 23 23 #include "Picker.h" 24 #include "Placard.h" 24 25 #include "Renderer.h" 25 26 #include "RendererCmd.h" … … 188 189 osgEarth::Features::FeatureIndex *index = osgEarth::Registry::objectIndex()->get<osgEarth::Features::FeatureIndex>(id); 189 190 osgEarth::Features::Feature *feature = index ? index->getFeature(id) : 0L; 190 INFO("Select hit oid: %lu ", id);191 INFO("Select hit oid: %lu at %g,%g", id, _pickPoint.x(), _pickPoint.y()); 191 192 if (feature) { 192 INFO("Hit feature ID: %lu (of %d)", feature->getFID(), index->size()); 193 const osgEarth::Features::AttributeTable &attrs = feature->getAttrs(); 194 std::ostringstream oss; 195 for (osgEarth::Features::AttributeTable::const_iterator itr = attrs.begin(); itr != attrs.end(); ++itr) { 196 INFO(" attr: %s", itr->first.c_str()); 197 oss << itr->first.c_str() << ": "; 198 switch (itr->second.first) { 199 case osgEarth::Features::ATTRTYPE_STRING: 200 INFO(" value: %s", itr->second.getString().c_str()); 201 oss << itr->second.getString() << std::endl; 202 break; 203 case osgEarth::Features::ATTRTYPE_INT: 204 INFO(" value: %d", itr->second.getInt()); 205 oss << itr->second.getInt() << std::endl; 206 break; 207 case osgEarth::Features::ATTRTYPE_DOUBLE: 208 INFO(" value: %g", itr->second.getDouble()); 209 oss << itr->second.getDouble() << std::endl; 210 break; 211 case osgEarth::Features::ATTRTYPE_BOOL: 212 INFO(" value: %s", itr->second.getBool() ? "true" : "false"); 213 oss << (itr->second.getBool() ? "true" : "false") << std::endl; 214 break; 215 default: 216 INFO(" value: unknown type"); 193 osgEarth::Features::FeatureSourceIndex *fsi = dynamic_cast<osgEarth::Features::FeatureSourceIndex *>(index); 194 std::string layerName; 195 if (fsi) { 196 osgEarth::Features::FeatureSource *source = fsi->getFeatureSource(); 197 if (source) { 198 layerName = source->getFeatureSourceOptions().name().get(); 217 199 } 218 200 } 219 INFO(" Point: %g %g", _pickPoint.x(), _pickPoint.y());220 //INFO("Label: %s", oss.str().c_str()); 201 INFO("Hit feature ID: %lu (of %d) layer: %s", feature->getFID(), index->size(), layerName.c_str()); 202 221 203 osgEarth::Symbology::Style style; 222 204 osgEarth::Symbology::TextSymbol *ts = style.getOrCreateSymbol<osgEarth::Symbology::TextSymbol>(); … … 229 211 //ts->encoding() = osgEarth::Symbology::TextSymbol::ENCODING_UTF8; 230 212 clearSelection(); 231 osgEarth::Annotation::LabelNode *label = 232 new osgEarth::Annotation::LabelNode(_renderer->getMapNode(), _pickPoint, oss.str(), style); 213 214 const osgEarth::Features::AttributeTable &attrs = feature->getAttrs(); 215 Placard placard = _renderer->getPlacardConfig(layerName); 216 if (placard.getNumEntries() == 0) { 217 placard.addAllAttributes(attrs); 218 } 219 PlacardNode *label = 220 new PlacardNode(_renderer->getMapNode(), _pickPoint, placard, attrs, style); 233 221 label->getOrCreateStateSet()->setRenderBinDetails(INT_MAX, "RenderBin"); 234 222 _renderer->getAnnotations()->addChild(label); 223 235 224 char mesg[256]; 236 std::string layerName;237 osgEarth::Features::FeatureSourceIndex *fsi = dynamic_cast<osgEarth::Features::FeatureSourceIndex *>(index);238 if (fsi) {239 osgEarth::Features::FeatureSource *source = fsi->getFeatureSource();240 if (source) {241 layerName = source->getFeatureSourceOptions().name().get();242 }243 }244 225 snprintf(mesg, sizeof(mesg), "nv>select feature %u %lu %d {%s}\n", id, feature->getFID(), index->size(), layerName.c_str()); 245 226 size_t length = strlen(mesg); -
geovis/trunk/Renderer.cpp
r5942 r5944 1513 1513 } 1514 1514 } 1515 } 1516 1517 void Renderer::setPlacardConfig(const Placard& placardConf, const char *layerName) 1518 { 1519 osgEarth::ModelLayer *layer = _map->getModelLayerByName(layerName); 1520 if (layer == NULL) { 1521 ERROR("Unknown layer '%s'", layerName); 1522 return; 1523 } 1524 //PlacardNode *node; 1525 //node->setConfig(placardConf); 1526 _placardConfigs[layerName] = placardConf; 1515 1527 } 1516 1528 -
geovis/trunk/Renderer.h
r5942 r5944 52 52 #include "MouseCoordsTool.h" 53 53 #include "ScaleBar.h" 54 #include "Placard.h" 54 55 55 56 // Controls if TGA format is sent to client … … 514 515 void writeScene(const std::string& file); 515 516 517 void setPlacardConfig(const Placard& placardConf, const char *layerName); 518 516 519 void selectFeatures(std::vector<unsigned long>& featureIDs, const char *layerName); 517 520 … … 550 553 return _placeNodes.get(); 551 554 } 555 Placard getPlacardConfig(const std::string& layerName) 556 { 557 Placard ret; 558 PlacardHashmap::iterator itr = _placardConfigs.find(layerName); 559 if (itr != _placardConfigs.end()) { 560 ret = itr->second; 561 } 562 return ret; 563 } 552 564 553 565 private: 554 566 typedef std::tr1::unordered_map<ColorMapId, osg::ref_ptr<osg::TransferFunction1D> > ColorMapHashmap; 555 567 typedef std::tr1::unordered_map<ViewpointId, osgEarth::Viewpoint> ViewpointHashmap; 568 typedef std::tr1::unordered_map<std::string, Placard> PlacardHashmap; 556 569 557 570 void initAnnotations(); … … 603 616 osg::ref_ptr<osg::Group> _graticule; 604 617 osg::ref_ptr<osg::Group> _annotations; 618 PlacardHashmap _placardConfigs; 605 619 double _anchorLat, _anchorLong; 606 620 osg::ref_ptr<osgEarth::Annotation::FeatureNode> _selectionBox; -
geovis/trunk/RendererCmd.cpp
r5942 r5944 3038 3038 3039 3039 static int 3040 PlacardConfigOp(ClientData clientData, Tcl_Interp *interp, int objc, 3041 Tcl_Obj *const *objv) 3042 { 3043 int namec; 3044 Tcl_Obj **namev = NULL; 3045 const char *layerName = Tcl_GetString(objv[3]); 3046 3047 if (Tcl_ListObjGetElements(interp, objv[2], &namec, &namev) != TCL_OK) { 3048 return TCL_ERROR; 3049 } 3050 if (namec % 2 != 0) { 3051 Tcl_AppendResult(interp, "invalid attribute list", 3052 (char *)NULL); 3053 return TCL_ERROR; 3054 } 3055 Placard placardConf; 3056 for (int i = 0; i < namec; i+=2) { 3057 std::string name(Tcl_GetString(namev[i])); 3058 std::string label(Tcl_GetString(namev[i+1])); 3059 placardConf.addEntry(name, label); 3060 } 3061 g_renderer->setPlacardConfig(placardConf, layerName); 3062 return TCL_OK; 3063 } 3064 3065 static CmdSpec placardOps[] = { 3066 {"config", 1, PlacardConfigOp, 4, 4, "attrlist layerName"}, 3067 }; 3068 static int nPlacardOps = NumCmdSpecs(placardOps); 3069 3070 static int 3071 PlacardCmd(ClientData clientData, Tcl_Interp *interp, int objc, 3072 Tcl_Obj *const *objv) 3073 { 3074 Tcl_ObjCmdProc *proc; 3075 3076 proc = GetOpFromObj(interp, nPlacardOps, placardOps, 3077 CMDSPEC_ARG1, objc, objv, 0); 3078 if (proc == NULL) { 3079 return TCL_ERROR; 3080 } 3081 return (*proc) (clientData, interp, objc, objv); 3082 } 3083 3084 static int 3040 3085 RendererRenderOp(ClientData clientData, Tcl_Interp *interp, int objc, 3041 3086 Tcl_Obj *const *objv) … … 3226 3271 } 3227 3272 3273 static int 3274 SelectModeOp(ClientData clientData, Tcl_Interp *interp, int objc, 3275 Tcl_Obj *const *objv) 3276 { 3277 //const char *modeStr = Tcl_GetString(objv[2]); 3278 // Parse mode string 3279 //Renderer::SelectMode mode; 3280 //g_renderer->setSelectMode(mode); 3281 return TCL_OK; 3282 } 3283 3228 3284 static CmdSpec selectOps[] = { 3229 3285 {"feature", 1, SelectFeatureOp, 4, 4, "idlist layerName"}, 3286 {"mode", 1, SelectModeOp, 3, 3, "mode"}, 3230 3287 }; 3231 3288 static int nSelectOps = NumCmdSpecs(selectOps); … … 3478 3535 Tcl_CreateObjCommand(interp, "map", MapCmd, clientData, NULL); 3479 3536 Tcl_CreateObjCommand(interp, "mouse", MouseCmd, clientData, NULL); 3537 Tcl_CreateObjCommand(interp, "placard", PlacardCmd, clientData, NULL); 3480 3538 Tcl_CreateObjCommand(interp, "renderer", RendererCmd, clientData, NULL); 3481 3539 Tcl_CreateObjCommand(interp, "screen", ScreenCmd, clientData, NULL); … … 3497 3555 Tcl_DeleteCommand(interp, "map"); 3498 3556 Tcl_DeleteCommand(interp, "mouse"); 3557 Tcl_DeleteCommand(interp, "placard"); 3499 3558 Tcl_DeleteCommand(interp, "renderer"); 3500 3559 Tcl_DeleteCommand(interp, "screen");
Note: See TracChangeset
for help on using the changeset viewer.