Skip to content

Commit 4c09c75

Browse files
committed
Fix - error in pcon/pgon shapes when Rmin===0
1 parent c2df641 commit 4c09c75

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
4. Fix - limit th2 text output size
88
5. Fix - use histogram fMinimum/fMaximum when drawing z axis in lego plot
99
6. Fix - error in TGeoCtub shape creation
10+
7. Fix - error in pcon/pgon shapes when Rmin===0
1011

1112

1213
## Changes in 4.5.1

scripts/JSRootGeoPainter.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,6 @@
572572
return geometry;
573573
}
574574

575-
576575
JSROOT.GEO.createPolygon = function( shape ) {
577576

578577
var thetaStart = shape.fPhi1, thetaLength = shape.fDphi;
@@ -589,6 +588,10 @@
589588

590589
var color = new THREE.Color();
591590

591+
var hasrmin = false;
592+
for (var layer=0; layer < shape.fNz; ++layer)
593+
if (shape.fRmin[layer] > 0) hasrmin = true;
594+
592595
var phi0 = thetaStart*Math.PI/180, dphi = thetaLength/radiusSegments*Math.PI/180;
593596

594597
// calculate all sin/cos tables in advance
@@ -637,9 +640,12 @@
637640

638641
var curr_indx = geometry.vertices.length;
639642

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 ));
643649

644650
if (pnts !== null) {
645651
if (side === 0) {
@@ -652,7 +658,7 @@
652658
}
653659
}
654660

655-
if (layer>0) // create faces
661+
if ((layer>0) && ((side===0) || hasrmin)) // create faces
656662
for (var seg=0;seg < radiusSegments;++seg) {
657663
var seg1 = (seg + 1) % layerVerticies;
658664
geometry.faces.push( new THREE.Face3( prev_indx + seg, (side === 0) ? (prev_indx + seg1) : (curr_indx + seg) , curr_indx + seg1, null, color, 0 ) );
@@ -669,8 +675,15 @@
669675
var inside = indxs[1][layer], outside = indxs[0][layer];
670676
for (var seg=0; seg < radiusSegments; ++seg) {
671677
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+
}
674687
}
675688
}
676689

@@ -705,7 +718,6 @@
705718
return geometry;
706719
}
707720

708-
709721
JSROOT.GEO.createXtru = function( shape ) {
710722

711723
var geometry = new THREE.Geometry();

0 commit comments

Comments
 (0)