@@ -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