Skip to content

Commit 48f0aa7

Browse files
authored
Merge pull request #6 from alja/eve7-5
Fix update of Object3D after scene update & minor improvements
2 parents a3d2ab9 + e4b52c0 commit 48f0aa7

5 files changed

Lines changed: 128 additions & 83 deletions

File tree

etc/eve7/EveManager.js

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -401,54 +401,6 @@
401401
this.ProcessModified(arr[0].fSceneId);
402402
}
403403

404-
EveManager.prototype.CanEdit = function(elem) {
405-
// AMT this should be decided by the Summary controller
406-
if (elem._typename=="ROOT::Experimental::REvePointSet") return true;
407-
if (elem._typename=="ROOT::Experimental::REveJetCone") return true;
408-
if (elem._typename=="ROOT::Experimental::REveTrack") return true;
409-
if (elem._typename=="ROOT::Experimental::REveDataCollection") return true;
410-
if (elem._typename=="ROOT::Experimental::REveDataItem") return true;
411-
if (elem._typename=="ROOT::Experimental::REveElementList") return true;
412-
return false;
413-
}
414-
415-
EveManager.prototype.AnyVisible = function(arr) {
416-
if (!arr) return false;
417-
for (var k=0;k<arr.length;++k) {
418-
if (arr[k].fName) return true;
419-
}
420-
return false;
421-
}
422-
423-
/** Create model, which can be used in TreeView */
424-
EveManager.prototype.CreateSummaryModel = function(tgt, src) {
425-
426-
if (tgt === undefined) {
427-
tgt = [];
428-
src = this.childs;
429-
// console.log('original model', src);
430-
}
431-
432-
for (var n=0;n<src.length;++n) {
433-
var elem = src[n];
434-
435-
var newelem = { fName: elem.fName, id: elem.fElementId };
436-
437-
if (this.CanEdit(elem))
438-
newelem.fType = "DetailAndActive";
439-
else
440-
newelem.fType = "Active";
441-
442-
newelem.masterid = elem.fMasterId || elem.fElementId;
443-
444-
tgt.push(newelem);
445-
if ((elem.childs !== undefined) && this.AnyVisible(elem.childs))
446-
newelem.childs = this.CreateSummaryModel([], elem.childs);
447-
}
448-
449-
return tgt;
450-
}
451-
452404
JSROOT.EVE.EveManager = EveManager;
453405

454406
return JSROOT;

