Changeset 5882
- Timestamp:
- Sep 23, 2015 2:34:40 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
geovis/trunk/RendererCmd.cpp
r5877 r5882 26 26 #include <osgEarth/Registry> 27 27 #include <osgEarth/Units> 28 #include <osgEarth/Config> 28 29 #include <osgEarthFeatures/FeatureModelSource> 29 30 #include <osgEarthSymbology/Color> … … 1438 1439 return TCL_ERROR; 1439 1440 } 1441 } else if (type[0] == 'f' && strcmp(type, "feature") == 0) { 1442 // Generic feature geometry layer 1443 char *driver = Tcl_GetString(objv[5]); 1444 char *format = Tcl_GetString(objv[6]); 1445 if (format && strlen(format) > 0 && 1446 strcmp(format, "json") != 0 && strcmp(format, "gml") != 0) { 1447 Tcl_AppendResult(interp, "unknown format \"", format, 1448 "\": should be 'json' or 'gml'", (char*)NULL); 1449 return TCL_ERROR; 1450 } 1451 char *typeName = Tcl_GetString(objv[7]); 1452 char *urlIn = Tcl_GetString(objv[8]); 1453 std::string url = g_renderer->getCanonicalPath(std::string(urlIn)); 1454 if (url.empty()) { 1455 Tcl_AppendResult(interp, "file not found: \"", 1456 urlIn, "\"", (char*)NULL); 1457 return TCL_ERROR; 1458 } 1459 if (GetBooleanFromObj(interp, objv[9], &cache) != TCL_OK) { 1460 return TCL_ERROR; 1461 } 1462 1463 bool lighting = true; 1464 osgEarth::Drivers::FeatureGeomModelOptions geomOpts; 1465 osgEarth::Config styleConf("style", Tcl_GetString(objv[10])); 1466 styleConf.add("type", "text/css"); 1467 INFO("style CSS: %s", styleConf.value().c_str()); 1468 osgEarth::Config stylesheetConf; 1469 stylesheetConf.add(styleConf); 1470 geomOpts.styles() = new osgEarth::Symbology::StyleSheet(stylesheetConf); 1471 1472 if (objc > 11) { 1473 std::string scripts(Tcl_GetString(objv[11])); 1474 if (!scripts.empty()) { 1475 INFO("script: %s", scripts.c_str()); 1476 osg::ref_ptr<osgEarth::Symbology::StyleSheet::ScriptDef> scriptDef = 1477 new osgEarth::Symbology::StyleSheet::ScriptDef(scripts); 1478 geomOpts.styles()->setScript(scriptDef.get()); 1479 } else { 1480 INFO("no script"); 1481 } 1482 } 1483 if (objc > 12) { 1484 int numSelectors; 1485 Tcl_Obj **selectors; 1486 if (Tcl_ListObjGetElements(interp, objv[12], &numSelectors, &selectors) != TCL_OK) { 1487 return TCL_ERROR; 1488 } 1489 for (int i = 0; i < numSelectors; i++) { 1490 int numFields; 1491 Tcl_Obj **fields; 1492 if (Tcl_ListObjGetElements(interp, selectors[i], &numFields, &fields) != TCL_OK || 1493 numFields % 2 != 0) { 1494 return TCL_ERROR; 1495 } 1496 std::map<std::string, std::string> fieldMap; 1497 std::map<std::string, std::string>::iterator itr; 1498 for (int f = 0; f < numFields; f+=2) { 1499 char *name = Tcl_GetString(fields[f]); 1500 char *value = Tcl_GetString(fields[f+1]); 1501 fieldMap[name] = value; 1502 INFO("selector[%s] = %s", name, value); 1503 } 1504 osgEarth::Symbology::StyleSelector ss; 1505 itr = fieldMap.find("name"); 1506 if (itr != fieldMap.end()) { 1507 ss.name() = itr->second; 1508 } 1509 itr = fieldMap.find("style"); 1510 if (itr != fieldMap.end()) { 1511 ss.styleName() = itr->second; 1512 } 1513 itr = fieldMap.find("styleExpression"); 1514 if (itr != fieldMap.end()) { 1515 INFO("selector: %s", itr->second.c_str()); 1516 ss.styleExpression() = osgEarth::Symbology::StringExpression(itr->second); 1517 } 1518 itr = fieldMap.find("query"); 1519 if (itr != fieldMap.end()) { 1520 osgEarth::Symbology::Query query; 1521 query.expression() = itr->second; 1522 itr = fieldMap.find("queryOrderBy"); 1523 if (itr != fieldMap.end()) { 1524 query.orderby() = itr->second; 1525 } 1526 itr = fieldMap.find("queryBounds"); 1527 if (itr != fieldMap.end()) { 1528 double xmin, ymin, xmax, ymax; 1529 if (sscanf(itr->second.c_str(), "%lf %lf %lf %lf", &xmin, &ymin, &xmax, &ymax) != 4) { 1530 return TCL_ERROR; 1531 } 1532 INFO("query bounds: %g %g %g %g", xmin, ymin, xmax, ymax); 1533 query.bounds() = osgEarth::Bounds(xmin, ymin, xmax, ymax); 1534 } 1535 ss.query() = query; 1536 } 1537 geomOpts.styles()->selectors().push_back(ss); 1538 } 1539 } 1540 geomOpts.enableLighting() = lighting; 1541 geomOpts.minRange() = 0.f; 1542 geomOpts.maxRange() = FLT_MAX; 1543 if (objc > 13) { 1544 float min, max; 1545 if (GetFloatFromObj(interp, objv[13], &min) != TCL_OK || 1546 GetFloatFromObj(interp, objv[14], &max) != TCL_OK) { 1547 return TCL_ERROR; 1548 } 1549 geomOpts.minRange() = min; 1550 geomOpts.maxRange() = max; 1551 } 1552 if (driver[0] == 'o' && strcmp(driver, "ogr") == 0) { 1553 osgEarth::Drivers::OGRFeatureOptions opts; 1554 if (osgDB::getLowerCaseFileExtension(url) == "csv") { 1555 url = loadCSVLayer(url.c_str()); 1556 } 1557 opts.url() = url; 1558 geomOpts.featureOptions() = opts; 1559 } else if (driver[0] == 't' && strcmp(driver, "tfs") == 0) { 1560 osgEarth::Drivers::TFSFeatureOptions opts; 1561 opts.url() = url; 1562 opts.format() = format; 1563 geomOpts.featureOptions() = opts; 1564 } else if (driver[0] == 'w' && strcmp(driver, "wfs") == 0) { 1565 osgEarth::Drivers::WFSFeatureOptions opts; 1566 opts.url() = url; 1567 opts.outputFormat() = format; 1568 opts.typeName() = typeName; 1569 geomOpts.featureOptions() = opts; 1570 } else { 1571 Tcl_AppendResult(interp, "unknown feature driver \"", driver, 1572 "\": should be 'ogr', 'tfs', or 'wfs'", (char*)NULL); 1573 return TCL_ERROR; 1574 } 1575 g_renderer->addModelLayer(name, geomOpts, cache, lighting, visible); 1440 1576 } else if (type[0] == 'i' && strcmp(type, "icon") == 0) { 1441 1577 char *driver = Tcl_GetString(objv[5]); … … 1497 1633 alt->technique() = osgEarth::Symbology::AltitudeSymbol::TECHNIQUE_DRAPE; 1498 1634 //alt->technique() = osgEarth::Symbology::AltitudeSymbol::TECHNIQUE_GPU; 1635 //alt->verticalOffset() = osgEarth::Symbology::NumericExpression(); 1636 //alt->verticalScale() = osgEarth::Symbology::NumericExpression(); 1499 1637 #endif 1500 1638 #ifdef USE_DEPTH_OFFSET … … 1593 1731 alt->clamping() = clamping; 1594 1732 alt->technique() = technique; 1733 //alt->verticalOffset() = osgEarth::Symbology::NumericExpression(); 1734 //alt->verticalScale() = osgEarth::Symbology::NumericExpression(); 1595 1735 1596 1736 #if 1 || defined(USE_DEPTH_OFFSET) … … 1710 1850 alt->clamping() = clamping; 1711 1851 alt->technique() = technique; 1852 //alt->verticalOffset() = osgEarth::Symbology::NumericExpression(); 1853 //alt->verticalScale() = osgEarth::Symbology::NumericExpression(); 1712 1854 1713 1855 #if 1 || defined(USE_DEPTH_OFFSET) … … 1834 1976 alt->clamping() = clamping; 1835 1977 alt->technique() = technique; 1978 //alt->clampingResolution() = 1.0f; 1979 //alt->binding() = osgEarth::Symbology::AltitudeSymbol::BINDING_VERTEX; //BINDING_CENTROID 1980 //alt->verticalOffset() = osgEarth::Symbology::NumericExpression(); 1981 //alt->verticalScale() = osgEarth::Symbology::NumericExpression(); 1836 1982 1837 1983 #if 1 || defined(USE_DEPTH_OFFSET) … … 3163 3309 Tcl_MakeSafe(interp); 3164 3310 3165 Tcl_CreateObjCommand(interp, "camera", CameraCmd,clientData, NULL);3166 Tcl_CreateObjCommand(interp, "clientinfo", ClientInfoCmd,clientData, NULL);3167 Tcl_CreateObjCommand(interp, "colormap", ColorMapCmd,clientData, NULL);3168 Tcl_CreateObjCommand(interp, "file", FileCmd,clientData, NULL);3169 Tcl_CreateObjCommand(interp, "imgflush", ImageFlushCmd,clientData, NULL);3170 Tcl_CreateObjCommand(interp, "key", KeyCmd,clientData, NULL);3171 Tcl_CreateObjCommand(interp, "legend", LegendCmd,clientData, NULL);3172 Tcl_CreateObjCommand(interp, "map", MapCmd,clientData, NULL);3173 Tcl_CreateObjCommand(interp, "mouse", MouseCmd,clientData, NULL);3174 Tcl_CreateObjCommand(interp, "renderer", RendererCmd,clientData, NULL);3175 Tcl_CreateObjCommand(interp, "screen", ScreenCmd,clientData, NULL);3311 Tcl_CreateObjCommand(interp, "camera", CameraCmd, clientData, NULL); 3312 Tcl_CreateObjCommand(interp, "clientinfo", ClientInfoCmd, clientData, NULL); 3313 Tcl_CreateObjCommand(interp, "colormap", ColorMapCmd, clientData, NULL); 3314 Tcl_CreateObjCommand(interp, "file", FileCmd, clientData, NULL); 3315 Tcl_CreateObjCommand(interp, "imgflush", ImageFlushCmd, clientData, NULL); 3316 Tcl_CreateObjCommand(interp, "key", KeyCmd, clientData, NULL); 3317 Tcl_CreateObjCommand(interp, "legend", LegendCmd, clientData, NULL); 3318 Tcl_CreateObjCommand(interp, "map", MapCmd, clientData, NULL); 3319 Tcl_CreateObjCommand(interp, "mouse", MouseCmd, clientData, NULL); 3320 Tcl_CreateObjCommand(interp, "renderer", RendererCmd, clientData, NULL); 3321 Tcl_CreateObjCommand(interp, "screen", ScreenCmd, clientData, NULL); 3176 3322 } 3177 3323
Note: See TracChangeset
for help on using the changeset viewer.