diff --git a/demo/build3d.htm b/demo/build3d.htm index 0db3bb079..595ccfd53 100644 --- a/demo/build3d.htm +++ b/demo/build3d.htm @@ -114,7 +114,9 @@ let server = 'https://root.cern/js/files/', filename = server + 'hsimple.root', filename2 = server + 'graph2d.root', - filename3 = server + 'geom/simple_alice.json.gz'; + filename3 = server + 'geom/simple_alice.json.gz', + filename4 = server + 'tutorials_fit.root'; + let file = await openFile(filename); let hist2 = await file.readObject('hpxpy'); @@ -126,9 +128,10 @@ await create3d(hist3, 'box3', -150, '#color[2]{TH3} #color[4]{box} plot'); - let hist1 = await file.readObject('hpx'); + let file4 = await openFile(filename4); + let canv = await file4.readObject('fit2a'); - await create3d(hist1, 'lego2', 400, '#color[2]{TH1} #color[4]{lego} plot'); + await create3d(canv, '', 400, '#color[2]{TCanvas} with #color[4]{TH2} and #color[4]{TF2}'); let geom = await httpRequest(filename3, 'object'); await create3d(geom, '', -400, '#color[2]{Geometry} build', 0.2); diff --git a/modules/draw/TTextPainter.mjs b/modules/draw/TTextPainter.mjs index fd917a5a6..4a9574f1d 100644 --- a/modules/draw/TTextPainter.mjs +++ b/modules/draw/TTextPainter.mjs @@ -15,6 +15,11 @@ class TTextPainter extends ObjectPainter { pp = this.getPadPainter(), fp = this.getFramePainter(), is_url = text.fName.startsWith('http://') || text.fName.startsWith('https://'); + + // special handling of dummy frame painter + if (fp?.getDrawDom() === null) + return this; + let fact = 1, use_frame = false; this.createAttText({ attr: text }); diff --git a/modules/gpad/TCanvasPainter.mjs b/modules/gpad/TCanvasPainter.mjs index 38d82cbe0..b9304d8ec 100644 --- a/modules/gpad/TCanvasPainter.mjs +++ b/modules/gpad/TCanvasPainter.mjs @@ -936,6 +936,20 @@ class TCanvasPainter extends TPadPainter { this.getWebsocket()?.resizeWindow(fullW, fullH); } + /** @summary create three.js object for TCanvas */ + static async build3d(can, opt, get_painter) { + const painter = new TCanvasPainter(null, can, opt, true); + painter.checkSpecialsInPrimitives(can, true); + + const fp = new TFramePainter(null, null); + // return dummy frame painter as result + painter.getFramePainter = () => fp; + + return painter.drawPrimitives().then(() => { + return get_painter ? painter : fp.create3DScene(-1, true); + }); + } + /** @summary draw TCanvas */ static async draw(dom, can, opt) { const nocanvas = !can; diff --git a/modules/hist/TPavePainter.mjs b/modules/hist/TPavePainter.mjs index 33d3aa53c..3dd7910f0 100644 --- a/modules/hist/TPavePainter.mjs +++ b/modules/hist/TPavePainter.mjs @@ -167,6 +167,11 @@ class TPavePainter extends ObjectPainter { opt = this.getPaveDrawOption().toUpperCase(), fp = this.getFramePainter(), pp = this.getPadPainter(), pad = pp.getRootPad(true); + + // special handling of dummy frame painter + if (fp?.getDrawDom() === null) + return this; + let interactive_element, width, height; if (pt.fInit === 0) {