Changeset 2335


Ignore:
Timestamp:
Aug 8, 2011 9:34:06 AM (13 years ago)
Author:
ldelgass
Message:
  • Add protocol for setting glyph scaling and color modes
  • Finish adding protocol for setting scale, position, orientation of all graphics object types
Location:
trunk/packages/vizservers/vtkvis
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/vtkvis/RpGlyphs.cpp

    r2332 r2335  
    181181
    182182/**
     183 * \brief Control how glyphs are scaled
     184 */
     185void Glyphs::setScalingMode(ScalingMode mode)
     186{
     187    if (_glyphGenerator != NULL) {
     188        switch (mode) {
     189        case SCALE_BY_SCALAR:
     190            _glyphGenerator->SetScaleModeToScaleByScalar();
     191            _glyphGenerator->ScalingOn();
     192            break;
     193        case SCALE_BY_VECTOR:
     194            _glyphGenerator->SetScaleModeToScaleByVector();
     195            _glyphGenerator->ScalingOn();
     196            break;
     197        case SCALE_BY_VECTOR_COMPONENTS:
     198            _glyphGenerator->SetScaleModeToScaleByVectorComponents();
     199            _glyphGenerator->ScalingOn();
     200            break;
     201        case SCALING_OFF:
     202        default:
     203            _glyphGenerator->SetScaleModeToDataScalingOff();
     204            _glyphGenerator->ScalingOff();
     205        }
     206        _pdMapper->Update();
     207    }
     208}
     209
     210/**
     211 * \brief Control how glyphs are colored
     212 */
     213void Glyphs::setColorMode(ColorMode mode)
     214{
     215    if (_glyphGenerator != NULL) {
     216        switch (mode) {
     217        case COLOR_BY_SCALE:
     218            _glyphGenerator->SetColorModeToColorByScale();
     219            break;
     220        case COLOR_BY_VECTOR:
     221            _glyphGenerator->SetColorModeToColorByVector();
     222            break;
     223        case COLOR_BY_SCALAR:
     224        default:
     225            _glyphGenerator->SetColorModeToColorByScalar();
     226            break;
     227        }
     228        _pdMapper->Update();
     229    }
     230}
     231
     232/**
    183233 * \brief Controls relative scaling of glyphs
    184234 */
  • trunk/packages/vizservers/vtkvis/RpGlyphs.h

    r2328 r2335  
    4343        TETRAHEDRON
    4444    };
     45    enum ScalingMode {
     46        SCALE_BY_SCALAR,
     47        SCALE_BY_VECTOR,
     48        SCALE_BY_VECTOR_COMPONENTS,
     49        SCALING_OFF
     50    };
     51    enum ColorMode {
     52        COLOR_BY_SCALE,
     53        COLOR_BY_SCALAR,
     54        COLOR_BY_VECTOR
     55    };
    4556
    4657    Glyphs();
     
    5364
    5465    virtual void setClippingPlanes(vtkPlaneCollection *planes);
     66
     67    void setScalingMode(ScalingMode mode);
     68
     69    void setColorMode(ColorMode mode);
    5570
    5671    void setGlyphShape(GlyphShape shape);
  • trunk/packages/vizservers/vtkvis/RpVtkRenderer.cpp

    r2332 r2335  
    12931293
    12941294/**
     1295 * \brief Set the prop orientation with a quaternion
     1296 */
     1297void Renderer::setContour2DTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     1298{
     1299    Contour2DHashmap::iterator itr;
     1300
     1301    bool doAll = false;
     1302
     1303    if (id.compare("all") == 0) {
     1304        itr = _contour2Ds.begin();
     1305        doAll = true;
     1306    } else {
     1307        itr = _contour2Ds.find(id);
     1308    }
     1309    if (itr == _contour2Ds.end()) {
     1310        ERROR("Contour2D not found: %s", id.c_str());
     1311        return;
     1312    }
     1313
     1314    do {
     1315        itr->second->setTransform(trans);
     1316    } while (doAll && ++itr != _contour2Ds.end());
     1317
     1318    resetAxes();
     1319    _needsRedraw = true;
     1320}
     1321
     1322/**
     1323 * \brief Set the prop orientation with a quaternion
     1324 */
     1325void Renderer::setContour2DOrientation(const DataSetId& id, double quat[4])
     1326{
     1327    Contour2DHashmap::iterator itr;
     1328
     1329    bool doAll = false;
     1330
     1331    if (id.compare("all") == 0) {
     1332        itr = _contour2Ds.begin();
     1333        doAll = true;
     1334    } else {
     1335        itr = _contour2Ds.find(id);
     1336    }
     1337    if (itr == _contour2Ds.end()) {
     1338        ERROR("Contour2D not found: %s", id.c_str());
     1339        return;
     1340    }
     1341
     1342    do {
     1343        itr->second->setOrientation(quat);
     1344    } while (doAll && ++itr != _contour2Ds.end());
     1345
     1346    resetAxes();
     1347    _needsRedraw = true;
     1348}
     1349
     1350/**
     1351 * \brief Set the prop orientation with a rotation about an axis
     1352 */
     1353void Renderer::setContour2DOrientation(const DataSetId& id, double angle, double axis[3])
     1354{
     1355    Contour2DHashmap::iterator itr;
     1356
     1357    bool doAll = false;
     1358
     1359    if (id.compare("all") == 0) {
     1360        itr = _contour2Ds.begin();
     1361        doAll = true;
     1362    } else {
     1363        itr = _contour2Ds.find(id);
     1364    }
     1365    if (itr == _contour2Ds.end()) {
     1366        ERROR("Contour2D not found: %s", id.c_str());
     1367        return;
     1368    }
     1369
     1370    do {
     1371        itr->second->setOrientation(angle, axis);
     1372    } while (doAll && ++itr != _contour2Ds.end());
     1373
     1374    resetAxes();
     1375    _needsRedraw = true;
     1376}
     1377
     1378/**
     1379 * \brief Set the prop position in world coords
     1380 */
     1381void Renderer::setContour2DPosition(const DataSetId& id, double pos[3])
     1382{
     1383    Contour2DHashmap::iterator itr;
     1384
     1385    bool doAll = false;
     1386
     1387    if (id.compare("all") == 0) {
     1388        itr = _contour2Ds.begin();
     1389        doAll = true;
     1390    } else {
     1391        itr = _contour2Ds.find(id);
     1392    }
     1393    if (itr == _contour2Ds.end()) {
     1394        ERROR("Contour2D not found: %s", id.c_str());
     1395        return;
     1396    }
     1397
     1398    do {
     1399        itr->second->setPosition(pos);
     1400    } while (doAll && ++itr != _contour2Ds.end());
     1401
     1402    resetAxes();
     1403    _needsRedraw = true;
     1404}
     1405
     1406/**
     1407 * \brief Set the prop scaling
     1408 */
     1409void Renderer::setContour2DScale(const DataSetId& id, double scale[3])
     1410{
     1411    Contour2DHashmap::iterator itr;
     1412
     1413    bool doAll = false;
     1414
     1415    if (id.compare("all") == 0) {
     1416        itr = _contour2Ds.begin();
     1417        doAll = true;
     1418    } else {
     1419        itr = _contour2Ds.find(id);
     1420    }
     1421    if (itr == _contour2Ds.end()) {
     1422        ERROR("Contour2D not found: %s", id.c_str());
     1423        return;
     1424    }
     1425
     1426    do {
     1427        itr->second->setScale(scale);
     1428    } while (doAll && ++itr != _contour2Ds.end());
     1429
     1430    resetAxes();
     1431    _needsRedraw = true;
     1432}
     1433
     1434/**
    12951435 * \brief Set the number of equally spaced contour isolines for the given DataSet
    12961436 */
     
    15581698
    15591699/**
     1700 * \brief Set the prop orientation with a quaternion
     1701 */
     1702void Renderer::setContour3DTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     1703{
     1704    Contour3DHashmap::iterator itr;
     1705
     1706    bool doAll = false;
     1707
     1708    if (id.compare("all") == 0) {
     1709        itr = _contour3Ds.begin();
     1710        doAll = true;
     1711    } else {
     1712        itr = _contour3Ds.find(id);
     1713    }
     1714    if (itr == _contour3Ds.end()) {
     1715        ERROR("Contour3D not found: %s", id.c_str());
     1716        return;
     1717    }
     1718
     1719    do {
     1720        itr->second->setTransform(trans);
     1721    } while (doAll && ++itr != _contour3Ds.end());
     1722
     1723    resetAxes();
     1724    _needsRedraw = true;
     1725}
     1726
     1727/**
     1728 * \brief Set the prop orientation with a quaternion
     1729 */
     1730void Renderer::setContour3DOrientation(const DataSetId& id, double quat[4])
     1731{
     1732    Contour3DHashmap::iterator itr;
     1733
     1734    bool doAll = false;
     1735
     1736    if (id.compare("all") == 0) {
     1737        itr = _contour3Ds.begin();
     1738        doAll = true;
     1739    } else {
     1740        itr = _contour3Ds.find(id);
     1741    }
     1742    if (itr == _contour3Ds.end()) {
     1743        ERROR("Contour3D not found: %s", id.c_str());
     1744        return;
     1745    }
     1746
     1747    do {
     1748        itr->second->setOrientation(quat);
     1749    } while (doAll && ++itr != _contour3Ds.end());
     1750
     1751    resetAxes();
     1752    _needsRedraw = true;
     1753}
     1754
     1755/**
     1756 * \brief Set the prop orientation with a rotation about an axis
     1757 */
     1758void Renderer::setContour3DOrientation(const DataSetId& id, double angle, double axis[3])
     1759{
     1760    Contour3DHashmap::iterator itr;
     1761
     1762    bool doAll = false;
     1763
     1764    if (id.compare("all") == 0) {
     1765        itr = _contour3Ds.begin();
     1766        doAll = true;
     1767    } else {
     1768        itr = _contour3Ds.find(id);
     1769    }
     1770    if (itr == _contour3Ds.end()) {
     1771        ERROR("Contour3D not found: %s", id.c_str());
     1772        return;
     1773    }
     1774
     1775    do {
     1776        itr->second->setOrientation(angle, axis);
     1777    } while (doAll && ++itr != _contour3Ds.end());
     1778
     1779    resetAxes();
     1780    _needsRedraw = true;
     1781}
     1782
     1783/**
     1784 * \brief Set the prop position in world coords
     1785 */
     1786void Renderer::setContour3DPosition(const DataSetId& id, double pos[3])
     1787{
     1788    Contour3DHashmap::iterator itr;
     1789
     1790    bool doAll = false;
     1791
     1792    if (id.compare("all") == 0) {
     1793        itr = _contour3Ds.begin();
     1794        doAll = true;
     1795    } else {
     1796        itr = _contour3Ds.find(id);
     1797    }
     1798    if (itr == _contour3Ds.end()) {
     1799        ERROR("Contour3D not found: %s", id.c_str());
     1800        return;
     1801    }
     1802
     1803    do {
     1804        itr->second->setPosition(pos);
     1805    } while (doAll && ++itr != _contour3Ds.end());
     1806
     1807    resetAxes();
     1808    _needsRedraw = true;
     1809}
     1810
     1811/**
     1812 * \brief Set the prop scaling
     1813 */
     1814void Renderer::setContour3DScale(const DataSetId& id, double scale[3])
     1815{
     1816    Contour3DHashmap::iterator itr;
     1817
     1818    bool doAll = false;
     1819
     1820    if (id.compare("all") == 0) {
     1821        itr = _contour3Ds.begin();
     1822        doAll = true;
     1823    } else {
     1824        itr = _contour3Ds.find(id);
     1825    }
     1826    if (itr == _contour3Ds.end()) {
     1827        ERROR("Contour3D not found: %s", id.c_str());
     1828        return;
     1829    }
     1830
     1831    do {
     1832        itr->second->setScale(scale);
     1833    } while (doAll && ++itr != _contour3Ds.end());
     1834
     1835    resetAxes();
     1836    _needsRedraw = true;
     1837}
     1838
     1839/**
    15601840 * \brief Set the number of equally spaced isosurfaces for the given DataSet
    15611841 */
     
    19602240
    19612241/**
     2242 * \brief Set the prop orientation with a quaternion
     2243 */
     2244void Renderer::setGlyphsTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     2245{
     2246    GlyphsHashmap::iterator itr;
     2247
     2248    bool doAll = false;
     2249
     2250    if (id.compare("all") == 0) {
     2251        itr = _glyphs.begin();
     2252        doAll = true;
     2253    } else {
     2254        itr = _glyphs.find(id);
     2255    }
     2256    if (itr == _glyphs.end()) {
     2257        ERROR("Glyphs not found: %s", id.c_str());
     2258        return;
     2259    }
     2260
     2261    do {
     2262        itr->second->setTransform(trans);
     2263    } while (doAll && ++itr != _glyphs.end());
     2264
     2265    resetAxes();
     2266    _needsRedraw = true;
     2267}
     2268
     2269/**
     2270 * \brief Set the prop orientation with a quaternion
     2271 */
     2272void Renderer::setGlyphsOrientation(const DataSetId& id, double quat[4])
     2273{
     2274    GlyphsHashmap::iterator itr;
     2275
     2276    bool doAll = false;
     2277
     2278    if (id.compare("all") == 0) {
     2279        itr = _glyphs.begin();
     2280        doAll = true;
     2281    } else {
     2282        itr = _glyphs.find(id);
     2283    }
     2284    if (itr == _glyphs.end()) {
     2285        ERROR("Glyphs not found: %s", id.c_str());
     2286        return;
     2287    }
     2288
     2289    do {
     2290        itr->second->setOrientation(quat);
     2291    } while (doAll && ++itr != _glyphs.end());
     2292
     2293    resetAxes();
     2294    _needsRedraw = true;
     2295}
     2296
     2297/**
     2298 * \brief Set the prop orientation with a rotation about an axis
     2299 */
     2300void Renderer::setGlyphsOrientation(const DataSetId& id, double angle, double axis[3])
     2301{
     2302    GlyphsHashmap::iterator itr;
     2303
     2304    bool doAll = false;
     2305
     2306    if (id.compare("all") == 0) {
     2307        itr = _glyphs.begin();
     2308        doAll = true;
     2309    } else {
     2310        itr = _glyphs.find(id);
     2311    }
     2312    if (itr == _glyphs.end()) {
     2313        ERROR("Glyphs not found: %s", id.c_str());
     2314        return;
     2315    }
     2316
     2317    do {
     2318        itr->second->setOrientation(angle, axis);
     2319    } while (doAll && ++itr != _glyphs.end());
     2320
     2321    resetAxes();
     2322    _needsRedraw = true;
     2323}
     2324
     2325/**
     2326 * \brief Set the prop position in world coords
     2327 */
     2328void Renderer::setGlyphsPosition(const DataSetId& id, double pos[3])
     2329{
     2330    GlyphsHashmap::iterator itr;
     2331
     2332    bool doAll = false;
     2333
     2334    if (id.compare("all") == 0) {
     2335        itr = _glyphs.begin();
     2336        doAll = true;
     2337    } else {
     2338        itr = _glyphs.find(id);
     2339    }
     2340    if (itr == _glyphs.end()) {
     2341        ERROR("Glyphs not found: %s", id.c_str());
     2342        return;
     2343    }
     2344
     2345    do {
     2346        itr->second->setPosition(pos);
     2347    } while (doAll && ++itr != _glyphs.end());
     2348
     2349    resetAxes();
     2350    _needsRedraw = true;
     2351}
     2352
     2353/**
     2354 * \brief Set the prop scaling
     2355 */
     2356void Renderer::setGlyphsScale(const DataSetId& id, double scale[3])
     2357{
     2358    GlyphsHashmap::iterator itr;
     2359
     2360    bool doAll = false;
     2361
     2362    if (id.compare("all") == 0) {
     2363        itr = _glyphs.begin();
     2364        doAll = true;
     2365    } else {
     2366        itr = _glyphs.find(id);
     2367    }
     2368    if (itr == _glyphs.end()) {
     2369        ERROR("Glyphs not found: %s", id.c_str());
     2370        return;
     2371    }
     2372
     2373    do {
     2374        itr->second->setScale(scale);
     2375    } while (doAll && ++itr != _glyphs.end());
     2376
     2377    resetAxes();
     2378    _needsRedraw = true;
     2379}
     2380
     2381/**
    19622382 * \brief Associate an existing named color map with a Glyphs for the given DataSet
    19632383 */
     
    20092429    } while (doAll && ++itr != _glyphs.end());
    20102430
     2431    _needsRedraw = true;
     2432}
     2433
     2434/**
     2435 * \brief Controls the array used to color glyphs for the given DataSet
     2436 */
     2437void Renderer::setGlyphsColorMode(const DataSetId& id, Glyphs::ColorMode mode)
     2438{
     2439    GlyphsHashmap::iterator itr;
     2440
     2441    bool doAll = false;
     2442
     2443    if (id.compare("all") == 0) {
     2444        itr = _glyphs.begin();
     2445        doAll = true;
     2446    } else {
     2447        itr = _glyphs.find(id);
     2448    }
     2449    if (itr == _glyphs.end()) {
     2450        ERROR("Glyphs not found: %s", id.c_str());
     2451        return;
     2452    }
     2453
     2454    do {
     2455        itr->second->setColorMode(mode);
     2456    } while (doAll && ++itr != _glyphs.end());
     2457
     2458    _needsRedraw = true;
     2459}
     2460
     2461/**
     2462 * \brief Controls the array used to scale glyphs for the given DataSet
     2463 */
     2464void Renderer::setGlyphsScalingMode(const DataSetId& id, Glyphs::ScalingMode mode)
     2465{
     2466    GlyphsHashmap::iterator itr;
     2467
     2468    bool doAll = false;
     2469
     2470    if (id.compare("all") == 0) {
     2471        itr = _glyphs.begin();
     2472        doAll = true;
     2473    } else {
     2474        itr = _glyphs.find(id);
     2475    }
     2476    if (itr == _glyphs.end()) {
     2477        ERROR("Glyphs not found: %s", id.c_str());
     2478        return;
     2479    }
     2480
     2481    do {
     2482        itr->second->setScalingMode(mode);
     2483    } while (doAll && ++itr != _glyphs.end());
     2484
     2485    _renderer->ResetCameraClippingRange();
    20112486    _needsRedraw = true;
    20122487}
     
    29453420
    29463421/**
     3422 * \brief Set the prop orientation with a quaternion
     3423 */
     3424void Renderer::setLICTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     3425{
     3426    LICHashmap::iterator itr;
     3427
     3428    bool doAll = false;
     3429
     3430    if (id.compare("all") == 0) {
     3431        itr = _lics.begin();
     3432        doAll = true;
     3433    } else {
     3434        itr = _lics.find(id);
     3435    }
     3436    if (itr == _lics.end()) {
     3437        ERROR("LIC not found: %s", id.c_str());
     3438        return;
     3439    }
     3440
     3441    do {
     3442        itr->second->setTransform(trans);
     3443    } while (doAll && ++itr != _lics.end());
     3444
     3445    resetAxes();
     3446    _needsRedraw = true;
     3447}
     3448
     3449/**
     3450 * \brief Set the prop orientation with a quaternion
     3451 */
     3452void Renderer::setLICOrientation(const DataSetId& id, double quat[4])
     3453{
     3454    LICHashmap::iterator itr;
     3455
     3456    bool doAll = false;
     3457
     3458    if (id.compare("all") == 0) {
     3459        itr = _lics.begin();
     3460        doAll = true;
     3461    } else {
     3462        itr = _lics.find(id);
     3463    }
     3464    if (itr == _lics.end()) {
     3465        ERROR("LIC not found: %s", id.c_str());
     3466        return;
     3467    }
     3468
     3469    do {
     3470        itr->second->setOrientation(quat);
     3471    } while (doAll && ++itr != _lics.end());
     3472
     3473    resetAxes();
     3474    _needsRedraw = true;
     3475}
     3476
     3477/**
     3478 * \brief Set the prop orientation with a rotation about an axis
     3479 */
     3480void Renderer::setLICOrientation(const DataSetId& id, double angle, double axis[3])
     3481{
     3482    LICHashmap::iterator itr;
     3483
     3484    bool doAll = false;
     3485
     3486    if (id.compare("all") == 0) {
     3487        itr = _lics.begin();
     3488        doAll = true;
     3489    } else {
     3490        itr = _lics.find(id);
     3491    }
     3492    if (itr == _lics.end()) {
     3493        ERROR("LIC not found: %s", id.c_str());
     3494        return;
     3495    }
     3496
     3497    do {
     3498        itr->second->setOrientation(angle, axis);
     3499    } while (doAll && ++itr != _lics.end());
     3500
     3501    resetAxes();
     3502    _needsRedraw = true;
     3503}
     3504
     3505/**
     3506 * \brief Set the prop position in world coords
     3507 */
     3508void Renderer::setLICPosition(const DataSetId& id, double pos[3])
     3509{
     3510    LICHashmap::iterator itr;
     3511
     3512    bool doAll = false;
     3513
     3514    if (id.compare("all") == 0) {
     3515        itr = _lics.begin();
     3516        doAll = true;
     3517    } else {
     3518        itr = _lics.find(id);
     3519    }
     3520    if (itr == _lics.end()) {
     3521        ERROR("LIC not found: %s", id.c_str());
     3522        return;
     3523    }
     3524
     3525    do {
     3526        itr->second->setPosition(pos);
     3527    } while (doAll && ++itr != _lics.end());
     3528
     3529    resetAxes();
     3530    _needsRedraw = true;
     3531}
     3532
     3533/**
     3534 * \brief Set the prop scaling
     3535 */
     3536void Renderer::setLICScale(const DataSetId& id, double scale[3])
     3537{
     3538    LICHashmap::iterator itr;
     3539
     3540    bool doAll = false;
     3541
     3542    if (id.compare("all") == 0) {
     3543        itr = _lics.begin();
     3544        doAll = true;
     3545    } else {
     3546        itr = _lics.find(id);
     3547    }
     3548    if (itr == _lics.end()) {
     3549        ERROR("LIC not found: %s", id.c_str());
     3550        return;
     3551    }
     3552
     3553    do {
     3554        itr->second->setScale(scale);
     3555    } while (doAll && ++itr != _lics.end());
     3556
     3557    resetAxes();
     3558    _needsRedraw = true;
     3559}
     3560
     3561/**
    29473562 * \brief Set the volume slice used for mapping volumetric data
    29483563 */
     
    41924807    } else
    41934808        return itr->second;
     4809}
     4810
     4811/**
     4812 * \brief Set the prop orientation with a quaternion
     4813 */
     4814void Renderer::setPseudoColorTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     4815{
     4816    PseudoColorHashmap::iterator itr;
     4817
     4818    bool doAll = false;
     4819
     4820    if (id.compare("all") == 0) {
     4821        itr = _pseudoColors.begin();
     4822        doAll = true;
     4823    } else {
     4824        itr = _pseudoColors.find(id);
     4825    }
     4826    if (itr == _pseudoColors.end()) {
     4827        ERROR("PseudoColor not found: %s", id.c_str());
     4828        return;
     4829    }
     4830
     4831    do {
     4832        itr->second->setTransform(trans);
     4833    } while (doAll && ++itr != _pseudoColors.end());
     4834
     4835    resetAxes();
     4836    _needsRedraw = true;
     4837}
     4838
     4839/**
     4840 * \brief Set the prop orientation with a quaternion
     4841 */
     4842void Renderer::setPseudoColorOrientation(const DataSetId& id, double quat[4])
     4843{
     4844    PseudoColorHashmap::iterator itr;
     4845
     4846    bool doAll = false;
     4847
     4848    if (id.compare("all") == 0) {
     4849        itr = _pseudoColors.begin();
     4850        doAll = true;
     4851    } else {
     4852        itr = _pseudoColors.find(id);
     4853    }
     4854    if (itr == _pseudoColors.end()) {
     4855        ERROR("PseudoColor not found: %s", id.c_str());
     4856        return;
     4857    }
     4858
     4859    do {
     4860        itr->second->setOrientation(quat);
     4861    } while (doAll && ++itr != _pseudoColors.end());
     4862
     4863    resetAxes();
     4864    _needsRedraw = true;
     4865}
     4866
     4867/**
     4868 * \brief Set the prop orientation with a rotation about an axis
     4869 */
     4870void Renderer::setPseudoColorOrientation(const DataSetId& id, double angle, double axis[3])
     4871{
     4872    PseudoColorHashmap::iterator itr;
     4873
     4874    bool doAll = false;
     4875
     4876    if (id.compare("all") == 0) {
     4877        itr = _pseudoColors.begin();
     4878        doAll = true;
     4879    } else {
     4880        itr = _pseudoColors.find(id);
     4881    }
     4882    if (itr == _pseudoColors.end()) {
     4883        ERROR("PseudoColor not found: %s", id.c_str());
     4884        return;
     4885    }
     4886
     4887    do {
     4888        itr->second->setOrientation(angle, axis);
     4889    } while (doAll && ++itr != _pseudoColors.end());
     4890
     4891    resetAxes();
     4892    _needsRedraw = true;
     4893}
     4894
     4895/**
     4896 * \brief Set the prop position in world coords
     4897 */
     4898void Renderer::setPseudoColorPosition(const DataSetId& id, double pos[3])
     4899{
     4900    PseudoColorHashmap::iterator itr;
     4901
     4902    bool doAll = false;
     4903
     4904    if (id.compare("all") == 0) {
     4905        itr = _pseudoColors.begin();
     4906        doAll = true;
     4907    } else {
     4908        itr = _pseudoColors.find(id);
     4909    }
     4910    if (itr == _pseudoColors.end()) {
     4911        ERROR("PseudoColor not found: %s", id.c_str());
     4912        return;
     4913    }
     4914
     4915    do {
     4916        itr->second->setPosition(pos);
     4917    } while (doAll && ++itr != _pseudoColors.end());
     4918
     4919    resetAxes();
     4920    _needsRedraw = true;
     4921}
     4922
     4923/**
     4924 * \brief Set the prop scaling
     4925 */
     4926void Renderer::setPseudoColorScale(const DataSetId& id, double scale[3])
     4927{
     4928    PseudoColorHashmap::iterator itr;
     4929
     4930    bool doAll = false;
     4931
     4932    if (id.compare("all") == 0) {
     4933        itr = _pseudoColors.begin();
     4934        doAll = true;
     4935    } else {
     4936        itr = _pseudoColors.find(id);
     4937    }
     4938    if (itr == _pseudoColors.end()) {
     4939        ERROR("PseudoColor not found: %s", id.c_str());
     4940        return;
     4941    }
     4942
     4943    do {
     4944        itr->second->setScale(scale);
     4945    } while (doAll && ++itr != _pseudoColors.end());
     4946
     4947    resetAxes();
     4948    _needsRedraw = true;
    41944949}
    41954950
     
    45175272
    45185273/**
     5274 * \brief Set the prop orientation with a quaternion
     5275 */
     5276void Renderer::setStreamlinesTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     5277{
     5278    StreamlinesHashmap::iterator itr;
     5279
     5280    bool doAll = false;
     5281
     5282    if (id.compare("all") == 0) {
     5283        itr = _streamlines.begin();
     5284        doAll = true;
     5285    } else {
     5286        itr = _streamlines.find(id);
     5287    }
     5288    if (itr == _streamlines.end()) {
     5289        ERROR("Streamlines not found: %s", id.c_str());
     5290        return;
     5291    }
     5292
     5293    do {
     5294        itr->second->setTransform(trans);
     5295    } while (doAll && ++itr != _streamlines.end());
     5296
     5297    resetAxes();
     5298    _needsRedraw = true;
     5299}
     5300
     5301/**
     5302 * \brief Set the prop orientation with a quaternion
     5303 */
     5304void Renderer::setStreamlinesOrientation(const DataSetId& id, double quat[4])
     5305{
     5306    StreamlinesHashmap::iterator itr;
     5307
     5308    bool doAll = false;
     5309
     5310    if (id.compare("all") == 0) {
     5311        itr = _streamlines.begin();
     5312        doAll = true;
     5313    } else {
     5314        itr = _streamlines.find(id);
     5315    }
     5316    if (itr == _streamlines.end()) {
     5317        ERROR("Streamlines not found: %s", id.c_str());
     5318        return;
     5319    }
     5320
     5321    do {
     5322        itr->second->setOrientation(quat);
     5323    } while (doAll && ++itr != _streamlines.end());
     5324
     5325    resetAxes();
     5326    _needsRedraw = true;
     5327}
     5328
     5329/**
     5330 * \brief Set the prop orientation with a rotation about an axis
     5331 */
     5332void Renderer::setStreamlinesOrientation(const DataSetId& id, double angle, double axis[3])
     5333{
     5334    StreamlinesHashmap::iterator itr;
     5335
     5336    bool doAll = false;
     5337
     5338    if (id.compare("all") == 0) {
     5339        itr = _streamlines.begin();
     5340        doAll = true;
     5341    } else {
     5342        itr = _streamlines.find(id);
     5343    }
     5344    if (itr == _streamlines.end()) {
     5345        ERROR("Streamlines not found: %s", id.c_str());
     5346        return;
     5347    }
     5348
     5349    do {
     5350        itr->second->setOrientation(angle, axis);
     5351    } while (doAll && ++itr != _streamlines.end());
     5352
     5353    resetAxes();
     5354    _needsRedraw = true;
     5355}
     5356
     5357/**
     5358 * \brief Set the prop position in world coords
     5359 */
     5360void Renderer::setStreamlinesPosition(const DataSetId& id, double pos[3])
     5361{
     5362    StreamlinesHashmap::iterator itr;
     5363
     5364    bool doAll = false;
     5365
     5366    if (id.compare("all") == 0) {
     5367        itr = _streamlines.begin();
     5368        doAll = true;
     5369    } else {
     5370        itr = _streamlines.find(id);
     5371    }
     5372    if (itr == _streamlines.end()) {
     5373        ERROR("Streamlines not found: %s", id.c_str());
     5374        return;
     5375    }
     5376
     5377    do {
     5378        itr->second->setPosition(pos);
     5379    } while (doAll && ++itr != _streamlines.end());
     5380
     5381    resetAxes();
     5382    _needsRedraw = true;
     5383}
     5384
     5385/**
     5386 * \brief Set the prop scaling
     5387 */
     5388void Renderer::setStreamlinesScale(const DataSetId& id, double scale[3])
     5389{
     5390    StreamlinesHashmap::iterator itr;
     5391
     5392    bool doAll = false;
     5393
     5394    if (id.compare("all") == 0) {
     5395        itr = _streamlines.begin();
     5396        doAll = true;
     5397    } else {
     5398        itr = _streamlines.find(id);
     5399    }
     5400    if (itr == _streamlines.end()) {
     5401        ERROR("Streamlines not found: %s", id.c_str());
     5402        return;
     5403    }
     5404
     5405    do {
     5406        itr->second->setScale(scale);
     5407    } while (doAll && ++itr != _streamlines.end());
     5408
     5409    resetAxes();
     5410    _needsRedraw = true;
     5411}
     5412
     5413/**
    45195414 * \brief Set the streamlines seed to points distributed randomly inside
    45205415 * cells of DataSet
     
    50435938    } else
    50445939        return itr->second;
     5940}
     5941
     5942/**
     5943 * \brief Set the prop orientation with a quaternion
     5944 */
     5945void Renderer::setVolumeTransform(const DataSetId& id, vtkMatrix4x4 *trans)
     5946{
     5947    VolumeHashmap::iterator itr;
     5948
     5949    bool doAll = false;
     5950
     5951    if (id.compare("all") == 0) {
     5952        itr = _volumes.begin();
     5953        doAll = true;
     5954    } else {
     5955        itr = _volumes.find(id);
     5956    }
     5957    if (itr == _volumes.end()) {
     5958        ERROR("Volume not found: %s", id.c_str());
     5959        return;
     5960    }
     5961
     5962    do {
     5963        itr->second->setTransform(trans);
     5964    } while (doAll && ++itr != _volumes.end());
     5965
     5966    resetAxes();
     5967    _needsRedraw = true;
     5968}
     5969
     5970/**
     5971 * \brief Set the prop orientation with a quaternion
     5972 */
     5973void Renderer::setVolumeOrientation(const DataSetId& id, double quat[4])
     5974{
     5975    VolumeHashmap::iterator itr;
     5976
     5977    bool doAll = false;
     5978
     5979    if (id.compare("all") == 0) {
     5980        itr = _volumes.begin();
     5981        doAll = true;
     5982    } else {
     5983        itr = _volumes.find(id);
     5984    }
     5985    if (itr == _volumes.end()) {
     5986        ERROR("Volume not found: %s", id.c_str());
     5987        return;
     5988    }
     5989
     5990    do {
     5991        itr->second->setOrientation(quat);
     5992    } while (doAll && ++itr != _volumes.end());
     5993
     5994    resetAxes();
     5995    _needsRedraw = true;
     5996}
     5997
     5998/**
     5999 * \brief Set the prop orientation with a rotation about an axis
     6000 */
     6001void Renderer::setVolumeOrientation(const DataSetId& id, double angle, double axis[3])
     6002{
     6003    VolumeHashmap::iterator itr;
     6004
     6005    bool doAll = false;
     6006
     6007    if (id.compare("all") == 0) {
     6008        itr = _volumes.begin();
     6009        doAll = true;
     6010    } else {
     6011        itr = _volumes.find(id);
     6012    }
     6013    if (itr == _volumes.end()) {
     6014        ERROR("Volume not found: %s", id.c_str());
     6015        return;
     6016    }
     6017
     6018    do {
     6019        itr->second->setOrientation(angle, axis);
     6020    } while (doAll && ++itr != _volumes.end());
     6021
     6022    resetAxes();
     6023    _needsRedraw = true;
     6024}
     6025
     6026/**
     6027 * \brief Set the prop position in world coords
     6028 */
     6029void Renderer::setVolumePosition(const DataSetId& id, double pos[3])
     6030{
     6031    VolumeHashmap::iterator itr;
     6032
     6033    bool doAll = false;
     6034
     6035    if (id.compare("all") == 0) {
     6036        itr = _volumes.begin();
     6037        doAll = true;
     6038    } else {
     6039        itr = _volumes.find(id);
     6040    }
     6041    if (itr == _volumes.end()) {
     6042        ERROR("Volume not found: %s", id.c_str());
     6043        return;
     6044    }
     6045
     6046    do {
     6047        itr->second->setPosition(pos);
     6048    } while (doAll && ++itr != _volumes.end());
     6049
     6050    resetAxes();
     6051    _needsRedraw = true;
     6052}
     6053
     6054/**
     6055 * \brief Set the prop scaling
     6056 */
     6057void Renderer::setVolumeScale(const DataSetId& id, double scale[3])
     6058{
     6059    VolumeHashmap::iterator itr;
     6060
     6061    bool doAll = false;
     6062
     6063    if (id.compare("all") == 0) {
     6064        itr = _volumes.begin();
     6065        doAll = true;
     6066    } else {
     6067        itr = _volumes.find(id);
     6068    }
     6069    if (itr == _volumes.end()) {
     6070        ERROR("Volume not found: %s", id.c_str());
     6071        return;
     6072    }
     6073
     6074    do {
     6075        itr->second->setScale(scale);
     6076    } while (doAll && ++itr != _volumes.end());
     6077
     6078    resetAxes();
     6079    _needsRedraw = true;
    50456080}
    50466081
  • trunk/packages/vizservers/vtkvis/RpVtkRenderer.h

    r2332 r2335  
    232232    Contour2D *getContour2D(const DataSetId& id);
    233233
     234    void setContour2DTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     235
     236    void setContour2DOrientation(const DataSetId& id, double quat[4]);
     237
     238    void setContour2DOrientation(const DataSetId& id, double angle, double axis[3]);
     239
     240    void setContour2DPosition(const DataSetId& id, double pos[3]);
     241
     242    void setContour2DScale(const DataSetId& id, double scale[3]);
     243
    234244    void setContour2DEdgeColor(const DataSetId& id, float color[3]);
    235245
     
    254264    Contour3D *getContour3D(const DataSetId& id);
    255265
     266    void setContour3DTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     267
     268    void setContour3DOrientation(const DataSetId& id, double quat[4]);
     269
     270    void setContour3DOrientation(const DataSetId& id, double angle, double axis[3]);
     271
     272    void setContour3DPosition(const DataSetId& id, double pos[3]);
     273
     274    void setContour3DScale(const DataSetId& id, double scale[3]);
     275
    256276    void setContour3DColor(const DataSetId& id, float color[3]);
    257277
     
    284304    Glyphs *getGlyphs(const DataSetId& id);
    285305
     306    void setGlyphsTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     307
     308    void setGlyphsOrientation(const DataSetId& id, double quat[4]);
     309
     310    void setGlyphsOrientation(const DataSetId& id, double angle, double axis[3]);
     311
     312    void setGlyphsPosition(const DataSetId& id, double pos[3]);
     313
     314    void setGlyphsScale(const DataSetId& id, double scale[3]);
     315
    286316    void setGlyphsEdgeVisibility(const DataSetId& id, bool state);
    287317
     
    302332    void setGlyphsShape(const DataSetId& id, Glyphs::GlyphShape shape);
    303333
     334    void setGlyphsColorMode(const DataSetId& id, Glyphs::ColorMode mode);
     335
     336    void setGlyphsScalingMode(const DataSetId& id, Glyphs::ScalingMode mode);
     337
    304338    void setGlyphsScaleFactor(const DataSetId& id, double scale);
    305339
     
    358392    LIC *getLIC(const DataSetId& id);
    359393
     394    void setLICTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     395
     396    void setLICOrientation(const DataSetId& id, double quat[4]);
     397
     398    void setLICOrientation(const DataSetId& id, double angle, double axis[3]);
     399
     400    void setLICPosition(const DataSetId& id, double pos[3]);
     401
     402    void setLICScale(const DataSetId& id, double scale[3]);
     403
    360404    void setLICEdgeVisibility(const DataSetId& id, bool state);
    361405   
     
    456500
    457501    PseudoColor *getPseudoColor(const DataSetId& id);
    458    
     502
     503    void setPseudoColorTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     504
     505    void setPseudoColorOrientation(const DataSetId& id, double quat[4]);
     506
     507    void setPseudoColorOrientation(const DataSetId& id, double angle, double axis[3]);
     508
     509    void setPseudoColorPosition(const DataSetId& id, double pos[3]);
     510
     511    void setPseudoColorScale(const DataSetId& id, double scale[3]);
     512
    459513    void setPseudoColorEdgeVisibility(const DataSetId& id, bool state);
    460514
     
    480534
    481535    Streamlines *getStreamlines(const DataSetId& id);
     536
     537    void setStreamlinesTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     538
     539    void setStreamlinesOrientation(const DataSetId& id, double quat[4]);
     540
     541    void setStreamlinesOrientation(const DataSetId& id, double angle, double axis[3]);
     542
     543    void setStreamlinesPosition(const DataSetId& id, double pos[3]);
     544
     545    void setStreamlinesScale(const DataSetId& id, double scale[3]);
    482546
    483547    void setStreamlinesEdgeVisibility(const DataSetId& id, bool state);
     
    521585
    522586    Volume *getVolume(const DataSetId& id);
    523    
     587
     588    void setVolumeTransform(const DataSetId& id, vtkMatrix4x4 *trans);
     589
     590    void setVolumeOrientation(const DataSetId& id, double quat[4]);
     591
     592    void setVolumeOrientation(const DataSetId& id, double angle, double axis[3]);
     593
     594    void setVolumePosition(const DataSetId& id, double pos[3]);
     595
     596    void setVolumeScale(const DataSetId& id, double scale[3]);
     597
    524598    void setVolumeAmbient(const DataSetId& id, double coeff);
    525599
  • trunk/packages/vizservers/vtkvis/RpVtkRendererCmd.cpp

    r2332 r2335  
    757757
    758758static int
     759Contour2DOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     760                  Tcl_Obj *const *objv)
     761{
     762    double quat[4];
     763    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     764        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     765        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     766        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     767        return TCL_ERROR;
     768    }
     769    if (objc == 7) {
     770        const char *name = Tcl_GetString(objv[6]);
     771        g_renderer->setContour2DOrientation(name, quat);
     772    } else {
     773        g_renderer->setContour2DOrientation("all", quat);
     774    }
     775    return TCL_OK;
     776}
     777
     778static int
     779Contour2DPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     780                    Tcl_Obj *const *objv)
     781{
     782    double pos[3];
     783    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     784        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     785        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     786        return TCL_ERROR;
     787    }
     788    if (objc == 6) {
     789        const char *name = Tcl_GetString(objv[5]);
     790        g_renderer->setContour2DPosition(name, pos);
     791    } else {
     792        g_renderer->setContour2DPosition("all", pos);
     793    }
     794    return TCL_OK;
     795}
     796
     797static int
     798Contour2DScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     799                 Tcl_Obj *const *objv)
     800{
     801    double scale[3];
     802    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     803        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     804        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     805        return TCL_ERROR;
     806    }
     807    if (objc == 6) {
     808        const char *name = Tcl_GetString(objv[5]);
     809        g_renderer->setContour2DScale(name, scale);
     810    } else {
     811        g_renderer->setContour2DScale("all", scale);
     812    }
     813    return TCL_OK;
     814}
     815
     816static int
    759817Contour2DVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc,
    760818                   Tcl_Obj *const *objv)
     
    779837    {"linecolor", 5, Contour2DLineColorOp, 5, 6, "r g b ?dataSetName?"},
    780838    {"linewidth", 5, Contour2DLineWidthOp, 3, 4, "width ?dataSetName?"},
    781     {"opacity",   1, Contour2DOpacityOp, 3, 4, "value ?dataSetName?"},
     839    {"opacity",   2, Contour2DOpacityOp, 3, 4, "value ?dataSetName?"},
     840    {"orient",    2, Contour2DOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     841    {"pos",       1, Contour2DPositionOp, 5, 6, "x y z ?dataSetName?"},
     842    {"scale",     1, Contour2DScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    782843    {"visible",   1, Contour2DVisibleOp, 3, 4, "bool ?dataSetName?"}
    783844};
     
    9981059    } else {
    9991060        g_renderer->setContour3DOpacity("all", opacity);
     1061    }
     1062    return TCL_OK;
     1063}
     1064
     1065static int
     1066Contour3DOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1067                  Tcl_Obj *const *objv)
     1068{
     1069    double quat[4];
     1070    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     1071        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     1072        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     1073        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     1074        return TCL_ERROR;
     1075    }
     1076    if (objc == 7) {
     1077        const char *name = Tcl_GetString(objv[6]);
     1078        g_renderer->setContour3DOrientation(name, quat);
     1079    } else {
     1080        g_renderer->setContour3DOrientation("all", quat);
     1081    }
     1082    return TCL_OK;
     1083}
     1084
     1085static int
     1086Contour3DPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1087                    Tcl_Obj *const *objv)
     1088{
     1089    double pos[3];
     1090    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     1091        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     1092        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     1093        return TCL_ERROR;
     1094    }
     1095    if (objc == 6) {
     1096        const char *name = Tcl_GetString(objv[5]);
     1097        g_renderer->setContour3DPosition(name, pos);
     1098    } else {
     1099        g_renderer->setContour3DPosition("all", pos);
     1100    }
     1101    return TCL_OK;
     1102}
     1103
     1104static int
     1105Contour3DScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1106                 Tcl_Obj *const *objv)
     1107{
     1108    double scale[3];
     1109    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     1110        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     1111        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     1112        return TCL_ERROR;
     1113    }
     1114    if (objc == 6) {
     1115        const char *name = Tcl_GetString(objv[5]);
     1116        g_renderer->setContour3DScale(name, scale);
     1117    } else {
     1118        g_renderer->setContour3DScale("all", scale);
    10001119    }
    10011120    return TCL_OK;
     
    10451164    {"linecolor", 5, Contour3DLineColorOp, 5, 6, "r g b ?dataSetName?"},
    10461165    {"linewidth", 5, Contour3DLineWidthOp, 3, 4, "width ?dataSetName?"},
    1047     {"opacity",   1, Contour3DOpacityOp, 3, 4, "value ?dataSetName?"},
     1166    {"opacity",   2, Contour3DOpacityOp, 3, 4, "value ?dataSetName?"},
     1167    {"orient",    2, Contour3DOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     1168    {"pos",       1, Contour3DPositionOp, 5, 6, "x y z ?dataSetName?"},
     1169    {"scale",     1, Contour3DScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    10481170    {"visible",   1, Contour3DVisibleOp, 3, 4, "bool ?dataSetName?"},
    10491171    {"wireframe", 1, Contour3DWireframeOp, 3, 4, "bool ?dataSetName?"}
     
    13381460
    13391461static int
     1462GlyphsColorModeOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1463                  Tcl_Obj *const *objv)
     1464{
     1465    Glyphs::ColorMode mode;
     1466    const char *str = Tcl_GetString(objv[2]);
     1467    if (str[0] == 's' && strcmp(str, "scale") == 0) {
     1468        mode = Glyphs::COLOR_BY_SCALE;
     1469    } else if (str[0] == 's' && strcmp(str, "scalar") == 0) {
     1470        mode = Glyphs::COLOR_BY_SCALAR;
     1471    } else if (str[0] == 'v' && strcmp(str, "vector") == 0) {
     1472        mode = Glyphs::COLOR_BY_VECTOR;
     1473    } else {
     1474        Tcl_AppendResult(interp, "bad color mode option \"", str,
     1475                         "\": should be one of: 'scale', 'scalar', 'vector'", (char*)NULL);
     1476        return TCL_ERROR;
     1477    }
     1478    if (objc == 4) {
     1479        const char *name = Tcl_GetString(objv[3]);
     1480        g_renderer->setGlyphsColorMode(name, mode);
     1481    } else {
     1482        g_renderer->setGlyphsColorMode("all", mode);
     1483    }
     1484    return TCL_OK;
     1485}
     1486
     1487static int
    13401488GlyphsDeleteOp(ClientData clientData, Tcl_Interp *interp, int objc,
    13411489               Tcl_Obj *const *objv)
     
    14381586
    14391587static int
     1588GlyphsOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1589               Tcl_Obj *const *objv)
     1590{
     1591    double quat[4];
     1592    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     1593        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     1594        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     1595        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     1596        return TCL_ERROR;
     1597    }
     1598    if (objc == 7) {
     1599        const char *name = Tcl_GetString(objv[6]);
     1600        g_renderer->setGlyphsOrientation(name, quat);
     1601    } else {
     1602        g_renderer->setGlyphsOrientation("all", quat);
     1603    }
     1604    return TCL_OK;
     1605}
     1606
     1607static int
     1608GlyphsPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1609                 Tcl_Obj *const *objv)
     1610{
     1611    double pos[3];
     1612    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     1613        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     1614        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     1615        return TCL_ERROR;
     1616    }
     1617    if (objc == 6) {
     1618        const char *name = Tcl_GetString(objv[5]);
     1619        g_renderer->setGlyphsPosition(name, pos);
     1620    } else {
     1621        g_renderer->setGlyphsPosition("all", pos);
     1622    }
     1623    return TCL_OK;
     1624}
     1625
     1626static int
    14401627GlyphsScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
    14411628              Tcl_Obj *const *objv)
    14421629{
     1630    double scale[3];
     1631    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     1632        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     1633        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     1634        return TCL_ERROR;
     1635    }
     1636    if (objc == 6) {
     1637        const char *name = Tcl_GetString(objv[5]);
     1638        g_renderer->setGlyphsScale(name, scale);
     1639    } else {
     1640        g_renderer->setGlyphsScale("all", scale);
     1641    }
     1642    return TCL_OK;
     1643}
     1644
     1645static int
     1646GlyphsScaleFactorOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1647                    Tcl_Obj *const *objv)
     1648{
    14431649    double scale;
    14441650    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale) != TCL_OK) {
     
    14501656    } else {
    14511657        g_renderer->setGlyphsScaleFactor("all", scale);
     1658    }
     1659    return TCL_OK;
     1660}
     1661
     1662static int
     1663GlyphsScalingModeOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1664                    Tcl_Obj *const *objv)
     1665{
     1666    Glyphs::ScalingMode mode;
     1667    const char *str = Tcl_GetString(objv[2]);
     1668    if (str[0] == 's' && strcmp(str, "scalar") == 0) {
     1669        mode = Glyphs::SCALE_BY_SCALAR;
     1670    } else if (str[0] == 'v' && strcmp(str, "vector") == 0) {
     1671        mode = Glyphs::SCALE_BY_VECTOR;
     1672    } else if (str[0] == 'v' && strcmp(str, "vector_comp") == 0) {
     1673        mode = Glyphs::SCALE_BY_VECTOR_COMPONENTS;
     1674    } else if (str[0] == 'o' && strcmp(str, "off") == 0) {
     1675        mode = Glyphs::SCALING_OFF;
     1676    } else {
     1677        Tcl_AppendResult(interp, "bad scaling mode option \"", str,
     1678                         "\": should be one of: 'scalar', 'vector', 'vector_comp', 'off'", (char*)NULL);
     1679        return TCL_ERROR;
     1680    }
     1681    if (objc == 4) {
     1682        const char *name = Tcl_GetString(objv[3]);
     1683        g_renderer->setGlyphsScalingMode(name, mode);
     1684    } else {
     1685        g_renderer->setGlyphsScalingMode("all", mode);
    14521686    }
    14531687    return TCL_OK;
     
    15301764static Rappture::CmdSpec glyphsOps[] = {
    15311765    {"add",       1, GlyphsAddOp, 3, 4, "shape ?dataSetNme?"},
    1532     {"colormap",  1, GlyphsColorMapOp, 3, 4, "colorMapName ?dataSetNme?"},
     1766    {"colormap",  7, GlyphsColorMapOp, 3, 4, "colorMapName ?dataSetNme?"},
     1767    {"colormode", 7, GlyphsColorModeOp, 3, 4, "mode ?dataSetNme?"},
    15331768    {"delete",    1, GlyphsDeleteOp, 2, 3, "?dataSetName?"},
    15341769    {"edges",     1, GlyphsEdgeVisibilityOp, 3, 4, "bool ?dataSetName?"},
     1770    {"gscale",    1, GlyphsScaleFactorOp, 3, 4, "scaleFactor ?dataSetName?"},
    15351771    {"lighting",  3, GlyphsLightingOp, 3, 4, "bool ?dataSetName?"},
    15361772    {"linecolor", 5, GlyphsLineColorOp, 5, 6, "r g b ?dataSetName?"},
    15371773    {"linewidth", 5, GlyphsLineWidthOp, 3, 4, "width ?dataSetName?"},
    1538     {"opacity",   1, GlyphsOpacityOp, 3, 4, "value ?dataSetName?"},
    1539     {"scale",     2, GlyphsScaleOp, 3, 4, "scaleFactor ?dataSetName?"},
     1774    {"opacity",   2, GlyphsOpacityOp, 3, 4, "value ?dataSetName?"},
     1775    {"orient",    2, GlyphsOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     1776    {"pos",       1, GlyphsPositionOp, 5, 6, "x y z ?dataSetName?"},
     1777    {"scale",     2, GlyphsScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    15401778    {"shape",     2, GlyphsShapeOp, 3, 4, "shapeVal ?dataSetName?"},
     1779    {"smode",     2, GlyphsScalingModeOp, 3, 4, "mode ?dataSetNme?"},
    15411780    {"visible",   1, GlyphsVisibleOp, 3, 4, "bool ?dataSetName?"},
    15421781    {"wireframe", 1, GlyphsWireframeOp, 3, 4, "bool ?dataSetName?"}
     
    19342173    {"orient",       2, HeightMapOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
    19352174    {"pos",          1, HeightMapPositionOp, 5, 6, "x y z ?dataSetName?"},
    1936     {"scale",        1, HeightMapScaleOp, 5, 6, "sx sy sz  ?dataSetName?"},
     2175    {"scale",        1, HeightMapScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    19372176    {"visible",      2, HeightMapVisibleOp, 3, 4, "bool ?dataSetName?"},
    19382177    {"volumeslice",  2, HeightMapVolumeSliceOp, 4, 5, "axis ratio ?dataSetName?"}
     
    21352374
    21362375static int
     2376LICOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     2377            Tcl_Obj *const *objv)
     2378{
     2379    double quat[4];
     2380    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     2381        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     2382        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     2383        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     2384        return TCL_ERROR;
     2385    }
     2386    if (objc == 7) {
     2387        const char *name = Tcl_GetString(objv[6]);
     2388        g_renderer->setLICOrientation(name, quat);
     2389    } else {
     2390        g_renderer->setLICOrientation("all", quat);
     2391    }
     2392    return TCL_OK;
     2393}
     2394
     2395static int
     2396LICPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     2397              Tcl_Obj *const *objv)
     2398{
     2399    double pos[3];
     2400    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     2401        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     2402        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     2403        return TCL_ERROR;
     2404    }
     2405    if (objc == 6) {
     2406        const char *name = Tcl_GetString(objv[5]);
     2407        g_renderer->setLICPosition(name, pos);
     2408    } else {
     2409        g_renderer->setLICPosition("all", pos);
     2410    }
     2411    return TCL_OK;
     2412}
     2413
     2414static int
     2415LICScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     2416           Tcl_Obj *const *objv)
     2417{
     2418    double scale[3];
     2419    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     2420        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     2421        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     2422        return TCL_ERROR;
     2423    }
     2424    if (objc == 6) {
     2425        const char *name = Tcl_GetString(objv[5]);
     2426        g_renderer->setLICScale(name, scale);
     2427    } else {
     2428        g_renderer->setLICScale("all", scale);
     2429    }
     2430    return TCL_OK;
     2431}
     2432
     2433static int
    21372434LICVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc,
    21382435             Tcl_Obj *const *objv)
     
    21902487    {"linecolor",   5, LICLineColorOp, 5, 6, "r g b ?dataSetName?"},
    21912488    {"linewidth",   5, LICLineWidthOp, 3, 4, "width ?dataSetName?"},
    2192     {"opacity",     1, LICOpacityOp, 3, 4, "value ?dataSetName?"},
     2489    {"opacity",     2, LICOpacityOp, 3, 4, "value ?dataSetName?"},
     2490    {"orient",      2, LICOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     2491    {"pos",         1, LICPositionOp, 5, 6, "x y z ?dataSetName?"},
     2492    {"scale",       1, LICScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    21932493    {"visible",     2, LICVisibleOp, 3, 4, "bool ?dataSetName?"},
    21942494    {"volumeslice", 2, LICVolumeSliceOp, 4, 5, "axis ratio ?dataSetName?"}
     
    25052805    {"pos",        1, MoleculePositionOp, 5, 6, "x y z ?dataSetName?"},
    25062806    {"rscale",     1, MoleculeAtomScalingOp, 3, 4, "scaling ?dataSetName?"},
    2507     {"scale",      1, MoleculeScaleOp, 5, 6, "sx sy sz  ?dataSetName?"},
     2807    {"scale",      1, MoleculeScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    25082808    {"visible",    1, MoleculeVisibleOp, 3, 4, "bool ?dataSetName?"},
    25092809    {"wireframe",  1, MoleculeWireframeOp, 3, 4, "bool ?dataSetName?"}
     
    26592959static int
    26602960PolyDataOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
    2661                   Tcl_Obj *const *objv)
     2961                 Tcl_Obj *const *objv)
    26622962{
    26632963    double quat[4];
     
    26792979static int
    26802980PolyDataPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
    2681                     Tcl_Obj *const *objv)
     2981                   Tcl_Obj *const *objv)
    26822982{
    26832983    double pos[3];
     
    26982998static int
    26992999PolyDataScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
    2700                  Tcl_Obj *const *objv)
     3000                Tcl_Obj *const *objv)
    27013001{
    27023002    double scale[3];
     
    27143014    return TCL_OK;
    27153015}
    2716 
    27173016
    27183017static int
     
    27613060    {"orient",    2, PolyDataOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
    27623061    {"pos",       1, PolyDataPositionOp, 5, 6, "x y z ?dataSetName?"},
    2763     {"scale",     1, PolyDataScaleOp, 5, 6, "sx sy sz  ?dataSetName?"},
     3062    {"scale",     1, PolyDataScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    27643063    {"visible",   1, PolyDataVisibleOp, 3, 4, "bool ?dataSetName?"},
    27653064    {"wireframe", 1, PolyDataWireframeOp, 3, 4, "bool ?dataSetName?"}
     
    29043203    } else {
    29053204        g_renderer->setPseudoColorOpacity("all", opacity);
     3205    }
     3206    return TCL_OK;
     3207}
     3208
     3209static int
     3210PseudoColorOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3211                    Tcl_Obj *const *objv)
     3212{
     3213    double quat[4];
     3214    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     3215        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     3216        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     3217        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     3218        return TCL_ERROR;
     3219    }
     3220    if (objc == 7) {
     3221        const char *name = Tcl_GetString(objv[6]);
     3222        g_renderer->setPseudoColorOrientation(name, quat);
     3223    } else {
     3224        g_renderer->setPseudoColorOrientation("all", quat);
     3225    }
     3226    return TCL_OK;
     3227}
     3228
     3229static int
     3230PseudoColorPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3231                      Tcl_Obj *const *objv)
     3232{
     3233    double pos[3];
     3234    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     3235        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     3236        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     3237        return TCL_ERROR;
     3238    }
     3239    if (objc == 6) {
     3240        const char *name = Tcl_GetString(objv[5]);
     3241        g_renderer->setPseudoColorPosition(name, pos);
     3242    } else {
     3243        g_renderer->setPseudoColorPosition("all", pos);
     3244    }
     3245    return TCL_OK;
     3246}
     3247
     3248static int
     3249PseudoColorScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3250                   Tcl_Obj *const *objv)
     3251{
     3252    double scale[3];
     3253    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     3254        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     3255        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     3256        return TCL_ERROR;
     3257    }
     3258    if (objc == 6) {
     3259        const char *name = Tcl_GetString(objv[5]);
     3260        g_renderer->setPseudoColorScale(name, scale);
     3261    } else {
     3262        g_renderer->setPseudoColorScale("all", scale);
    29063263    }
    29073264    return TCL_OK;
     
    29503307    {"linecolor", 5, PseudoColorLineColorOp, 5, 6, "r g b ?dataSetName?"},
    29513308    {"linewidth", 5, PseudoColorLineWidthOp, 3, 4, "width ?dataSetName?"},
    2952     {"opacity",   1, PseudoColorOpacityOp, 3, 4, "value ?dataSetName?"},
     3309    {"opacity",   2, PseudoColorOpacityOp, 3, 4, "value ?dataSetName?"},
     3310    {"orient",    2, PseudoColorOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     3311    {"pos",       1, PseudoColorPositionOp, 5, 6, "x y z ?dataSetName?"},
     3312    {"scale",     1, PseudoColorScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
    29533313    {"visible",   1, PseudoColorVisibleOp, 3, 4, "bool ?dataSetName?"},
    29543314    {"wireframe", 1, PseudoColorWireframeOp, 3, 4, "bool ?dataSetName?"}
     
    32583618    } else {
    32593619        g_renderer->setStreamlinesOpacity("all", opacity);
     3620    }
     3621    return TCL_OK;
     3622}
     3623
     3624static int
     3625StreamlinesOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3626                    Tcl_Obj *const *objv)
     3627{
     3628    double quat[4];
     3629    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     3630        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     3631        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     3632        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     3633        return TCL_ERROR;
     3634    }
     3635    if (objc == 7) {
     3636        const char *name = Tcl_GetString(objv[6]);
     3637        g_renderer->setStreamlinesOrientation(name, quat);
     3638    } else {
     3639        g_renderer->setStreamlinesOrientation("all", quat);
     3640    }
     3641    return TCL_OK;
     3642}
     3643
     3644static int
     3645StreamlinesPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3646                      Tcl_Obj *const *objv)
     3647{
     3648    double pos[3];
     3649    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     3650        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     3651        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     3652        return TCL_ERROR;
     3653    }
     3654    if (objc == 6) {
     3655        const char *name = Tcl_GetString(objv[5]);
     3656        g_renderer->setStreamlinesPosition(name, pos);
     3657    } else {
     3658        g_renderer->setStreamlinesPosition("all", pos);
     3659    }
     3660    return TCL_OK;
     3661}
     3662
     3663static int
     3664StreamlinesScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3665                   Tcl_Obj *const *objv)
     3666{
     3667    double scale[3];
     3668    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     3669        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     3670        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     3671        return TCL_ERROR;
     3672    }
     3673    if (objc == 6) {
     3674        const char *name = Tcl_GetString(objv[5]);
     3675        g_renderer->setStreamlinesScale(name, scale);
     3676    } else {
     3677        g_renderer->setStreamlinesScale("all", scale);
    32603678    }
    32613679    return TCL_OK;
     
    34613879    {"lines",     5, StreamlinesLinesOp, 2, 3, "?dataSetName?"},
    34623880    {"linewidth", 5, StreamlinesLineWidthOp, 3, 4, "width ?dataSetName?"},
    3463     {"opacity",   1, StreamlinesOpacityOp, 3, 4, "val ?dataSetName?"},
     3881    {"opacity",   2, StreamlinesOpacityOp, 3, 4, "val ?dataSetName?"},
     3882    {"orient",    2, StreamlinesOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     3883    {"pos",       1, StreamlinesPositionOp, 5, 6, "x y z ?dataSetName?"},
    34643884    {"ribbons",   1, StreamlinesRibbonsOp, 4, 5, "width angle ?dataSetName?"},
    3465     {"seed",      1, StreamlinesSeedOp, 4, 11, "op params... ?dataSetName?"},
     3885    {"scale",     2, StreamlinesScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
     3886    {"seed",      2, StreamlinesSeedOp, 4, 11, "op params... ?dataSetName?"},
    34663887    {"tubes",     1, StreamlinesTubesOp, 4, 5, "numSides radius ?dataSetName?"},
    34673888    {"visible",   1, StreamlinesVisibleOp, 3, 4, "bool ?dataSetName?"}
     
    35533974    } else {
    35543975        g_renderer->setVolumeOpacity("all", opacity);
     3976    }
     3977    return TCL_OK;
     3978}
     3979
     3980static int
     3981VolumeOrientOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3982               Tcl_Obj *const *objv)
     3983{
     3984    double quat[4];
     3985    if (Tcl_GetDoubleFromObj(interp, objv[2], &quat[0]) != TCL_OK ||
     3986        Tcl_GetDoubleFromObj(interp, objv[3], &quat[1]) != TCL_OK ||
     3987        Tcl_GetDoubleFromObj(interp, objv[4], &quat[2]) != TCL_OK ||
     3988        Tcl_GetDoubleFromObj(interp, objv[5], &quat[3]) != TCL_OK) {
     3989        return TCL_ERROR;
     3990    }
     3991    if (objc == 7) {
     3992        const char *name = Tcl_GetString(objv[6]);
     3993        g_renderer->setVolumeOrientation(name, quat);
     3994    } else {
     3995        g_renderer->setVolumeOrientation("all", quat);
     3996    }
     3997    return TCL_OK;
     3998}
     3999
     4000static int
     4001VolumePositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
     4002                 Tcl_Obj *const *objv)
     4003{
     4004    double pos[3];
     4005    if (Tcl_GetDoubleFromObj(interp, objv[2], &pos[0]) != TCL_OK ||
     4006        Tcl_GetDoubleFromObj(interp, objv[3], &pos[1]) != TCL_OK ||
     4007        Tcl_GetDoubleFromObj(interp, objv[4], &pos[2]) != TCL_OK) {
     4008        return TCL_ERROR;
     4009    }
     4010    if (objc == 6) {
     4011        const char *name = Tcl_GetString(objv[5]);
     4012        g_renderer->setVolumePosition(name, pos);
     4013    } else {
     4014        g_renderer->setVolumePosition("all", pos);
     4015    }
     4016    return TCL_OK;
     4017}
     4018
     4019static int
     4020VolumeScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     4021              Tcl_Obj *const *objv)
     4022{
     4023    double scale[3];
     4024    if (Tcl_GetDoubleFromObj(interp, objv[2], &scale[0]) != TCL_OK ||
     4025        Tcl_GetDoubleFromObj(interp, objv[3], &scale[1]) != TCL_OK ||
     4026        Tcl_GetDoubleFromObj(interp, objv[4], &scale[2]) != TCL_OK) {
     4027        return TCL_ERROR;
     4028    }
     4029    if (objc == 6) {
     4030        const char *name = Tcl_GetString(objv[5]);
     4031        g_renderer->setVolumeScale(name, scale);
     4032    } else {
     4033        g_renderer->setVolumeScale("all", scale);
    35554034    }
    35564035    return TCL_OK;
     
    36554134    {"delete",   1, VolumeDeleteOp, 2, 3, "?dataSetName?"},
    36564135    {"lighting", 1, VolumeLightingOp, 3, 4, "bool ?dataSetName?"},
    3657     {"opacity",  1, VolumeOpacityOp, 3, 4, "val ?dataSetName?"},
    3658     {"shading",  1, VolumeShadingOp, 4, 6, "oper val ?dataSetName?"},
     4136    {"opacity",  2, VolumeOpacityOp, 3, 4, "val ?dataSetName?"},
     4137    {"orient",   2, VolumeOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     4138    {"pos",      1, VolumePositionOp, 5, 6, "x y z ?dataSetName?"},
     4139    {"scale",    2, VolumeScaleOp, 5, 6, "sx sy sz ?dataSetName?"},
     4140    {"shading",  2, VolumeShadingOp, 4, 6, "oper val ?dataSetName?"},
    36594141    {"visible",  1, VolumeVisibleOp, 3, 4, "bool ?dataSetName?"}
    36604142};
  • trunk/packages/vizservers/vtkvis/protocol.txt

    r2332 r2335  
    9494contour2d linewidth <val> <?datasetName?>
    9595contour2d opacity <val> <?datasetName?>
     96contour2d orient <qw> <qx> <qy> <qz> <?dataSetName?>
     97contour2d pos <x> <y> <z> <?dataSetName?>
     98contour2d scale <sx> <sy> <sz> <?dataSetName?>
    9699contour2d visible <bool> <?datasetName?>
    97100
     
    109112contour3d linewidth <val> <?datasetName?>
    110113contour3d opacity <val> <?datasetName?>
     114contour3d orient <qw> <qx> <qy> <qz> <?dataSetName?>
     115contour3d pos <x> <y> <z> <?dataSetName?>
     116contour3d scale <sx> <sy> <sz> <?dataSetName?>
    111117contour3d visible <bool> <?datasetName?>
    112118contour3d wireframe <bool> <?datasetName?>
     
    114120glyphs add <?dataSetName?>
    115121glyphs colormap <colorMapName> <?dataSetName?>
     122glyphs colormode <scale|scalar|vector> <?dataSetName?>
     123       Set the color mode: color by scale, scalar field or
     124       vector magnitude -- uses the current color map
    116125glyphs delete <?dataSetName?>
    117126glyphs edges <bool> <?datasetName?>
     127glyphs gscale <scaleFactor> <?datasetName?>
     128       Set glyph scaling factor
    118129glyphs lighting <bool> <?datasetName?>
    119130glyphs linecolor <r> <g> <b> <?datasetName?>
    120131glyphs linewidth <val> <?datasetName?>
    121132glyphs opacity <val> <?datasetName?>
    122 glyphs scale <scaleFactor> <?datasetName?>
     133glyphs orient <qw> <qx> <qy> <qz> <?dataSetName?>
     134glyphs pos <x> <y> <z> <?dataSetName?>
     135glyphs scale <sx> <sy> <sz> <?dataSetName?>
    123136glyphs shape <arrow|cone|cube|cylinder|dodecahedron|icosahedron|octahedron|sphere|tetrahedron> <?datasetName?>
     137glyphs smode <scalar|vector|vector_comp|off> <?dataSetName?>
     138       Set the scaling mode: use the scalar field, vector magnitude
     139       (uniform scale), vector components, or disable scaling
    124140glyphs visible <bool> <?datasetName?>
    125141glyphs wireframe <bool> <?datasetName?>
     
    157173lic linewidth <val> <?datasetName?>
    158174lic opacity <val> <?datasetName?>
     175lic orient <qw> <qx> <qy> <qz> <?dataSetName?>
     176lic pos <x> <y> <z> <?dataSetName?>
     177lic scale <sx> <sy> <sz> <?dataSetName?>
    159178lic visible <bool> <?datasetName?>
    160179lic volumeslice <axis> <ratio> <?datasetName?>
     
    203222pseudocolor linewidth <val> <?datasetName?>
    204223pseudocolor opacity <val> <?datasetName?>
     224pseudocolor orient <qw> <qx> <qy> <qz> <?dataSetName?>
     225pseudocolor pos <x> <y> <z> <?dataSetName?>
     226pseudocolor scale <sx> <sy> <sz> <?dataSetName?>
    205227pseudocolor visible <bool> <?datasetName?>
    206228pseudocolor wireframe <bool> <?datasetName?>
     
    221243streamlines linewidth <val> <?datasetName?>
    222244streamlines opacity <val> <?datasetName?>
     245streamlines orient <qw> <qx> <qy> <qz> <?dataSetName?>
     246streamlines pos <x> <y> <z> <?dataSetName?>
    223247streamlines ribbons <width> <angle> <?datasetName?>
    224248            Set rendering type to ribbons, width is minimum half-width, angle is
    225249            degrees offset from normal orientation
     250streamlines scale <sx> <sy> <sz> <?dataSetName?>
    226251streamlines seed color <r> <g> <b> <?datasetName?>
    227252streamlines seed polygon <centerX> <centerY> <centerZ> <normalX> <normalY> <normalZ> <radius> <numSides> <?dataSetName?>
     
    238263volume delete <?datasetName?>
    239264volume lighting <bool> <?datasetName?>
     265volume orient <qw> <qx> <qy> <qz> <?dataSetName?>
     266volume pos <x> <y> <z> <?dataSetName?>
     267volume scale <sx> <sy> <sz> <?dataSetName?>
    240268volume shading ambient <coeff> <?datasetName?>
    241269volume shading diffuse <coeff> <?datasetName?>
Note: See TracChangeset for help on using the changeset viewer.