Skip to content

Commit d9f03cb

Browse files
committed
Add special method to geo painter to prepare draw message from viewer
1 parent 920c4c6 commit d9f03cb

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

modules/geom/TGeoPainter.mjs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3426,6 +3426,62 @@ class TGeoPainter extends ObjectPainter {
34263426
this._clones = clones;
34273427
}
34283428

3429+
/** @summary Extract shapes from draw message of geometry painter
3430+
* @desc For the moment used in batch production */
3431+
extractRawShapes(draw_msg, recreate) {
3432+
3433+
let nodes = null, old_gradpersegm = 0;
3434+
3435+
// array for descriptors for each node
3436+
// if array too large (>1M), use JS object while only ~1K nodes are expected to be used
3437+
if (recreate) {
3438+
if (draw_msg.kind !== "draw") return false;
3439+
nodes = (draw_msg.numnodes > 1e6) ? { length: draw_msg.numnodes } : new Array(draw_msg.numnodes); // array for all nodes
3440+
}
3441+
3442+
draw_msg.nodes.forEach(node => {
3443+
node = ClonedNodes.formatServerElement(node);
3444+
if (nodes)
3445+
nodes[node.id] = node;
3446+
else
3447+
this._clones.updateNode(node);
3448+
});
3449+
3450+
if (recreate) {
3451+
this._clones_owner = true;
3452+
this._clones = new ClonedNodes(null, nodes);
3453+
this._clones.name_prefix = this._clones.getNodeName(0);
3454+
// normally only need when making selection, not used in geo viewer
3455+
// this.geo_clones.setMaxVisNodes(draw_msg.maxvisnodes);
3456+
// this.geo_clones.setVisLevel(draw_msg.vislevel);
3457+
// parameter need for visualization with transparency
3458+
// TODO: provide from server
3459+
this._clones.maxdepth = 20;
3460+
}
3461+
3462+
let nsegm = 0;
3463+
if (draw_msg.cfg)
3464+
nsegm = draw_msg.cfg.nsegm;
3465+
3466+
if (nsegm) {
3467+
old_gradpersegm = geoCfg("GradPerSegm");
3468+
geoCfg("GradPerSegm", 360 / Math.max(nsegm,6));
3469+
}
3470+
3471+
for (let cnt = 0; cnt < draw_msg.visibles.length; ++cnt) {
3472+
let item = draw_msg.visibles[cnt], rd = item.ri;
3473+
3474+
// entry may be provided without shape - it is ok
3475+
if (rd)
3476+
item.server_shape = rd.server_shape = createServerGeometry(rd, nsegm);
3477+
}
3478+
3479+
if (old_gradpersegm)
3480+
geoCfg("GradPerSegm", old_gradpersegm);
3481+
3482+
return true;
3483+
}
3484+
34293485
/** @summary Prepare drawings
34303486
* @desc Return value used as promise for painter */
34313487
async prepareObjectDraw(draw_obj, name_prefix) {

0 commit comments

Comments
 (0)