![]() |
/* - - - - - - - - - - - - - G E O M - - - - - - - - - - - - - - - - - */
- readEulerAngles:sender
{
a0[0]=180.0*[[euRot cellAt:0:0] doubleValue];
a0[1]=180.0*[[euRot cellAt:1:0] doubleValue];
a0[2]=180.0*[[euRot cellAt:2:0] doubleValue];
return self;
}
- readAngleAxis:(double *)a:(double *)aa
{
a[0]=[[cosRot cellAt:0:0] doubleValue];
a[1]=[[cosRot cellAt:1:0] doubleValue];
a[2]=[[cosRot cellAt:2:0] doubleValue];
*aa=[angRot doubleValue];
if (a[0]==0.0&&a[1]==0.0&a[2]==0.0) a[0]=a[1]=a[2]=0.886;
return self;
}
- readParameters:sender
{int i, j; double o[3][3], a[3];
if (strcmp([[sender selectedCell] title],"sphere 1")==0) i=0;
if (strcmp([[sender selectedCell] title],"sphere 2")==0) i=1;
if (strcmp([[sender selectedCell] title],"sphere 3")==0) i=2;
for (j=0; j<3; j++) [[rightCenter cellAt:j:0] setDoubleValue:u[i][j]];
[rightRadius setDoubleValue:u[i][3]];
for (j=0; j<3; j++) [[rightEuler cellAt:j:0] setDoubleValue:u[i][j+4]];
spheu(o,&u[i][4]);
sphdc(a,o);
[[rightAngles cellAt:0:0] setDoubleValue:a[0]];
[[rightAngles cellAt:1:0] setDoubleValue:a[1]];
[[rightAngles cellAt:2:0] setDoubleValue:a[2]];
[[rightAngles cellAt:3:0] setDoubleValue:sphar(o)];
return self;
}
- rotateMolecule:sender
{
m0[0]=[[cosRot cellAt:0:0] doubleValue];
m0[1]=[[cosRot cellAt:1:0] doubleValue];
m0[2]=[[cosRot cellAt:2:0] doubleValue];
m0[3]=360.0*[angRot doubleValue];
if (m0[0]==0.0&&m0[1]==0.0&m0[2]==0.0) m0[0]=m0[1]=m0[2]=0.886;
sphax(mrot,m0[3],m0[0],m0[1],m0[2]);
return self;
}
- setParameters:sender
{int i, j; double o[3][3], a[3];
if (strcmp([sphereMenu title],"sphere 1")==0) i=0;
if (strcmp([sphereMenu title],"sphere 2")==0) i=1;
if (strcmp([sphereMenu title],"sphere 3")==0) i=2;
for (j=0; j<3; j++) u[i][j]=[[rightCenter cellAt:j:0] doubleValue];
u[i][3]=[rightRadius doubleValue];
for (j=0; j<3; j++) u[i][j+4]=[[rightEuler cellAt:j:0] doubleValue];
spheu(o,&u[i][4]);
sphdc(a,o);
[[rightAngles cellAt:0:0] setDoubleValue:a[0]];
[[rightAngles cellAt:1:0] setDoubleValue:a[1]];
[[rightAngles cellAt:2:0] setDoubleValue:a[2]];
[[rightAngles cellAt:3:0] setDoubleValue:sphar(o)];
return self;
}
- setLighting:sender
{
double a[3], aa;
[self readAngleAxis:a:&aa];
sphax(uu,aa,a[0],a[1],a[2]);
[[leftAngles cellAt:0:0] setDoubleValue:a[0]];
[[leftAngles cellAt:1:0] setDoubleValue:a[1]];
[[leftAngles cellAt:2:0] setDoubleValue:a[2]];
[[leftAngles cellAt:3:0] setDoubleValue:sphar(uu)];
return self;
}
- setRotation:sender
{
switch ([sender selectedRow]) {
case 0: [angRot setDoubleValue:90.0/360.0];
[[cosRot cellAt:0:0] setDoubleValue:0.0];
[[cosRot cellAt:1:0] setDoubleValue:1.0];
[[cosRot cellAt:2:0] setDoubleValue:0.0];
break;
case 1: [angRot setDoubleValue:90.0/360.0];
[[cosRot cellAt:0:0] setDoubleValue:0.0];
[[cosRot cellAt:1:0] setDoubleValue:0.0];
[[cosRot cellAt:2:0] setDoubleValue:1.0];
break;
case 2: [angRot setDoubleValue:90.0/360.0];
[[cosRot cellAt:0:0] setDoubleValue:1.0];
[[cosRot cellAt:1:0] setDoubleValue:0.0];
[[cosRot cellAt:2:0] setDoubleValue:0.0];
break;
case 3: [angRot setDoubleValue:60.0/360.0];
[[cosRot cellAt:0:0] setDoubleValue:0.3];
[[cosRot cellAt:1:0] setDoubleValue:0.3];
[[cosRot cellAt:2:0] setDoubleValue:0.3];
break;
default:break;}
return self;
}
- showSphere:sender
{
drawView=0;
drawSphere=YES;
[self display];
drawSphere=NO;
needsClearing = YES;
return self;
}
- showAxSphere:sender
{
drawView=5;
drawAxSphere=YES;
[self display];
drawAxSphere=NO;
needsClearing = YES;
return self;
}
- showEuSphere:sender
{
drawView=5;
drawEuSphere=YES;
[self display];
drawEuSphere=NO;
needsClearing = YES;
return self;
}
- showShadows:sender
{
drawView=0;
drawShadows=YES;
[self display];
drawShadows=NO;
needsClearing = YES;
return self;
}
- prepSpiral:sender
{
pushMe=spImButton;
[spImButton setTitle:"SPIRAL"];
if ([orientButton state]) [euPanel orderFront:self];
[gridPanel performClose:self];
[liPanel performClose:self];
[spPanel performClose:self];
if ([paramButton state]) [spPanel orderFront:self];
return self;
}
- prepGrid:sender
{
pushMe=spImButton;
[spImButton setTitle:"GRID"];
if ([orientButton state]) [euPanel orderFront:self];
[gridPanel performClose:self];
[liPanel performClose:self];
[spPanel performClose:self];
if ([paramButton state]) [gridPanel orderFront:self];
return self;
}
- prepLissa:sender
{
pushMe=spImButton;
[spImButton setTitle:"LISSAJOUS"];
if ([orientButton state]) [euPanel orderFront:self];
[gridPanel performClose:self];
[liPanel performClose:self];
[spPanel performClose:self];
if ([paramButton state]) [liPanel orderFront:self];
return self;
}
- showUnisphere:sender
{
drawUnisphere=YES;
[self display];
drawUnisphere=NO;
needsClearing = YES;
return self;
}
- showDisphere:sender
{
int i;
double o[3][3], a[3], aa;
if (strcmp([[rotateDimer selectedCell] title],"forward")==0) {
[self readAngleAxis:a:&aa];
sphax(o,aa,a[0],a[1],a[2]);
for (i=0; i<3; i++) a[i]=[[leftCenter cellAt:i:0] doubleValue];
sphmv(a,o,a);
for (i=0; i<3; i++) [[leftCenter cellAt:i:0] setDoubleValue:a[i]];
for (i=0; i<3; i++) a[i]=[[rightCenter cellAt:i:0] doubleValue];
sphmv(a,o,a);
for (i=0; i<3; i++) [[rightCenter cellAt:i:0] setDoubleValue:a[i]];
}
if (strcmp([[rotateDimer selectedCell] title],"backward")==0) {
[self readAngleAxis:a:&aa];
sphax(o,-aa,a[0],a[1],a[2]);
for (i=0; i<3; i++) a[i]=[[leftCenter cellAt:i:0] doubleValue];
sphmv(a,o,a);
for (i=0; i<3; i++) [[leftCenter cellAt:i:0] setDoubleValue:a[i]];
for (i=0; i<3; i++) a[i]=[[rightCenter cellAt:i:0] doubleValue];
sphmv(a,o,a);
for (i=0; i<3; i++) [[rightCenter cellAt:i:0] setDoubleValue:a[i]];
}
drawDisphere=YES;
[self display];
drawDisphere=NO;
needsClearing = YES;
return self;
}
- printSphere:sender
{
drawView=0;
drawSphere=YES;
[self printPSCode:self];
drawSphere=NO;
needsClearing = YES;
return self;
}
- printUnisphere:sender
{
drawUnisphere=YES;
[self printPSCode:self];
drawUnisphere=NO;
needsClearing = YES;
return self;
}
- printSpIm:sender
{
sslen=[[spiralData cellAt:1:0] intValue];
sspch=[[spiralData cellAt:0:0] intValue];
drawUnisphere=YES;
[self printPSCode:self];
drawUnisphere=NO;
needsClearing = YES;
return self;
}
- printDisphere:sender
{
drawDisphere=YES;
[self printPSCode:self];
drawDisphere=NO;
needsClearing = YES;
return self;
}
- rotateDimerB:sender
{
[dimerButton setTitle:"Backward"];
return self;
}
- rotateDimerF:sender
{
[dimerButton setTitle:"Forward"];
return self;
}
- rotateDimerN:sender
{
[dimerButton setTitle:"Dimer"];
return self;
}
- pushIt:sender
{
[pushMe performClick:self];
return self;
}