Skip to content

Commit

Permalink
Pelvis can be rotated
Browse files Browse the repository at this point in the history
  • Loading branch information
boytchev committed Jan 17, 2021
1 parent a0033c7 commit 0f72b8b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
6 changes: 3 additions & 3 deletions mannequin.js
Expand Up @@ -558,7 +558,7 @@ class Leg extends Joint
{
constructor(parentJoint,leftOrRight)
{
super(parentJoint,[0,-3,4*leftOrRight],[0,180,200],[4,15,4,-70,220,1,0.4,2],LimbShape,[-2.8,0.8, -1,-1,1,1]);
super(parentJoint,[0,-3,4*leftOrRight],[0,180,200],[4,15,4,-70,220,1,0.4,2],LimbShape,[-2.8,0.8, -1,-1,3,-2]);
this.leftOrRight = leftOrRight;
}

Expand Down Expand Up @@ -612,7 +612,7 @@ class Ankle extends Joint
{
constructor(parentJoint)
{
super(parentJoint,null,[0,0,-90],[1,4,2],ShoeShape,[-2.8,-0.4, 0,0, 0,0]);
super(parentJoint,null,[0,0,-90],[1,4,2],ShoeShape,[-2.8,-0.4, -1,1, 0,0]);
}

turn(angle,leftOrRight=this.parentJoint.parentJoint.leftOrRight)
Expand All @@ -633,7 +633,7 @@ class Arm extends Joint
{
constructor(parentJoint,leftOrRight)
{
super(parentJoint,[0,14,leftOrRight*(parentJoint.feminine?5:6)],[-leftOrRight*10,leftOrRight*180+180,-leftOrRight*180],[3.5,11,2.5,-90,360,0.9,0.2,1.5],LimbShape,[2,0.4, 0,0, 0,0]);
super(parentJoint,[0,14,leftOrRight*(parentJoint.feminine?5:6)],[-leftOrRight*10,leftOrRight*180+180,-leftOrRight*180],[3.5,11,2.5,-90,360,0.9,0.2,1.5],LimbShape,[2,0.4, 0,0, 0.1,-3]);
this.leftOrRight = leftOrRight;
}

Expand Down
35 changes: 29 additions & 6 deletions posture-editor.html
Expand Up @@ -75,11 +75,11 @@

<body>
<label><input id="m1" type="checkbox" class="toggle" checked><span>&nbsp;Primary &nbsp;axis</span></label>
<label><input id="m2" type="checkbox" class="toggle"><span>&nbsp;Secondary &nbsp;axis</span></label>
<label><input id="m2" type="checkbox" class="toggle" ><span>&nbsp;Secondary &nbsp;axis</span></label>
<label><input id="m3" type="checkbox" class="toggle"><span>&nbsp;Tertiary &nbsp;axis</span></label>
<br>
<label><input id="ik" type="checkbox" class="toggle" checked><span>&nbsp;Inverse &nbsp;kinematics</span></label>
<label><input id="br" type="checkbox" class="toggle" checked><span>&nbsp;Biological &nbsp;restriction</span></label>
<label><input id="br" type="checkbox" class="toggle" ><span>&nbsp;Biological &nbsp;restriction</span></label>

<script>
// create a scene with a better shadow
Expand Down Expand Up @@ -212,8 +212,26 @@
else
joint.rotation.z = THREE.Math.clamp( joint.rotation.z, joint.limit.min.z, Math.PI );
}
if( joint.limit.min.y <= joint.limit.max.y )
joint.rotation.y = THREE.Math.clamp( joint.rotation.y, joint.limit.min.y, joint.limit.max.y );
else
{
if( joint.rotation.y<(joint.limit.min.y+joint.limit.max.y)/2 )
joint.rotation.y = THREE.Math.clamp( joint.rotation.y, -Math.PI, joint.limit.max.y );
else
joint.rotation.y = THREE.Math.clamp( joint.rotation.y, joint.limit.min.y, Math.PI );
}
if( joint.limit.min.x <= joint.limit.max.x )
joint.rotation.x = THREE.Math.clamp( joint.rotation.x, joint.limit.min.x, joint.limit.max.x );
else
{
if( joint.rotation.x<(joint.limit.min.x+joint.limit.max.x)/2 )
joint.rotation.x = THREE.Math.clamp( joint.rotation.x, -Math.PI, joint.limit.max.x );
else
joint.rotation.x = THREE.Math.clamp( joint.rotation.x, joint.limit.min.x, Math.PI );
}
}
console.log('rot.z',joint.rotation.z,'min',joint.limit.min.z,'max',joint.limit.max.z);
// console.log('rot.x',joint.rotation.x.toFixed(2),'rot.y',joint.rotation.y.toFixed(2),'rot.z',joint.rotation.z.toFixed(2));
joint.updateMatrix();
}

Expand Down Expand Up @@ -260,20 +278,25 @@
}
}

function animate()
function animate( time )
{
//var joint = model.l_leg;
//joint.rotation.set( Math.PI, 0, 6.28 - (0.7 + 1.6*Math.sin(time/100)) );
//console.log('rot.x',joint.rotation.x.toFixed(2),'rot.y',joint.rotation.y.toFixed(2),'rot.z',joint.rotation.z.toFixed(2));
//return;

// no selected object
if( !obj ) return;

if( (mouseButton & 0x01) && !elemM2.checked && !elemM3.checked )
{
var joint = obj;
while( !(joint instanceof Pelvis) )
do
{
inverseKinematics( joint, AXIS.Z );
joint = joint.parent.parent;
if( (joint instanceof Torso) || !elemIK.checked ) break;
}
while( !(joint instanceof Mannequin) && !(joint instanceof Pelvis) && !(joint instanceof Torso) && elemIK.checked );
}
else
if( mouseButton & 0x02 || elemM2.checked )
Expand Down

0 comments on commit 0f72b8b

Please sign in to comment.