Changeset 1431 for trunk/packages
- Timestamp:
- May 12, 2009, 5:07:29 PM (15 years ago)
- Location:
- trunk/packages/vizservers/nanovis
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/nanovis/Command.cpp
r1429 r1431 689 689 Rappture::Outcome err; 690 690 unsigned int flags; 691 flags = RPENC_ Z|RPENC_B64|RPENC_HDR;691 flags = RPENC_HDR; 692 692 if (!Rappture::encoding::decode(err, buf, flags)) { 693 693 printf("ERROR -- DECODING\n"); … … 701 701 702 702 static int 703 CameraAimOp(ClientData c data, Tcl_Interp *interp, int objc,703 CameraAimOp(ClientData clientData, Tcl_Interp *interp, int objc, 704 704 Tcl_Obj *const *objv) 705 705 { … … 717 717 718 718 static int 719 CameraAngleOp(ClientData c data, Tcl_Interp *interp, int objc,719 CameraAngleOp(ClientData clientData, Tcl_Interp *interp, int objc, 720 720 Tcl_Obj *const *objv) 721 721 { … … 732 732 733 733 static int 734 CameraPanOp(ClientData c data, Tcl_Interp *interp, int objc,734 CameraPanOp(ClientData clientData, Tcl_Interp *interp, int objc, 735 735 Tcl_Obj *const *objv) 736 736 { … … 745 745 746 746 static int 747 CameraZoomOp(ClientData c data, Tcl_Interp *interp, int objc,747 CameraZoomOp(ClientData clientData, Tcl_Interp *interp, int objc, 748 748 Tcl_Obj *const *objv) 749 749 { … … 778 778 */ 779 779 static int 780 CameraCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 780 CameraCmd(ClientData clientData, Tcl_Interp *interp, int objc, 781 Tcl_Obj *const *objv) 781 782 { 782 783 Tcl_ObjCmdProc *proc; … … 787 788 return TCL_ERROR; 788 789 } 789 return (*proc) (c data, interp, objc, objv);790 return (*proc) (clientData, interp, objc, objv); 790 791 } 791 792 792 793 /*ARGSUSED*/ 793 794 static int 794 SnapshotCmd(ClientData c data, Tcl_Interp *interp, int objc,795 795 SnapshotCmd(ClientData clientData, Tcl_Interp *interp, int objc, 796 Tcl_Obj *const *objv) 796 797 { 797 798 int w, h; … … 815 816 816 817 static int 817 CutplanePositionOp(ClientData c data, Tcl_Interp *interp, int objc,818 CutplanePositionOp(ClientData clientData, Tcl_Interp *interp, int objc, 818 819 Tcl_Obj *const *objv) 819 820 { … … 847 848 848 849 static int 849 CutplaneStateOp(ClientData c data, Tcl_Interp *interp, int objc,850 CutplaneStateOp(ClientData clientData, Tcl_Interp *interp, int objc, 850 851 Tcl_Obj *const *objv) 851 852 { … … 900 901 */ 901 902 static int 902 CutplaneCmd(ClientData c data, Tcl_Interp *interp, int objc,903 CutplaneCmd(ClientData clientData, Tcl_Interp *interp, int objc, 903 904 Tcl_Obj *const *objv) 904 905 { … … 910 911 return TCL_ERROR; 911 912 } 912 return (*proc) (c data, interp, objc, objv);913 return (*proc) (clientData, interp, objc, objv); 913 914 } 914 915 … … 925 926 */ 926 927 static int 927 LegendCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 928 LegendCmd(ClientData clientData, Tcl_Interp *interp, int objc, 929 Tcl_Obj *const *objv) 928 930 { 929 931 if (objc != 4) { … … 966 968 */ 967 969 static int 968 ScreenCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 970 ScreenCmd(ClientData clientData, Tcl_Interp *interp, int objc, 971 Tcl_Obj *const *objv) 969 972 { 970 973 if (objc != 3) { … … 994 997 */ 995 998 static int 996 TransfuncCmd(ClientData c data, Tcl_Interp *interp, int objc,999 TransfuncCmd(ClientData clientData, Tcl_Interp *interp, int objc, 997 1000 Tcl_Obj *const *objv) 998 1001 { … … 1102 1105 */ 1103 1106 static int 1104 UpCmd(ClientData c data, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv)1107 UpCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 1105 1108 { 1106 1109 if (objc != 2) { … … 1121 1124 1122 1125 static int 1123 VolumeAnimationCaptureOp(ClientData c data, Tcl_Interp *interp, int objc,1126 VolumeAnimationCaptureOp(ClientData clientData, Tcl_Interp *interp, int objc, 1124 1127 Tcl_Obj *const *objv) 1125 1128 { … … 1155 1158 1156 1159 static int 1157 VolumeAnimationClearOp(ClientData c data, Tcl_Interp *interp, int objc,1160 VolumeAnimationClearOp(ClientData clientData, Tcl_Interp *interp, int objc, 1158 1161 Tcl_Obj *const *objv) 1159 1162 { … … 1163 1166 1164 1167 static int 1165 VolumeAnimationStartOp(ClientData c data, Tcl_Interp *interp, int objc,1168 VolumeAnimationStartOp(ClientData clientData, Tcl_Interp *interp, int objc, 1166 1169 Tcl_Obj *const *objv) 1167 1170 { … … 1171 1174 1172 1175 static int 1173 VolumeAnimationStopOp(ClientData c data, Tcl_Interp *interp, int objc,1176 VolumeAnimationStopOp(ClientData clientData, Tcl_Interp *interp, int objc, 1174 1177 Tcl_Obj *const *objv) 1175 1178 { … … 1179 1182 1180 1183 static int 1181 VolumeAnimationVolumesOp(ClientData c data, Tcl_Interp *interp, int objc,1184 VolumeAnimationVolumesOp(ClientData clientData, Tcl_Interp *interp, int objc, 1182 1185 Tcl_Obj *const *objv) 1183 1186 { … … 1206 1209 1207 1210 static int 1208 VolumeAnimationOp(ClientData c data, Tcl_Interp *interp, int objc,1211 VolumeAnimationOp(ClientData clientData, Tcl_Interp *interp, int objc, 1209 1212 Tcl_Obj *const *objv) 1210 1213 { 1211 1214 Tcl_ObjCmdProc *proc; 1212 1215 1213 proc = Rappture::GetOpFromObj(interp, nVolumeAnimationOps, volumeAnimationOps,1214 1216 proc = Rappture::GetOpFromObj(interp, nVolumeAnimationOps, 1217 volumeAnimationOps, Rappture::CMDSPEC_ARG2, objc, objv, 0); 1215 1218 if (proc == NULL) { 1216 1219 return TCL_ERROR; 1217 1220 } 1218 return (*proc) (c data, interp, objc, objv);1219 } 1220 1221 1222 static int 1223 VolumeDataFollowsOp(ClientData c data, Tcl_Interp *interp, int objc,1221 return (*proc) (clientData, interp, objc, objv); 1222 } 1223 1224 1225 static int 1226 VolumeDataFollowsOp(ClientData clientData, Tcl_Interp *interp, int objc, 1224 1227 Tcl_Obj *const *objv) 1225 1228 { … … 1374 1377 1375 1378 static int 1376 VolumeDataStateOp(ClientData c data, Tcl_Interp *interp, int objc,1379 VolumeDataStateOp(ClientData clientData, Tcl_Interp *interp, int objc, 1377 1380 Tcl_Obj *const *objv) 1378 1381 { … … 1406 1409 1407 1410 static int 1408 VolumeDataOp(ClientData c data, Tcl_Interp *interp, int objc,1411 VolumeDataOp(ClientData clientData, Tcl_Interp *interp, int objc, 1409 1412 Tcl_Obj *const *objv) 1410 1413 { … … 1416 1419 return TCL_ERROR; 1417 1420 } 1418 return (*proc) (c data, interp, objc, objv);1419 } 1420 1421 static int 1422 VolumeOutlineColorOp(ClientData c data, Tcl_Interp *interp, int objc,1421 return (*proc) (clientData, interp, objc, objv); 1422 } 1423 1424 static int 1425 VolumeOutlineColorOp(ClientData clientData, Tcl_Interp *interp, int objc, 1423 1426 Tcl_Obj *const *objv) 1424 1427 { … … 1439 1442 1440 1443 static int 1441 VolumeOutlineStateOp(ClientData c data, Tcl_Interp *interp, int objc,1444 VolumeOutlineStateOp(ClientData clientData, Tcl_Interp *interp, int objc, 1442 1445 Tcl_Obj *const *objv) 1443 1446 { … … 1473 1476 1474 1477 static int 1475 VolumeOutlineOp(ClientData c data, Tcl_Interp *interp, int objc,1478 VolumeOutlineOp(ClientData clientData, Tcl_Interp *interp, int objc, 1476 1479 Tcl_Obj *const *objv) 1477 1480 { … … 1483 1486 return TCL_ERROR; 1484 1487 } 1485 return (*proc) (c data, interp, objc, objv);1486 } 1487 1488 static int 1489 VolumeShadingDiffuseOp(ClientData c data, Tcl_Interp *interp, int objc,1488 return (*proc) (clientData, interp, objc, objv); 1489 } 1490 1491 static int 1492 VolumeShadingDiffuseOp(ClientData clientData, Tcl_Interp *interp, int objc, 1490 1493 Tcl_Obj *const *objv) 1491 1494 { … … 1507 1510 1508 1511 static int 1509 VolumeShadingIsosurfaceOp(ClientData c data, Tcl_Interp *interp, int objc,1512 VolumeShadingIsosurfaceOp(ClientData clientData, Tcl_Interp *interp, int objc, 1510 1513 Tcl_Obj *const *objv) 1511 1514 { … … 1526 1529 1527 1530 static int 1528 VolumeShadingOpacityOp(ClientData c data, Tcl_Interp *interp, int objc,1531 VolumeShadingOpacityOp(ClientData clientData, Tcl_Interp *interp, int objc, 1529 1532 Tcl_Obj *const *objv) 1530 1533 { … … 1547 1550 1548 1551 static int 1549 VolumeShadingSpecularOp(ClientData c data, Tcl_Interp *interp, int objc,1552 VolumeShadingSpecularOp(ClientData clientData, Tcl_Interp *interp, int objc, 1550 1553 Tcl_Obj *const *objv) 1551 1554 { … … 1566 1569 1567 1570 static int 1568 VolumeShadingTransFuncOp(ClientData c data, Tcl_Interp *interp, int objc,1571 VolumeShadingTransFuncOp(ClientData clientData, Tcl_Interp *interp, int objc, 1569 1572 Tcl_Obj *const *objv) 1570 1573 { … … 1605 1608 1606 1609 static int 1607 VolumeShadingOp(ClientData c data, Tcl_Interp *interp, int objc,1610 VolumeShadingOp(ClientData clientData, Tcl_Interp *interp, int objc, 1608 1611 Tcl_Obj *const *objv) 1609 1612 { … … 1615 1618 return TCL_ERROR; 1616 1619 } 1617 return (*proc) (c data, interp, objc, objv);1618 } 1619 1620 static int 1621 VolumeAxisOp(ClientData c data, Tcl_Interp *interp, int objc,1620 return (*proc) (clientData, interp, objc, objv); 1621 } 1622 1623 static int 1624 VolumeAxisOp(ClientData clientData, Tcl_Interp *interp, int objc, 1622 1625 Tcl_Obj *const *objv) 1623 1626 { … … 1649 1652 1650 1653 static int 1651 VolumeStateOp(ClientData c data, Tcl_Interp *interp, int objc,1654 VolumeStateOp(ClientData clientData, Tcl_Interp *interp, int objc, 1652 1655 Tcl_Obj *const *objv) 1653 1656 { … … 1675 1678 1676 1679 static int 1677 VolumeTestOp(ClientData c data, Tcl_Interp *interp, int objc,1680 VolumeTestOp(ClientData clientData, Tcl_Interp *interp, int objc, 1678 1681 Tcl_Obj *const *objv) 1679 1682 { … … 1711 1714 */ 1712 1715 static int 1713 VolumeCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 1716 VolumeCmd(ClientData clientData, Tcl_Interp *interp, int objc, 1717 Tcl_Obj *const *objv) 1714 1718 { 1715 1719 Tcl_ObjCmdProc *proc; … … 1720 1724 return TCL_ERROR; 1721 1725 } 1722 return (*proc) (c data, interp, objc, objv);1726 return (*proc) (clientData, interp, objc, objv); 1723 1727 } 1724 1728 … … 1729 1733 1730 1734 static int 1731 FlowDataFollowsOp(ClientData c data, Tcl_Interp *interp, int objc,1735 FlowDataFollowsOp(ClientData clientData, Tcl_Interp *interp, int objc, 1732 1736 Tcl_Obj *const *objv) 1733 1737 { … … 1813 1817 1814 1818 static int 1815 FlowDataOp(ClientData c data, Tcl_Interp *interp, int objc,1819 FlowDataOp(ClientData clientData, Tcl_Interp *interp, int objc, 1816 1820 Tcl_Obj *const *objv) 1817 1821 { … … 1823 1827 return TCL_ERROR; 1824 1828 } 1825 return (*proc) (c data, interp, objc, objv);1829 return (*proc) (clientData, interp, objc, objv); 1826 1830 } 1827 1831 … … 1833 1837 1834 1838 static int 1835 FlowVideoOp(ClientData c data, Tcl_Interp *interp, int objc,1839 FlowVideoOp(ClientData clientData, Tcl_Interp *interp, int objc, 1836 1840 Tcl_Obj *const *objv) 1837 1841 { … … 1951 1955 1952 1956 static int 1953 FlowLicOp(ClientData c data, Tcl_Interp *interp, int objc,1957 FlowLicOp(ClientData clientData, Tcl_Interp *interp, int objc, 1954 1958 Tcl_Obj *const *objv) 1955 1959 { … … 1963 1967 1964 1968 static int 1965 FlowSliceVisibleOp(ClientData c data, Tcl_Interp *interp, int objc,1969 FlowSliceVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc, 1966 1970 Tcl_Obj *const *objv) 1967 1971 { … … 1991 1995 1992 1996 static int 1993 FlowSlicePositionOp(ClientData c data, Tcl_Interp *interp, int objc,1997 FlowSlicePositionOp(ClientData clientData, Tcl_Interp *interp, int objc, 1994 1998 Tcl_Obj *const *objv) 1995 1999 { … … 2034 2038 2035 2039 static int 2036 FlowSliceOp(ClientData c data, Tcl_Interp *interp, int objc,2040 FlowSliceOp(ClientData clientData, Tcl_Interp *interp, int objc, 2037 2041 Tcl_Obj *const *objv) 2038 2042 { 2039 2043 Tcl_ObjCmdProc *proc; 2040 2044 2041 2045 proc = Rappture::GetOpFromObj(interp, nFlowSliceOps, flowSliceOps, … … 2044 2048 return TCL_ERROR; 2045 2049 } 2046 return (*proc) (c data, interp, objc, objv);2047 } 2048 2049 static int 2050 FlowParticlesVisibleOp(ClientData c data, Tcl_Interp *interp, int objc,2051 2050 return (*proc) (clientData, interp, objc, objv); 2051 } 2052 2053 static int 2054 FlowParticlesVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc, 2055 Tcl_Obj *const *objv) 2052 2056 { 2053 2057 bool state; … … 2066 2070 2067 2071 static int 2068 FlowParticlesOp(ClientData c data, Tcl_Interp *interp, int objc,2069 2072 FlowParticlesOp(ClientData clientData, Tcl_Interp *interp, int objc, 2073 Tcl_Obj *const *objv) 2070 2074 { 2071 2075 Tcl_ObjCmdProc *proc; … … 2076 2080 return TCL_ERROR; 2077 2081 } 2078 return (*proc) (c data, interp, objc, objv);2079 } 2080 2081 static int 2082 FlowNextOp(ClientData c data, Tcl_Interp *interp, int objc,2083 2082 return (*proc) (clientData, interp, objc, objv); 2083 } 2084 2085 static int 2086 FlowNextOp(ClientData clientData, Tcl_Interp *interp, int objc, 2087 Tcl_Obj *const *objv) 2084 2088 { 2085 2089 if (!NanoVis::licRenderer->isActivated()) { … … 2109 2113 2110 2114 static int 2111 FlowResetOp(ClientData c data, Tcl_Interp *interp, int objc,2112 2115 FlowResetOp(ClientData clientData, Tcl_Interp *interp, int objc, 2116 Tcl_Obj *const *objv) 2113 2117 { 2114 2118 NanoVis::initParticle(); … … 2117 2121 2118 2122 static int 2119 FlowVectorIdOp(ClientData c data, Tcl_Interp *interp, int objc,2120 2123 FlowVectorIdOp(ClientData clientData, Tcl_Interp *interp, int objc, 2124 Tcl_Obj *const *objv) 2121 2125 { 2122 2126 Volume *volPtr; … … 2189 2193 */ 2190 2194 static int 2191 FlowCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2195 FlowCmd(ClientData clientData, Tcl_Interp *interp, int objc, 2196 Tcl_Obj *const *objv) 2192 2197 { 2193 2198 Tcl_ObjCmdProc *proc; … … 2198 2203 return TCL_ERROR; 2199 2204 } 2200 return (*proc) (c data, interp, objc, objv);2205 return (*proc) (clientData, interp, objc, objv); 2201 2206 } 2202 2207 … … 2205 2210 2206 2211 static int 2207 HeightMapDataFollowsOp(ClientData c data, Tcl_Interp *interp, int objc,2212 HeightMapDataFollowsOp(ClientData clientData, Tcl_Interp *interp, int objc, 2208 2213 Tcl_Obj *const *objv) 2209 2214 { … … 2258 2263 2259 2264 static int 2260 HeightMapDataVisibleOp(ClientData c data, Tcl_Interp *interp, int objc,2265 HeightMapDataVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc, 2261 2266 Tcl_Obj *const *objv) 2262 2267 { … … 2283 2288 2284 2289 static int 2285 HeightMapDataOp(ClientData c data, Tcl_Interp *interp, int objc,2290 HeightMapDataOp(ClientData clientData, Tcl_Interp *interp, int objc, 2286 2291 Tcl_Obj *const *objv) 2287 2292 { … … 2293 2298 return TCL_ERROR; 2294 2299 } 2295 return (*proc) (c data, interp, objc, objv);2296 } 2297 2298 2299 static int 2300 HeightMapLineContourColorOp(ClientData c data, Tcl_Interp *interp, int objc,2300 return (*proc) (clientData, interp, objc, objv); 2301 } 2302 2303 2304 static int 2305 HeightMapLineContourColorOp(ClientData clientData, Tcl_Interp *interp, int objc, 2301 2306 Tcl_Obj *const *objv) 2302 2307 { … … 2317 2322 2318 2323 static int 2319 HeightMapLineContourVisibleOp(ClientData c data, Tcl_Interp *interp, int objc,2320 2324 HeightMapLineContourVisibleOp(ClientData clientData, Tcl_Interp *interp, 2325 int objc, Tcl_Obj *const *objv) 2321 2326 { 2322 2327 bool visible; … … 2342 2347 2343 2348 static int 2344 HeightMapLineContourOp(ClientData c data, Tcl_Interp *interp, int objc,2349 HeightMapLineContourOp(ClientData clientData, Tcl_Interp *interp, int objc, 2345 2350 Tcl_Obj *const *objv) 2346 2351 { … … 2352 2357 return TCL_ERROR; 2353 2358 } 2354 return (*proc) (c data, interp, objc, objv);2355 } 2356 2357 static int 2358 HeightMapCullOp(ClientData c data, Tcl_Interp *interp, int objc,2359 return (*proc) (clientData, interp, objc, objv); 2360 } 2361 2362 static int 2363 HeightMapCullOp(ClientData clientData, Tcl_Interp *interp, int objc, 2359 2364 Tcl_Obj *const *objv) 2360 2365 { … … 2368 2373 2369 2374 static int 2370 HeightMapCreateOp(ClientData c data, Tcl_Interp *interp, int objc,2375 HeightMapCreateOp(ClientData clientData, Tcl_Interp *interp, int objc, 2371 2376 Tcl_Obj *const *objv) 2372 2377 { … … 2374 2379 2375 2380 /* heightmap create xmin ymin xmax ymax xnum ynum values */ 2376 hmPtr = CreateHeightMap(c data, interp, objc - 2, objv + 2);2381 hmPtr = CreateHeightMap(clientData, interp, objc - 2, objv + 2); 2377 2382 if (hmPtr == NULL) { 2378 2383 return TCL_ERROR; … … 2384 2389 2385 2390 static int 2386 HeightMapLegendOp(ClientData c data, Tcl_Interp *interp, int objc,2391 HeightMapLegendOp(ClientData clientData, Tcl_Interp *interp, int objc, 2387 2392 Tcl_Obj *const *objv) 2388 2393 { … … 2412 2417 2413 2418 static int 2414 HeightMapPolygonOp(ClientData c data, Tcl_Interp *interp, int objc,2419 HeightMapPolygonOp(ClientData clientData, Tcl_Interp *interp, int objc, 2415 2420 Tcl_Obj *const *objv) 2416 2421 { … … 2424 2429 2425 2430 static int 2426 HeightMapShadingOp(ClientData c data, Tcl_Interp *interp, int objc,2431 HeightMapShadingOp(ClientData clientData, Tcl_Interp *interp, int objc, 2427 2432 Tcl_Obj *const *objv) 2428 2433 { … … 2455 2460 2456 2461 static int 2457 HeightMapTestOp(ClientData c data, Tcl_Interp *interp, int objc,2462 HeightMapTestOp(ClientData clientData, Tcl_Interp *interp, int objc, 2458 2463 Tcl_Obj *const *objv) 2459 2464 { … … 2495 2500 2496 2501 static int 2497 HeightMapTransFuncOp(ClientData c data, Tcl_Interp *interp, int objc,2502 HeightMapTransFuncOp(ClientData clientData, Tcl_Interp *interp, int objc, 2498 2503 Tcl_Obj *const *objv) 2499 2504 { … … 2537 2542 2538 2543 static int 2539 HeightMapCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2544 HeightMapCmd(ClientData clientData, Tcl_Interp *interp, int objc, 2545 Tcl_Obj *const *objv) 2540 2546 { 2541 2547 Tcl_ObjCmdProc *proc; … … 2546 2552 return TCL_ERROR; 2547 2553 } 2548 return (*proc) (c data, interp, objc, objv);2549 } 2550 2551 static int 2552 GridAxisColorOp(ClientData c data, Tcl_Interp *interp, int objc,2554 return (*proc) (clientData, interp, objc, objv); 2555 } 2556 2557 static int 2558 GridAxisColorOp(ClientData clientData, Tcl_Interp *interp, int objc, 2553 2559 Tcl_Obj *const *objv) 2554 2560 { … … 2570 2576 2571 2577 static int 2572 GridAxisNameOp(ClientData c data, Tcl_Interp *interp, int objc,2578 GridAxisNameOp(ClientData clientData, Tcl_Interp *interp, int objc, 2573 2579 Tcl_Obj *const *objv) 2574 2580 { … … 2593 2599 2594 2600 static int 2595 GridLineColorOp(ClientData c data, Tcl_Interp *interp, int objc,2601 GridLineColorOp(ClientData clientData, Tcl_Interp *interp, int objc, 2596 2602 Tcl_Obj *const *objv) 2597 2603 { … … 2613 2619 2614 2620 static int 2615 GridVisibleOp(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2621 GridVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc, 2622 Tcl_Obj *const *objv) 2616 2623 { 2617 2624 bool visible; … … 2632 2639 2633 2640 static int 2634 GridCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2641 GridCmd(ClientData clientData, Tcl_Interp *interp, int objc, 2642 Tcl_Obj *const *objv) 2635 2643 { 2636 2644 Tcl_ObjCmdProc *proc; … … 2641 2649 return TCL_ERROR; 2642 2650 } 2643 return (*proc) (cdata, interp, objc, objv); 2644 } 2645 2646 static int 2647 AxisCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2651 return (*proc) (clientData, interp, objc, objv); 2652 } 2653 2654 static int 2655 AxisCmd(ClientData clientData, Tcl_Interp *interp, int objc, 2656 Tcl_Obj *const *objv) 2648 2657 { 2649 2658 if (objc < 2) { … … 2671 2680 #if PLANE_CMD 2672 2681 static int 2673 PlaneNewOp(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2682 PlaneNewOp(ClientData clientData, Tcl_Interp *interp, int objc, 2683 Tcl_Obj *const *objv) 2674 2684 { 2675 2685 fprintf(stderr, "load plane for 2D visualization command\n"); … … 2710 2720 2711 2721 static int 2712 PlaneLinkOp(ClientData c data, Tcl_Interp *interp, int objc,2722 PlaneLinkOp(ClientData clientData, Tcl_Interp *interp, int objc, 2713 2723 Tcl_Obj *const *objv) 2714 2724 { … … 2735 2745 //The plane_index is the index mantained in the 2D plane renderer 2736 2746 static int 2737 PlaneEnableOp(ClientData c data, Tcl_Interp *interp, int objc,2747 PlaneEnableOp(ClientData clientData, Tcl_Interp *interp, int objc, 2738 2748 Tcl_Obj *const *objv) 2739 2749 { … … 2768 2778 2769 2779 static int 2770 PlaneCmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) 2780 PlaneCmd(ClientData clientData, Tcl_Interp *interp, int objc, 2781 Tcl_Obj *const *objv) 2771 2782 { 2772 2783 Tcl_ObjCmdProc *proc; … … 2777 2788 return TCL_ERROR; 2778 2789 } 2779 return (*proc) (c data, interp, objc, objv);2790 return (*proc) (clientData, interp, objc, objv); 2780 2791 } 2781 2792 -
trunk/packages/vizservers/nanovis/FlowCmd.cpp
r1429 r1431 26 26 #define RELPOS 0 27 27 #define ABSPOS 1 28 29 unsigned int FlowCmd::flags = 0;30 Tcl_HashTable FlowCmd::_flowTable;31 float FlowCmd::_magMin, FlowCmd::_magMax;32 float FlowCmd::_xMin, FlowCmd::_xMax;33 float FlowCmd::_yMin, FlowCmd::_yMax;34 float FlowCmd::_zMin, FlowCmd::_zMax;35 float FlowCmd::_wMin, FlowCmd::_wMax;36 float FlowCmd::_xOrigin, FlowCmd::_yOrigin, FlowCmd::_zOrigin;37 28 38 29 static Rappture::SwitchParseProc AxisSwitchProc; … … 127 118 FlowParticles::Render(void) 128 119 { 129 fprintf(stderr, "rendering particles, position=%g\n", 130 FlowCmd::GetPosition(&_sv.position)); 131 _rendererPtr->setPos(FlowCmd::GetPosition(&_sv.position)); 120 Trace("rendering particles %s\n", _name); 121 _rendererPtr->setPos(FlowCmd::GetRelativePosition(&_sv.position)); 132 122 _rendererPtr->setAxis(_sv.position.axis); 133 assert(_rendererPtr-> isActivated());123 assert(_rendererPtr->active()); 134 124 _rendererPtr->render(); 135 125 } … … 138 128 FlowParticles::Configure(void) 139 129 { 140 _rendererPtr->setPos( _sv.position.value);130 _rendererPtr->setPos(FlowCmd::GetRelativePosition(&_sv.position)); 141 131 _rendererPtr->setColor(Vector4(_sv.color.r, _sv.color.g, _sv.color.b, 142 132 _sv.color.a)); 143 133 _rendererPtr->setAxis(_sv.position.axis); 144 if ((_sv.isHidden) && (_rendererPtr->isActivated())) { 145 _rendererPtr->deactivate(); 146 } else if ((!_sv.isHidden) && (!_rendererPtr->isActivated())) { 147 _rendererPtr->activate(); 148 } 134 _rendererPtr->active(!_sv.isHidden); 149 135 } 150 136 … … 168 154 FlowBox::Render(Volume *volPtr) 169 155 { 156 Trace("rendering boxes %s\n", _name); 170 157 if ((_sv.corner1.x == _sv.corner2.x) || 171 158 (_sv.corner1.y == _sv.corner2.y) || … … 173 160 return; 174 161 } 162 Trace("rendering boxes %s\n", _name); 175 163 glColor4d(_sv.color.r, _sv.color.g, _sv.color.b, _sv.color.a); 176 164 … … 204 192 z1 = (_sv.corner2.z - min.z) / (max.z - min.z); 205 193 194 Trace("rendering box %g,%g %g,%g %g,%g\n", x0, x1, y0, y1, z0, z1); 195 206 196 glLineWidth(_sv.lineWidth); 207 197 glBegin(GL_LINE_LOOP); … … 259 249 _volIndex = -1; /* Indicates that no volume slot has 260 250 * been allocated for this vector. */ 251 _sv.sliceVisible = 1; 261 252 _volPtr = NULL; 262 253 _cmdToken = Tcl_CreateObjCommand(interp, (char *)_name, … … 319 310 NvVectorField *fieldPtr; 320 311 fieldPtr = VectorField(); 321 if (!fieldPtr->isActivated()) { 322 fieldPtr->activate(); 323 } 312 fieldPtr->active(true); 324 313 FlowParticlesIterator iter; 325 314 FlowParticles *particlesPtr; … … 335 324 FlowCmd::Render(void) 336 325 { 337 if (!_fieldPtr->isActivated()) { 338 _fieldPtr->activate(); 339 } 326 _fieldPtr->active(true); 340 327 _fieldPtr->render(); 341 328 FlowParticlesIterator iter; … … 347 334 } 348 335 } 336 Trace("in Render before boxes %s\n", _name); 349 337 RenderBoxes(); 350 338 } 351 339 352 void 353 FlowCmd::Init(void) 354 { 355 Tcl_InitHashTable(&_flowTable, TCL_STRING_KEYS); 356 } 357 358 FlowCmd * 359 FlowCmd::FirstFlow(FlowIterator *iterPtr) 360 { 361 iterPtr->hashPtr = Tcl_FirstHashEntry(&_flowTable, &iterPtr->hashSearch); 340 341 #ifdef notdef 342 int 343 NanoVis::InitVectorField(Tcl_Interp *interp) 344 { 345 if (flowVisRenderer == NULL) { 346 Tcl_AppendResult(interp, "flowvis renderer is NULL", (char *)NULL); 347 return TCL_ERROR; 348 } 349 if (licRenderer == NULL) { 350 Tcl_AppendResult(interp, "LIC renderer is NULL", (char *)NULL); 351 return TCL_ERROR; 352 } 353 _fieldPtr->setVectorField(_volPtr->id, *(_volPtr->get_location()), 354 1.0f, _volPtr->height / (float)_volPtr->width, 355 _volPtr->depth / (float)_volPtr->width, 356 _volPtr->wAxis.max()); 357 358 licRenderer->make_patterns(); 359 licRenderer->setVectorField( 360 _volPtr->id, /* Texture ID */ 361 *(_volPtr->get_location()), /* Origin */ 362 1.0f / volPtr->aspect_ratio_width, /* X-axis scale. */ 363 1.0f / volPtr->aspect_ratio_height, /* Y-axis scale. */ 364 1.0f / volPtr->aspect_ratio_depth, /* Z-axis scale. */ 365 volPtr->wAxis.max()); /* Maximum ???? */ 366 367 licRenderer->set_offset(lic_slice_z); 368 return TCL_OK; 369 } 370 #endif 371 372 int 373 FlowCmd::CreateParticles(Tcl_Interp *interp, Tcl_Obj *objPtr) 374 { 375 Tcl_HashEntry *hPtr; 376 int isNew; 377 const char *particlesName = Tcl_GetString(objPtr); 378 hPtr = Tcl_CreateHashEntry(&_particlesTable, particlesName, &isNew); 379 if (!isNew) { 380 Tcl_AppendResult(interp, "particle injection plane \"", 381 particlesName, "\" already exists.", (char *)NULL); 382 return TCL_ERROR; 383 } 384 particlesName = Tcl_GetHashKey(&_particlesTable, hPtr); 385 FlowParticles *particlesPtr; 386 particlesPtr = new FlowParticles(particlesName, hPtr); 387 if (particlesPtr == NULL) { 388 Tcl_AppendResult(interp, "can't allocate particle injection plane", 389 (char *)NULL); 390 Tcl_DeleteHashEntry(hPtr); 391 return TCL_ERROR; 392 } 393 Tcl_SetHashValue(hPtr, particlesPtr); 394 return TCL_OK; 395 } 396 397 int 398 FlowCmd::GetParticles(Tcl_Interp *interp, Tcl_Obj *objPtr, 399 FlowParticles **particlesPtrPtr) 400 { 401 Tcl_HashEntry *hPtr; 402 hPtr = Tcl_FindHashEntry(&_particlesTable, Tcl_GetString(objPtr)); 403 if (hPtr == NULL) { 404 if (interp != NULL) { 405 Tcl_AppendResult(interp, "can't find a particle injection plane \"", 406 Tcl_GetString(objPtr), "\"", (char *)NULL); 407 } 408 return TCL_ERROR; 409 } 410 *particlesPtrPtr = (FlowParticles *)Tcl_GetHashValue(hPtr); 411 return TCL_OK; 412 } 413 414 FlowParticles * 415 FlowCmd::FirstParticles(FlowParticlesIterator *iterPtr) 416 { 417 iterPtr->hashPtr = Tcl_FirstHashEntry(&_particlesTable, 418 &iterPtr->hashSearch); 362 419 if (iterPtr->hashPtr == NULL) { 363 420 return NULL; 364 421 } 365 return (Flow Cmd*)Tcl_GetHashValue(iterPtr->hashPtr);366 } 367 368 Flow Cmd*369 FlowCmd::Next Flow(FlowIterator *iterPtr)422 return (FlowParticles *)Tcl_GetHashValue(iterPtr->hashPtr); 423 } 424 425 FlowParticles * 426 FlowCmd::NextParticles(FlowParticlesIterator *iterPtr) 370 427 { 371 428 if (iterPtr->hashPtr == NULL) { … … 376 433 return NULL; 377 434 } 435 return (FlowParticles *)Tcl_GetHashValue(iterPtr->hashPtr); 436 } 437 438 int 439 FlowCmd::CreateBox(Tcl_Interp *interp, Tcl_Obj *objPtr) 440 { 441 Tcl_HashEntry *hPtr; 442 int isNew; 443 hPtr = Tcl_CreateHashEntry(&_boxTable, Tcl_GetString(objPtr), &isNew); 444 if (!isNew) { 445 Tcl_AppendResult(interp, "box \"", Tcl_GetString(objPtr), 446 "\" already exists in flow \"", name(), "\"", (char *)NULL); 447 return TCL_ERROR; 448 } 449 const char *boxName; 450 boxName = Tcl_GetHashKey(&_boxTable, hPtr); 451 FlowBox *boxPtr; 452 boxPtr = new FlowBox(boxName, hPtr); 453 if (boxPtr == NULL) { 454 Tcl_AppendResult(interp, "can't allocate box \"", boxName, "\"", 455 (char *)NULL); 456 Tcl_DeleteHashEntry(hPtr); 457 return TCL_ERROR; 458 } 459 Tcl_SetHashValue(hPtr, boxPtr); 460 return TCL_OK; 461 } 462 463 int 464 FlowCmd::GetBox(Tcl_Interp *interp, Tcl_Obj *objPtr, FlowBox **boxPtrPtr) 465 { 466 Tcl_HashEntry *hPtr; 467 hPtr = Tcl_FindHashEntry(&_boxTable, Tcl_GetString(objPtr)); 468 if (hPtr == NULL) { 469 if (interp != NULL) { 470 Tcl_AppendResult(interp, "can't find a box \"", 471 Tcl_GetString(objPtr), "\" in flow \"", name(), "\"", 472 (char *)NULL); 473 } 474 return TCL_ERROR; 475 } 476 *boxPtrPtr = (FlowBox *)Tcl_GetHashValue(hPtr); 477 return TCL_OK; 478 } 479 480 FlowBox * 481 FlowCmd::FirstBox(FlowBoxIterator *iterPtr) 482 { 483 iterPtr->hashPtr = Tcl_FirstHashEntry(&_boxTable, &iterPtr->hashSearch); 484 if (iterPtr->hashPtr == NULL) { 485 return NULL; 486 } 487 return (FlowBox *)Tcl_GetHashValue(iterPtr->hashPtr); 488 } 489 490 FlowBox * 491 FlowCmd::NextBox(FlowBoxIterator *iterPtr) 492 { 493 if (iterPtr->hashPtr == NULL) { 494 return NULL; 495 } 496 iterPtr->hashPtr = Tcl_NextHashEntry(&iterPtr->hashSearch); 497 if (iterPtr->hashPtr == NULL) { 498 return NULL; 499 } 500 return (FlowBox *)Tcl_GetHashValue(iterPtr->hashPtr); 501 } 502 503 void 504 FlowCmd::GetMagRange(double &min_mag, double &max_mag) 505 { 506 const float *values = _dataPtr->values(); 507 size_t nValues = _dataPtr->nValues(); 508 max_mag = -1e21, min_mag = 1e21; 509 for (size_t i = 0; i < nValues; i += 3) { 510 double vx, vy, vz, vm; 511 512 vx = values[i]; 513 vy = values[i+1]; 514 vz = values[i+2]; 515 516 vm = sqrt(vx*vx + vy*vy + vz*vz); 517 if (vm > max_mag) { 518 max_mag = vm; 519 } 520 if (vm < min_mag) { 521 min_mag = vm; 522 } 523 } 524 } 525 526 527 void 528 FlowCmd::InitVectorField(void) 529 { 530 if (_volPtr != NULL) { 531 delete _volPtr; 532 _volPtr = NULL; 533 NanoVis::volume[_volIndex] = NULL; 534 NanoVis::vol_renderer->remove_volume(_volIndex); 535 } 536 // Remove the associated vector field. 537 if (_fieldPtr != NULL) { 538 delete _fieldPtr; 539 _fieldPtr = NULL; 540 } 541 542 } 543 544 void 545 FlowCmd::InitializeParticles(void) 546 { 547 FlowParticles *particlesPtr; 548 FlowParticlesIterator iter; 549 for (particlesPtr = FirstParticles(&iter); particlesPtr != NULL; 550 particlesPtr = NextParticles(&iter)) { 551 particlesPtr->Initialize(); 552 } 553 } 554 555 bool 556 FlowCmd::ScaleVectorField() 557 { 558 if (_volPtr != NULL) { 559 delete _volPtr; 560 _volPtr = NULL; 561 NanoVis::volume[_volIndex] = NULL; 562 NanoVis::vol_renderer->remove_volume(_volIndex); 563 } 564 float *vdata; 565 vdata = GetScaledVector(); 566 if (vdata == NULL) { 567 return false; 568 } 569 Volume *volPtr; 570 volPtr = MakeVolume(vdata); 571 delete [] vdata; 572 if (volPtr == NULL) { 573 return false; 574 } 575 _volPtr = volPtr; 576 577 _fieldPtr = new NvVectorField(); 578 if (_fieldPtr == NULL) { 579 return false; 580 } 581 582 double width, height, depth; 583 width = NanoVis::xMax - NanoVis::xMin; 584 height = NanoVis::yMax - NanoVis::yMin; 585 depth = NanoVis::zMax - NanoVis::zMin; 586 587 Vector3 *locationPtr = _volPtr->get_location(); 588 /*This is wrong. Need to compute origin. */ 589 NanoVis::xOrigin = locationPtr->x; 590 NanoVis::yOrigin = locationPtr->y; 591 NanoVis::zOrigin = locationPtr->z; 592 593 _fieldPtr->setVectorField(_volPtr, *locationPtr, 594 1.0f, height / width, depth / width, NanoVis::magMax); 595 596 if (NanoVis::licRenderer != NULL) { 597 NanoVis::licRenderer->setVectorField(_volPtr->id, 598 *locationPtr, 599 1.0f / _volPtr->aspect_ratio_width, 600 1.0f / _volPtr->aspect_ratio_height, 601 1.0f / _volPtr->aspect_ratio_depth, 602 _volPtr->wAxis.max()); 603 SetCurrentPosition(); 604 SetAxis(); 605 SetActive(); 606 } 607 FlowParticles *particlesPtr; 608 FlowParticlesIterator partIter; 609 for (particlesPtr = FirstParticles(&partIter); particlesPtr != NULL; 610 particlesPtr = NextParticles(&partIter)) { 611 particlesPtr->SetVectorField(_volPtr); 612 } 613 return true; 614 } 615 616 void 617 FlowCmd::RenderBoxes(void) 618 { 619 FlowBoxIterator iter; 620 FlowBox *boxPtr; 621 for (boxPtr = FirstBox(&iter); boxPtr != NULL; boxPtr = NextBox(&iter)) { 622 if (boxPtr->visible()) { 623 boxPtr->Render(_volPtr); 624 } 625 } 626 } 627 628 float * 629 FlowCmd::GetScaledVector(void) 630 { 631 assert(_dataPtr->nComponents() == 3); 632 size_t n = _dataPtr->nValues() / _dataPtr->nComponents() * 4; 633 float *data = new float[n]; 634 if (data == NULL) { 635 return NULL; 636 } 637 memset(data, 0, sizeof(float) * n); 638 float *destPtr = data; 639 const float *values = _dataPtr->values(); 640 for (size_t iz=0; iz < _dataPtr->zNum(); iz++) { 641 for (size_t iy=0; iy < _dataPtr->yNum(); iy++) { 642 for (size_t ix=0; ix < _dataPtr->xNum(); ix++) { 643 double vx, vy, vz, vm; 644 vx = values[0]; 645 vy = values[1]; 646 vz = values[2]; 647 vm = sqrt(vx*vx + vy*vy + vz*vz); 648 destPtr[0] = vm / NanoVis::magMax; 649 destPtr[1] = vx /(2.0*NanoVis::magMax) + 0.5; 650 destPtr[2] = vy /(2.0*NanoVis::magMax) + 0.5; 651 destPtr[3] = vz /(2.0*NanoVis::magMax) + 0.5; 652 values += 3; 653 destPtr += 4; 654 } 655 } 656 } 657 return data; 658 } 659 660 Volume * 661 FlowCmd::MakeVolume(float *data) 662 { 663 if (_volIndex < 0) { 664 _volIndex = NanoVis::n_volumes; 665 } 666 Volume *volPtr; 667 volPtr = NanoVis::load_volume(_volIndex, _dataPtr->xNum(), 668 _dataPtr->yNum(), _dataPtr->zNum(), 4, data, 669 NanoVis::magMin, NanoVis::magMax, 0); 670 volPtr->xAxis.SetRange(_dataPtr->xMin(), _dataPtr->xMax()); 671 volPtr->yAxis.SetRange(_dataPtr->yMin(), _dataPtr->yMax()); 672 volPtr->zAxis.SetRange(_dataPtr->zMin(), _dataPtr->zMax()); 673 volPtr->wAxis.SetRange(NanoVis::magMin, NanoVis::magMax); 674 675 /*volPtr->update_pending = false;*/ 676 Vector3 physicalMin(NanoVis::xMin, NanoVis::yMin, NanoVis::zMin); 677 Vector3 physicalMax(NanoVis::xMax, NanoVis::yMax, NanoVis::zMax); 678 volPtr->setPhysicalBBox(physicalMin, physicalMax); 679 680 volPtr->set_n_slice(256 - _volIndex); 681 // volPtr->set_n_slice(512- _volIndex); 682 volPtr->disable_cutplane(0); 683 volPtr->disable_cutplane(1); 684 volPtr->disable_cutplane(2); 685 686 TransferFunction *tfPtr; 687 tfPtr = _sv.tfPtr; 688 if (tfPtr == NULL) { 689 tfPtr = NanoVis::get_transfunc("default"); 690 } 691 NanoVis::vol_renderer->add_volume(volPtr, tfPtr); 692 if (_sv.showVolume) { 693 volPtr->enable_data(); 694 } else { 695 volPtr->disable_data(); 696 } 697 if (_sv.showOutline) { 698 volPtr->enable_outline(); 699 } else { 700 volPtr->disable_outline(); 701 } 702 float dx0 = -0.5; 703 float dy0 = -0.5*volPtr->height/volPtr->width; 704 float dz0 = -0.5*volPtr->depth/volPtr->width; 705 volPtr->move(Vector3(dx0, dy0, dz0)); 706 return volPtr; 707 } 708 709 static int 710 FlowDataFileOp(ClientData clientData, Tcl_Interp *interp, int objc, 711 Tcl_Obj *const *objv) 712 { 713 Rappture::Outcome result; 714 715 const char *fileName; 716 fileName = Tcl_GetString(objv[3]); 717 Trace("Flow loading data from file %s\n", fileName); 718 719 int extents; 720 if (Tcl_GetIntFromObj(interp, objv[4], &extents) != TCL_OK) { 721 return TCL_ERROR; 722 } 723 if ((extents < 1) || (extents > 4)) { 724 Tcl_AppendResult(interp, "bad extents value \"", Tcl_GetString(objv[4]), 725 "\"", (char *)NULL); 726 return TCL_ERROR; 727 } 728 Rappture::Buffer buf; 729 if (!buf.load(result, fileName)) { 730 Tcl_AppendResult(interp, "can't load data from \"", fileName, "\": ", 731 result.remark(), (char *)NULL); 732 return TCL_ERROR; 733 } 734 735 FlowCmd *flowPtr = (FlowCmd *)clientData; 736 if (strncmp(buf.bytes(), "<DX>", 4) == 0) { 737 Rappture::Unirect3d *dataPtr; 738 739 dataPtr = new Rappture::Unirect3d(extents); 740 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(), 741 (char *)buf.bytes())) { 742 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 743 delete dataPtr; 744 return TCL_ERROR; 745 } 746 flowPtr->SetData(dataPtr); 747 } else if (strncmp(buf.bytes(), "<unirect3d>", 4) == 0) { 748 Rappture::Unirect3d *dataPtr; 749 Tcl_CmdInfo cmdInfo; 750 751 /* Set the clientdata field of the unirect3d command to contain 752 * the local data structure. */ 753 if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) { 754 return TCL_ERROR; 755 } 756 dataPtr = new Rappture::Unirect3d(extents); 757 cmdInfo.objClientData = (ClientData)dataPtr; 758 Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo); 759 if (Tcl_Eval(interp, (const char *)buf.bytes()) != TCL_OK) { 760 delete dataPtr; 761 return TCL_ERROR; 762 } 763 if (!dataPtr->isInitialized()) { 764 delete dataPtr; 765 return TCL_ERROR; 766 } 767 flowPtr->SetData(dataPtr); 768 } else { 769 Rappture::Unirect3d *dataPtr; 770 771 dataPtr = new Rappture::Unirect3d(extents); 772 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(), 773 (char *)buf.bytes())) { 774 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 775 delete dataPtr; 776 return TCL_ERROR; 777 } 778 flowPtr->SetData(dataPtr); 779 } 780 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 781 return TCL_OK; 782 } 783 784 /* 785 * $flow data follows nbytes extents 786 */ 787 static int 788 FlowDataFollowsOp(ClientData clientData, Tcl_Interp *interp, int objc, 789 Tcl_Obj *const *objv) 790 { 791 Rappture::Outcome result; 792 793 Trace("Flow Data Loading\n"); 794 795 int nBytes; 796 if (Tcl_GetIntFromObj(interp, objv[3], &nBytes) != TCL_OK) { 797 Trace("Bad nBytes \"%s\"\n", Tcl_GetString(objv[3])); 798 return TCL_ERROR; 799 } 800 if (nBytes <= 0) { 801 Tcl_AppendResult(interp, "bad # bytes request \"", 802 Tcl_GetString(objv[3]), "\" for \"data follows\"", (char *)NULL); 803 Trace("Bad nbytes %d\n", nBytes); 804 return TCL_ERROR; 805 } 806 int extents; 807 if (Tcl_GetIntFromObj(interp, objv[4], &extents) != TCL_OK) { 808 Trace("Bad extents \"%s\"\n", Tcl_GetString(objv[4])); 809 return TCL_ERROR; 810 } 811 if (extents <= 0) { 812 Tcl_AppendResult(interp, "bad extents request \"", 813 Tcl_GetString(objv[4]), "\" for \"data follows\"", (char *)NULL); 814 Trace("Bad extents %d\n", extents); 815 return TCL_ERROR; 816 } 817 Rappture::Buffer buf; 818 Trace("Flow Data Loading %d %d\n", nBytes, extents); 819 if (GetDataStream(interp, buf, nBytes) != TCL_OK) { 820 return TCL_ERROR; 821 } 822 FlowCmd *flowPtr = (FlowCmd *)clientData; 823 if ((buf.size() > 4) && (strncmp(buf.bytes(), "<DX>", 4) == 0)) { 824 Rappture::Unirect3d *dataPtr; 825 826 dataPtr = new Rappture::Unirect3d(extents); 827 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(), 828 (char *)buf.bytes())) { 829 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 830 delete dataPtr; 831 return TCL_ERROR; 832 } 833 flowPtr->SetData(dataPtr); 834 } else if ((buf.size() > 4) && 835 (strncmp(buf.bytes(), "<unirect3d>", 4) == 0)) { 836 Rappture::Unirect3d *dataPtr; 837 Tcl_CmdInfo cmdInfo; 838 839 /* Set the clientdata field of the unirect3d command to contain 840 * the local data structure. */ 841 dataPtr = new Rappture::Unirect3d(extents); 842 if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) { 843 return TCL_ERROR; 844 } 845 cmdInfo.objClientData = (ClientData)dataPtr; 846 Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo); 847 if (Tcl_Eval(interp, (const char *)buf.bytes()) != TCL_OK) { 848 delete dataPtr; 849 return TCL_ERROR; 850 } 851 if (!dataPtr->isInitialized()) { 852 delete dataPtr; 853 return TCL_ERROR; 854 } 855 flowPtr->SetData(dataPtr); 856 } else { 857 Tcl_AppendResult(interp, "unknown data header \"", /*buf.bytes(), "\"",*/ 858 (char *)NULL); 859 Rappture::Unirect3d *dataPtr; 860 861 dataPtr = new Rappture::Unirect3d(extents); 862 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(), 863 (char *)buf.bytes())) { 864 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 865 delete dataPtr; 866 return TCL_ERROR; 867 } 868 flowPtr->SetData(dataPtr); 869 } 870 { 871 char info[1024]; 872 ssize_t nWritten; 873 size_t length; 874 875 length = sprintf(info, "nv>data id 0 name %s min 0 max 1 vmin 0 vmax 1\n", 876 flowPtr->name()); 877 nWritten = write(0, info, length); 878 assert(nWritten == (ssize_t)strlen(info)); 879 } 880 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 881 return TCL_OK; 882 } 883 884 static Rappture::CmdSpec flowDataOps[] = { 885 {"file", 2, FlowDataFileOp, 5, 5, "fileName extents",}, 886 {"follows", 2, FlowDataFollowsOp, 5, 5, "size extents",}, 887 }; 888 static int nFlowDataOps = NumCmdSpecs(flowDataOps); 889 890 static int 891 FlowDataOp(ClientData clientData, Tcl_Interp *interp, int objc, 892 Tcl_Obj *const *objv) 893 { 894 Tcl_ObjCmdProc *proc; 895 896 proc = Rappture::GetOpFromObj(interp, nFlowDataOps, flowDataOps, 897 Rappture::CMDSPEC_ARG2, objc, objv, 0); 898 if (proc == NULL) { 899 return TCL_ERROR; 900 } 901 return (*proc) (clientData, interp, objc, objv); 902 } 903 904 float 905 FlowCmd::GetRelativePosition(FlowPosition *posPtr) 906 { 907 if (posPtr->flags == RELPOS) { 908 return posPtr->value; 909 } 910 switch (posPtr->axis) { 911 case AXIS_X: 912 return (posPtr->value - NanoVis::xMin) / 913 (NanoVis::xMax - NanoVis::xMin); 914 case AXIS_Y: 915 return (posPtr->value - NanoVis::yMin) / 916 (NanoVis::yMax - NanoVis::yMin); 917 case AXIS_Z: 918 return (posPtr->value - NanoVis::zMin) / 919 (NanoVis::zMax - NanoVis::zMin); 920 } 921 return 0.0; 922 } 923 924 float 925 FlowCmd::GetRelativePosition(void) 926 { 927 return FlowCmd::GetRelativePosition(&_sv.slicePos); 928 } 929 930 /* Static NanoVis class commands. */ 931 932 void 933 NanoVis::InitFlows(void) 934 { 935 Tcl_InitHashTable(&flowTable, TCL_STRING_KEYS); 936 } 937 938 FlowCmd * 939 NanoVis::FirstFlow(FlowIterator *iterPtr) 940 { 941 iterPtr->hashPtr = Tcl_FirstHashEntry(&flowTable, &iterPtr->hashSearch); 942 if (iterPtr->hashPtr == NULL) { 943 return NULL; 944 } 378 945 return (FlowCmd *)Tcl_GetHashValue(iterPtr->hashPtr); 379 946 } 380 947 948 FlowCmd * 949 NanoVis::NextFlow(FlowIterator *iterPtr) 950 { 951 if (iterPtr->hashPtr == NULL) { 952 return NULL; 953 } 954 iterPtr->hashPtr = Tcl_NextHashEntry(&iterPtr->hashSearch); 955 if (iterPtr->hashPtr == NULL) { 956 return NULL; 957 } 958 return (FlowCmd *)Tcl_GetHashValue(iterPtr->hashPtr); 959 } 381 960 382 961 int 383 FlowCmd::GetFlow(Tcl_Interp *interp, Tcl_Obj *objPtr, FlowCmd **flowPtrPtr)962 NanoVis::GetFlow(Tcl_Interp *interp, Tcl_Obj *objPtr, FlowCmd **flowPtrPtr) 384 963 { 385 964 Tcl_HashEntry *hPtr; 386 hPtr = Tcl_FindHashEntry(& _flowTable, Tcl_GetString(objPtr));965 hPtr = Tcl_FindHashEntry(&flowTable, Tcl_GetString(objPtr)); 387 966 if (hPtr == NULL) { 388 967 if (interp != NULL) { … … 397 976 398 977 int 399 FlowCmd::CreateFlow(Tcl_Interp *interp, Tcl_Obj *objPtr)978 NanoVis::CreateFlow(Tcl_Interp *interp, Tcl_Obj *objPtr) 400 979 { 401 980 Tcl_HashEntry *hPtr; … … 403 982 const char *name; 404 983 name = Tcl_GetString(objPtr); 405 hPtr = Tcl_CreateHashEntry(& _flowTable, name, &isNew);984 hPtr = Tcl_CreateHashEntry(&flowTable, name, &isNew); 406 985 if (!isNew) { 407 986 Tcl_AppendResult(interp, "flow \"", name, "\" already exists.", … … 416 995 } 417 996 FlowCmd *flowPtr; 418 name = Tcl_GetHashKey(& _flowTable, hPtr);997 name = Tcl_GetHashKey(&flowTable, hPtr); 419 998 flowPtr = new FlowCmd(interp, name, hPtr); 420 999 if (flowPtr == NULL) { … … 424 1003 } 425 1004 Tcl_SetHashValue(hPtr, flowPtr); 426 EventuallyRedraw(MAP_ PENDING);1005 EventuallyRedraw(MAP_FLOWS); 427 1006 return TCL_OK; 428 1007 } 429 1008 430 1009 void 431 FlowCmd::DeleteFlows(Tcl_Interp *interp)1010 NanoVis::DeleteFlows(Tcl_Interp *interp) 432 1011 { 433 1012 FlowCmd *flowPtr; … … 438 1017 Tcl_DeleteCommand(interp, flowPtr->name()); 439 1018 } 440 Tcl_DeleteHashTable(& _flowTable);1019 Tcl_DeleteHashTable(&flowTable); 441 1020 } 442 1021 443 1022 bool 444 FlowCmd::MapFlows(void) 445 { 446 flags &= ~FlowCmd::MAP_PENDING; 447 448 _xMin = _yMin = _zMin = _wMin = _magMin = FLT_MAX; 449 _xMax = _yMax = _zMax = _wMax = _magMax = -FLT_MAX; 1023 NanoVis::MapFlows(void) 1024 { 1025 flags &= ~MAP_FLOWS; 1026 450 1027 451 1028 /* … … 462 1039 } 463 1040 flowPtr->GetMagRange(minMag, maxMag); 464 if (minMag < _magMin) {465 _magMin = minMag;1041 if (minMag < NanoVis::magMin) { 1042 NanoVis::magMin = minMag; 466 1043 } 467 if (maxMag > _magMax) {468 _magMax = maxMag;1044 if (maxMag > NanoVis::magMax) { 1045 NanoVis::magMax = maxMag; 469 1046 } 470 1047 Rappture::Unirect3d *dataPtr; 471 1048 dataPtr = flowPtr->GetData(); 472 if (dataPtr->xMin() < _xMin) {473 _xMin = dataPtr->xMin();474 } 475 if (dataPtr->yMin() < _yMin) {476 _yMin = dataPtr->yMin();477 } 478 if (dataPtr->zMin() < _zMin) {479 _zMin = dataPtr->zMin();480 } 481 if (dataPtr->xMax() > _xMax) {482 _xMax = dataPtr->xMax();483 } 484 if (dataPtr->yMax() > _yMax) {485 _yMax = dataPtr->yMax();486 } 487 if (dataPtr->zMax() > _zMax) {488 _zMax = dataPtr->zMax();1049 if (dataPtr->xMin() < NanoVis::xMin) { 1050 NanoVis::xMin = dataPtr->xMin(); 1051 } 1052 if (dataPtr->yMin() < NanoVis::yMin) { 1053 NanoVis::yMin = dataPtr->yMin(); 1054 } 1055 if (dataPtr->zMin() < NanoVis::zMin) { 1056 NanoVis::zMin = dataPtr->zMin(); 1057 } 1058 if (dataPtr->xMax() > NanoVis::xMax) { 1059 NanoVis::xMax = dataPtr->xMax(); 1060 } 1061 if (dataPtr->yMax() > NanoVis::yMax) { 1062 NanoVis::yMax = dataPtr->yMax(); 1063 } 1064 if (dataPtr->zMax() > NanoVis::zMax) { 1065 NanoVis::zMax = dataPtr->zMax(); 489 1066 } 490 1067 } … … 503 1080 continue; 504 1081 } 1082 flowPtr->InitializeParticles(); 505 1083 if (!flowPtr->ScaleVectorField()) { 506 1084 return false; 507 1085 } 508 flowPtr->InitializeParticles(); 509 NanoVis::licRenderer->set_offset(flowPtr->GetPosition()); 1086 NanoVis::licRenderer->set_offset(flowPtr->GetRelativePosition()); 510 1087 } 511 1088 return true; … … 513 1090 514 1091 void 515 FlowCmd::RenderFlows(void) 516 { 517 if (!NanoVis::licRenderer->isActivated()) { 518 NanoVis::licRenderer->activate(); 519 } 1092 NanoVis::RenderFlows(void) 1093 { 1094 #ifdef notdef 1095 if (!licRenderer->active()) { 1096 licRenderer->active(true); 1097 } 1098 #endif 520 1099 FlowCmd *flowPtr; 521 1100 FlowIterator iter; … … 526 1105 } 527 1106 } 528 flags &= ~ FlowCmd::REDRAW_PENDING;1107 flags &= ~REDRAW_PENDING; 529 1108 } 530 1109 531 1110 void 532 FlowCmd::ResetFlows(void)533 { 534 if (!NanoVis::licRenderer->isActivated()) { 535 NanoVis::licRenderer->activate(); 536 } 537 /*NanoVis::licRenderer->convolve();*/538 1111 NanoVis::ResetFlows(void) 1112 { 1113 #ifdef notdef 1114 if (!licRenderer->active()) { 1115 licRenderer->active(true); 1116 } 1117 #endif 539 1118 FlowCmd *flowPtr; 540 1119 FlowIterator iter; … … 548 1127 549 1128 void 550 FlowCmd::AdvectFlows(void)551 { 552 if (!NanoVis::licRenderer->isActivated()) { 553 NanoVis::licRenderer->activate(); 554 } 555 /*NanoVis::licRenderer->convolve();*/556 1129 NanoVis::AdvectFlows(void) 1130 { 1131 #ifdef notdef 1132 if (!licRenderer->active()) { 1133 licRenderer->active(true); 1134 } 1135 #endif 557 1136 FlowCmd *flowPtr; 558 1137 FlowIterator iter; … … 564 1143 } 565 1144 } 566 567 568 #ifdef notdef569 int570 FlowCmd::InitVectorField(Tcl_Interp *interp)571 {572 if (NanoVis::flowVisRenderer == NULL) {573 Tcl_AppendResult(interp, "flowvis renderer is NULL", (char *)NULL);574 return TCL_ERROR;575 }576 if (NanoVis::licRenderer == NULL) {577 Tcl_AppendResult(interp, "LIC renderer is NULL", (char *)NULL);578 return TCL_ERROR;579 }580 _fieldPtr->setVectorField(_volPtr->id, *(_volPtr->get_location()),581 1.0f, _volPtr->height / (float)_volPtr->width,582 _volPtr->depth / (float)_volPtr->width,583 _volPtr->wAxis.max());584 585 NanoVis::initParticle();586 NanoVis::licRenderer->setVectorField(587 _volPtr->id, /* Texture ID */588 *(_volPtr->get_location()), /* Origin */589 1.0f / volPtr->aspect_ratio_width, /* X-axis scale. */590 1.0f / volPtr->aspect_ratio_height, /* Y-axis scale. */591 1.0f / volPtr->aspect_ratio_depth, /* Z-axis scale. */592 volPtr->wAxis.max()); /* Maximum ???? */593 594 NanoVis::licRenderer->set_offset(NanoVis::lic_slice_z);595 return TCL_OK;596 }597 #endif598 599 int600 FlowCmd::CreateParticles(Tcl_Interp *interp, Tcl_Obj *objPtr)601 {602 Tcl_HashEntry *hPtr;603 int isNew;604 const char *particlesName = Tcl_GetString(objPtr);605 hPtr = Tcl_CreateHashEntry(&_particlesTable, particlesName, &isNew);606 if (!isNew) {607 Tcl_AppendResult(interp, "particle injection plane \"",608 particlesName, "\" already exists.", (char *)NULL);609 return TCL_ERROR;610 }611 particlesName = Tcl_GetHashKey(&_particlesTable, hPtr);612 FlowParticles *particlesPtr;613 particlesPtr = new FlowParticles(particlesName, hPtr);614 if (particlesPtr == NULL) {615 Tcl_AppendResult(interp, "can't allocate particle injection plane",616 (char *)NULL);617 Tcl_DeleteHashEntry(hPtr);618 return TCL_ERROR;619 }620 Tcl_SetHashValue(hPtr, particlesPtr);621 return TCL_OK;622 }623 624 int625 FlowCmd::GetParticles(Tcl_Interp *interp, Tcl_Obj *objPtr,626 FlowParticles **particlesPtrPtr)627 {628 Tcl_HashEntry *hPtr;629 hPtr = Tcl_FindHashEntry(&_particlesTable, Tcl_GetString(objPtr));630 if (hPtr == NULL) {631 if (interp != NULL) {632 Tcl_AppendResult(interp, "can't find a particle injection plane \"",633 Tcl_GetString(objPtr), "\"", (char *)NULL);634 }635 return TCL_ERROR;636 }637 *particlesPtrPtr = (FlowParticles *)Tcl_GetHashValue(hPtr);638 return TCL_OK;639 }640 641 FlowParticles *642 FlowCmd::FirstParticles(FlowParticlesIterator *iterPtr)643 {644 iterPtr->hashPtr = Tcl_FirstHashEntry(&_particlesTable,645 &iterPtr->hashSearch);646 if (iterPtr->hashPtr == NULL) {647 return NULL;648 }649 return (FlowParticles *)Tcl_GetHashValue(iterPtr->hashPtr);650 }651 652 FlowParticles *653 FlowCmd::NextParticles(FlowParticlesIterator *iterPtr)654 {655 if (iterPtr->hashPtr == NULL) {656 return NULL;657 }658 iterPtr->hashPtr = Tcl_NextHashEntry(&iterPtr->hashSearch);659 if (iterPtr->hashPtr == NULL) {660 return NULL;661 }662 return (FlowParticles *)Tcl_GetHashValue(iterPtr->hashPtr);663 }664 665 int666 FlowCmd::CreateBox(Tcl_Interp *interp, Tcl_Obj *objPtr)667 {668 Tcl_HashEntry *hPtr;669 int isNew;670 hPtr = Tcl_CreateHashEntry(&_boxTable, Tcl_GetString(objPtr), &isNew);671 if (!isNew) {672 Tcl_AppendResult(interp, "box \"", Tcl_GetString(objPtr),673 "\" already exists in flow \"", name(), "\"", (char *)NULL);674 return TCL_ERROR;675 }676 const char *boxName;677 boxName = Tcl_GetHashKey(&_boxTable, hPtr);678 FlowBox *boxPtr;679 boxPtr = new FlowBox(boxName, hPtr);680 if (boxPtr == NULL) {681 Tcl_AppendResult(interp, "can't allocate box \"", boxName, "\"",682 (char *)NULL);683 Tcl_DeleteHashEntry(hPtr);684 return TCL_ERROR;685 }686 Tcl_SetHashValue(hPtr, boxPtr);687 return TCL_OK;688 }689 690 int691 FlowCmd::GetBox(Tcl_Interp *interp, Tcl_Obj *objPtr, FlowBox **boxPtrPtr)692 {693 Tcl_HashEntry *hPtr;694 hPtr = Tcl_FindHashEntry(&_boxTable, Tcl_GetString(objPtr));695 if (hPtr == NULL) {696 if (interp != NULL) {697 Tcl_AppendResult(interp, "can't find a box \"",698 Tcl_GetString(objPtr), "\" in flow \"", name(), "\"",699 (char *)NULL);700 }701 return TCL_ERROR;702 }703 *boxPtrPtr = (FlowBox *)Tcl_GetHashValue(hPtr);704 return TCL_OK;705 }706 707 FlowBox *708 FlowCmd::FirstBox(FlowBoxIterator *iterPtr)709 {710 iterPtr->hashPtr = Tcl_FirstHashEntry(&_boxTable, &iterPtr->hashSearch);711 if (iterPtr->hashPtr == NULL) {712 return NULL;713 }714 return (FlowBox *)Tcl_GetHashValue(iterPtr->hashPtr);715 }716 717 FlowBox *718 FlowCmd::NextBox(FlowBoxIterator *iterPtr)719 {720 if (iterPtr->hashPtr == NULL) {721 return NULL;722 }723 iterPtr->hashPtr = Tcl_NextHashEntry(&iterPtr->hashSearch);724 if (iterPtr->hashPtr == NULL) {725 return NULL;726 }727 return (FlowBox *)Tcl_GetHashValue(iterPtr->hashPtr);728 }729 730 void731 FlowCmd::GetMagRange(double &min_mag, double &max_mag)732 {733 const float *values = _dataPtr->values();734 size_t nValues = _dataPtr->nValues();735 max_mag = -1e21, min_mag = 1e21;736 for (size_t i = 0; i < nValues; i += 3) {737 double vx, vy, vz, vm;738 739 vx = values[i];740 vy = values[i+1];741 vz = values[i+2];742 743 vm = sqrt(vx*vx + vy*vy + vz*vz);744 if (vm > max_mag) {745 max_mag = vm;746 }747 if (vm < min_mag) {748 min_mag = vm;749 }750 }751 }752 753 754 void755 FlowCmd::InitVectorField(void)756 {757 if (_volPtr != NULL) {758 delete _volPtr;759 _volPtr = NULL;760 NanoVis::volume[_volIndex] = NULL;761 NanoVis::vol_renderer->remove_volume(_volIndex);762 }763 // Remove the associated vector field.764 if (_fieldPtr != NULL) {765 delete _fieldPtr;766 _fieldPtr = NULL;767 }768 769 }770 771 void772 FlowCmd::InitializeParticles(void)773 {774 FlowParticles *particlesPtr;775 FlowParticlesIterator iter;776 for (particlesPtr = FirstParticles(&iter); particlesPtr != NULL;777 particlesPtr = NextParticles(&iter)) {778 particlesPtr->Initialize();779 }780 }781 782 bool783 FlowCmd::ScaleVectorField()784 {785 if (_volPtr != NULL) {786 delete _volPtr;787 _volPtr = NULL;788 NanoVis::volume[_volIndex] = NULL;789 NanoVis::vol_renderer->remove_volume(_volIndex);790 }791 float *vdata;792 vdata = GetScaledVector();793 if (vdata == NULL) {794 return false;795 }796 Volume *volPtr;797 volPtr = MakeVolume(vdata);798 delete [] vdata;799 if (volPtr == NULL) {800 return false;801 }802 _volPtr = volPtr;803 804 _fieldPtr = new NvVectorField();805 if (_fieldPtr == NULL) {806 return false;807 }808 809 double width, height, depth;810 width = _xMax - _xMin;811 height = _yMax - _yMin;812 depth = _zMax - _zMin;813 814 Vector3 *locationPtr = _volPtr->get_location();815 /*This is wrong. Need to compute origin. */816 _xOrigin = locationPtr->x;817 _yOrigin = locationPtr->y;818 _zOrigin = locationPtr->z;819 820 _fieldPtr->setVectorField(_volPtr, *locationPtr,821 1.0f, height / width, depth / width, _magMax);822 823 if (NanoVis::licRenderer != NULL) {824 NanoVis::licRenderer->setVectorField(_volPtr->id,825 *locationPtr,826 1.0f / _volPtr->aspect_ratio_width,827 1.0f / _volPtr->aspect_ratio_height,828 1.0f / _volPtr->aspect_ratio_depth,829 _volPtr->wAxis.max());830 SetCurrentPosition();831 SetAxis();832 }833 FlowParticles *particlesPtr;834 FlowParticlesIterator partIter;835 for (particlesPtr = FirstParticles(&partIter); particlesPtr != NULL;836 particlesPtr = NextParticles(&partIter)) {837 particlesPtr->SetVectorField(_volPtr);838 }839 return true;840 }841 842 void843 FlowCmd::RenderBoxes(void)844 {845 FlowBoxIterator iter;846 FlowBox *boxPtr;847 for (boxPtr = FirstBox(&iter); boxPtr != NULL; boxPtr = NextBox(&iter)) {848 if (boxPtr->visible()) {849 boxPtr->Render(_volPtr);850 }851 }852 }853 854 float *855 FlowCmd::GetScaledVector(void)856 {857 assert(_dataPtr->nComponents() == 3);858 size_t n = _dataPtr->nValues() / _dataPtr->nComponents() * 4;859 float *data = new float[n];860 if (data == NULL) {861 return NULL;862 }863 memset(data, 0, sizeof(float) * n);864 float *destPtr = data;865 const float *values = _dataPtr->values();866 for (size_t iz=0; iz < _dataPtr->zNum(); iz++) {867 for (size_t iy=0; iy < _dataPtr->yNum(); iy++) {868 for (size_t ix=0; ix < _dataPtr->xNum(); ix++) {869 double vx, vy, vz, vm;870 vx = values[0];871 vy = values[1];872 vz = values[2];873 vm = sqrt(vx*vx + vy*vy + vz*vz);874 destPtr[0] = vm / _magMax;875 destPtr[1] = vx /(2.0*_magMax) + 0.5;876 destPtr[2] = vy /(2.0*_magMax) + 0.5;877 destPtr[3] = vz /(2.0*_magMax) + 0.5;878 values += 3;879 destPtr += 4;880 }881 }882 }883 return data;884 }885 886 Volume *887 FlowCmd::MakeVolume(float *data)888 {889 if (_volIndex < 0) {890 _volIndex = NanoVis::n_volumes;891 }892 Volume *volPtr;893 volPtr = NanoVis::load_volume(_volIndex, _dataPtr->xNum(),894 _dataPtr->yNum(), _dataPtr->zNum(), 4, data, _magMin, _magMax, 0);895 volPtr->xAxis.SetRange(_dataPtr->xMin(), _dataPtr->xMax());896 volPtr->yAxis.SetRange(_dataPtr->yMin(), _dataPtr->yMax());897 volPtr->zAxis.SetRange(_dataPtr->zMin(), _dataPtr->zMax());898 volPtr->wAxis.SetRange(_magMin, _magMax);899 900 /*volPtr->update_pending = false;*/901 Vector3 physicalMin(_xMin, _yMin, _zMin);902 Vector3 physicalMax(_xMax, _yMax, _zMax);903 volPtr->setPhysicalBBox(physicalMin, physicalMax);904 905 volPtr->set_n_slice(256 - _volIndex);906 // volPtr->set_n_slice(512- _volIndex);907 volPtr->disable_cutplane(0);908 volPtr->disable_cutplane(1);909 volPtr->disable_cutplane(2);910 911 TransferFunction *tfPtr;912 tfPtr = _sv.tfPtr;913 if (tfPtr == NULL) {914 tfPtr = NanoVis::get_transfunc("default");915 }916 NanoVis::vol_renderer->add_volume(volPtr, tfPtr);917 if (_sv.showVolume) {918 volPtr->enable_data();919 } else {920 volPtr->disable_data();921 }922 if (_sv.showOutline) {923 volPtr->enable_outline();924 } else {925 volPtr->disable_outline();926 }927 float dx0 = -0.5;928 float dy0 = -0.5*volPtr->height/volPtr->width;929 float dz0 = -0.5*volPtr->depth/volPtr->width;930 volPtr->move(Vector3(dx0, dy0, dz0));931 return volPtr;932 }933 934 static int935 FlowDataFileOp(ClientData clientData, Tcl_Interp *interp, int objc,936 Tcl_Obj *const *objv)937 {938 Rappture::Outcome result;939 940 const char *fileName;941 fileName = Tcl_GetString(objv[3]);942 Trace("Flow loading data from file %s\n", fileName);943 944 int extents;945 if (Tcl_GetIntFromObj(interp, objv[4], &extents) != TCL_OK) {946 return TCL_ERROR;947 }948 if ((extents < 1) || (extents > 4)) {949 Tcl_AppendResult(interp, "bad extents value \"", Tcl_GetString(objv[4]),950 "\"", (char *)NULL);951 return TCL_ERROR;952 }953 Rappture::Buffer buf;954 if (!buf.load(result, fileName)) {955 Tcl_AppendResult(interp, "can't load data from \"", fileName, "\": ",956 result.remark(), (char *)NULL);957 return TCL_ERROR;958 }959 960 FlowCmd *flowPtr = (FlowCmd *)clientData;961 if (strncmp(buf.bytes(), "<DX>", 4) == 0) {962 Rappture::Unirect3d *dataPtr;963 964 dataPtr = new Rappture::Unirect3d(extents);965 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(),966 (char *)buf.bytes())) {967 Tcl_AppendResult(interp, result.remark(), (char *)NULL);968 delete dataPtr;969 return TCL_ERROR;970 }971 flowPtr->SetData(dataPtr);972 } else if (strncmp(buf.bytes(), "<unirect3d>", 4) == 0) {973 Rappture::Unirect3d *dataPtr;974 Tcl_CmdInfo cmdInfo;975 976 /* Set the clientdata field of the unirect3d command to contain977 * the local data structure. */978 if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) {979 return TCL_ERROR;980 }981 dataPtr = new Rappture::Unirect3d(extents);982 cmdInfo.objClientData = (ClientData)dataPtr;983 Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo);984 if (Tcl_Eval(interp, (const char *)buf.bytes()) != TCL_OK) {985 delete dataPtr;986 return TCL_ERROR;987 }988 if (!dataPtr->isInitialized()) {989 delete dataPtr;990 return TCL_ERROR;991 }992 flowPtr->SetData(dataPtr);993 } else {994 Rappture::Unirect3d *dataPtr;995 996 dataPtr = new Rappture::Unirect3d(extents);997 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(),998 (char *)buf.bytes())) {999 Tcl_AppendResult(interp, result.remark(), (char *)NULL);1000 delete dataPtr;1001 return TCL_ERROR;1002 }1003 flowPtr->SetData(dataPtr);1004 }1005 FlowCmd::EventuallyRedraw(FlowCmd::MAP_PENDING);1006 return TCL_OK;1007 }1008 1009 static int1010 FlowDataFollowsOp(ClientData clientData, Tcl_Interp *interp, int objc,1011 Tcl_Obj *const *objv)1012 {1013 Rappture::Outcome result;1014 1015 Trace("Flow Data Loading\n");1016 1017 int nBytes;1018 if (Tcl_GetIntFromObj(interp, objv[3], &nBytes) != TCL_OK) {1019 return TCL_ERROR;1020 }1021 if (nBytes <= 0) {1022 Tcl_AppendResult(interp, "bad # bytes request \"",1023 Tcl_GetString(objv[3]), "\" for \"data follows\"", (char *)NULL);1024 return TCL_ERROR;1025 }1026 int extents;1027 if (Tcl_GetIntFromObj(interp, objv[4], &extents) != TCL_OK) {1028 return TCL_ERROR;1029 }1030 Rappture::Buffer buf;1031 if (GetDataStream(interp, buf, nBytes) != TCL_OK) {1032 return TCL_ERROR;1033 }1034 FlowCmd *flowPtr = (FlowCmd *)clientData;1035 if ((buf.size() > 4) && (strncmp(buf.bytes(), "<DX>", 4) == 0)) {1036 Rappture::Unirect3d *dataPtr;1037 1038 dataPtr = new Rappture::Unirect3d(extents);1039 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(),1040 (char *)buf.bytes())) {1041 Tcl_AppendResult(interp, result.remark(), (char *)NULL);1042 delete dataPtr;1043 return TCL_ERROR;1044 }1045 flowPtr->SetData(dataPtr);1046 } else if ((buf.size() > 4) &&1047 (strncmp(buf.bytes(), "<unirect3d>", 4) == 0)) {1048 Rappture::Unirect3d *dataPtr;1049 Tcl_CmdInfo cmdInfo;1050 1051 /* Set the clientdata field of the unirect3d command to contain1052 * the local data structure. */1053 dataPtr = new Rappture::Unirect3d(extents);1054 if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) {1055 return TCL_ERROR;1056 }1057 cmdInfo.objClientData = (ClientData)dataPtr;1058 Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo);1059 if (Tcl_Eval(interp, (const char *)buf.bytes()) != TCL_OK) {1060 delete dataPtr;1061 return TCL_ERROR;1062 }1063 if (!dataPtr->isInitialized()) {1064 delete dataPtr;1065 return TCL_ERROR;1066 }1067 flowPtr->SetData(dataPtr);1068 } else {1069 Tcl_AppendResult(interp, "unknown data header \"", /*buf.bytes(), "\"",*/1070 (char *)NULL);1071 Rappture::Unirect3d *dataPtr;1072 1073 dataPtr = new Rappture::Unirect3d(extents);1074 if (!dataPtr->ReadVectorDataFromDx(result, buf.size(),1075 (char *)buf.bytes())) {1076 Tcl_AppendResult(interp, result.remark(), (char *)NULL);1077 delete dataPtr;1078 return TCL_ERROR;1079 }1080 flowPtr->SetData(dataPtr);1081 }1082 FlowCmd::EventuallyRedraw(FlowCmd::MAP_PENDING);1083 return TCL_OK;1084 }1085 1086 static Rappture::CmdSpec flowDataOps[] = {1087 {"file", 2, FlowDataFileOp, 5, 5, "fileName extents",},1088 {"follows", 2, FlowDataFollowsOp, 5, 5, "size extents",},1089 };1090 static int nFlowDataOps = NumCmdSpecs(flowDataOps);1091 1092 static int1093 FlowDataOp(ClientData clientData, Tcl_Interp *interp, int objc,1094 Tcl_Obj *const *objv)1095 {1096 Tcl_ObjCmdProc *proc;1097 1098 proc = Rappture::GetOpFromObj(interp, nFlowDataOps, flowDataOps,1099 Rappture::CMDSPEC_ARG2, objc, objv, 0);1100 if (proc == NULL) {1101 return TCL_ERROR;1102 }1103 return (*proc) (clientData, interp, objc, objv);1104 }1105 1106 1107 static int1108 FlowVectorIdOp(ClientData clientData, Tcl_Interp *interp, int objc,1109 Tcl_Obj *const *objv)1110 {1111 #ifdef notdef1112 Volume *volPtr;1113 if (GetVolumeFromObj(interp, objv[2], &volPtr) != TCL_OK) {1114 return TCL_ERROR;1115 }1116 if (NanoVis::flowVisRenderer != NULL) {1117 NanoVis::flowVisRenderer->setVectorField(volPtr->id,1118 *(volPtr->get_location()),1119 1.0f,1120 volPtr->height / (float)volPtr->width,1121 volPtr->depth / (float)volPtr->width,1122 volPtr->wAxis.max());1123 NanoVis::initParticle();1124 }1125 if (NanoVis::licRenderer != NULL) {1126 NanoVis::licRenderer->setVectorField(volPtr->id,1127 *(volPtr->get_location()),1128 1.0f / volPtr->aspect_ratio_width,1129 1.0f / volPtr->aspect_ratio_height,1130 1.0f / volPtr->aspect_ratio_depth,1131 volPtr->wAxis.max());1132 NanoVis::licRenderer->set_offset(NanoVis::lic_slice_z);1133 }1134 #endif1135 return TCL_OK;1136 }1137 1145 1138 1146 /* … … 1335 1343 } 1336 1344 posPtr->value = value; 1337 fprintf(stderr, "got absolute value %s\n", string);1338 1345 posPtr->flags = ABSPOS; 1339 1346 } else { … … 1397 1404 return TCL_ERROR; 1398 1405 } 1399 FlowCmd::EventuallyRedraw();1406 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 1400 1407 return TCL_OK; 1401 1408 } … … 1419 1426 } 1420 1427 particlesPtr->Configure(); 1421 FlowCmd::EventuallyRedraw(FlowCmd::MAP_PENDING);1428 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 1422 1429 Tcl_SetObjResult(interp, objv[3]); 1423 1430 return TCL_OK; … … 1438 1445 } 1439 1446 particlesPtr->Configure(); 1440 FlowCmd::EventuallyRedraw();1447 NanoVis::EventuallyRedraw(); 1441 1448 return TCL_OK; 1442 1449 } … … 1455 1462 } 1456 1463 } 1457 FlowCmd::EventuallyRedraw(FlowCmd::MAP_PENDING);1464 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 1458 1465 return TCL_OK; 1459 1466 } … … 1540 1547 return TCL_ERROR; 1541 1548 } 1542 FlowCmd::EventuallyRedraw();1549 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 1543 1550 Tcl_SetObjResult(interp, objv[3]); 1544 1551 return TCL_OK; … … 1558 1565 } 1559 1566 } 1560 FlowCmd::EventuallyRedraw();1567 NanoVis::EventuallyRedraw(); 1561 1568 return TCL_OK; 1562 1569 } … … 1595 1602 return TCL_ERROR; 1596 1603 } 1597 FlowCmd::EventuallyRedraw();1604 NanoVis::EventuallyRedraw(); 1598 1605 return TCL_OK; 1599 1606 } … … 1717 1724 Tcl_Obj *const *objv) 1718 1725 { 1719 if ( FlowCmd::CreateFlow(interp, objv[2]) != TCL_OK) {1726 if (NanoVis::CreateFlow(interp, objv[2]) != TCL_OK) { 1720 1727 return TCL_ERROR; 1721 1728 } 1722 1729 FlowCmd *flowPtr; 1723 if ( FlowCmd::GetFlow(interp, objv[2], &flowPtr) != TCL_OK) {1730 if (NanoVis::GetFlow(interp, objv[2], &flowPtr) != TCL_OK) { 1724 1731 return TCL_ERROR; 1725 1732 } … … 1729 1736 } 1730 1737 Tcl_SetObjResult(interp, objv[2]); 1731 FlowCmd::EventuallyRedraw();1738 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 1732 1739 return TCL_OK; 1733 1740 } … … 1750 1757 FlowCmd *flowPtr; 1751 1758 1752 if ( FlowCmd::GetFlow(interp, objv[i], &flowPtr) != TCL_OK) {1759 if (NanoVis::GetFlow(interp, objv[i], &flowPtr) != TCL_OK) { 1753 1760 return TCL_ERROR; 1754 1761 } 1755 1762 Tcl_DeleteCommand(interp, flowPtr->name()); 1756 1763 } 1757 FlowCmd::EventuallyRedraw(FlowCmd::MAP_PENDING); 1764 NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS); 1765 return TCL_OK; 1766 } 1767 1768 /* 1769 *--------------------------------------------------------------------------- 1770 * 1771 * FlowExistsOp -- 1772 * 1773 *--------------------------------------------------------------------------- 1774 */ 1775 /*ARGSUSED*/ 1776 static int 1777 FlowExistsOp(ClientData clientData, Tcl_Interp *interp, int objc, 1778 Tcl_Obj *const *objv) 1779 { 1780 bool value; 1781 FlowCmd *flowPtr; 1782 1783 value = false; 1784 if (NanoVis::GetFlow(NULL, objv[2], &flowPtr) == TCL_OK) { 1785 value = true; 1786 } 1787 Tcl_SetBooleanObj(Tcl_GetObjResult(interp), (int)value); 1758 1788 return TCL_OK; 1759 1789 } … … 1775 1805 FlowCmd *flowPtr; 1776 1806 FlowIterator iter; 1777 for (flowPtr = FlowCmd::FirstFlow(&iter); flowPtr != NULL;1778 flowPtr = FlowCmd::NextFlow(&iter)) {1807 for (flowPtr = NanoVis::FirstFlow(&iter); flowPtr != NULL; 1808 flowPtr = NanoVis::NextFlow(&iter)) { 1779 1809 Tcl_Obj *objPtr; 1780 1810 … … 1791 1821 { 1792 1822 assert(NanoVis::licRenderer != NULL); 1793 if (!NanoVis::licRenderer->isActivated()) { 1794 NanoVis::licRenderer->activate();1795 }1796 Trace("sending flow playback frame\n");1797 // Generate the latest frame and send it back to the client 1798 if ( FlowCmd::flags & FlowCmd::MAP_PENDING) {1799 FlowCmd::MapFlows();1800 } 1801 FlowCmd::EventuallyRedraw();1823 #ifdef notdef 1824 if (!NanoVis::licRenderer->active()) { 1825 NanoVis::licRenderer->active(true); 1826 } 1827 #endif 1828 if (NanoVis::flags & NanoVis::MAP_FLOWS) { 1829 NanoVis::MapFlows(); 1830 } 1831 NanoVis::EventuallyRedraw(); 1802 1832 NanoVis::licRenderer->convolve(); 1803 FlowCmd::AdvectFlows(); 1804 NanoVis::offscreen_buffer_capture(); //enable offscreen render 1805 NanoVis::display(); 1806 NanoVis::read_screen(); 1807 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 1808 static int frame_count = 0; 1809 NanoVis::bmp_write_to_file(++frame_count, "."); 1810 Trace("FLOW end\n"); 1833 NanoVis::AdvectFlows(); 1811 1834 return TCL_OK; 1812 1835 } … … 1816 1839 Tcl_Obj *const *objv) 1817 1840 { 1818 FlowCmd::ResetFlows();1841 NanoVis::ResetFlows(); 1819 1842 NanoVis::licRenderer->reset(); 1820 1843 return TCL_OK; … … 1859 1882 return TCL_ERROR; 1860 1883 } 1861 NanoVis::licRenderer->activate(); 1862 NanoVis:: flowVisRenderer->activate();1863 1884 #ifdef notdef 1885 NanoVis::licRenderer->active(true); 1886 #endif 1864 1887 // Save the old dimensions of the offscreen buffer. 1865 1888 int oldWidth, oldHeight; … … 1890 1913 // Generate the latest frame and send it back to the client 1891 1914 NanoVis::licRenderer->convolve(); 1892 FlowCmd::AdvectFlows();1893 FlowCmd::RenderFlows();1915 NanoVis::AdvectFlows(); 1916 NanoVis::RenderFlows(); 1894 1917 NanoVis::offscreen_buffer_capture(); //enable offscreen render 1895 1918 NanoVis::display(); … … 1907 1930 Trace("FLOW end\n"); 1908 1931 1932 #ifdef notdef 1909 1933 if (NanoVis::licRenderer) { 1910 NanoVis::licRenderer->deactivate(); 1911 } 1912 if (NanoVis::flowVisRenderer) { 1913 NanoVis::flowVisRenderer->deactivate(); 1914 } 1915 NanoVis::initParticle(); 1934 NanoVis::licRenderer->active(false); 1935 } 1936 #endif 1937 NanoVis::licRenderer->make_patterns(); 1916 1938 1917 1939 // FIXME: find a way to get the data from the movie object as a void* … … 1946 1968 {"add", 1, FlowAddOp, 3, 0, "name ?option value...?",}, 1947 1969 {"delete", 1, FlowDeleteOp, 2, 0, "name...",}, 1970 {"exists", 1, FlowExistsOp, 3, 3, "name",}, 1948 1971 {"names", 1, FlowNamesOp, 2, 3, "?pattern?",}, 1949 1972 {"next", 2, FlowNextOp, 2, 2, "",}, … … 1989 2012 { 1990 2013 Tcl_CreateObjCommand(interp, "flow", FlowCmdProc, NULL, NULL); 1991 FlowCmd::Init(); 1992 return TCL_OK; 1993 } 1994 1995 1996 float 1997 FlowCmd::GetPosition(FlowPosition *posPtr) 1998 { 1999 if (posPtr->flags == RELPOS) { 2000 return posPtr->value; 2001 } 2002 switch (posPtr->axis) { 2003 case AXIS_X: 2004 return (posPtr->value - _xMin) / (_xMax - _xMin); 2005 case AXIS_Y: 2006 return (posPtr->value - _yMin) / (_yMax - _yMin); 2007 case AXIS_Z: 2008 return (posPtr->value - _zMin) / (_zMax - _zMin); 2009 } 2010 return 0.0; 2011 } 2012 2013 float 2014 FlowCmd::GetPosition(void) 2015 { 2016 return FlowCmd::GetPosition(&_sv.slicePos); 2017 } 2014 NanoVis::InitFlows(); 2015 return TCL_OK; 2016 } 2017 -
trunk/packages/vizservers/nanovis/FlowCmd.h
r1429 r1431 69 69 } 70 70 void Advect(void) { 71 assert(_rendererPtr-> isActivated());71 assert(_rendererPtr->active()); 72 72 _rendererPtr->advect(); 73 73 } … … 194 194 void Configure(void); 195 195 196 /* Overall ranges over all flow vectors. */197 static float _xMin, _xMax, _yMin, _yMax, _zMin, _zMax, _wMin, _wMax;198 static float _magMin, _magMax;199 static float _xOrigin, _yOrigin, _zOrigin;200 201 196 static Rappture::SwitchSpec _switches[]; 202 197 FlowValues _sv; 203 198 204 /* Class-generic data */205 static Tcl_HashTable _flowTable;206 static int _initialized;207 208 199 void RenderBoxes(void); 209 200 public: 210 static unsigned int flags;211 201 enum SliceAxis { AXIS_X, AXIS_Y, AXIS_Z }; 212 enum FlowCmdFlags { REDRAW_PENDING=(1<<0), MAP_PENDING=(1<<1) };213 202 FlowCmd(Tcl_Interp *interp, const char *name, Tcl_HashEntry *hPtr); 214 203 ~FlowCmd(void); … … 230 219 FlowBox *NextBox(FlowBoxIterator *iterPtr); 231 220 232 static FlowCmd *FirstFlow(FlowIterator *iterPtr);233 static FlowCmd *NextFlow(FlowIterator *iterPtr);234 static void Init(void);235 static int GetFlow(Tcl_Interp *interp, Tcl_Obj *objPtr,236 FlowCmd **flowPtrPtr);237 static int CreateFlow(Tcl_Interp *interp, Tcl_Obj *objPtr);238 static void DeleteFlows(Tcl_Interp *interp);239 static bool MapFlows(void);240 static void RenderFlows(void);241 static void ResetFlows(void);242 static bool UpdateFlows(void);243 static void AdvectFlows(void);244 245 221 float *GetScaledVector(void); 246 222 Volume *MakeVolume(float *data); … … 279 255 NanoVis::licRenderer->set_axis(_sv.slicePos.axis); 280 256 NanoVis::licRenderer->set_offset(_sv.slicePos.value); 281 NanoVis::licRenderer->activ ate();257 NanoVis::licRenderer->active(true); 282 258 } 283 259 void DeactivateSlice(void) { 284 NanoVis::licRenderer-> deactivate();260 NanoVis::licRenderer->active(false); 285 261 } 286 262 SliceAxis GetAxis(void) { 287 263 return (SliceAxis)_sv.slicePos.axis; 288 264 } 289 float Get Position(void);265 float GetRelativePosition(void); 290 266 void SetAxis(void) { 291 267 NanoVis::licRenderer->set_axis(_sv.slicePos.axis); … … 301 277 void SetCurrentPosition(void) { 302 278 NanoVis::licRenderer->set_offset(_sv.slicePos.value); 279 } 280 void SetActive(bool state) { 281 _sv.sliceVisible = state; 282 NanoVis::licRenderer->active(state); 283 } 284 void SetActive(void) { 285 NanoVis::licRenderer->active(_sv.sliceVisible); 303 286 } 304 287 void GetMagRange(double &min_mag, double &max_mag); … … 321 304 return TCL_OK; 322 305 } 323 static void EventuallyRedraw(unsigned int flag = 0) { 324 if (flag) { 325 flags |= flag; 326 } 327 if ((flags & FlowCmd::REDRAW_PENDING) == 0) { 328 glutPostRedisplay(); 329 flags |= FlowCmd::REDRAW_PENDING; 330 } 331 } 332 static float GetPosition(FlowPosition *posPtr); 306 static float GetRelativePosition(FlowPosition *posPtr); 333 307 }; 334 308 335 309 extern int GetDataStream(Tcl_Interp *interp, Rappture::Buffer &buf, int nBytes); 336 #ifdef notdef337 extern bool SetVectorFieldData(Rappture::Outcome &context,338 float xMin, float xMax, size_t xNum,339 float yMin, float yMax, size_t yNum,340 float zMin, float zMax, size_t zNum,341 size_t nValues, float *values,342 FlowCmd *flowPtr);343 344 extern bool SetResampledVectorFieldData(Rappture::Outcome &context,345 float xMin, float xMax, size_t xNum,346 float yMin, float yMax, size_t yNum,347 float zMin, float zMax, size_t zNum,348 size_t nValues, float *values,349 FlowCmd *flowPtr);350 351 extern bool SetVectorFieldDataFromUnirect3d(Rappture::Outcome &context,352 Rappture::Unirect3d &data, FlowCmd *flowPtr);353 #endif354 310 355 311 extern int GetBooleanFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, -
trunk/packages/vizservers/nanovis/Lic.cpp
r1111 r1431 100 100 get_slice(); 101 101 make_patterns(); 102 103 fprintf(stderr, "initialize lic ...\n");104 102 } 105 103 -
trunk/packages/vizservers/nanovis/NvCamera.cpp
r1215 r1431 36 36 37 37 void 38 NvCamera:: activate()38 NvCamera::initialize() 39 39 { 40 40 //fprintf(stderr, "camera: %d, %d\n", width, height); -
trunk/packages/vizservers/nanovis/NvCamera.h
r1239 r1431 94 94 startX_ = sx, startY_ = sy; 95 95 } 96 void activate(void); //make the camera setting active, this has to be96 void initialize(void); //make the camera setting active, this has to be 97 97 //called before drawing things. 98 98 }; -
trunk/packages/vizservers/nanovis/NvFlowVisRenderer.cpp
r1380 r1431 31 31 _activated(true) 32 32 { 33 34 35 36 /*37 38 39 40 41 42 43 */33 _psys_width = w; 34 _psys_height = h; 35 36 /* 37 licRenderer[0] = new NvLIC(NMESH, NPIX, NPIX, 0, 38 Vector3(0, 0, 0), g_context); 39 licRenderer[1] = new NvLIC(NMESH, NPIX, NPIX, 1, 40 Vector3(0, 0, 0), g_context); 41 licRenderer[2] = new NvLIC(NMESH, NPIX, NPIX, 2, 42 Vector3(0, 0, 0), g_context); 43 */ 44 44 } 45 45 46 46 NvFlowVisRenderer::~NvFlowVisRenderer() 47 47 { 48 49 50 { 51 52 } 53 54 /*55 56 57 58 59 */48 std::map<std::string, NvVectorField*>::iterator iter; 49 for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter) 50 { 51 delete (*iter).second; 52 } 53 54 /* 55 for (int i = 0; i < 3; ++i) 56 { 57 delete licRenderer[i]; 58 } 59 */ 60 60 } 61 61 … … 63 63 NvFlowVisRenderer::initialize() 64 64 { 65 66 67 { 68 65 std::map<std::string, NvVectorField*>::iterator iter; 66 for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter) 67 { 68 (*iter).second->initialize(); 69 69 } 70 70 } … … 73 73 NvFlowVisRenderer::reset() 74 74 { 75 76 77 { 78 75 std::map<std::string, NvVectorField*>::iterator iter; 76 for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter) 77 { 78 (*iter).second->reset(); 79 79 } 80 80 } … … 83 83 NvFlowVisRenderer::initialize(const std::string& vfName) 84 84 { 85 86 87 { 88 85 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 86 if (iter != _vectorFieldMap.end()) 87 { 88 if ((*iter).second) 89 89 { 90 90 (*iter).second->initialize(); 91 91 } 92 92 } … … 96 96 NvFlowVisRenderer::advect() 97 97 { 98 99 100 { 101 if((*iter).second && (*iter).second->isActivated()) (*iter).second->advect();98 std::map<std::string, NvVectorField*>::iterator iter; 99 for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter) 100 { 101 if((*iter).second && (*iter).second->active()) (*iter).second->advect(); 102 102 } 103 103 } … … 106 106 NvFlowVisRenderer::render() 107 107 { 108 109 110 { 111 if((*iter).second && (*iter).second->isActivated()) (*iter).second->render();108 std::map<std::string, NvVectorField*>::iterator iter; 109 for (iter = _vectorFieldMap.begin(); iter != _vectorFieldMap.end(); ++iter) 110 { 111 if((*iter).second && (*iter).second->active()) (*iter).second->render(); 112 112 } 113 113 } … … 135 135 NvFlowVisRenderer::activateVectorField(const std::string& vfName) 136 136 { 137 138 139 if ((*iter).second) (*iter).second->activate();137 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 138 if (iter != _vectorFieldMap.end()) 139 if ((*iter).second) (*iter).second->active(true); 140 140 } 141 141 … … 143 143 NvFlowVisRenderer::deactivateVectorField(const std::string& vfName) 144 144 { 145 146 147 if ((*iter).second) (*iter).second->deactivate();145 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 146 if (iter != _vectorFieldMap.end()) 147 if ((*iter).second) (*iter).second->active(false); 148 148 } 149 149 … … 151 151 NvFlowVisRenderer::activatePlane(const std::string& vfName, const std::string& name) 152 152 { 153 154 155 { 156 153 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 154 if (iter != _vectorFieldMap.end()) 155 { 156 if ((*iter).second) (*iter).second->activatePlane(name); 157 157 } 158 158 } … … 161 161 NvFlowVisRenderer::deactivatePlane(const std::string& vfName, const std::string& name) 162 162 { 163 164 165 166 167 { 168 163 std::map<std::string, NvVectorField*>::iterator iter; 164 165 iter = _vectorFieldMap.find(vfName); 166 if (iter != _vectorFieldMap.end()) 167 { 168 if ((*iter).second) (*iter).second->deactivatePlane(name); 169 169 } 170 170 } … … 173 173 NvFlowVisRenderer::setPlaneAxis(const std::string& vfName, const std::string& planeName, int axis) 174 174 { 175 176 177 175 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 176 if (iter != _vectorFieldMap.end()) 177 if((*iter).second) (*iter).second->setPlaneAxis(planeName, axis); 178 178 } 179 179 … … 181 181 NvFlowVisRenderer::setPlanePos(const std::string& vfName, const std::string& name, float pos) 182 182 { 183 184 185 183 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 184 if (iter != _vectorFieldMap.end()) 185 if((*iter).second) (*iter).second->setPlanePos(name, pos); 186 186 } 187 187 … … 189 189 NvFlowVisRenderer::setParticleColor(const std::string& vfName, const std::string& name, const Vector4& color) 190 190 { 191 192 193 191 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 192 if (iter != _vectorFieldMap.end()) 193 if((*iter).second) (*iter).second->setParticleColor(name, color); 194 194 } 195 195 … … 197 197 NvFlowVisRenderer::removeVectorField(const std::string& vfName) 198 198 { 199 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 200 if (iter != _vectorFieldMap.end()) 201 { 202 delete (*iter).second; 203 _vectorFieldMap.erase(iter); 204 } 199 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 200 if (iter != _vectorFieldMap.end()) { 201 delete (*iter).second; 202 _vectorFieldMap.erase(iter); 203 } 205 204 } 206 205 … … 208 207 NvFlowVisRenderer::addPlane(const std::string& vfName, const std::string& name) 209 208 { 210 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 211 if (iter != _vectorFieldMap.end()) 212 { 213 if ((*iter).second) (*iter).second->addPlane(name); 214 } 209 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 210 if (iter != _vectorFieldMap.end()) { 211 if ((*iter).second) (*iter).second->addPlane(name); 212 } 215 213 } 216 214 … … 218 216 NvFlowVisRenderer::removePlane(const std::string& vfName, const std::string& name) 219 217 { 220 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 221 if (iter != _vectorFieldMap.end()) 222 { 223 if ((*iter).second) (*iter).second->removePlane(name); 224 } 218 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 219 if (iter != _vectorFieldMap.end()) { 220 if ((*iter).second) (*iter).second->removePlane(name); 221 } 225 222 } 226 223 … … 228 225 NvFlowVisRenderer::activateDeviceShape(const std::string& vfName, const std::string& name) 229 226 { 230 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 231 if (iter != _vectorFieldMap.end()) 232 { 233 if ((*iter).second) (*iter).second->activateDeviceShape(name); 234 } 227 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 228 if (iter != _vectorFieldMap.end()) { 229 if ((*iter).second) (*iter).second->activateDeviceShape(name); 230 } 235 231 } 236 232 … … 238 234 NvFlowVisRenderer::deactivateDeviceShape(const std::string& vfName, const std::string& name) 239 235 { 240 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 241 if (iter != _vectorFieldMap.end()) 242 { 243 if ((*iter).second) (*iter).second->deactivateDeviceShape(name); 244 } 236 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 237 if (iter != _vectorFieldMap.end()) { 238 if ((*iter).second) (*iter).second->deactivateDeviceShape(name); 239 } 245 240 } 246 241 … … 248 243 NvFlowVisRenderer::activateDeviceShape(const std::string& vfName) 249 244 { 250 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 251 if (iter != _vectorFieldMap.end()) 252 { 253 if ((*iter).second) (*iter).second->activateDeviceShape(); 254 } 245 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 246 if (iter != _vectorFieldMap.end()) { 247 if ((*iter).second) (*iter).second->activateDeviceShape(); 248 } 255 249 } 256 250 … … 258 252 NvFlowVisRenderer::deactivateDeviceShape(const std::string& vfName) 259 253 { 260 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 261 if (iter != _vectorFieldMap.end()) 262 { 263 if ((*iter).second) (*iter).second->deactivateDeviceShape(); 264 } 254 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 255 if (iter != _vectorFieldMap.end()) { 256 if ((*iter).second) (*iter).second->deactivateDeviceShape(); 257 } 265 258 } 266 259 … … 268 261 NvFlowVisRenderer::addDeviceShape(const std::string& vfName, const std::string& name, const NvDeviceShape& shape) 269 262 { 270 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 271 if (iter != _vectorFieldMap.end()) 272 { 273 if ((*iter).second) (*iter).second->addDeviceShape(name, shape); 274 } 263 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 264 if (iter != _vectorFieldMap.end()) { 265 if ((*iter).second) (*iter).second->addDeviceShape(name, shape); 266 } 275 267 } 276 268 … … 278 270 NvFlowVisRenderer::removeDeviceShape(const std::string& vfName, const std::string& name) 279 271 { 280 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 281 if (iter != _vectorFieldMap.end()) 282 { 283 if ((*iter).second) (*iter).second->removeDeviceShape(name); 284 } 285 } 272 std::map<std::string, NvVectorField*>::iterator iter = _vectorFieldMap.find(vfName); 273 if (iter != _vectorFieldMap.end()) { 274 if ((*iter).second) (*iter).second->removeDeviceShape(name); 275 } 276 } -
trunk/packages/vizservers/nanovis/NvFlowVisRenderer.h
r1429 r1431 1 2 #ifndef _NVFLOWVISRENDERER_H 3 #define _NVFLOWVISRENDERER_H 1 4 #pragma once 2 5 … … 22 25 23 26 class NvFlowVisRenderer { 24 25 26 27 enum { 28 MAX_PARTICLE_RENDERER = 4, 29 }; 27 30 28 29 30 31 int _psys_width; 32 int _psys_height; 33 CGcontext context; 31 34 32 35 std::map<std::string, NvVectorField*> _vectorFieldMap; 33 36 34 37 bool _activated; 35 38 36 39 //NvLIC* licRenderer[3]; 37 40 public: 38 39 41 NvFlowVisRenderer(int w, int h, CGcontext context); 42 ~NvFlowVisRenderer(); 40 43 41 42 43 44 45 44 void initialize(); 45 void initialize(const std::string& vfName); 46 void advect(); 47 void reset(); 48 void render(); 46 49 47 48 float scaleY, float scaleZ, float max);50 void addVectorField(Volume* volPtr, const Vector3& ori, float scaleX, 51 float scaleY, float scaleZ, float max); 49 52 50 51 53 void addVectorField(const std::string& vfName, Volume* volPtr, const Vector3& ori, float scaleX, float scaleY, float scaleZ, float max); 54 void removeVectorField(const std::string& vfName); 52 55 53 54 56 void addPlane(const std::string& vfName, const std::string& name); 57 void removePlane(const std::string& vfName, const std::string& name); 55 58 56 57 58 59 60 59 /** 60 * @brief Specify the axis of the index plane 61 * @param index the index of the array of injection planes 62 */ 63 void setPlaneAxis(const std::string& vfName, const std::string& name, int axis); 61 64 62 63 64 65 66 67 68 65 /** 66 * @param pos : Specify the position of slice 67 */ 68 void setPlanePos(const std::string& vfName, const std::string& name, float pos); 69 void setParticleColor(const std::string& vfName, const std::string& name, const Vector4& color); 70 void activatePlane(const std::string& vfName, const std::string& name); 71 void deactivatePlane(const std::string& vfName, const std::string& name); 69 72 70 71 73 void activateVectorField(const std::string& vfName); 74 void deactivateVectorField(const std::string& vfName); 72 75 73 //////////////////// 74 // DEVICE SHAPE 75 void addDeviceShape(const std::string& vfName, const std::string& name, const NvDeviceShape& shape); 76 void removeDeviceShape(const std::string& vfName, const std::string& name); 77 void activateDeviceShape(const std::string& vfName); 78 void deactivateDeviceShape(const std::string& vfName); 79 void activateDeviceShape(const std::string& vfName, const std::string& name); 80 void deactivateDeviceShape(const std::string& vfName, const std::string& name); 81 82 void activate(); 83 void deactivate(); 84 bool isActivated() const; 76 //////////////////// 77 // DEVICE SHAPE 78 void addDeviceShape(const std::string& vfName, const std::string& name, const NvDeviceShape& shape); 79 void removeDeviceShape(const std::string& vfName, const std::string& name); 80 void activateDeviceShape(const std::string& vfName); 81 void deactivateDeviceShape(const std::string& vfName); 82 void activateDeviceShape(const std::string& vfName, const std::string& name); 83 void deactivateDeviceShape(const std::string& vfName, const std::string& name); 84 bool active(void) { 85 return _activated; 86 } 87 void active(bool state) { 88 _activated = state; 89 } 85 90 }; 86 91 87 inline void NvFlowVisRenderer::activate()88 {89 _activated = true;90 }91 92 92 inline void NvFlowVisRenderer::deactivate() 93 { 94 _activated = false; 95 } 96 97 inline bool NvFlowVisRenderer::isActivated() const 98 { 99 return _activated; 100 } 101 93 #endif /* _NVFLOWVISRENDERER_H */ -
trunk/packages/vizservers/nanovis/NvLIC.cpp
r1429 r1431 25 25 #include "global.h" 26 26 27 NvLIC::NvLIC(int _size, int _width, int _height, int _axis, const Vector3& _offset,28 27 NvLIC::NvLIC(int _size, int _width, int _height, int _axis, 28 const Vector3& _offset, CGcontext _context) : 29 29 Renderable(Vector3(0.0f,0.0f,0.0f)), 30 30 disListID(0), … … 54 54 glGenTextures(1, &pattern_tex); 55 55 glBindTexture(GL_TEXTURE_2D, pattern_tex); 56 glTexParameteri(GL_TEXTURE_2D, 57 GL_TEXTURE_WRAP_S, GL_REPEAT); 58 glTexParameteri(GL_TEXTURE_2D, 59 GL_TEXTURE_WRAP_T, GL_REPEAT); 60 glTexParameteri(GL_TEXTURE_2D, 61 GL_TEXTURE_MAG_FILTER, GL_LINEAR); 62 glTexParameteri(GL_TEXTURE_2D, 63 GL_TEXTURE_MIN_FILTER, GL_LINEAR); 56 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 57 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 58 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 59 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 64 60 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 65 61 … … 76 72 77 73 // ADD INSOO 78 glTexParameteri(GL_TEXTURE_RECTANGLE_NV, 79 GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);80 glTexParameteri(GL_TEXTURE_RECTANGLE_NV, 81 GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);82 83 glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 84 GL_FLOAT_RGBA32_NV, size, size,0, GL_RGBA, GL_FLOAT, NULL);74 glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_S, 75 GL_CLAMP_TO_EDGE); 76 glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_T, 77 GL_CLAMP_TO_EDGE); 78 79 glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA32_NV, size, size, 80 0, GL_RGBA, GL_FLOAT, NULL); 85 81 86 82 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, … … 212 208 } 213 209 } 214 215 210 glGenTextures(1, &mag_tex); 216 211 glBindTexture(GL_TEXTURE_2D, mag_tex); … … 252 247 glBegin(GL_QUADS); 253 248 { 254 switch (axis) 255 { 249 switch (axis) { 256 250 case 0 : 257 251 // TBD.. … … 303 297 NvLIC::convolve() 304 298 { 305 if (vectorFieldID == 0) return; 299 if (vectorFieldID == 0) { 300 return; 301 } 306 302 307 303 int i, j; … … 410 406 NvLIC::display() 411 407 { 412 if (vectorFieldID == 0) return; 408 if (vectorFieldID == 0) { 409 return; 410 } 413 411 414 412 glBindTexture(GL_TEXTURE_2D, color_tex); -
trunk/packages/vizservers/nanovis/NvLIC.h
r1370 r1431 40 40 unsigned int disListID; 41 41 42 int width, height; 43 int size; //the lic is a square of size, it can be stretched 44 float* slice_vector; //storage for the per slice vectors driving the follow 45 Vector3 scale; //scaling factor stretching the lic plane to fit the actual dimensions 46 Vector3 origin; 47 Vector3 offset; //[0,1] offset could be x, y, or z direction 48 int axis; 42 int width, height; 43 int size; // The lic is a square of size, it can 44 // be stretched 45 float* slice_vector; // Storage for the per slice vectors 46 // driving the follow. 47 Vector3 scale; // Scaling factor stretching the lic 48 // plane to fit the actual dimensions 49 Vector3 origin; 50 Vector3 offset; // [0,1] offset could be x, y, or z 51 // direction 52 int axis; 49 53 50 //some convolve variables. They can pretty much stay fixed51 int iframe;52 int Npat;53 int alpha;54 float sa;55 float tmax;56 float dmax;54 //some convolve variables. They can pretty much stay fixed 55 int iframe; 56 int Npat; 57 int alpha; 58 float sa; 59 float tmax; 60 float dmax; 57 61 float max; 62 63 //CG shader parameters 64 CGcontext m_g_context; 65 CGparameter m_vel_tex_param; 66 CGparameter m_vel_tex_param_render_vel, m_plane_normal_param_render_vel; 67 CGprogram m_render_vel_fprog; 68 CGparameter m_max_param; 69 70 NVISid color_tex, pattern_tex, mag_tex; 71 NVISid fbo, vel_fbo, slice_vector_tex; // For projecting 3d vector to 2d 72 // vector on a plane. 73 NVISid vectorFieldID; 58 74 59 //CG shader parameters 60 CGcontext m_g_context; 61 CGparameter m_vel_tex_param; 62 CGparameter m_vel_tex_param_render_vel, m_plane_normal_param_render_vel; 63 CGprogram m_render_vel_fprog; 64 CGparameter m_max_param; 65 66 NVISid color_tex, pattern_tex, mag_tex; 67 NVISid fbo, vel_fbo, slice_vector_tex; //for projecting 3d vector to 2d vector on a plane 68 NVISid vectorFieldID; 69 70 Volume* vector_field; 75 Volume* vector_field; 71 76 72 77 /** … … 74 79 */ 75 80 bool _activate; 81 bool _isHidden; // Indicates if LIC plane is displayed. 76 82 public: 77 Vector3 normal; //the normal vector of the NvLIC plane,78 79 NvLIC(int _size, int _width, int _height, int axis, const Vector3& _offset, CGcontext _context);80 ~NvLIC();83 Vector3 normal; //the normal vector of the NvLIC plane, 84 //the inherited Vector3 location is its center 85 NvLIC(int _size, int _width, int _height, int axis, const Vector3& _offset, CGcontext _context); 86 ~NvLIC(); 81 87 82 88 /** … … 85 91 void convolve(); 86 92 87 void display(); //display the convolution result88 void render();89 void make_patterns();90 void make_magnitudes();91 void get_velocity(float x, float y, float* px, float* py);92 void get_slice();93 void set_offset(float v);93 void display(void); // Display the convolution result 94 void render(void); 95 void make_patterns(); 96 void make_magnitudes(); 97 void get_velocity(float x, float y, float* px, float* py); 98 void get_slice(); 99 void set_offset(float v); 94 100 /** 95 101 * @brief Specify the perdicular axis … … 100 106 void set_axis(int axis); 101 107 102 void activate();103 void deactivate();104 bool isActivated() const;105 106 108 void setVectorField(unsigned int texID, const Vector3& ori, float scaleX, float scaleY, float scaleZ, float max); 107 109 108 void reset(); 110 void reset(void); 111 void visible(bool state) { 112 _isHidden = !state; 113 } 114 bool visible(void) { 115 return (!_isHidden); 116 } 117 void active(bool state) { 118 _activate = state; 119 } 120 bool active(void) { 121 return _activate; 122 } 109 123 }; 110 124 111 inline void NvLIC::activate()112 {113 _activate = true;114 }115 116 inline void NvLIC::deactivate()117 {118 _activate = false;119 }120 121 inline bool NvLIC::isActivated() const122 {123 return _activate;124 }125 125 126 126 #endif -
trunk/packages/vizservers/nanovis/NvParticleRenderer.h
r1370 r1431 103 103 Vector4 _color; 104 104 105 106 105 public: 107 106 int psys_width; //the storage of particles is implemented as a 2D array. … … 118 117 void render(); 119 118 120 void activate(); 121 void deactivate(); 122 bool isActivated() const; 123 119 bool active(void) { 120 return _activate; 121 } 122 void active(bool state) { 123 _activate = state; 124 } 125 void setColor(const Vector4& color) { 126 _color = color; 127 } 124 128 void setAxis(int axis); 125 void setColor(const Vector4& color);126 129 void setPos(float pos); 127 128 void draw_bounding_box(float x0, float y0, float z0, float x1, float y1, float z1, float r, float g, float b, float line_width); 130 void draw_bounding_box(float x0, float y0, float z0, 131 float x1, float y1, float z1, 132 float r, float g, float b, float line_width); 129 133 void initializeDataArray(); 130 134 }; 131 135 132 inline void NvParticleRenderer::activate()133 {134 _activate = true;135 }136 137 inline void NvParticleRenderer::deactivate()138 {139 _activate = false;140 }141 142 inline bool NvParticleRenderer::isActivated() const143 {144 return _activate;145 }146 147 inline void NvParticleRenderer::setColor(const Vector4& color)148 {149 _color = color;150 }151 136 #endif -
trunk/packages/vizservers/nanovis/NvVectorField.cpp
r1370 r1431 3 3 #include "nanovis.h" 4 4 5 NvVectorField::NvVectorField() 6 :_vectorFieldID(0), _activated(true), _scaleX(1), _scaleY(1), _scaleZ(1), _max(1) 7 { 8 _deviceVisible = false; 9 _volPtr = 0; 10 _physicalSize.set(1.0f, 1.0f, 1.0f); 5 NvVectorField::NvVectorField() : 6 _vectorFieldID(0), 7 _activated(true), 8 _scaleX(1), 9 _scaleY(1), 10 _scaleZ(1), 11 _max(1) 12 { 13 _deviceVisible = false; 14 _volPtr = 0; 15 _physicalSize.set(1.0f, 1.0f, 1.0f); 11 16 } 12 17 13 18 NvVectorField::~NvVectorField() 14 19 { 15 std::map<std::string, NvParticleRenderer*>::iterator iter; 16 for (iter = _particleRendererMap.begin(); iter != _particleRendererMap.end(); iter++) 17 { 18 delete (*iter).second; 19 } 20 } 21 22 void NvVectorField::setVectorField(Volume* volPtr, const Vector3& ori, float scaleX, float scaleY, float scaleZ, float max) 23 { 24 _volPtr = volPtr; 25 _origin = ori; 26 _scaleX = scaleX; 27 _scaleY = scaleY; 28 _scaleZ = scaleZ; 29 _max = max; 30 _vectorFieldID = volPtr->id; 31 _physicalMin = volPtr->getPhysicalBBoxMin(); 32 printf("_pysicalMin %f %f %f\n", _physicalMin.x, _physicalMin.y, _physicalMin.z); 33 _physicalSize = volPtr->getPhysicalBBoxMax() - _physicalMin; 34 printf("_pysicalSize %f %f %f\n", 35 _physicalSize.x, _physicalSize.y, _physicalSize.z); 36 } 37 38 void NvVectorField::addDeviceShape(const std::string& name, const NvDeviceShape& shape) 39 { 40 _shapeMap[name] = shape; 20 std::map<std::string, NvParticleRenderer*>::iterator iter; 21 for (iter = _particleRendererMap.begin(); 22 iter != _particleRendererMap.end(); iter++) { 23 delete (*iter).second; 24 } 25 } 26 27 void 28 NvVectorField::setVectorField(Volume* volPtr, const Vector3& ori, 29 float scaleX, float scaleY, float scaleZ, 30 float max) 31 { 32 _volPtr = volPtr; 33 _origin = ori; 34 _scaleX = scaleX; 35 _scaleY = scaleY; 36 _scaleZ = scaleZ; 37 _max = max; 38 _vectorFieldID = volPtr->id; 39 _physicalMin = volPtr->getPhysicalBBoxMin(); 40 printf("_pysicalMin %f %f %f\n", _physicalMin.x, _physicalMin.y, _physicalMin.z); 41 _physicalSize = volPtr->getPhysicalBBoxMax() - _physicalMin; 42 printf("_pysicalSize %f %f %f\n", 43 _physicalSize.x, _physicalSize.y, _physicalSize.z); 44 } 45 46 void 47 NvVectorField::addDeviceShape(const std::string& name, 48 const NvDeviceShape& shape) 49 { 50 _shapeMap[name] = shape; 41 51 } 42 52 43 53 void NvVectorField::removeDeviceShape(const std::string& name) 44 54 { 45 46 55 std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name); 56 if (iter != _shapeMap.end()) _shapeMap.erase(iter); 47 57 } 48 58 49 59 void NvVectorField::initialize() 50 60 { 51 52 for (iter = _particleRendererMap.begin(); iter != _particleRendererMap.end(); iter++) 53 {54 55 61 std::map<std::string, NvParticleRenderer*>::iterator iter; 62 for (iter = _particleRendererMap.begin(); 63 iter != _particleRendererMap.end(); iter++) { 64 if ((*iter).second) (*iter).second->initialize(); 65 } 56 66 } 57 67 58 68 void NvVectorField::reset() 59 69 { 60 61 for (iter = _particleRendererMap.begin(); iter != _particleRendererMap.end(); iter++) 62 {63 64 70 std::map<std::string, NvParticleRenderer*>::iterator iter; 71 for (iter = _particleRendererMap.begin(); 72 iter != _particleRendererMap.end(); iter++) { 73 if ((*iter).second) (*iter).second->reset(); 74 } 65 75 } 66 76 67 77 void NvVectorField::setPlaneAxis(const std::string& name, int axis) 68 78 { 69 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 70 if (iter != _particleRendererMap.end()) 71 { 72 (*iter).second->setAxis(axis); 73 } 74 79 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 80 if (iter != _particleRendererMap.end()) { 81 (*iter).second->setAxis(axis); 82 } 83 75 84 } 76 85 77 86 void NvVectorField::setPlanePos(const std::string& name, float pos) 78 87 { 79 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 80 if (iter != _particleRendererMap.end()) 81 { 82 (*iter).second->setPos(pos); 83 } 88 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 89 if (iter != _particleRendererMap.end()) { 90 (*iter).second->setPos(pos); 91 } 84 92 } 85 93 86 94 void NvVectorField::addPlane(const std::string& name) 87 95 { 88 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 89 NvParticleRenderer* renderer = 0; 90 if (iter != _particleRendererMap.end()) 91 { 92 if ((*iter).second != 0) 93 { 94 renderer = (*iter).second; 95 } 96 else 97 { 98 renderer = (*iter).second = new NvParticleRenderer(NMESH, NMESH, g_context); 99 } 100 } 101 else 102 { 103 renderer = new NvParticleRenderer(NMESH, NMESH, g_context); 104 _particleRendererMap[name] = renderer; 105 } 106 107 renderer->setVectorField(_vectorFieldID, _origin, _scaleX, _scaleY, _scaleZ, _max); 108 if (renderer) 109 { 110 renderer->initialize(); 111 } 96 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 97 NvParticleRenderer* renderer = 0; 98 if (iter != _particleRendererMap.end()) { 99 if ((*iter).second != 0) { 100 renderer = (*iter).second; 101 } else { 102 renderer = (*iter).second = new NvParticleRenderer(NMESH, NMESH, g_context); 103 } 104 } else { 105 renderer = new NvParticleRenderer(NMESH, NMESH, g_context); 106 _particleRendererMap[name] = renderer; 107 } 108 109 renderer->setVectorField(_vectorFieldID, _origin, _scaleX, _scaleY, _scaleZ, _max); 110 if (renderer) { 111 renderer->initialize(); 112 } 112 113 } 113 114 114 115 void NvVectorField::removePlane(const std::string& name) 115 116 { 116 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 117 if (iter != _particleRendererMap.end()) 118 { 119 delete (*iter).second; 120 _particleRendererMap.erase(iter); 121 } 117 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 118 if (iter != _particleRendererMap.end()) { 119 delete (*iter).second; 120 _particleRendererMap.erase(iter); 121 } 122 122 } 123 123 124 124 void NvVectorField::activatePlane(const std::string& name) 125 125 { 126 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 127 if (iter != _particleRendererMap.end()) 128 { 129 (*iter).second->activate(); 130 } 126 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 127 if (iter != _particleRendererMap.end()) { 128 (*iter).second->active(true); 129 } 131 130 } 132 131 133 132 void NvVectorField::deactivatePlane(const std::string& name) 134 133 { 135 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 136 if (iter != _particleRendererMap.end()) 137 { 138 (*iter).second->deactivate(); 139 } 134 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 135 if (iter != _particleRendererMap.end()) { 136 (*iter).second->active(false); 137 } 140 138 } 141 139 142 140 void NvVectorField::setParticleColor(const std::string& name, const Vector4& color) 143 141 { 144 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 145 if (iter != _particleRendererMap.end()) 146 { 147 (*iter).second->setColor(color); 148 } 142 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 143 if (iter != _particleRendererMap.end()) { 144 (*iter).second->setColor(color); 145 } 149 146 } 150 147 151 148 void NvVectorField::setParticleColor(const std::string& name, float r, float g, float b, float a) 152 149 { 153 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 154 if (iter != _particleRendererMap.end()) 155 { 156 if ((*iter).second) (*iter).second->setColor(Vector4(r,g,b,a)); 157 } 150 std::map<std::string, NvParticleRenderer*>::iterator iter = _particleRendererMap.find(name); 151 if (iter != _particleRendererMap.end()) { 152 if ((*iter).second) (*iter).second->setColor(Vector4(r,g,b,a)); 153 } 158 154 } 159 155 160 156 void NvVectorField::advect() 161 157 { 162 std::map<std::string, NvParticleRenderer*>::iterator iter; 163 for (iter = _particleRendererMap.begin(); iter != _particleRendererMap.end(); ++iter) 164 { 165 if ((*iter).second && (*iter).second->isActivated()) (*iter).second->advect(); 166 } 158 std::map<std::string, NvParticleRenderer*>::iterator iter; 159 for (iter = _particleRendererMap.begin(); 160 iter != _particleRendererMap.end(); ++iter) { 161 if ((*iter).second && (*iter).second->active()) 162 (*iter).second->advect(); 163 } 167 164 } 168 165 169 166 void NvVectorField::render() 170 167 { 171 std::map<std::string, NvParticleRenderer*>::iterator iter; 172 for (iter = _particleRendererMap.begin(); iter != _particleRendererMap.end(); ++iter) 173 { 174 if ((*iter).second && (*iter).second->isActivated()) 175 { 176 (*iter).second->render(); 177 } 178 } 179 180 181 if (_deviceVisible) drawDeviceShape(); 168 std::map<std::string, NvParticleRenderer*>::iterator iter; 169 for (iter = _particleRendererMap.begin(); 170 iter != _particleRendererMap.end(); ++iter) { 171 if ((*iter).second && (*iter).second->active()) { 172 (*iter).second->render(); 173 } 174 } 175 if (_deviceVisible) { 176 drawDeviceShape(); 177 } 182 178 } 183 179 … … 185 181 NvVectorField::drawDeviceShape() 186 182 { 187 188 189 190 191 192 193 183 glPushMatrix(); 184 glEnable(GL_DEPTH_TEST); 185 glDisable(GL_TEXTURE_2D); 186 glEnable(GL_BLEND); 187 188 float x0, y0, z0, x1, y1, z1; 189 std::map<std::string, NvDeviceShape>::iterator iterShape; 194 190 195 196 197 198 for (iterShape = _shapeMap.begin(); iterShape != _shapeMap.end(); ++iterShape) 199 {200 201 202 203 204 205 191 glPushMatrix(); 192 glTranslatef(_origin.x, _origin.y, _origin.z); 193 glScaled(_scaleX, _scaleY, _scaleZ); 194 for (iterShape = _shapeMap.begin(); iterShape != _shapeMap.end(); 195 ++iterShape) { 196 NvDeviceShape& shape = (*iterShape).second; 197 198 if (!shape.visible) continue; 199 200 201 glColor4d(shape.color.x, shape.color.y, shape.color.z, shape.color.w); 206 202 #if 0 207 208 209 210 211 212 203 x0 = _physicalMin.x + (shape.min.x - _physicalMin.x) / _physicalSize.x; 204 y0 = _physicalMin.y + (shape.min.y - _physicalMin.y) / _physicalSize.y; 205 z0 = _physicalMin.z + (shape.min.z - _physicalMin.z) / _physicalSize.z; 206 x1 = _physicalMin.x + (shape.max.x - _physicalMin.x) / _physicalSize.x; 207 y1 = _physicalMin.y + (shape.max.y - _physicalMin.y) / _physicalSize.y; 208 z1 = _physicalMin.z + (shape.max.z - _physicalMin.z) / _physicalSize.z; 213 209 #endif 214 x0 = (shape.min.x - _physicalMin.x) / _physicalSize.x; 215 y0 = (shape.min.y - _physicalMin.y) / _physicalSize.y; 216 z0 = (shape.min.z - _physicalMin.z) / _physicalSize.z; 217 x1 = (shape.max.x - _physicalMin.x) / _physicalSize.x; 218 y1 = (shape.max.y - _physicalMin.y) / _physicalSize.y; 219 z1 = (shape.max.z - _physicalMin.z) / _physicalSize.z; 220 221 glLineWidth(1.2); 222 glBegin(GL_LINE_LOOP); 223 { 224 glVertex3d(x0, y0, z0); 225 glVertex3d(x1, y0, z0); 226 glVertex3d(x1, y1, z0); 227 glVertex3d(x0, y1, z0); 228 } 229 glEnd(); 230 glBegin(GL_LINE_LOOP); 231 { 232 glVertex3d(x0, y0, z1); 233 glVertex3d(x1, y0, z1); 234 glVertex3d(x1, y1, z1); 235 glVertex3d(x0, y1, z1); 236 } 237 glEnd(); 210 x0 = (shape.min.x - _physicalMin.x) / _physicalSize.x; 211 y0 = (shape.min.y - _physicalMin.y) / _physicalSize.y; 212 z0 = (shape.min.z - _physicalMin.z) / _physicalSize.z; 213 x1 = (shape.max.x - _physicalMin.x) / _physicalSize.x; 214 y1 = (shape.max.y - _physicalMin.y) / _physicalSize.y; 215 z1 = (shape.max.z - _physicalMin.z) / _physicalSize.z; 216 217 glLineWidth(1.2); 218 glBegin(GL_LINE_LOOP); 219 { 220 glVertex3d(x0, y0, z0); 221 glVertex3d(x1, y0, z0); 222 glVertex3d(x1, y1, z0); 223 glVertex3d(x0, y1, z0); 224 } 225 glEnd(); 226 glBegin(GL_LINE_LOOP); 227 { 228 glVertex3d(x0, y0, z1); 229 glVertex3d(x1, y0, z1); 230 glVertex3d(x1, y1, z1); 231 glVertex3d(x0, y1, z1); 232 } 233 glEnd(); 234 235 glBegin(GL_LINE_LOOP); 236 { 237 glVertex3d(x0, y0, z0); 238 glVertex3d(x0, y0, z1); 239 glVertex3d(x0, y1, z1); 240 glVertex3d(x0, y1, z0); 241 } 242 glEnd(); 243 244 glBegin(GL_LINE_LOOP); 245 { 246 glVertex3d(x1, y0, z0); 247 glVertex3d(x1, y0, z1); 248 glVertex3d(x1, y1, z1); 249 glVertex3d(x1, y1, z0); 250 } 251 glEnd(); 252 } 253 glPopMatrix(); 238 254 239 glBegin(GL_LINE_LOOP); 240 { 241 glVertex3d(x0, y0, z0); 242 glVertex3d(x0, y0, z1); 243 glVertex3d(x0, y1, z1); 244 glVertex3d(x0, y1, z0); 245 } 246 glEnd(); 247 248 glBegin(GL_LINE_LOOP); 249 { 250 glVertex3d(x1, y0, z0); 251 glVertex3d(x1, y0, z1); 252 glVertex3d(x1, y1, z1); 253 glVertex3d(x1, y1, z0); 254 } 255 glEnd(); 256 } 257 glPopMatrix(); 258 259 glPopMatrix(); 260 glDisable(GL_DEPTH_TEST); 261 glDisable(GL_BLEND); 262 glEnable(GL_TEXTURE_2D); 255 glPopMatrix(); 256 glDisable(GL_DEPTH_TEST); 257 glDisable(GL_BLEND); 258 glEnable(GL_TEXTURE_2D); 263 259 } 264 260 … … 266 262 NvVectorField::activateDeviceShape(const std::string& name) 267 263 { 268 std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name); 269 if (iter != _shapeMap.end()) 270 { 271 (*iter).second.visible = true; 272 } 264 std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name); 265 if (iter != _shapeMap.end()) { 266 (*iter).second.visible = true; 267 } 273 268 } 274 269 … … 276 271 NvVectorField::deactivateDeviceShape(const std::string& name) 277 272 { 278 279 if (iter != _shapeMap.end()) 280 {281 (*iter).second.visible = false; 282 283 } 284 273 std::map<std::string, NvDeviceShape>::iterator iter = _shapeMap.find(name); 274 if (iter != _shapeMap.end()) { 275 (*iter).second.visible = false; 276 } 277 } 278 279 -
trunk/packages/vizservers/nanovis/NvVectorField.h
r1370 r1431 10 10 class NvDeviceShape { 11 11 public : 12 13 14 15 12 Vector3 min; 13 Vector3 max; 14 Vector4 color; 15 bool visible; 16 16 public : 17 17 NvDeviceShape() 18 18 : visible(true) 19 20 19 { 20 } 21 21 }; 22 22 23 23 class NvVectorField { 24 unsigned int _vectorFieldID; 25 Volume* _volPtr; 26 std::map<std::string, NvParticleRenderer*> _particleRendererMap; 24 unsigned int _vectorFieldID; 25 Volume* _volPtr; 26 std::map<std::string, NvParticleRenderer*> _particleRendererMap; 27 28 std::map<std::string, NvDeviceShape> _shapeMap; 29 30 /** 31 * @brief Specify the visibility 32 */ 33 bool _activated; 34 35 Vector3 _origin; 36 Vector3 _physicalMin; 37 Vector3 _physicalSize; 38 float _scaleX; 39 float _scaleY; 40 float _scaleZ; 41 float _max; 42 43 bool _deviceVisible; 44 public : 45 NvVectorField(); 46 ~NvVectorField(); 47 48 void setVectorField(Volume* vol, const Vector3& ori, float scaleX, float scaleY, float scaleZ, float max); 49 50 bool active(void) { 51 return _activated; 52 } 53 void active(bool state) { 54 _activated = state; 55 } 56 void activateDeviceShape(void) { 57 _deviceVisible = true; 58 } 59 void deactivateDeviceShape(void) { 60 _deviceVisible = false; 61 } 27 62 28 std::map<std::string, NvDeviceShape> _shapeMap; 29 30 /** 31 * @brief Specify the visibility 32 */ 33 bool _activated; 34 35 Vector3 _origin; 36 Vector3 _physicalMin; 37 Vector3 _physicalSize; 38 float _scaleX; 39 float _scaleY; 40 float _scaleZ; 41 float _max; 42 43 bool _deviceVisible; 44 public : 45 NvVectorField(); 46 ~NvVectorField(); 47 48 void setVectorField(Volume* vol, const Vector3& ori, float scaleX, float scaleY, float scaleZ, float max); 49 50 void activate(); 51 void deactivate(); 52 bool isActivated() const; 53 54 ///////////////////////////// 55 // DEVICE 56 void addDeviceShape(const std::string& name, const NvDeviceShape& shape); 57 void removeDeviceShape(const std::string& name); 58 void activateDeviceShape(); 59 void deactivateDeviceShape(); 60 void activateDeviceShape(const std::string& name); 61 void deactivateDeviceShape(const std::string& name); 62 63 void initialize(); 64 void reset(); 65 66 void addPlane(const std::string& name); 67 void removePlane(const std::string& name); 68 69 void advect(); 70 void render(); 71 72 void drawDeviceShape(); 73 void activatePlane(const std::string& name); 74 void deactivatePlane(const std::string& name); 75 void setPlaneAxis(const std::string& name, int axis); 76 void setPlanePos(const std::string& name, float pos); 77 void setParticleColor(const std::string& name, float r, float g, float b, float a); 78 void setParticleColor(const std::string& name, const Vector4& color); 63 ///////////////////////////// 64 // DEVICE 65 void addDeviceShape(const std::string& name, const NvDeviceShape& shape); 66 void removeDeviceShape(const std::string& name); 67 void activateDeviceShape(const std::string& name); 68 void deactivateDeviceShape(const std::string& name); 69 70 void initialize(); 71 void reset(); 72 73 void addPlane(const std::string& name); 74 void removePlane(const std::string& name); 75 76 void advect(); 77 void render(); 78 79 void drawDeviceShape(); 80 void activatePlane(const std::string& name); 81 void deactivatePlane(const std::string& name); 82 void setPlaneAxis(const std::string& name, int axis); 83 void setPlanePos(const std::string& name, float pos); 84 void setParticleColor(const std::string& name, float r, float g, float b, float a); 85 void setParticleColor(const std::string& name, const Vector4& color); 79 86 }; 80 87 81 inline void NvVectorField::activate()82 {83 _activated = true;84 }85 86 inline void NvVectorField::deactivate()87 {88 _activated = false;89 }90 91 inline bool NvVectorField::isActivated() const92 {93 return _activated;94 }95 96 inline void NvVectorField::activateDeviceShape()97 {98 _deviceVisible = true;99 }100 101 inline void NvVectorField::deactivateDeviceShape()102 {103 _deviceVisible = false;104 }105 -
trunk/packages/vizservers/nanovis/Unirect.cpp
r1429 r1431 520 520 _zValueMax = vz; 521 521 } 522 if (nindex >= (npts*3)) {523 fprintf(stderr, "nindex=%d, npts=%d, z=%d, y=%d, x=%d\n",524 nindex, npts, iz, iy, ix);525 }526 522 _values[nindex] = vx; 527 523 _values[nindex+1] = vy; -
trunk/packages/vizservers/nanovis/VolumeRenderer.cpp
r1429 r1431 77 77 78 78 79 int VolumeRenderer::add_volume(Volume* _vol, TransferFunction* _tf){ 80 81 int ret = n_volumes; 82 79 int 80 VolumeRenderer::add_volume(Volume* _vol, TransferFunction* _tf) 81 { 83 82 volume.push_back(_vol); 84 83 tf.push_back(_tf); 85 84 85 int ret = n_volumes; 86 86 n_volumes++; 87 88 87 return ret; 89 88 } -
trunk/packages/vizservers/nanovis/config.h
r1429 r1431 17 17 #define __CONFIG_H__ 18 18 19 #define NV40 //Uncomment if using 6 series card. By default we assume older card the 5xxx series 20 #define XINETD //enable render server 21 //#define EVENTLOG //enable event logging 22 //#define DO_RLE //do run length compression 19 #define NV40 /* Uncomment if using 6 series 20 * card. By default we assume older 21 * card the 5xxx series */ 22 #define XINETD /* Enable render server. */ 23 //#define EVENTLOG /* Enable event logging. */ 24 //#define DO_RLE /* Do run length compression. */ 23 25 24 26 /* -
trunk/packages/vizservers/nanovis/nanovis.cpp
r1429 r1431 114 114 PlaneRenderer* NanoVis::plane_render = 0; 115 115 Texture2D* NanoVis::plane[10]; 116 NvColorTableRenderer* NanoVis::color_table_renderer = 0;116 NvColorTableRenderer* NanoVis::color_table_renderer = NULL; 117 117 118 118 #ifndef NEW_FLOW_ENGINE 119 NvParticleRenderer* NanoVis::flowVisRenderer = 0;119 NvParticleRenderer* NanoVis::flowVisRenderer = NULL; 120 120 #else 121 NvFlowVisRenderer* NanoVis::flowVisRenderer = 0;122 #endif 123 124 graphics::RenderContext* NanoVis::renderContext = 0;125 NvLIC* NanoVis::licRenderer = 0;121 NvFlowVisRenderer* NanoVis::flowVisRenderer = NULL; 122 #endif 123 124 graphics::RenderContext* NanoVis::renderContext = NULL; 125 NvLIC* NanoVis::licRenderer = NULL; 126 126 R2Fonts* NanoVis::fonts; 127 127 … … 146 146 147 147 unsigned char* NanoVis::screen_buffer = NULL; 148 149 unsigned int NanoVis::flags = 0; 150 Tcl_HashTable NanoVis::flowTable; 151 float NanoVis::magMin; 152 float NanoVis::magMax; 153 float NanoVis::xMin; 154 float NanoVis::xMax; 155 float NanoVis::yMin; 156 float NanoVis::yMax; 157 float NanoVis::zMin; 158 float NanoVis::zMax; 159 float NanoVis::wMin; 160 float NanoVis::wMax; 161 float NanoVis::xOrigin; 162 float NanoVis::yOrigin; 163 float NanoVis::zOrigin; 148 164 149 165 /* FIXME: This variable is always true. */ … … 256 272 } 257 273 274 275 void 276 NanoVis::EventuallyRedraw(unsigned int flag) 277 { 278 if (flag) { 279 flags |= flag; 280 } 281 if ((flags & REDRAW_PENDING) == 0) { 282 glutPostRedisplay(); 283 flags |= REDRAW_PENDING; 284 } 285 } 258 286 259 287 #if KEEPSTATS … … 425 453 int result; 426 454 427 #if def notdef455 #ifndef notdef 428 456 if (NanoVis::debug_flag) { 429 457 fprintf(stderr, "in ExecuteCommand(%s)\n", Tcl_DStringValue(dsPtr)); … … 433 461 start = CVT2SECS(tv); 434 462 435 #ifdef notdef 463 Trace("in ExecuteCommand(%s)\n", Tcl_DStringValue(dsPtr)); 464 #ifndef notdef 436 465 if (NanoVis::logfile != NULL) { 437 466 fprintf(NanoVis::logfile, "%s", Tcl_DStringValue(dsPtr)); … … 451 480 stats.cmdTime += finish - start; 452 481 stats.nCommands++; 453 #if def notdef482 #ifndef notdef 454 483 if (NanoVis::debug_flag) { 455 484 fprintf(stderr, "leaving ExecuteCommand status=%d\n", result); … … 651 680 NanoVis::resize_offscreen_buffer(int w, int h) 652 681 { 682 Trace("in resize_offscreen_buffer(%d, %d)\n", w, h); 653 683 if ((w == win_width) && (h == win_height)) { 654 684 return; … … 665 695 } 666 696 //fprintf(stderr, "screen_buffer size: %d\n", sizeof(screen_buffer)); 667 if (debug_flag) { 668 fprintf(stderr, "screen_buffer size: %d %d\n", w, h); 669 } 697 Trace("screen_buffer size: %d %d\n", w, h); 670 698 671 699 if (screen_buffer != NULL) { … … 1640 1668 fprintf(stderr, "in display\n"); 1641 1669 } 1642 1643 if (FlowCmd::flags & FlowCmd::MAP_PENDING) { 1644 FlowCmd::MapFlows(); 1670 if (flags & MAP_FLOWS) { 1671 xMin = yMin = zMin = wMin = magMin = FLT_MAX; 1672 xMax = yMax = zMax = wMax = magMax = -FLT_MAX; 1673 } 1674 if (flags & MAP_FLOWS) { 1675 MapFlows(); 1645 1676 } 1646 1677 //assert(glGetError()==0); … … 1667 1698 1668 1699 //camera setting activated 1669 cam-> activate();1700 cam->initialize(); 1670 1701 1671 1702 //set up the orientation of items in the scene. … … 1710 1741 grid->render(); 1711 1742 } 1712 if ((licRenderer != NULL) && (licRenderer-> isActivated())) {1743 if ((licRenderer != NULL) && (licRenderer->active())) { 1713 1744 licRenderer->render(); 1714 /*FlowCmd::SetupFlows();*/1715 1745 } 1716 1746 #ifdef notdef 1717 if ((flowVisRenderer != NULL) && (flowVisRenderer-> isActivated())) {1747 if ((flowVisRenderer != NULL) && (flowVisRenderer->active())) { 1718 1748 flowVisRenderer->render(); 1719 1749 } 1720 1750 #endif 1721 if ( FlowCmd::flags & FlowCmd::REDRAW_PENDING) {1722 FlowCmd::RenderFlows();1751 if (flowTable.numEntries > 0) { 1752 RenderFlows(); 1723 1753 } 1724 1754 … … 1901 1931 { 1902 1932 printf("flowvis active\n"); 1903 NanoVis::flowVisRenderer->activ ate();1904 NanoVis::licRenderer->activ ate();1933 NanoVis::flowVisRenderer->active(true); 1934 NanoVis::licRenderer->active(true); 1905 1935 } 1906 1936 break; … … 1908 1938 { 1909 1939 printf("flowvis deactived\n"); 1910 NanoVis::flowVisRenderer-> deactivate();1911 NanoVis::licRenderer-> deactivate();1940 NanoVis::flowVisRenderer->active(false); 1941 NanoVis::licRenderer->active(false); 1912 1942 } 1913 1943 break; … … 2048 2078 2049 2079 if ((NanoVis::licRenderer != NULL) && 2050 (NanoVis::licRenderer-> isActivated())) {2080 (NanoVis::licRenderer->active())) { 2051 2081 NanoVis::licRenderer->convolve(); 2052 2082 } 2053 2083 2054 2084 if ((NanoVis::flowVisRenderer != NULL) && 2055 (NanoVis::flowVisRenderer-> isActivated())) {2085 (NanoVis::flowVisRenderer->active())) { 2056 2086 NanoVis::flowVisRenderer->advect(); 2057 2087 } … … 2134 2164 2135 2165 string = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY); 2166 Trace("errorInfo=(%s)\n", string); 2136 2167 nBytes = strlen(string); 2137 2168 struct iovec iov[3]; … … 2177 2208 bmp_write_to_file(1, "/tmp"); 2178 2209 } else { 2179 NanoVis::ppm_write(" nv>image -type image -bytes");2210 NanoVis::ppm_write("\nnv>image -type image -bytes"); 2180 2211 } 2181 2212 #endif … … 2406 2437 } 2407 2438 2408 //cam-> activate();2439 //cam->initialize(); 2409 2440 2410 2441 heightmap->render_topview(renderContext, width, height); -
trunk/packages/vizservers/nanovis/nanovis.h
r1429 r1431 102 102 103 103 class NvLIC; 104 class FlowCmd; 105 class FlowIterator; 104 106 105 107 class NanoVis { … … 200 202 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, final_fbo); 201 203 } 204 205 static unsigned int flags; 206 static Tcl_HashTable flowTable; 207 static float magMin, magMax; 208 static float xMin, xMax, yMin, yMax, zMin, zMax, wMin, wMax; 209 static float xOrigin, yOrigin, zOrigin; 210 211 static FlowCmd *FirstFlow(FlowIterator *iterPtr); 212 static FlowCmd *NextFlow(FlowIterator *iterPtr); 213 static void InitFlows(void); 214 static int GetFlow(Tcl_Interp *interp, Tcl_Obj *objPtr, 215 FlowCmd **flowPtrPtr); 216 static int CreateFlow(Tcl_Interp *interp, Tcl_Obj *objPtr); 217 static void DeleteFlows(Tcl_Interp *interp); 218 static bool MapFlows(void); 219 static void RenderFlows(void); 220 static void ResetFlows(void); 221 static bool UpdateFlows(void); 222 static void AdvectFlows(void); 223 enum NanoVisFlags { 224 REDRAW_PENDING=(1<<0), 225 MAP_FLOWS=(1<<1), 226 MAP_VOLUMES=(1<<2), 227 MAP_HEIGHTMAPS=(1<<3), 228 }; 229 static void EventuallyRedraw(unsigned int flag = 0); 202 230 }; 203 231
Note: See TracChangeset
for help on using the changeset viewer.