Skip to content

Commit

Permalink
fixed update
Browse files Browse the repository at this point in the history
  • Loading branch information
Yvonne Jung committed Aug 3, 2013
1 parent 3bf2175 commit 655e055
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 44 deletions.
61 changes: 17 additions & 44 deletions src/nodes/Geometry3D.js
Original file line number Diff line number Diff line change
Expand Up @@ -804,55 +804,28 @@ x3dom.registerNodeType(
fieldChanged: function(fieldName)
{
// TODO; invalidate geometry cache if necessary!
var innerRadius = this._vf.innerRadius;
var outerRadius = this._vf.outerRadius;
var rings = this._vf.subdivision.x, sides = this._vf.subdivision.y;
if (fieldName == "innerRadius" || fieldName == "outerRadius" ||
fieldName == "subdivision" || fieldName == "angle")
{
var innerRadius = this._vf.innerRadius;
var outerRadius = this._vf.outerRadius;
var rings = this._vf.subdivision.x, sides = this._vf.subdivision.y;

// assure that angle in [0, 2 * PI]
var twoPi = 2.0 * Math.PI;
// assure that angle in [0, 2 * PI]
var twoPi = 2.0 * Math.PI;

if (this._vf.angle < 0)
this._vf.angle = 0;
else if (this._vf.angle > twoPi)
this._vf.angle = twoPi;
if (this._vf.angle < 0)
this._vf.angle = 0;
else if (this._vf.angle > twoPi)
this._vf.angle = twoPi;

rings = Math.max(3, Math.round((this._vf.angle / twoPi) * rings));
rings = Math.max(3, Math.round((this._vf.angle / twoPi) * rings));

var ringDelta = this._vf.angle / rings;
var sideDelta = twoPi / sides;
var a, b, theta, phi;
var cosTheta, sinTheta, cosPhi, sinPhi, dist;
var ringDelta = this._vf.angle / rings;
var sideDelta = twoPi / sides;
var a, b, theta, phi;
var cosTheta, sinTheta, cosPhi, sinPhi, dist;

if (fieldName == "innerRadius" || fieldName == "outerRadius")
{
var i = 0;

for (a=0, theta=0; a <= rings; a++, theta+=ringDelta)
{
cosTheta = Math.cos(theta);
sinTheta = Math.sin(theta);

for (b=0, phi=0; b<=sides; b++, phi+=sideDelta)
{
cosPhi = Math.cos(phi);
sinPhi = Math.sin(phi);
dist = outerRadius + innerRadius * cosPhi;

this._mesh._positions[0][i++] = cosTheta * dist;
this._mesh._positions[0][i++] = -sinTheta * dist;
this._mesh._positions[0][i++] = innerRadius * sinPhi;
}
}

this.invalidateVolume();
this._mesh._numCoords = this._mesh._positions[0].length / 3;

Array.forEach(this._parentNodes, function (node) {
node._dirty.positions = true;
});
}
else if (fieldName == "subdivision" || fieldName == "angle")
{
this._mesh._positions[0] = [];
this._mesh._normals[0] = [];
this._mesh._texCoords[0] = [];
Expand Down
4 changes: 4 additions & 0 deletions test/functional/torus.html
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,10 @@
<td>angle</td><!-- 6.283185307179586 -->
<td><input type="text" id="angle" value="3.14159265359" onchange="document.getElementById('geo').setAttribute('angle', this.value);"></td>
</tr>
<tr>
<td>subdivision</td>
<td><input type="text" id="subdivision" value="24 24" onchange="document.getElementById('geo').setAttribute('subdivision', this.value);"></td>
</tr>
</table>
</div>
<div id='Interaction_Toolbox' style='margin:2px; padding:4px; padding-right:150px; background-color:rgba(199,202,204,.7);position:absolute; z-index:1000; right:0px; top:0px;'>
Expand Down

0 comments on commit 655e055

Please sign in to comment.