|
1107 | 1107 | JSROOT.GEO.createPolygonBuffer = function( shape, faces_limit ) { |
1108 | 1108 | var thetaStart = shape.fPhi1, |
1109 | 1109 | thetaLength = shape.fDphi, |
1110 | | - radiusSegments = 60; |
| 1110 | + radiusSegments = 60, factor = 1; |
1111 | 1111 |
|
1112 | | - if ( shape._typename == "TGeoPgon" ) |
| 1112 | + if (shape._typename == "TGeoPgon") { |
1113 | 1113 | radiusSegments = shape.fNedges; |
1114 | | - else |
| 1114 | + factor = 1. / Math.cos(Math.PI/180 * thetaLength / radiusSegments / 2); |
| 1115 | + } else { |
1115 | 1116 | radiusSegments = Math.max(5, Math.round(thetaLength/JSROOT.GEO.GradPerSegm)); |
| 1117 | + } |
1116 | 1118 |
|
1117 | 1119 | var usage = new Int16Array(2*shape.fNz), numusedlayers = 0, hasrmin = false; |
1118 | 1120 |
|
|
1153 | 1155 |
|
1154 | 1156 | if (pnts !== null) { |
1155 | 1157 | if (side === 0) { |
1156 | | - pnts.push(new THREE.Vector2(rad, layerz)); |
1157 | | - } else |
1158 | | - if (rad < shape.fRmax[layer]) { |
1159 | | - pnts.unshift(new THREE.Vector2(rad, layerz)); |
| 1158 | + pnts.push(new THREE.Vector2(factor*rad, layerz)); |
| 1159 | + } else if (rad < shape.fRmax[layer]) { |
| 1160 | + pnts.unshift(new THREE.Vector2(factor*rad, layerz)); |
1160 | 1161 | } |
1161 | 1162 | } |
1162 | 1163 | } |
|
1202 | 1203 | // add sides |
1203 | 1204 | for (var side = 0; side < 2; ++side) { |
1204 | 1205 | var rside = (side === 0) ? 'fRmax' : 'fRmin', |
1205 | | - z1 = shape.fZ[0], r1 = shape[rside][0], |
| 1206 | + z1 = shape.fZ[0], r1 = factor*shape[rside][0], |
1206 | 1207 | d1 = 1 - side, d2 = side; |
1207 | 1208 |
|
1208 | 1209 | for (var layer=0; layer < shape.fNz; ++layer) { |
1209 | 1210 |
|
1210 | 1211 | if (usage[layer*2+side] === 0) continue; |
1211 | 1212 |
|
1212 | | - var z2 = shape.fZ[layer], r2 = shape[rside][layer], |
| 1213 | + var z2 = shape.fZ[layer], r2 = factor*shape[rside][layer], |
1213 | 1214 | nxy = 1, nz = 0; |
1214 | 1215 |
|
1215 | 1216 | if ((r2 !== r1)) { |
|
1235 | 1236 | // add top/bottom |
1236 | 1237 | for (var layer=0; layer < shape.fNz; layer += (shape.fNz-1)) { |
1237 | 1238 |
|
1238 | | - var rmin = shape.fRmin[layer], rmax = shape.fRmax[layer]; |
| 1239 | + var rmin = factor*shape.fRmin[layer], rmax = factor*shape.fRmax[layer]; |
1239 | 1240 |
|
1240 | 1241 | if (rmin === rmax) continue; |
1241 | 1242 |
|
|
0 commit comments