|
97 | 97 |
|
98 | 98 | var verticesOfShape; |
99 | 99 |
|
100 | | - if (shape['_typename'] == "TGeoArb8" || shape['_typename'] == "TGeoTrap" || shape['_typename'] == "TGeoGtra") { |
| 100 | + if (shape._typename == "TGeoArb8" || shape._typename == "TGeoTrap" || shape._typename == "TGeoGtra") { |
101 | 101 | // Arb8 |
102 | 102 | verticesOfShape = [ |
103 | 103 | shape['fXY'][0][0], shape['fXY'][0][1], -shape['fDZ'], |
|
110 | 110 | shape['fXY'][7][0], shape['fXY'][7][1], shape['fDZ'] |
111 | 111 | ]; |
112 | 112 | } |
113 | | - else if (shape['_typename'] == "TGeoTrd1") { |
| 113 | + else if (shape._typename == "TGeoTrd1") { |
114 | 114 | verticesOfShape = [ |
115 | 115 | -shape['fDx1'], shape['fDY'], -shape['fDZ'], |
116 | 116 | shape['fDx1'], shape['fDY'], -shape['fDZ'], |
|
122 | 122 | -shape['fDx2'], -shape['fDY'], shape['fDZ'] |
123 | 123 | ]; |
124 | 124 | } |
125 | | - else if (shape['_typename'] == "TGeoTrd2") { |
| 125 | + else if (shape._typename == "TGeoTrd2") { |
126 | 126 | verticesOfShape = [ |
127 | 127 | -shape['fDx1'], shape['fDy1'], -shape['fDZ'], |
128 | 128 | shape['fDx1'], shape['fDy1'], -shape['fDZ'], |
|
232 | 232 | } |
233 | 233 |
|
234 | 234 | JSROOT.GEO.createTube = function( shape ) { |
235 | | - |
236 | 235 | var outerRadius1, innerRadius1, outerRadius2, innerRadius2; |
237 | | - if ((shape['_typename'] == "TGeoCone") || (shape['_typename'] == "TGeoConeSeg")) { |
| 236 | + if ((shape._typename == "TGeoCone") || (shape._typename == "TGeoConeSeg")) { |
238 | 237 | outerRadius1 = shape['fRmax2']; |
239 | 238 | innerRadius1 = shape['fRmin2']; |
240 | 239 | outerRadius2 = shape['fRmax1']; |
|
247 | 246 | if (innerRadius2 <= 0) innerRadius2 = 0.0000001; |
248 | 247 |
|
249 | 248 | var thetaStart = 0, thetaLength = 360; |
250 | | - if ((shape['_typename'] == "TGeoConeSeg") || (shape['_typename'] == "TGeoTubeSeg") || (shape['_typename'] == "TGeoCtub")) { |
| 249 | + if ((shape._typename == "TGeoConeSeg") || (shape._typename == "TGeoTubeSeg") || (shape._typename == "TGeoCtub")) { |
251 | 250 | thetaStart = shape['fPhi1']; |
252 | 251 | thetaLength = shape['fPhi2'] - shape['fPhi1']; |
253 | 252 | } |
|
282 | 281 | for (var seg=0; seg<=radiusSegments; ++seg) |
283 | 282 | geometry.vertices.push( new THREE.Vector3( outerRadius2*_cos[seg], outerRadius2*_sin[seg], -shape['fDZ'])); |
284 | 283 |
|
285 | | - |
286 | 284 | // add inner tube faces |
287 | 285 | for (var seg=0; seg<radiusSegments; ++seg) { |
288 | 286 | geometry.faces.push( new THREE.Face3( seg, seg+radiusSegments+1, seg+1 ) ); |
|
318 | 316 |
|
319 | 317 | geometry.computeFaceNormals(); |
320 | 318 |
|
321 | | - // console.log(shape['_typename'] + ' vertices ' + geometry.vertices.length + ' faces ' + geometry.faces.length); |
| 319 | + // console.log(shape._typename + ' vertices ' + geometry.vertices.length + ' faces ' + geometry.faces.length); |
322 | 320 |
|
323 | 321 | return geometry; |
324 | 322 | } |
325 | 323 |
|
| 324 | + JSROOT.GEO.createEltu = function( shape ) { |
| 325 | + var geometry = new THREE.Geometry(); |
| 326 | + |
| 327 | + var radiusSegments = Math.floor(360/6); |
| 328 | + |
| 329 | + // calculate all sin/cos tables in advance |
| 330 | + var x = new Float32Array(radiusSegments), |
| 331 | + y = new Float32Array(radiusSegments); |
| 332 | + for (var seg=0; seg<radiusSegments; ++seg) { |
| 333 | + var phi = seg/radiusSegments*2*Math.PI; |
| 334 | + x[seg] = shape.fRmin*Math.cos(phi); |
| 335 | + y[seg] = shape.fRmax*Math.sin(phi); |
| 336 | + } |
| 337 | + |
| 338 | + // create vertices |
| 339 | + for (var seg=0; seg<radiusSegments; ++seg) |
| 340 | + geometry.vertices.push( new THREE.Vector3( x[seg], y[seg], -shape.fDZ)); |
| 341 | + geometry.vertices.push( new THREE.Vector3( 0, 0, -shape.fDZ)); |
| 342 | + |
| 343 | + for (var seg=0; seg<radiusSegments; ++seg) |
| 344 | + geometry.vertices.push( new THREE.Vector3( x[seg], y[seg], +shape.fDZ)); |
| 345 | + geometry.vertices.push( new THREE.Vector3( 0, 0, shape.fDZ)); |
| 346 | + |
| 347 | + // create tube faces |
| 348 | + for (var seg=0; seg<radiusSegments; ++seg) { |
| 349 | + var seg1 = (seg + 1) % radiusSegments; |
| 350 | + geometry.faces.push( new THREE.Face3( seg, seg+radiusSegments+1, seg1 ) ); |
| 351 | + geometry.faces.push( new THREE.Face3( seg+radiusSegments+1, seg1+radiusSegments+1, seg1 ) ); |
| 352 | + } |
| 353 | + |
| 354 | + // create bottom cap |
| 355 | + for (var seg=0; seg<radiusSegments; ++seg) |
| 356 | + geometry.faces.push( new THREE.Face3( seg, (seg + 1) % radiusSegments, radiusSegments)); |
| 357 | + |
| 358 | + // create upper cap |
| 359 | + var shift = radiusSegments + 1; |
| 360 | + for (var seg=0; seg<radiusSegments; ++seg) |
| 361 | + geometry.faces.push( new THREE.Face3( shift+seg, shift+ (seg + 1) % radiusSegments, shift+radiusSegments)); |
| 362 | + |
| 363 | + geometry.computeFaceNormals(); |
| 364 | + return geometry; |
| 365 | + } |
| 366 | + |
| 367 | + |
326 | 368 | JSROOT.GEO.createTorus = function( shape ) { |
327 | 369 | var radius = shape['fR']; |
328 | 370 | var innerTube = shape['fRmin']; |
|
391 | 433 | var thetaStart = shape['fPhi1'], thetaLength = shape['fDphi']; |
392 | 434 |
|
393 | 435 | var radiusSegments = 60; |
394 | | - if ( shape['_typename'] == "TGeoPgon" ) { |
| 436 | + if ( shape._typename == "TGeoPgon" ) { |
395 | 437 | radiusSegments = shape['fNedges']; |
396 | 438 | } else { |
397 | 439 | radiusSegments = Math.floor(thetaLength/6); |
|
547 | 589 | if (! ('supported_shapes' in this)) |
548 | 590 | this.supported_shapes = |
549 | 591 | [ "TGeoBBox", "TGeoPara", "TGeoArb8", "TGeoTrd1", "TGeoTrd2", "TGeoTrap", "TGeoGtra", "TGeoSphere", |
550 | | - "TGeoCone", "TGeoConeSeg", "TGeoTube", "TGeoTubeSeg","TGeoTorus", "TGeoPcon", "TGeoPgon", "TGeoXtru" ]; |
| 592 | + "TGeoCone", "TGeoConeSeg", "TGeoTube", "TGeoTubeSeg", "TGeoEltu", "TGeoTorus", "TGeoPcon", "TGeoPgon", "TGeoXtru" ]; |
551 | 593 | if (this.supported_shapes.indexOf(shape._typename) >= 0) return true; |
552 | 594 |
|
553 | 595 | if (!('unsupported_shapes' in this)) this.unsupported_shapes = []; |
|
561 | 603 |
|
562 | 604 | JSROOT.GEO.createGeometry = function( shape ) { |
563 | 605 |
|
564 | | - if (shape['_typename'] == "TGeoBBox") |
| 606 | + if (shape._typename == "TGeoBBox") |
565 | 607 | return JSROOT.GEO.createCube( shape ); // Cube |
566 | 608 |
|
567 | | - if (shape['_typename'] == "TGeoPara") |
| 609 | + if (shape._typename == "TGeoPara") |
568 | 610 | return JSROOT.GEO.createPara( shape ); // Parallelepiped |
569 | 611 |
|
570 | | - if ((shape['_typename'] == "TGeoArb8") || (shape['_typename'] == "TGeoTrd1") || |
571 | | - (shape['_typename'] == "TGeoTrd2") || (shape['_typename'] == "TGeoTrap") || (shape['_typename'] == "TGeoGtra")) |
| 612 | + if ((shape._typename == "TGeoArb8") || (shape._typename == "TGeoTrd1") || |
| 613 | + (shape._typename == "TGeoTrd2") || (shape._typename == "TGeoTrap") || (shape._typename == "TGeoGtra")) |
572 | 614 | return JSROOT.GEO.createTrapezoid( shape ); |
573 | 615 |
|
574 | | - if ((shape['_typename'] == "TGeoSphere")) |
| 616 | + if ((shape._typename == "TGeoSphere")) |
575 | 617 | return JSROOT.GEO.createSphere( shape ); |
576 | 618 |
|
577 | | - if ((shape['_typename'] == "TGeoCone") || (shape['_typename'] == "TGeoConeSeg") || |
578 | | - (shape['_typename'] == "TGeoTube") || (shape['_typename'] == "TGeoTubeSeg")) |
| 619 | + if ((shape._typename == "TGeoCone") || (shape._typename == "TGeoConeSeg") || |
| 620 | + (shape._typename == "TGeoTube") || (shape._typename == "TGeoTubeSeg")) |
579 | 621 | return JSROOT.GEO.createTube( shape ); |
580 | 622 |
|
581 | | - if (shape['_typename'] == "TGeoTorus") |
| 623 | + if (shape._typename == "TGeoEltu") |
| 624 | + return JSROOT.GEO.createEltu( shape ); |
| 625 | + |
| 626 | + if (shape._typename == "TGeoTorus") |
582 | 627 | return JSROOT.GEO.createTorus( shape ); |
583 | 628 |
|
584 | | - if ( shape['_typename'] == "TGeoPcon" || shape['_typename'] == "TGeoPgon" ) |
| 629 | + if ( shape._typename == "TGeoPcon" || shape._typename == "TGeoPgon" ) |
585 | 630 | return JSROOT.GEO.createPolygon( shape ); |
586 | 631 |
|
587 | | - if ( shape['_typename'] == "TGeoXtru") |
| 632 | + if ( shape._typename == "TGeoXtru") |
588 | 633 | return JSROOT.GEO.createXtru(shape); |
589 | 634 |
|
590 | 635 | return null; |
|
0 commit comments