etc/eve7/GL.controller.js

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,30 @@ sap.ui.define([
184184
// masterid used as identifier, no any recursions
185185
this.geo_painter.HighlightMesh(null, null, masterid, null, true);
186186
},
187+
makeGLRepresentation: function(elem)
188+
{
189+
var fname = elem.render_data.rnr_func;
190+
var obj3d = this.creator[fname](elem, elem.render_data);
191+
if (obj3d) {
192+
obj3d._typename = "THREE.Mesh";
193+
194+
// SL: this is just identifier for highlight, required to show items on other places
195+
obj3d.geo_object = elem.fMasterId || elem.fElementId;
187196

197+
//AMT: reference needed in MIR callback
198+
obj3d.eveId = elem.fElementId;
199+
200+
obj3d.geo_name = elem.fName; // used for highlight
201+
obj3d.hightlightLineWidth = 3;
202+
obj3d.normalLineWidth = 1;
203+
if (elem.render_data.matrix) {
204+
obj3d.matrixAutoUpdate = false;
205+
obj3d.matrix.fromArray( elem.render_data.matrix );
206+
obj3d.updateMatrixWorld(true);
207+
}
208+
return obj3d;
209+
}
210+
},
188211
createExtras: function(arr, toplevel) {
189212
if (!arr) return;
190213
for (var k=0;k<arr.length;++k) {
@@ -194,30 +217,11 @@ sap.ui.define([
194217
if (!this.creator[fname]) {
195218
console.error("Function " +fname + " missing in creator");
196219
} else {
197-
// console.log("creating ", fname);
198-
obj3d = this.creator[fname](elem, elem.render_data);
199-
}
200-
if (obj3d) {
201-
obj3d._typename = "THREE.Mesh";
202-
203-
// SL: this is just identifier for highlight, required to show items on other places
204-
obj3d.geo_object = elem.fMasterId || elem.fElementId;
205-
206-
//AMT: reference needed in MIR callback
207-
// obj3d.geo_object = elem.fElementId;
208-
209-
obj3d.geo_name = elem.fName; // used for highlight
210-
obj3d.hightlightLineWidth = 3;
211-
obj3d.normalLineWidth = 1;
212-
if (elem.render_data.matrix) {
213-
obj3d.matrixAutoUpdate = false;
214-
obj3d.matrix.fromArray( elem.render_data.matrix );
215-
obj3d.updateMatrixWorld(true);
216-
}
217-
this.geo_painter.addExtra(obj3d);
220+
var obj3d = this.makeGLRepresentation(elem);
221+
if (obj3d)
222+
this.geo_painter.addExtra(obj3d);
218223
}
219224
}
220-
221225
this.createExtras(elem.childs);
222226
}
223227
},
@@ -254,27 +258,19 @@ sap.ui.define([
254258
}
255259
}
256260
this.geo_painter.getExtrasContainer().remove(mesh);
257-
258-
259-
var fname = el.render_data.rnr_func, obj3d = null;
260-
var obj3d = this.creator[fname](el, el.render_data);
261+
var obj3d = this.makeGLRepresentation(el);
261262
if (obj3d) {
262-
obj3d._typename = "THREE.Mesh";
263-
obj3d.geo_object = el.fElementId; //AMT reference needed in MIR callback
264-
obj3d.geo_name = el.fName; // used for highlight
265-
obj3d.hightlightLineWidth = 3;
266-
obj3d.normalLineWidth = 1;
267263
this.geo_painter.addExtra(obj3d);
268264
this.geo_painter.getExtrasContainer().add(obj3d);
269265
}
270266
this.geo_painter.Render3D(-1);
271267
},
272268

273269
getMesh : function(elementId) {
274-
if (this.geo_painter) {
270+
if (this.geo_painter && this.geo_painter._extraObjects ) {
275271
var ex = this.geo_painter._extraObjects;
276-
for (var i=0; i < ex ? ex.arr.length : 0; ++i) {
277-
if (ex.arr[i].geo_object == elementId)
272+
for (var i=0; i < ex.arr.length; ++i) {
273+
if (ex.arr[i].eveId == elementId)
278274
return ex.arr[i];
279275
}
280276
}

etc/eve7/Summary.controller.js

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ sap.ui.define([
162162

163163
console.log('UPDATE MGR', (new Date).toTimeString());
164164
var model = this.getView().getModel("treeModel");
165-
model.setData(mgr.CreateSummaryModel());
165+
model.setData(this.createSummaryModel());
166166
model.refresh();
167167

168168
var oTree = this.getView().byId("tree");
@@ -606,6 +606,48 @@ sap.ui.define([
606606
var hl = this.gedFactory;
607607
gedFrame.bindAggregation("content", "ged>/widgetlist" , hl );
608608
}
609+
},
610+
canEdit : function(elem) {
611+
var t = elem._typename.substring(20);
612+
var ledit = this.oGuiClassDef;
613+
if (ledit.hasOwnProperty(t))
614+
return true;
615+
return false;
616+
},
617+
618+
AnyVisible : function(arr) {
619+
if (!arr) return false;
620+
for (var k=0;k<arr.length;++k) {
621+
if (arr[k].fName) return true;
622+
}
623+
return false;
624+
},
625+
626+
createSummaryModel : function(tgt, src) {
627+
if (tgt === undefined) {
628+
tgt = [];
629+
src = this.mgr.childs;
630+
// console.log('original model', src);
631+
}
632+
for (var n=0;n<src.length;++n) {
633+
var elem = src[n];
634+
635+
var newelem = { fName: elem.fName, id: elem.fElementId };
636+
637+
if (this.canEdit(elem))
638+
newelem.fType = "DetailAndActive";
639+
else
640+
newelem.fType = "Active";
641+
642+
newelem.masterid = elem.fMasterId || elem.fElementId;
643+
644+
tgt.push(newelem);
645+
if ((elem.childs !== undefined) && this.AnyVisible(elem.childs))
646+
newelem.childs = this.createSummaryModel([], elem.childs);
647+
}
648+
649+
return tgt;
609650
}
651+
610652
});
611653
});

graf3d/eve7/src/REveLine.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ void REveLine::SetLineWidth(Width_t lwidth)
109109
}
110110
++pi;
111111
}
112+
StampObjProps();
112113
TAttLine::SetLineWidth(lwidth);
113114
}
114115

tutorials/eve7/tracks.C

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/// \file
2+
/// \ingroup tutorial_eve7
3+
/// This example display only points in web browser
4+
///
5+
/// \macro_code
6+
///
7+
8+
#include "TRandom.h"
9+
#include "TParticle.h"
10+
#include <ROOT/REveElement.hxx>
11+
#include <ROOT/REveScene.hxx>
12+
#include <ROOT/REveManager.hxx>
13+
#include <ROOT/REveTrack.hxx>
14+
#include <ROOT/REveTrackPropagator.hxx>
15+
16+
namespace REX = ROOT::Experimental;
17+
18+
void makeTracks(int N_Tracks, REX::REveElement* trackHolder)
19+
{
20+
TRandom &r = *gRandom;
21+
auto prop = new REX::REveTrackPropagator();
22+
prop->SetMagFieldObj(new REX::REveMagFieldDuo(350, -3.5, 2.0));
23+
prop->SetMaxR(300);
24+
prop->SetMaxZ(600);
25+
prop->SetMaxOrbs(6);
26+
27+
double v = 0.5;
28+
double m = 5;
29+
30+
for (int i = 0; i < N_Tracks; i++)
31+
{
32+
TParticle* p = new TParticle();
33+
34+
int pdg = 11* (r.Integer(2) -1);
35+
p->SetPdgCode(pdg);
36+
37+
p->SetProductionVertex(r.Uniform(-v,v), r.Uniform(-v,v), r.Uniform(-v,v), 1);
38+
p->SetMomentum(r.Uniform(-m,m), r.Uniform(-m,m), r.Uniform(-m,m)*r.Uniform(1, 3), 1);
39+
auto track = new REX::REveTrack(p, 1, prop);
40+
track->MakeTrack();
41+
track->SetMainColor(kBlue);
42+
track->SetElementName(Form("RandomTrack_%d",i ));
43+
trackHolder->AddElement(track);
44+
}
45+
}
46+
47+
void tracks()
48+
{
49+
auto eveMng = REX::REveManager::Create();
50+
51+
REX::REveElement* trackHolder = new REX::REveElementList("Tracks");
52+
eveMng->GetEventScene()->AddElement(trackHolder);
53+
makeTracks(10, trackHolder);
54+
}

0 commit comments

Comments
 (0)