|
572 | 572 | return geometry; |
573 | 573 | } |
574 | 574 |
|
575 | | - |
576 | 575 | JSROOT.GEO.createPolygon = function( shape ) { |
577 | 576 |
|
578 | 577 | var thetaStart = shape.fPhi1, thetaLength = shape.fDphi; |
|
589 | 588 |
|
590 | 589 | var color = new THREE.Color(); |
591 | 590 |
|
| 591 | + var hasrmin = false; |
| 592 | + for (var layer=0; layer < shape.fNz; ++layer) |
| 593 | + if (shape.fRmin[layer] > 0) hasrmin = true; |
| 594 | + |
592 | 595 | var phi0 = thetaStart*Math.PI/180, dphi = thetaLength/radiusSegments*Math.PI/180; |
593 | 596 |
|
594 | 597 | // calculate all sin/cos tables in advance |
|
637 | 640 |
|
638 | 641 | var curr_indx = geometry.vertices.length; |
639 | 642 |
|
640 | | - // create vertices for the layer |
641 | | - for (var seg=0; seg < layerVerticies; ++seg) |
642 | | - geometry.vertices.push( new THREE.Vector3( rad*_cos[seg], rad*_sin[seg], layerz )); |
| 643 | + // create vertices for the layer (if rmin===0, only central point is included |
| 644 | + if ((side===0) || hasrmin) |
| 645 | + for (var seg=0; seg < layerVerticies; ++seg) |
| 646 | + geometry.vertices.push( new THREE.Vector3( rad*_cos[seg], rad*_sin[seg], layerz )); |
| 647 | + else |
| 648 | + geometry.vertices.push( new THREE.Vector3( 0, 0, layerz )); |
643 | 649 |
|
644 | 650 | if (pnts !== null) { |
645 | 651 | if (side === 0) { |
|
652 | 658 | } |
653 | 659 | } |
654 | 660 |
|
655 | | - if (layer>0) // create faces |
| 661 | + if ((layer>0) && ((side===0) || hasrmin)) // create faces |
656 | 662 | for (var seg=0;seg < radiusSegments;++seg) { |
657 | 663 | var seg1 = (seg + 1) % layerVerticies; |
658 | 664 | geometry.faces.push( new THREE.Face3( prev_indx + seg, (side === 0) ? (prev_indx + seg1) : (curr_indx + seg) , curr_indx + seg1, null, color, 0 ) ); |
|
669 | 675 | var inside = indxs[1][layer], outside = indxs[0][layer]; |
670 | 676 | for (var seg=0; seg < radiusSegments; ++seg) { |
671 | 677 | var seg1 = (seg + 1) % layerVerticies; |
672 | | - geometry.faces.push( new THREE.Face3( outside + seg, (layer===0) ? (inside + seg) : (outside + seg1), inside + seg1, null, color, 0 ) ); |
673 | | - geometry.faces.push( new THREE.Face3( outside + seg, inside + seg1, (layer===0) ? (outside + seg1) : (inside + seg), null, color, 0 )); |
| 678 | + if (hasrmin) { |
| 679 | + geometry.faces.push( new THREE.Face3( outside + seg, (layer===0) ? (inside + seg) : (outside + seg1), inside + seg1, null, color, 0 ) ); |
| 680 | + geometry.faces.push( new THREE.Face3( outside + seg, inside + seg1, (layer===0) ? (outside + seg1) : (inside + seg), null, color, 0 )); |
| 681 | + } else |
| 682 | + if (layer==0) { |
| 683 | + geometry.faces.push( new THREE.Face3( outside + seg, inside, outside + seg1, null, color, 0 )); |
| 684 | + } else { |
| 685 | + geometry.faces.push( new THREE.Face3( outside + seg1, inside, outside + seg, null, color, 0 )); |
| 686 | + } |
674 | 687 | } |
675 | 688 | } |
676 | 689 |
|
|
705 | 718 | return geometry; |
706 | 719 | } |
707 | 720 |
|
708 | | - |
709 | 721 | JSROOT.GEO.createXtru = function( shape ) { |
710 | 722 |
|
711 | 723 | var geometry = new THREE.Geometry(); |
|
0 commit comments