|
926 | 926 | return bbox; |
927 | 927 | } |
928 | 928 |
|
| 929 | + JSROOT.TGeoPainter.prototype.CountVolumes = function(obj, lvl, mmm) { |
| 930 | + var res = 0; |
| 931 | + |
| 932 | + if ((obj === undefined) || (obj===null) || (typeof obj !== 'object')) return 0; |
| 933 | + |
| 934 | + if ((obj['_typename'] == 'TGeoVolume') || (obj['_typename'] == 'TGeoVolumeAssembly')) |
| 935 | + return this.CountVolumes({ _typename:"TGeoNode", fVolume: obj, fName:"TopLevel" }, lvl, mmm); |
| 936 | + |
| 937 | + res += 1; |
| 938 | + if (mmm!=null) mmm[lvl] += 1; |
| 939 | + |
| 940 | + if (('fVolume' in obj) && (obj.fVolume!=null) && (obj.fVolume.fNodes!=null)) { |
| 941 | + var arr = obj.fVolume['fNodes']['arr']; |
| 942 | + for (var i = 0; i < arr.length; ++i) |
| 943 | + res += this.CountVolumes(arr[i], lvl+1, mmm); |
| 944 | + } |
| 945 | + |
| 946 | + if (('fElements' in obj) && (obj.fElements != null)) { |
| 947 | + var arr = obj['fElements']['arr']; |
| 948 | + for (var i = 0; i < arr.length; ++i) |
| 949 | + res += this.CountVolumes(arr[i], lvl+1, mmm); |
| 950 | + } |
| 951 | + |
| 952 | + return res; |
| 953 | + } |
| 954 | + |
929 | 955 | JSROOT.TGeoPainter.prototype.drawGeometry = function(opt) { |
930 | 956 | var rect = this.select_main().node().getBoundingClientRect(); |
931 | 957 |
|
|
935 | 961 |
|
936 | 962 | var dom = this.select_main().node(); |
937 | 963 |
|
| 964 | + if (opt == 'count') { |
| 965 | + var arr = []; |
| 966 | + for (var lvl=0;lvl<100;++lvl) arr.push(0); |
| 967 | + |
| 968 | + var cnt = this.CountVolumes(this._geometry, 0, arr); |
| 969 | + |
| 970 | + var res = 'Counting elements = ' + cnt + '<br/>'; |
| 971 | + for (var lvl=0;lvl<arr.length;++lvl) { |
| 972 | + if (arr[lvl] !== 0) |
| 973 | + res += (' lvl' + lvl + ' = ' + arr[lvl] + '<br/>'); |
| 974 | + } |
| 975 | + |
| 976 | + dom.innerHTML = res; |
| 977 | + return this.DrawingReady(); |
| 978 | + } |
| 979 | + |
938 | 980 | // three.js 3D drawing |
939 | 981 | this._scene = new THREE.Scene(); |
940 | 982 | this._scene.fog = new THREE.Fog(0xffffff, 500, 300000); |
|
0 commit comments