@@ -12,7 +12,7 @@ const version_id = 'dev',
12
12
13
13
/** @summary version date
14
14
* @desc Release date in format day/month/year like '14/04/2022' */
15
- version_date = '30/06 /2025',
15
+ version_date = '4/07 /2025',
16
16
17
17
/** @summary version id and date
18
18
* @desc Produced by concatenation of {@link version_id} and {@link version_date}
@@ -9143,10 +9143,11 @@ class BasePainter {
9143
9143
* @private */
9144
9144
#accessTopPainter(on) {
9145
9145
const chld = this.selectDom().node()?.firstChild;
9146
- if (!chld) return null;
9146
+ if (!chld)
9147
+ return null;
9147
9148
if (on === true)
9148
9149
chld.painter = this;
9149
- else if (on === false)
9150
+ else if (( on === false) && (chld.painter === this) )
9150
9151
delete chld.painter;
9151
9152
return chld.painter;
9152
9153
}
@@ -9169,7 +9170,8 @@ class BasePainter {
9169
9170
cleanup(keep_origin) {
9170
9171
this.clearTopPainter();
9171
9172
const origin = this.selectDom('origin');
9172
- if (!origin.empty() && !keep_origin) origin.html('');
9173
+ if (!origin.empty() && !keep_origin)
9174
+ origin.html('');
9173
9175
this.#divid = null;
9174
9176
this.#selected_main = undefined;
9175
9177
@@ -13169,14 +13171,16 @@ class ObjectPainter extends BasePainter {
13169
13171
* @private */
13170
13172
forEachPainter(userfunc, kind) {
13171
13173
// iterate over all painters from pad list
13172
- const pp = this.getPadPainter();
13174
+ let pp = this.getPadPainter(), top = null;
13175
+ if (!pp) {
13176
+ top = this.getTopPainter();
13177
+ if (isPadPainter(top))
13178
+ pp = top;
13179
+ }
13173
13180
if (pp)
13174
13181
pp.forEachPainterInPad(userfunc, kind);
13175
- else {
13176
- const painter = this.getTopPainter();
13177
- if (painter && (kind !== 'pads'))
13178
- userfunc(painter);
13179
- }
13182
+ else if (top && (kind !== 'pads'))
13183
+ userfunc(top);
13180
13184
}
13181
13185
13182
13186
/** @summary indicate that redraw was invoked via interactive action (like context menu or zooming)
@@ -73383,10 +73387,10 @@ const Handling3DDrawings = {
73383
73387
const main = this.selectDom().node();
73384
73388
let chld = main?.firstChild;
73385
73389
73386
- if (chld && !chld.$jsroot)
73390
+ while (chld && !chld.$jsroot)
73387
73391
chld = chld.nextSibling;
73388
73392
73389
- if (chld?.$jsroot) {
73393
+ if (chld?.$jsroot === '3d' ) {
73390
73394
delete chld.painter;
73391
73395
main.removeChild(chld);
73392
73396
}
@@ -73421,7 +73425,7 @@ const Handling3DDrawings = {
73421
73425
if (main !== null) {
73422
73426
main.appendChild(canv);
73423
73427
canv.painter = this;
73424
- canv.$jsroot = true ; // mark canvas as added by jsroot
73428
+ canv.$jsroot = '3d' ; // mark canvas as added by jsroot
73425
73429
}
73426
73430
73427
73431
return;
@@ -111963,6 +111967,10 @@ class TGeoPainter extends ObjectPainter {
111963
111967
/** @summary Returns top Object3D instance */
111964
111968
getTopObject3D() { return this.#toplevel; }
111965
111969
111970
+ /** @summary Assign geometry viewer mode
111971
+ * @private */
111972
+ setGeomViewer(on) { this.#geom_viewer = on; }
111973
+
111966
111974
/** @summary Assign or remove subordinate painter */
111967
111975
assignSubordinate(painter, do_assign = true) {
111968
111976
if (this.#subordinate_painters === undefined)
@@ -115375,12 +115383,12 @@ class TGeoPainter extends ObjectPainter {
115375
115383
if (name_prefix === '__geom_viewer_append__') {
115376
115384
this.#new_append_nodes = draw_obj;
115377
115385
this.ctrl.use_worker = 0;
115378
- this.#geom_viewer = true; // indicate that working with geom viewer
115386
+ this.setGeomViewer( true) ; // indicate that working with geom viewer
115379
115387
} else if ((name_prefix === '__geom_viewer_selection__') && this.#clones) {
115380
115388
// these are selection done from geom viewer
115381
115389
this.#new_draw_nodes = draw_obj;
115382
115390
this.ctrl.use_worker = 0;
115383
- this.#geom_viewer = true; // indicate that working with geom viewer
115391
+ this.setGeomViewer( true) ; // indicate that working with geom viewer
115384
115392
} else if (this.getCentral())
115385
115393
this.assignClones(this.getCentral().getClones(), false);
115386
115394
else if (!draw_obj)
@@ -165374,6 +165382,7 @@ class HierarchyPainter extends BasePainter {
165374
165382
showProgress();
165375
165383
if (isFunc(respainter?.setItemName)) {
165376
165384
respainter.setItemName(display_itemname, updating ? null : drawopt, this); // mark painter as created from hierarchy
165385
+
165377
165386
if (item && !item._painter)
165378
165387
item._painter = respainter;
165379
165388
}
@@ -165458,6 +165467,7 @@ class HierarchyPainter extends BasePainter {
165458
165467
165459
165468
if (isFunc(p.redrawObject)) {
165460
165469
const pr = p.redrawObject(obj, drawopt);
165470
+
165461
165471
if (pr) {
165462
165472
painter = p;
165463
165473
arr.push(pr);
@@ -165628,9 +165638,8 @@ class HierarchyPainter extends BasePainter {
165628
165638
}
165629
165639
if (!forced && only_auto_items) return;
165630
165640
}
165631
- } else
165632
- if (arg.indexOf(itemname) < 0) return;
165633
-
165641
+ } else if (arg.indexOf(itemname) < 0)
165642
+ return;
165634
165643
165635
165644
allitems.push(itemname);
165636
165645
options.push('update:' + p.getItemDrawOpt());
@@ -165770,10 +165779,11 @@ class HierarchyPainter extends BasePainter {
165770
165779
// now check if several same items present - select only one for the drawing
165771
165780
// if draw option includes 'main', such item will be drawn first
165772
165781
for (let n = 0; n < items.length; ++n) {
165773
- if (items_wait[n] !== 0) continue;
165782
+ if (items_wait[n] !== 0)
165783
+ continue;
165774
165784
let found_main = n;
165775
165785
for (let k = 0; k < items.length; ++k) {
165776
- if ((items[n]===items[k]) && (options[k].indexOf('main') >= 0))
165786
+ if ((items[n] === items[k]) && (options[k].indexOf('main') >= 0))
165777
165787
found_main = k;
165778
165788
}
165779
165789
for (let k = 0; k < items.length; ++k) {
@@ -165783,7 +165793,8 @@ class HierarchyPainter extends BasePainter {
165783
165793
}
165784
165794
165785
165795
return this.createDisplay().then(mdi => {
165786
- if (!mdi) return false;
165796
+ if (!mdi)
165797
+ return false;
165787
165798
165788
165799
const doms = new Array(items.length);
165789
165800
@@ -176153,30 +176164,10 @@ async function readHeaderFooter(tuple) {
176153
176164
if (!firstColumn)
176154
176165
throw new Error('No column descriptor found');
176155
176166
176156
- const field = tuple.builder.fieldDescriptors?.[firstColumn.fieldId];
176157
-
176158
- // Returns the size in bytes of one value based on its type
176159
- function getElementSize(typeName) {
176160
- switch (typeName) {
176161
- case 'double': return 8;
176162
- case 'float': return 4;
176163
- case 'int32_t':
176164
- case 'uint32_t': return 4;
176165
- case 'int64_t':
176166
- case 'uint64_t': return 8;
176167
- case 'int16_t':
176168
- case 'uint16_t': return 2;
176169
- case 'bool':
176170
- case 'uint8_t':
176171
- case 'int8_t': return 1;
176172
- default:
176173
- throw new Error(`Unknown type for uncompressed page size: ${typeName}`);
176174
- }
176175
- }
176176
-
176167
+ const field = tuple.builder.fieldDescriptors?.[firstColumn.fieldId],
176177
176168
176178
176169
// Deserialize the Page List Envelope
176179
- const group = tuple.builder.clusterGroups?.[0];
176170
+ group = tuple.builder.clusterGroups?.[0];
176180
176171
if (!group || !group.pageListLocator)
176181
176172
throw new Error('No valid cluster group or page list locator found');
176182
176173
@@ -176202,7 +176193,7 @@ async function readHeaderFooter(tuple) {
176202
176193
176203
176194
const pageOffset = Number(firstPage.locator.offset),
176204
176195
pageSize = Number(firstPage.locator.size),
176205
- elementSize = getElementSize(field?.typeName ?? '') ,
176196
+ elementSize = firstColumn.bitsOnStorage / 8 ,
176206
176197
numElements = Number(firstPage.numElements),
176207
176198
uncompressedPageSize = elementSize * numElements;
176208
176199
@@ -176230,7 +176221,6 @@ async function readHeaderFooter(tuple) {
176230
176221
});
176231
176222
}
176232
176223
176233
-
176234
176224
/** @summary Create hierarchy of ROOT::RNTuple object
176235
176225
* @desc Used by hierarchy painter to explore sub-elements
176236
176226
* @private */
0 commit comments