Skip to content

Commit 6debb57

Browse files
committed
Implement 'count' draw option for geometry
Counts and show number of volumes on each level of hierarchy
1 parent f776033 commit 6debb57

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

scripts/JSRootGeoPainter.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,32 @@
926926
return bbox;
927927
}
928928

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+
929955
JSROOT.TGeoPainter.prototype.drawGeometry = function(opt) {
930956
var rect = this.select_main().node().getBoundingClientRect();
931957

@@ -935,6 +961,22 @@
935961

936962
var dom = this.select_main().node();
937963

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+
938980
// three.js 3D drawing
939981
this._scene = new THREE.Scene();
940982
this._scene.fog = new THREE.Fog(0xffffff, 500, 300000);

0 commit comments

Comments
 (0)