00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #define IKFAST_HAS_LIBRARY
00021 #include "ikfast.h"
00022 using namespace ikfast;
00023
00024
00025 #define IKFAST_COMPILE_ASSERT(x) extern int __dummy[(int)x]
00026 IKFAST_COMPILE_ASSERT(IKFAST_VERSION==0x10000048);
00027
00028 #include <cmath>
00029 #include <vector>
00030 #include <limits>
00031 #include <algorithm>
00032 #include <complex>
00033
00034 #ifndef IKFAST_ASSERT
00035 #include <stdexcept>
00036 #include <sstream>
00037 #include <iostream>
00038
00039 #ifdef _MSC_VER
00040 #ifndef __PRETTY_FUNCTION__
00041 #define __PRETTY_FUNCTION__ __FUNCDNAME__
00042 #endif
00043 #endif
00044
00045 #ifndef __PRETTY_FUNCTION__
00046 #define __PRETTY_FUNCTION__ __func__
00047 #endif
00048
00049 #define IKFAST_ASSERT(b) { if( !(b) ) { std::stringstream ss; ss << "ikfast exception: " << __FILE__ << ":" << __LINE__ << ": " <<__PRETTY_FUNCTION__ << ": Assertion '" << #b << "' failed"; throw std::runtime_error(ss.str()); } }
00050
00051 #endif
00052
00053 #if defined(_MSC_VER)
00054 #define IKFAST_ALIGNED16(x) __declspec(align(16)) x
00055 #else
00056 #define IKFAST_ALIGNED16(x) x __attribute((aligned(16)))
00057 #endif
00058
00059 #define IK2PI ((IkReal)6.28318530717959)
00060 #define IKPI ((IkReal)3.14159265358979)
00061 #define IKPI_2 ((IkReal)1.57079632679490)
00062
00063 #ifdef _MSC_VER
00064 #ifndef isnan
00065 #define isnan _isnan
00066 #endif
00067 #ifndef isinf
00068 #define isinf _isinf
00069 #endif
00070
00071
00072
00073 #endif // _MSC_VER
00074
00075
00076 extern "C" {
00077 void dgetrf_ (const int* m, const int* n, double* a, const int* lda, int* ipiv, int* info);
00078 void zgetrf_ (const int* m, const int* n, std::complex<double>* a, const int* lda, int* ipiv, int* info);
00079 void dgetri_(const int* n, const double* a, const int* lda, int* ipiv, double* work, const int* lwork, int* info);
00080 void dgesv_ (const int* n, const int* nrhs, double* a, const int* lda, int* ipiv, double* b, const int* ldb, int* info);
00081 void dgetrs_(const char *trans, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info);
00082 void dgeev_(const char *jobvl, const char *jobvr, const int *n, double *a, const int *lda, double *wr, double *wi,double *vl, const int *ldvl, double *vr, const int *ldvr, double *work, const int *lwork, int *info);
00083 }
00084
00085 using namespace std;
00086
00087 #ifdef IKFAST_NAMESPACE
00088 namespace IKFAST_NAMESPACE {
00089 #endif
00090
00091 inline float IKabs(float f) { return fabsf(f); }
00092 inline double IKabs(double f) { return fabs(f); }
00093
00094 inline float IKsqr(float f) { return f*f; }
00095 inline double IKsqr(double f) { return f*f; }
00096
00097 inline float IKlog(float f) { return logf(f); }
00098 inline double IKlog(double f) { return log(f); }
00099
00100
00101 #ifndef IKFAST_SINCOS_THRESH
00102 #define IKFAST_SINCOS_THRESH ((IkReal)2e-6)
00103 #endif
00104
00105
00106 #ifndef IKFAST_ATAN2_MAGTHRESH
00107 #define IKFAST_ATAN2_MAGTHRESH ((IkReal)2e-6)
00108 #endif
00109
00110
00111 #ifndef IKFAST_SOLUTION_THRESH
00112 #define IKFAST_SOLUTION_THRESH ((IkReal)1e-6)
00113 #endif
00114
00115
00116 #ifndef IKFAST_EVALCOND_THRESH
00117 #define IKFAST_EVALCOND_THRESH ((IkReal)0.00001)
00118 #endif
00119
00120
00121 inline float IKasin(float f)
00122 {
00123 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH );
00124 if( f <= -1 ) return float(-IKPI_2);
00125 else if( f >= 1 ) return float(IKPI_2);
00126 return asinf(f);
00127 }
00128 inline double IKasin(double f)
00129 {
00130 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH );
00131 if( f <= -1 ) return -IKPI_2;
00132 else if( f >= 1 ) return IKPI_2;
00133 return asin(f);
00134 }
00135
00136
00137 inline float IKfmod(float x, float y)
00138 {
00139 while(x < 0) {
00140 x += y;
00141 }
00142 return fmodf(x,y);
00143 }
00144
00145
00146 inline double IKfmod(double x, double y)
00147 {
00148 while(x < 0) {
00149 x += y;
00150 }
00151 return fmod(x,y);
00152 }
00153
00154 inline float IKacos(float f)
00155 {
00156 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH );
00157 if( f <= -1 ) return float(IKPI);
00158 else if( f >= 1 ) return float(0);
00159 return acosf(f);
00160 }
00161 inline double IKacos(double f)
00162 {
00163 IKFAST_ASSERT( f > -1-IKFAST_SINCOS_THRESH && f < 1+IKFAST_SINCOS_THRESH );
00164 if( f <= -1 ) return IKPI;
00165 else if( f >= 1 ) return 0;
00166 return acos(f);
00167 }
00168 inline float IKsin(float f) { return sinf(f); }
00169 inline double IKsin(double f) { return sin(f); }
00170 inline float IKcos(float f) { return cosf(f); }
00171 inline double IKcos(double f) { return cos(f); }
00172 inline float IKtan(float f) { return tanf(f); }
00173 inline double IKtan(double f) { return tan(f); }
00174 inline float IKsqrt(float f) { if( f <= 0.0f ) return 0.0f; return sqrtf(f); }
00175 inline double IKsqrt(double f) { if( f <= 0.0 ) return 0.0; return sqrt(f); }
00176 inline float IKatan2Simple(float fy, float fx) {
00177 return atan2f(fy,fx);
00178 }
00179 inline float IKatan2(float fy, float fx) {
00180 if( isnan(fy) ) {
00181 IKFAST_ASSERT(!isnan(fx));
00182 return float(IKPI_2);
00183 }
00184 else if( isnan(fx) ) {
00185 return 0;
00186 }
00187 return atan2f(fy,fx);
00188 }
00189 inline double IKatan2Simple(double fy, double fx) {
00190 return atan2(fy,fx);
00191 }
00192 inline double IKatan2(double fy, double fx) {
00193 if( isnan(fy) ) {
00194 IKFAST_ASSERT(!isnan(fx));
00195 return IKPI_2;
00196 }
00197 else if( isnan(fx) ) {
00198 return 0;
00199 }
00200 return atan2(fy,fx);
00201 }
00202
00203 template <typename T>
00204 struct CheckValue
00205 {
00206 T value;
00207 bool valid;
00208 };
00209
00210 template <typename T>
00211 inline CheckValue<T> IKatan2WithCheck(T fy, T fx, T epsilon)
00212 {
00213 CheckValue<T> ret;
00214 ret.valid = false;
00215 ret.value = 0;
00216 if( !isnan(fy) && !isnan(fx) ) {
00217 if( IKabs(fy) >= IKFAST_ATAN2_MAGTHRESH || IKabs(fx) > IKFAST_ATAN2_MAGTHRESH ) {
00218 ret.value = IKatan2Simple(fy,fx);
00219 ret.valid = true;
00220 }
00221 }
00222 return ret;
00223 }
00224
00225 inline float IKsign(float f) {
00226 if( f > 0 ) {
00227 return float(1);
00228 }
00229 else if( f < 0 ) {
00230 return float(-1);
00231 }
00232 return 0;
00233 }
00234
00235 inline double IKsign(double f) {
00236 if( f > 0 ) {
00237 return 1.0;
00238 }
00239 else if( f < 0 ) {
00240 return -1.0;
00241 }
00242 return 0;
00243 }
00244
00245 template <typename T>
00246 inline CheckValue<T> IKPowWithIntegerCheck(T f, int n)
00247 {
00248 CheckValue<T> ret;
00249 ret.valid = true;
00250 if( n == 0 ) {
00251 ret.value = 1.0;
00252 return ret;
00253 }
00254 else if( n == 1 )
00255 {
00256 ret.value = f;
00257 return ret;
00258 }
00259 else if( n < 0 )
00260 {
00261 if( f == 0 )
00262 {
00263 ret.valid = false;
00264 ret.value = (T)1.0e30;
00265 return ret;
00266 }
00267 if( n == -1 ) {
00268 ret.value = T(1.0)/f;
00269 return ret;
00270 }
00271 }
00272
00273 int num = n > 0 ? n : -n;
00274 if( num == 2 ) {
00275 ret.value = f*f;
00276 }
00277 else if( num == 3 ) {
00278 ret.value = f*f*f;
00279 }
00280 else {
00281 ret.value = 1.0;
00282 while(num>0) {
00283 if( num & 1 ) {
00284 ret.value *= f;
00285 }
00286 num >>= 1;
00287 f *= f;
00288 }
00289 }
00290
00291 if( n < 0 ) {
00292 ret.value = T(1.0)/ret.value;
00293 }
00294 return ret;
00295 }
00296
00299 IKFAST_API void ComputeFk(const IkReal* j, IkReal* eetrans, IkReal* eerot) {
00300 IkReal x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33;
00301 x0=IKcos(j[0]);
00302 x1=IKcos(j[1]);
00303 x2=IKcos(j[3]);
00304 x3=IKsin(j[1]);
00305 x4=IKsin(j[2]);
00306 x5=IKcos(j[2]);
00307 x6=IKsin(j[0]);
00308 x7=IKsin(j[3]);
00309 x8=IKsin(j[4]);
00310 x9=IKcos(j[4]);
00311 x10=((0.224)*x3);
00312 x11=((0.05525)*x1);
00313 x12=((0.26630543)*x3);
00314 x13=((0.278775)*x7);
00315 x14=((0.05525)*x3);
00316 x15=((1.0)*x7);
00317 x16=((1.0)*x3);
00318 x17=((0.0137)*x2);
00319 x18=((0.0137)*x3);
00320 x19=((0.05525)*x7);
00321 x20=((1.0)*x2);
00322 x21=((0.278775)*x3);
00323 x22=(x4*x6);
00324 x23=(x0*x5);
00325 x24=(x4*x8);
00326 x25=(x1*x6);
00327 x26=(x0*x1);
00328 x27=(x1*x5);
00329 x28=(x0*x4);
00330 x29=(x5*x6);
00331 x30=(x27*x7);
00332 x31=((((-1.0)*x16*x23))+x22);
00333 x32=((((-1.0)*x28))+(((-1.0)*x16*x29)));
00334 x33=(x31*x7);
00335 eetrans[0]=((-0.096278)+((x0*x12))+((x8*(((((0.05525)*x29))+((x14*x28))))))+((x2*((((x21*x23))+(((-0.278775)*x22))))))+((x7*(((((-1.0)*x18*x23))+(((0.0137)*x22))))))+((x9*(((((-1.0)*x19*x31))+(((-1.0)*x0*x11*x2))))))+(((-0.224)*x22))+((x17*x26))+(((0.00025116)*x6))+((x10*x23))+((x13*x26)));
00336 eetrans[1]=(((x7*(((((-0.0137)*x28))+(((-1.0)*x18*x29))))))+(((-0.00025116)*x0))+(((0.224)*x28))+((x8*(((((-0.05525)*x23))+((x14*x22))))))+((x17*x25))+((x9*(((((-1.0)*x11*x2*x6))+(((-1.0)*x19*x32))))))+((x10*x29))+((x2*((((x21*x29))+(((0.278775)*x28))))))+((x13*x25))+((x12*x6)));
00337 IkReal x34=((1.0)*x3);
00338 eetrans[2]=((0.1384)+((x9*((((x14*x2))+((x11*x5*x7))))))+(((0.278775)*x2*x27))+(((-0.0137)*x30))+(((0.224)*x27))+((x11*x24))+(((0.26630543)*x1))+(((-1.0)*x17*x34))+(((-1.0)*x13*x34)));
00339 eerot[0]=(((x9*(((((-1.0)*x15*x31))+(((-1.0)*x20*x26))))))+((x8*(((((1.0)*x29))+((x16*x28)))))));
00340 eerot[1]=(((x8*(((((-1.0)*x23))+((x16*x22))))))+((x9*(((((-1.0)*x15*x32))+(((-1.0)*x20*x25)))))));
00341 eerot[2]=(((x1*x24))+((x9*((((x16*x2))+((x15*x27)))))));
00342 }
00343
00344 IKFAST_API int GetNumFreeParameters() { return 0; }
00345 IKFAST_API int* GetFreeParameters() { return NULL; }
00346 IKFAST_API int GetNumJoints() { return 5; }
00347
00348 IKFAST_API int GetIkRealSize() { return sizeof(IkReal); }
00349
00350 IKFAST_API int GetIkType() { return 0x56000007; }
00351
00352 class IKSolver {
00353 public:
00354 IkReal j0,cj0,sj0,htj0,j0mul,j1,cj1,sj1,htj1,j1mul,j2,cj2,sj2,htj2,j2mul,j3,cj3,sj3,htj3,j3mul,j4,cj4,sj4,htj4,j4mul,new_r00,r00,rxp0_0,new_r01,r01,rxp0_1,new_r02,r02,rxp0_2,new_px,px,npx,new_py,py,npy,new_pz,pz,npz,pp;
00355 unsigned char _ij0[2], _nj0,_ij1[2], _nj1,_ij2[2], _nj2,_ij3[2], _nj3,_ij4[2], _nj4;
00356
00357 IkReal j100, cj100, sj100;
00358 unsigned char _ij100[2], _nj100;
00359 bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions) {
00360 j0=numeric_limits<IkReal>::quiet_NaN(); _ij0[0] = -1; _ij0[1] = -1; _nj0 = -1; j1=numeric_limits<IkReal>::quiet_NaN(); _ij1[0] = -1; _ij1[1] = -1; _nj1 = -1; j2=numeric_limits<IkReal>::quiet_NaN(); _ij2[0] = -1; _ij2[1] = -1; _nj2 = -1; j3=numeric_limits<IkReal>::quiet_NaN(); _ij3[0] = -1; _ij3[1] = -1; _nj3 = -1; j4=numeric_limits<IkReal>::quiet_NaN(); _ij4[0] = -1; _ij4[1] = -1; _nj4 = -1;
00361 for(int dummyiter = 0; dummyiter < 1; ++dummyiter) {
00362 solutions.Clear();
00363 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
00364
00365 r00 = eerot[0];
00366 r01 = eerot[1];
00367 r02 = eerot[2];
00368 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
00369 new_r00=r00;
00370 new_px=((0.096278)+px);
00371 new_r01=r01;
00372 new_py=py;
00373 new_r02=r02;
00374 new_pz=((-0.1384)+pz);
00375 r00 = new_r00; r01 = new_r01; r02 = new_r02; px = new_px; py = new_py; pz = new_pz;
00376
00377 pp=((px*px)+(py*py)+(pz*pz));
00378 IkReal op[72], zeror[48];
00379 int numroots;;
00380 IkReal x35=((35333.2792854729)*pz);
00381 IkReal x36=((18.0995475113122)*py);
00382 IkReal x37=((1.0)*r01);
00383 IkReal x38=((1952.16368052238)*r02);
00384 IkReal x39=((16142.2943244702)*py);
00385 IkReal x40=((891.861761426979)*r01);
00386 IkReal x41=((168.440157668419)*r02);
00387 IkReal x42=((3048.69063653246)*pz);
00388 IkReal x43=py*py;
00389 IkReal x44=px*px;
00390 IkReal x45=pz*pz;
00391 IkReal x46=((5.83026305876777)*py);
00392 IkReal x47=((4156.77161760842)*r02);
00393 IkReal x48=((5.97270654947333)*r01);
00394 IkReal x49=((6181.83911004247)*pz);
00395 IkReal x50=((255.536202787557)*px);
00396 IkReal x51=((221.063729043594)*r00);
00397 IkReal x52=((3438.02224616942)*r01);
00398 IkReal x53=((6458.91954274932)*r01);
00399 IkReal x54=((4476.25753728975)*py);
00400 IkReal x55=((9.97699972614964)*r02);
00401 IkReal x56=((4476.25753728975)*pz);
00402 IkReal x57=((219.979296066253)*px);
00403 IkReal x58=((4119.70730296205)*r02);
00404 IkReal x59=((5.41892673344891)*r01);
00405 IkReal x60=((190.303538090919)*r00);
00406 IkReal x61=((2.0)*r00);
00407 IkReal x62=((1783.72352285396)*r00);
00408 IkReal x63=((32284.5886489404)*px);
00409 IkReal x64=((36.1990950226244)*px);
00410 IkReal x65=((11.9454130989467)*r00);
00411 IkReal x66=((442.127458087189)*r01);
00412 IkReal x67=((511.072405575114)*py);
00413 IkReal x68=((11.6605261175355)*px);
00414 IkReal x69=((6876.04449233884)*r00);
00415 IkReal x70=((8952.5150745795)*px);
00416 IkReal x71=((12917.8390854986)*r00);
00417 IkReal x72=((10.8378534668978)*r00);
00418 IkReal x73=((380.607076181838)*r01);
00419 IkReal x74=((439.958592132505)*py);
00420 IkReal x75=((70666.5585709457)*px);
00421 IkReal x76=((3904.32736104475)*r00);
00422 IkReal x77=((336.880315336837)*r00);
00423 IkReal x78=((6097.38127306492)*px);
00424 IkReal x79=((12363.6782200849)*px);
00425 IkReal x80=((8313.54323521684)*r00);
00426 IkReal x81=((442.127458087189)*r02);
00427 IkReal x82=((511.072405575114)*pz);
00428 IkReal x83=((1.0)*r02);
00429 IkReal x84=(py*r00);
00430 IkReal x85=((19.9539994522993)*r00);
00431 IkReal x86=((380.607076181838)*r02);
00432 IkReal x87=((8239.41460592409)*r00);
00433 IkReal x88=((439.958592132505)*pz);
00434 IkReal x89=(px*r01);
00435 IkReal x90=((162036.47193809)*r01);
00436 IkReal x91=((47056.9111418576)*r01);
00437 IkReal x92=(py*r02);
00438 IkReal x93=(px*r02);
00439 IkReal x94=((3981.52572065616)*pz);
00440 IkReal x95=(pz*r01);
00441 IkReal x96=((9250.1792864274)*py);
00442 IkReal x97=(pz*r00);
00443 IkReal x98=(py*r01);
00444 IkReal x99=((4625.0896432137)*r02);
00445 IkReal x100=((94113.8222837152)*px);
00446 IkReal x101=((81018.2359690452)*r00);
00447 IkReal x102=((81018.2359690452)*px);
00448 IkReal x103=((7963.05144131231)*px);
00449 IkReal x104=(pz*r02);
00450 IkReal x105=(px*r00);
00451 IkReal x106=((36031.9069742639)*x43);
00452 IkReal x107=((36031.9069742639)*x44);
00453 IkReal x108=((36031.9069742639)*x45);
00454 IkReal x109=((3981.52572065616)*x105);
00455 IkReal x110=((3981.52572065616)*x98);
00456 IkReal x111=(r02*x94);
00457 IkReal x112=((23780.4847486596)*x105);
00458 IkReal x113=((11606.6711633377)*x44);
00459 IkReal x114=((23780.4847486596)*x98);
00460 IkReal x115=((11606.6711633377)*x45);
00461 IkReal x116=((11606.6711633377)*x43);
00462 IkReal x117=((23780.4847486596)*x104);
00463 IkReal x118=((1231.68648622457)*x93);
00464 IkReal x119=((23.6376276047779)*x95);
00465 IkReal x120=((1.16163751478955)*x89);
00466 IkReal x121=((1.16163751478955)*x84);
00467 IkReal x122=((23.6376276047779)*x92);
00468 IkReal x123=((1231.68648622457)*x97);
00469 IkReal x124=(r01*x94);
00470 IkReal x125=((3981.52572065616)*x92);
00471 IkReal x126=((23.6376276047779)*x105);
00472 IkReal x127=((23.6376276047779)*x98);
00473 IkReal x128=((23.6376276047779)*x104);
00474 IkReal x129=((39723.6810246442)*x95);
00475 IkReal x130=((39723.6810246442)*x92);
00476 IkReal x131=((20.3485401459854)*x105);
00477 IkReal x132=((20.3485401459854)*x104);
00478 IkReal x133=((20.3485401459854)*x98);
00479 IkReal x134=((1060.3019190954)*x93);
00480 IkReal x135=((20.3485401459854)*x92);
00481 IkReal x136=((21575.5961675781)*x105);
00482 IkReal x137=((1060.3019190954)*x97);
00483 IkReal x138=((21575.5961675781)*x104);
00484 IkReal x139=((21575.5961675781)*x98);
00485 IkReal x140=((20.3485401459854)*x95);
00486 IkReal x141=(x61+(((-1.0)*x64)));
00487 IkReal x142=(x63+(((-1.0)*x62)));
00488 IkReal x143=(x62+(((-1.0)*x63)));
00489 IkReal x144=(x64+(((-1.0)*x61)));
00490 IkReal x145=((2463.37297244914)*x92);
00491 IkReal x146=((47.2752552095558)*x93);
00492 IkReal x147=((2463.37297244914)*x95);
00493 IkReal x148=((47.2752552095558)*x97);
00494 IkReal x149=((7963.05144131231)*x93);
00495 IkReal x150=((7963.05144131231)*x97);
00496 IkReal x151=((79447.3620492884)*x93);
00497 IkReal x152=((79447.3620492884)*x97);
00498 IkReal x153=((2120.60383819079)*x92);
00499 IkReal x154=((40.6970802919708)*x97);
00500 IkReal x155=((40.6970802919708)*x93);
00501 IkReal x156=((2120.60383819079)*x95);
00502 IkReal x157=((2.32327502957911)*x92);
00503 IkReal x158=((47.2752552095558)*x84);
00504 IkReal x159=((47.2752552095558)*x89);
00505 IkReal x160=((2.32327502957911)*x95);
00506 IkReal x161=((7963.05144131231)*x84);
00507 IkReal x162=((7963.05144131231)*x89);
00508 IkReal x163=(px*x37);
00509 IkReal x164=((79447.3620492884)*x84);
00510 IkReal x165=((79447.3620492884)*x89);
00511 IkReal x166=((40.6970802919708)*x89);
00512 IkReal x167=((2.0)*x92);
00513 IkReal x168=((2.0)*x95);
00514 IkReal x169=((40.6970802919708)*x84);
00515 IkReal x170=((1.0)*x84);
00516 IkReal x171=((5965.04075006289)+x35);
00517 IkReal x172=((5965.04075006289)+x38);
00518 IkReal x173=((2632.5205124663)+x42);
00519 IkReal x174=((2632.5205124663)+x41);
00520 IkReal x175=(r00*x45);
00521 IkReal x176=(r01*x44);
00522 IkReal x177=(r02*x45);
00523 IkReal x178=((40509.1179845226)*x43);
00524 IkReal x179=(r00*x43);
00525 IkReal x180=(r02*x44);
00526 IkReal x181=(r02*x43);
00527 IkReal x182=(r01*x45);
00528 IkReal x183=(r01*x43);
00529 IkReal x184=(r00*x44);
00530 IkReal x185=((-4.05429864253394)+(((-1.0)*x39))+x40);
00531 IkReal x186=((4.05429864253394)+(((-1.0)*x40))+x39);
00532 IkReal x187=((2312.54482160685)*x184);
00533 IkReal x188=((4625.0896432137)*py*x89);
00534 IkReal x189=((47056.9111418576)*x177);
00535 IkReal x190=((4625.0896432137)*pz*x93);
00536 IkReal x191=(x100*x97);
00537 IkReal x192=((94113.8222837152)*py*x95);
00538 IkReal x193=((2312.54482160685)*x179);
00539 IkReal x194=((47056.9111418576)*x180);
00540 IkReal x195=((2312.54482160685)*x175);
00541 IkReal x196=((47056.9111418576)*x181);
00542 IkReal x197=(x44*x91);
00543 IkReal x198=(x45*x91);
00544 IkReal x199=(x43*x91);
00545 IkReal x200=((94113.8222837152)*pz*x92);
00546 IkReal x201=(x100*x84);
00547 IkReal x202=((40509.1179845226)*x176);
00548 IkReal x203=((40509.1179845226)*x182);
00549 IkReal x204=(r01*x178);
00550 IkReal x205=(x102*x84);
00551 IkReal x206=((81018.2359690452)*pz*x92);
00552 IkReal x207=((3981.52572065616)*py*x89);
00553 IkReal x208=((1990.76286032808)*x184);
00554 IkReal x209=(r02*x178);
00555 IkReal x210=((40509.1179845226)*x180);
00556 IkReal x211=(x93*x94);
00557 IkReal x212=((1990.76286032808)*x175);
00558 IkReal x213=(x102*x97);
00559 IkReal x214=((1990.76286032808)*x179);
00560 IkReal x215=((40509.1179845226)*x177);
00561 IkReal x216=((81018.2359690452)*py*x95);
00562 IkReal x217=((94113.8222837152)*x184);
00563 IkReal x218=((188227.64456743)*pz*x93);
00564 IkReal x219=((188227.64456743)*py*x89);
00565 IkReal x220=((94113.8222837152)*x175);
00566 IkReal x221=((94113.8222837152)*x179);
00567 IkReal x222=((9250.1792864274)*px*x84);
00568 IkReal x223=((4625.0896432137)*x183);
00569 IkReal x224=((9250.1792864274)*pz*x92);
00570 IkReal x225=((4625.0896432137)*x182);
00571 IkReal x226=((4625.0896432137)*x176);
00572 IkReal x227=(x101*x44);
00573 IkReal x228=((162036.47193809)*py*x89);
00574 IkReal x229=((162036.47193809)*pz*x93);
00575 IkReal x230=(x101*x43);
00576 IkReal x231=(x101*x45);
00577 IkReal x232=((3981.52572065616)*x183);
00578 IkReal x233=(x103*x84);
00579 IkReal x234=((7963.05144131231)*pz*x92);
00580 IkReal x235=((3981.52572065616)*x176);
00581 IkReal x236=((3981.52572065616)*x182);
00582 IkReal x237=((-4.05429864253394)+(((-1.0)*x40))+x39);
00583 IkReal x238=((4.05429864253394)+(((-1.0)*x39))+x40);
00584 IkReal x239=((9250.1792864274)*px*x97);
00585 IkReal x240=(x45*x99);
00586 IkReal x241=(x95*x96);
00587 IkReal x242=(x44*x99);
00588 IkReal x243=(x43*x99);
00589 IkReal x244=((3981.52572065616)*x177);
00590 IkReal x245=(x103*x97);
00591 IkReal x246=((7963.05144131231)*py*x95);
00592 IkReal x247=((3981.52572065616)*x181);
00593 IkReal x248=((3981.52572065616)*x180);
00594 IkReal x249=(x129+x55);
00595 IkReal x250=(x130+x55);
00596 IkReal x251=(x153+x72);
00597 IkReal x252=(x168+x87);
00598 IkReal x253=(x147+x65+x68);
00599 IkReal x254=(x157+x79+x80);
00600 IkReal x255=(x118+x48+x46);
00601 IkReal x256=(x221+x220);
00602 IkReal x257=(x111+x110+x109);
00603 IkReal x258=(x126+x127+x128);
00604 IkReal x259=(x230+x231+x70);
00605 IkReal x260=(x108+x106+x107+r01);
00606 IkReal x261=(x124+x198+x197);
00607 IkReal x262=(x108+x106+x107+x36);
00608 IkReal x263=(x125+x198+x197);
00609 IkReal x264=(x108+x106+x107+x37);
00610 IkReal x265=(x121+x196+x194);
00611 IkReal x266=(x217+x218+x219);
00612 IkReal x267=(x229+x228+x227);
00613 IkReal x268=((1192.05168825869)+x210+x209+x56+x89);
00614 IkReal x269=((1.12425684306569)+x206+x205+x204);
00615 IkReal x270=((1.12425684306569)+x203+x202+x54+x53);
00616 IkReal x271=(x199+x201+x200+x52);
00617 IkReal x272=(x123+x265);
00618 IkReal x273=(x159+x243+x242+x82+x81);
00619 IkReal x274=(x169+x247+x248+x88+x86);
00620 IkReal x275=(x158+x239+x241+x240);
00621 IkReal x276=(x154+x232+x233+x234);
00622 IkReal x277=(x146+x223+x222+x224);
00623 IkReal x278=(x155+x236+x235+x74+x73);
00624 IkReal x279=(x148+x225+x226+x66+x67);
00625 IkReal x280=(x122+x193+x195+x51+x50);
00626 IkReal x281=(x119+x190+x187+x188);
00627 IkReal x282=(x166+x246+x245+x244);
00628 IkReal x283=((1192.05168825869)+x213+x215+x216+x58+x84);
00629 IkReal x284=(x135+x134+x211+x207+x208);
00630 IkReal x285=(x140+x134+x212+x214+x57+x60);
00631 IkReal x286=(x120+x192+x191+x189+x49+x47);
00632 IkReal x287=((536.739098635255)+x113+x112+x117+x116+x115+x114);
00633 IkReal x288=(x140+x137+x212+x214+x59+x57+x60);
00634 IkReal x289=(x135+x137+x211+x207+x208+x59);
00635 IkReal x290=(x131+x133+x132+x203+x202+x54+x53);
00636 IkReal x291=(x131+x133+x132+x206+x205+x204);
00637 IkReal x292=(x163+x136+x139+x138+x210+x209+x56);
00638 IkReal x293=(x170+x136+x139+x138+x213+x215+x216+x58);
00639 op[0]=((((-1.0)*x35))+(((-1.0)*x37))+x172+x262+(((-1.0)*x257)));
00640 op[1]=x185;
00641 op[2]=((((-1.0)*x75))+x76);
00642 op[3]=0;
00643 op[4]=((((-1.0)*x38))+(((-1.0)*x37))+x171+x262+(((-1.0)*x257)));
00644 op[5]=x185;
00645 op[6]=x186;
00646 op[7]=((((-1.0)*x41))+x173+x257+r01+(((-1.0)*x262)));
00647 op[8]=0;
00648 op[9]=((((-1.0)*x77))+x78);
00649 op[10]=x186;
00650 op[11]=((((-1.0)*x42))+x174+x257+r01+(((-1.0)*x262)));
00651 op[12]=((((-1.0)*x123))+x255+x265+x287+x280+(((-1.0)*x281))+(((-1.0)*x286)));
00652 op[13]=((((-1.0)*x124))+x263+r02+(((-1.0)*x271))+(((-1.0)*x258)));
00653 op[14]=(x160+x256+x275+(((-1.0)*x273))+(((-1.0)*x266))+(((-1.0)*x254)));
00654 op[15]=((((-1.0)*x162))+x161+x61);
00655 op[16]=(x255+x287+x286+x281+(((-1.0)*x272))+(((-1.0)*x280)));
00656 op[17]=((((-1.0)*x125))+x261+(((-1.0)*x271))+(((-1.0)*x83))+(((-1.0)*x258)));
00657 op[18]=((((-1.0)*x291))+(((-1.0)*x129))+x250+x270);
00658 op[19]=((((-1.0)*x292))+x285+x283+(((-1.0)*x289)));
00659 op[20]=((((-1.0)*x165))+x164+x85);
00660 op[21]=((((-1.0)*x167))+x252+x267+x282+(((-1.0)*x274))+(((-1.0)*x259)));
00661 op[22]=((((-1.0)*x291))+x129+x270+(((-1.0)*x250)));
00662 op[23]=((((-1.0)*x293))+x268+x284+(((-1.0)*x288)));
00663 op[24]=x141;
00664 op[25]=x142;
00665 op[26]=((((7808.6547220895)*r01))+(((-141333.117141891)*py)));
00666 op[27]=0;
00667 op[28]=x141;
00668 op[29]=x142;
00669 op[30]=x143;
00670 op[31]=x144;
00671 op[32]=0;
00672 op[33]=((((12194.7625461298)*py))+(((-673.760630673674)*r01)));
00673 op[34]=x143;
00674 op[35]=x144;
00675 op[36]=(x145+x279+(((-1.0)*x277))+(((-1.0)*x253)));
00676 op[37]=((((-1.0)*x149))+x150+x266+x69+(((-1.0)*x256)));
00677 op[38]=((((188227.64456743)*x182))+(((-24727.3564401699)*py))+(((-376455.289134861)*pz*x92))+(((4.64655005915821)*x93))+(((-376455.289134861)*px*x84))+(((-188227.64456743)*x183))+(((-4.64655005915821)*x97))+(((-16627.0864704337)*r01))+(((188227.64456743)*x176)));
00678 op[39]=((4.0)*r01);
00679 op[40]=(x145+x277+(((-1.0)*x279))+(((-1.0)*x253)));
00680 op[41]=((((-1.0)*x150))+x149+x266+x69+(((-1.0)*x256)));
00681 op[42]=((((-1.0)*x151))+(((-1.0)*x71))+x152+x267+(((-1.0)*x259)));
00682 op[43]=((((-1.0)*x156))+x251+x278+(((-1.0)*x276)));
00683 op[44]=((39.9079989045985)*r01);
00684 op[45]=((((-4.0)*x97))+(((-1.0)*x44*x90))+(((324072.943876181)*px*x84))+(((-1.0)*x45*x90))+(((16478.8292118482)*r01))+(((-17905.030149159)*py))+((x43*x90))+(((4.0)*x93))+(((324072.943876181)*pz*x92)));
00685 op[46]=((((-1.0)*x152))+(((-1.0)*x71))+x151+x267+(((-1.0)*x259)));
00686 op[47]=((((-1.0)*x156))+x251+x276+(((-1.0)*x278)));
00687 op[48]=((((-1.0)*x35))+(((-1.0)*x36))+x172+x260+(((-1.0)*x257)));
00688 op[49]=x237;
00689 op[50]=((((-1.0)*x76))+x75);
00690 op[51]=0;
00691 op[52]=((((-1.0)*x38))+(((-1.0)*x36))+x171+x260+(((-1.0)*x257)));
00692 op[53]=x237;
00693 op[54]=x238;
00694 op[55]=((((-1.0)*x41))+x173+x257+x36+(((-1.0)*x264)));
00695 op[56]=0;
00696 op[57]=((((-1.0)*x78))+x77);
00697 op[58]=x238;
00698 op[59]=((((-1.0)*x42))+x174+x257+x36+(((-1.0)*x264)));
00699 op[60]=(x272+x287+x281+(((-1.0)*x280))+(((-1.0)*x286))+(((-1.0)*x255)));
00700 op[61]=(x124+x271+r02+(((-1.0)*x263))+(((-1.0)*x258)));
00701 op[62]=((((-1.0)*x160))+x254+x266+x275+(((-1.0)*x273))+(((-1.0)*x256)));
00702 op[63]=((((-1.0)*x162))+x161+(((-1.0)*x61)));
00703 op[64]=(x123+x287+x286+x280+(((-1.0)*x281))+(((-1.0)*x265))+(((-1.0)*x255)));
00704 op[65]=(x125+x271+(((-1.0)*x261))+(((-1.0)*x83))+(((-1.0)*x258)));
00705 op[66]=((((-1.0)*x290))+(((-1.0)*x130))+x269+x249);
00706 op[67]=((((-1.0)*x292))+x289+x283+(((-1.0)*x285)));
00707 op[68]=((((-1.0)*x165))+x164+(((-1.0)*x85)));
00708 op[69]=(x167+x259+x282+(((-1.0)*x274))+(((-1.0)*x267))+(((-1.0)*x252)));
00709 op[70]=((((-1.0)*x290))+x130+x269+(((-1.0)*x249)));
00710 op[71]=((((-1.0)*x293))+x268+x288+(((-1.0)*x284)));
00711 solvedialyticpoly8qep(op,zeror,numroots);
00712 IkReal j0array[16], cj0array[16], sj0array[16], j1array[16], cj1array[16], sj1array[16], j2array[16], cj2array[16], sj2array[16];
00713 int numsolutions = 0;
00714 for(int ij0 = 0; ij0 < numroots; ij0 += 3)
00715 {
00716 IkReal htj0 = zeror[ij0+0], htj1 = zeror[ij0+1], htj2 = zeror[ij0+2];
00717 if(isnan(htj0)||isnan(htj1)||isnan(htj2)){
00718 continue;
00719 }
00720 j0array[numsolutions]=((2.0)*(atan(htj0)));
00721 j1array[numsolutions]=((2.0)*(atan(htj1)));
00722 j2array[numsolutions]=((2.0)*(atan(htj2)));
00723 if(isinf(htj0)){
00724 cj0array[numsolutions] = IKcos(j0array[numsolutions]);
00725 sj0array[numsolutions] = IKsin(j0array[numsolutions]);
00726 }
00727 else{
00728 IkReal x294=htj0*htj0;
00729 CheckValue<IkReal> x295=IKPowWithIntegerCheck(((1.0)+x294),-1);
00730 if(!x295.valid){
00731 continue;
00732 }
00733 cj0array[numsolutions]=((x295.value)*(((1.0)+(((-1.0)*x294)))));
00734 CheckValue<IkReal> x296=IKPowWithIntegerCheck(((1.0)+(htj0*htj0)),-1);
00735 if(!x296.valid){
00736 continue;
00737 }
00738 sj0array[numsolutions]=((2.0)*htj0*(x296.value));
00739 }
00740 if(isinf(htj1)){
00741 cj1array[numsolutions] = IKcos(j1array[numsolutions]);
00742 sj1array[numsolutions] = IKsin(j1array[numsolutions]);
00743 }
00744 else{
00745 IkReal x297=htj1*htj1;
00746 CheckValue<IkReal> x298=IKPowWithIntegerCheck(((1.0)+x297),-1);
00747 if(!x298.valid){
00748 continue;
00749 }
00750 cj1array[numsolutions]=((x298.value)*(((1.0)+(((-1.0)*x297)))));
00751 CheckValue<IkReal> x299=IKPowWithIntegerCheck(((1.0)+(htj1*htj1)),-1);
00752 if(!x299.valid){
00753 continue;
00754 }
00755 sj1array[numsolutions]=((2.0)*htj1*(x299.value));
00756 }
00757 if(isinf(htj2)){
00758 cj2array[numsolutions] = IKcos(j2array[numsolutions]);
00759 sj2array[numsolutions] = IKsin(j2array[numsolutions]);
00760 }
00761 else{
00762 IkReal x300=htj2*htj2;
00763 CheckValue<IkReal> x301=IKPowWithIntegerCheck(((1.0)+x300),-1);
00764 if(!x301.valid){
00765 continue;
00766 }
00767 cj2array[numsolutions]=((x301.value)*(((1.0)+(((-1.0)*x300)))));
00768 CheckValue<IkReal> x302=IKPowWithIntegerCheck(((1.0)+(htj2*htj2)),-1);
00769 if(!x302.valid){
00770 continue;
00771 }
00772 sj2array[numsolutions]=((2.0)*htj2*(x302.value));
00773 }
00774 if( j0array[numsolutions] > IKPI )
00775 {
00776 j0array[numsolutions]-=IK2PI;
00777 }
00778 else if( j0array[numsolutions] < -IKPI )
00779 {
00780 j0array[numsolutions]+=IK2PI;
00781 }
00782 if( j1array[numsolutions] > IKPI )
00783 {
00784 j1array[numsolutions]-=IK2PI;
00785 }
00786 else if( j1array[numsolutions] < -IKPI )
00787 {
00788 j1array[numsolutions]+=IK2PI;
00789 }
00790 if( j2array[numsolutions] > IKPI )
00791 {
00792 j2array[numsolutions]-=IK2PI;
00793 }
00794 else if( j2array[numsolutions] < -IKPI )
00795 {
00796 j2array[numsolutions]+=IK2PI;
00797 }
00798 numsolutions++;
00799 }
00800 bool j0valid[16]={true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true};
00801 _nj0 = 16;
00802 _nj1 = 1;
00803 _nj2 = 1;
00804 for(int ij0 = 0; ij0 < numsolutions; ++ij0)
00805 {
00806 if( !j0valid[ij0] )
00807 {
00808 continue;
00809 }
00810 _ij0[0] = ij0; _ij0[1] = -1;
00811 _ij1[0] = 0; _ij1[1] = -1;
00812 _ij2[0] = 0; _ij2[1] = -1;
00813 for(int iij0 = ij0+1; iij0 < numsolutions; ++iij0)
00814 {
00815 if( !j0valid[iij0] ) { continue; }
00816 if( IKabs(cj0array[ij0]-cj0array[iij0]) < IKFAST_SOLUTION_THRESH && IKabs(sj0array[ij0]-sj0array[iij0]) < IKFAST_SOLUTION_THRESH && IKabs(cj1array[ij0]-cj1array[iij0]) < IKFAST_SOLUTION_THRESH && IKabs(sj1array[ij0]-sj1array[iij0]) < IKFAST_SOLUTION_THRESH && IKabs(cj2array[ij0]-cj2array[iij0]) < IKFAST_SOLUTION_THRESH && IKabs(sj2array[ij0]-sj2array[iij0]) < IKFAST_SOLUTION_THRESH && 1 )
00817 {
00818 j0valid[iij0]=false; _ij0[1] = iij0; _ij1[1] = 0; _ij2[1] = 0; break;
00819 }
00820 }
00821 j0 = j0array[ij0]; cj0 = cj0array[ij0]; sj0 = sj0array[ij0];
00822
00823 j1 = j1array[ij0]; cj1 = cj1array[ij0]; sj1 = sj1array[ij0];
00824
00825 j2 = j2array[ij0]; cj2 = cj2array[ij0]; sj2 = sj2array[ij0];
00826
00827 innerfn(solutions);
00828 }
00829 }
00830 return solutions.GetNumSolutions()>0;
00831 }
00832 inline void innerfn(IkSolutionListBase<IkReal>& solutions) {
00833 for(int fniter = 0; fniter < 1; ++fniter) {
00834 {
00835 IkReal j3eval[2];
00836 IkReal x303=sj2*sj2;
00837 j3eval[0]=x303;
00838 j3eval[1]=IKsign(x303);
00839 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
00840 {
00841 {
00842 IkReal j3eval[2];
00843 IkReal x304=cj2*cj2;
00844 j3eval[0]=x304;
00845 j3eval[1]=IKsign(x304);
00846 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
00847 {
00848 {
00849 IkReal j4eval[1];
00850 j4eval[0]=((((-1.0)*(cj2*cj2)))+(((-1.0)*(sj2*sj2))));
00851 if( IKabs(j4eval[0]) < 0.0000010000000000 )
00852 {
00853 {
00854 IkReal evalcond[1];
00855 bool bgotonextstatement = true;
00856 do
00857 {
00858 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j2)))), 6.28318530717959)));
00859 if( IKabs(evalcond[0]) < 0.0000010000000000 )
00860 {
00861 bgotonextstatement=false;
00862 {
00863 IkReal j3array[1], cj3array[1], sj3array[1];
00864 bool j3valid[1]={false};
00865 _nj3 = 1;
00866 IkReal x305=(pz*sj1);
00867 IkReal x306=(cj1*sj0);
00868 IkReal x307=((3.57847987692738)*py);
00869 IkReal x308=((0.197711013200238)*r01);
00870 IkReal x309=(r00*sj0);
00871 IkReal x310=(cj0*cj1);
00872 IkReal x311=((3.57847987692738)*px);
00873 IkReal x312=((0.175859292669375)*px);
00874 IkReal x313=(r02*sj1);
00875 IkReal x314=((0.175859292669375)*py);
00876 IkReal x315=((0.00971622591998298)*r01);
00877 if( IKabs(((0.0393483127379932)+(((-1.0)*cj0*x314))+((x310*x311))+(((0.197711013200238)*x313))+((sj0*x312))+(((-1.0)*x306*x308))+(((-0.197711013200238)*r00*x310))+((cj0*x315))+(((-0.00971622591998298)*x309))+(((-3.57847987692738)*x305))+((x306*x307)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-0.800680721425843)+((x310*x312))+(((-1.0)*cj0*x308))+(((-1.0)*x306*x315))+((cj0*x307))+((x306*x314))+(((-0.00971622591998298)*r00*x310))+(((-0.175859292669375)*x305))+(((0.00971622591998298)*x313))+(((-1.0)*sj0*x311))+(((0.197711013200238)*x309)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0393483127379932)+(((-1.0)*cj0*x314))+((x310*x311))+(((0.197711013200238)*x313))+((sj0*x312))+(((-1.0)*x306*x308))+(((-0.197711013200238)*r00*x310))+((cj0*x315))+(((-0.00971622591998298)*x309))+(((-3.57847987692738)*x305))+((x306*x307))))+IKsqr(((-0.800680721425843)+((x310*x312))+(((-1.0)*cj0*x308))+(((-1.0)*x306*x315))+((cj0*x307))+((x306*x314))+(((-0.00971622591998298)*r00*x310))+(((-0.175859292669375)*x305))+(((0.00971622591998298)*x313))+(((-1.0)*sj0*x311))+(((0.197711013200238)*x309))))-1) <= IKFAST_SINCOS_THRESH )
00878 continue;
00879 j3array[0]=IKatan2(((0.0393483127379932)+(((-1.0)*cj0*x314))+((x310*x311))+(((0.197711013200238)*x313))+((sj0*x312))+(((-1.0)*x306*x308))+(((-0.197711013200238)*r00*x310))+((cj0*x315))+(((-0.00971622591998298)*x309))+(((-3.57847987692738)*x305))+((x306*x307))), ((-0.800680721425843)+((x310*x312))+(((-1.0)*cj0*x308))+(((-1.0)*x306*x315))+((cj0*x307))+((x306*x314))+(((-0.00971622591998298)*r00*x310))+(((-0.175859292669375)*x305))+(((0.00971622591998298)*x313))+(((-1.0)*sj0*x311))+(((0.197711013200238)*x309))));
00880 sj3array[0]=IKsin(j3array[0]);
00881 cj3array[0]=IKcos(j3array[0]);
00882 if( j3array[0] > IKPI )
00883 {
00884 j3array[0]-=IK2PI;
00885 }
00886 else if( j3array[0] < -IKPI )
00887 { j3array[0]+=IK2PI;
00888 }
00889 j3valid[0] = true;
00890 for(int ij3 = 0; ij3 < 1; ++ij3)
00891 {
00892 if( !j3valid[ij3] )
00893 {
00894 continue;
00895 }
00896 _ij3[0] = ij3; _ij3[1] = -1;
00897 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
00898 {
00899 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
00900 {
00901 j3valid[iij3]=false; _ij3[1] = iij3; break;
00902 }
00903 }
00904 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
00905 {
00906 IkReal evalcond[2];
00907 IkReal x316=IKsin(j3);
00908 IkReal x317=IKcos(j3);
00909 IkReal x318=((0.05525)*r01);
00910 IkReal x319=(cj1*sj0);
00911 IkReal x320=((0.05525)*r00);
00912 IkReal x321=(cj0*cj1);
00913 IkReal x322=((1.0)*px);
00914 evalcond[0]=((-0.22374884)+(((-1.0)*cj0*x318))+(((-1.0)*sj0*x322))+(((0.0137)*x316))+(((-0.278775)*x317))+((sj0*x320))+((cj0*py)));
00915 evalcond[1]=((((0.0137)*x317))+(((-1.0)*x321*x322))+((x320*x321))+(((-1.0)*py*x319))+(((-0.05525)*r02*sj1))+(((0.278775)*x316))+((pz*sj1))+((x318*x319)));
00916 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
00917 {
00918 continue;
00919 }
00920 }
00921
00922 {
00923 IkReal j4eval[1];
00924 sj2=1.0;
00925 cj2=0;
00926 j2=1.5707963267949;
00927 j4eval[0]=sj3;
00928 if( IKabs(j4eval[0]) < 0.0000010000000000 )
00929 {
00930 {
00931 IkReal j4eval[1];
00932 sj2=1.0;
00933 cj2=0;
00934 j2=1.5707963267949;
00935 j4eval[0]=cj3;
00936 if( IKabs(j4eval[0]) < 0.0000010000000000 )
00937 {
00938 {
00939 IkReal evalcond[3];
00940 bool bgotonextstatement = true;
00941 do
00942 {
00943 IkReal x323=((1.0)*cj1);
00944 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
00945 evalcond[1]=((((-1.0)*cj0*r00*x323))+(((-1.0)*r01*sj0*x323))+((r02*sj1)));
00946 evalcond[2]=((0.278775)+(((-1.0)*cj0*px*x323))+((pz*sj1))+(((-1.0)*py*sj0*x323)));
00947 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
00948 {
00949 bgotonextstatement=false;
00950 {
00951 IkReal j4array[1], cj4array[1], sj4array[1];
00952 bool j4valid[1]={false};
00953 _nj4 = 1;
00954 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
00955 continue;
00956 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), ((((-1.0)*r00*sj0))+((cj0*r01))));
00957 sj4array[0]=IKsin(j4array[0]);
00958 cj4array[0]=IKcos(j4array[0]);
00959 if( j4array[0] > IKPI )
00960 {
00961 j4array[0]-=IK2PI;
00962 }
00963 else if( j4array[0] < -IKPI )
00964 { j4array[0]+=IK2PI;
00965 }
00966 j4valid[0] = true;
00967 for(int ij4 = 0; ij4 < 1; ++ij4)
00968 {
00969 if( !j4valid[ij4] )
00970 {
00971 continue;
00972 }
00973 _ij4[0] = ij4; _ij4[1] = -1;
00974 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
00975 {
00976 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
00977 {
00978 j4valid[iij4]=false; _ij4[1] = iij4; break;
00979 }
00980 }
00981 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
00982 {
00983 IkReal evalcond[4];
00984 IkReal x324=IKcos(j4);
00985 IkReal x325=IKsin(j4);
00986 IkReal x326=(sj0*sj1);
00987 IkReal x327=(cj0*sj1);
00988 IkReal x328=((1.0)*sj0);
00989 evalcond[0]=((((-1.0)*x324))+(((-1.0)*r00*x328))+((cj0*r01)));
00990 evalcond[1]=((-0.21004884)+(((-0.05525)*x324))+(((-1.0)*px*x328))+((cj0*py)));
00991 evalcond[2]=(((r00*x327))+((cj1*r02))+((r01*x326))+(((-1.0)*x325)));
00992 evalcond[3]=((-0.26630543)+(((-0.05525)*x325))+((cj1*pz))+((py*x326))+((px*x327)));
00993 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
00994 {
00995 continue;
00996 }
00997 }
00998
00999 {
01000 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01001 vinfos[0].jointtype = 1;
01002 vinfos[0].foffset = j0;
01003 vinfos[0].indices[0] = _ij0[0];
01004 vinfos[0].indices[1] = _ij0[1];
01005 vinfos[0].maxsolutions = _nj0;
01006 vinfos[1].jointtype = 1;
01007 vinfos[1].foffset = j1;
01008 vinfos[1].indices[0] = _ij1[0];
01009 vinfos[1].indices[1] = _ij1[1];
01010 vinfos[1].maxsolutions = _nj1;
01011 vinfos[2].jointtype = 1;
01012 vinfos[2].foffset = j2;
01013 vinfos[2].indices[0] = _ij2[0];
01014 vinfos[2].indices[1] = _ij2[1];
01015 vinfos[2].maxsolutions = _nj2;
01016 vinfos[3].jointtype = 1;
01017 vinfos[3].foffset = j3;
01018 vinfos[3].indices[0] = _ij3[0];
01019 vinfos[3].indices[1] = _ij3[1];
01020 vinfos[3].maxsolutions = _nj3;
01021 vinfos[4].jointtype = 1;
01022 vinfos[4].foffset = j4;
01023 vinfos[4].indices[0] = _ij4[0];
01024 vinfos[4].indices[1] = _ij4[1];
01025 vinfos[4].maxsolutions = _nj4;
01026 std::vector<int> vfree(0);
01027 solutions.AddSolution(vinfos,vfree);
01028 }
01029 }
01030 }
01031
01032 }
01033 } while(0);
01034 if( bgotonextstatement )
01035 {
01036 bool bgotonextstatement = true;
01037 do
01038 {
01039 IkReal x329=((1.0)*cj1);
01040 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
01041 evalcond[1]=((((-1.0)*cj0*r00*x329))+(((-1.0)*r01*sj0*x329))+((r02*sj1)));
01042 evalcond[2]=((-0.278775)+(((-1.0)*cj0*px*x329))+((pz*sj1))+(((-1.0)*py*sj0*x329)));
01043 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01044 {
01045 bgotonextstatement=false;
01046 {
01047 IkReal j4array[1], cj4array[1], sj4array[1];
01048 bool j4valid[1]={false};
01049 _nj4 = 1;
01050 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
01051 continue;
01052 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), (((r00*sj0))+(((-1.0)*cj0*r01))));
01053 sj4array[0]=IKsin(j4array[0]);
01054 cj4array[0]=IKcos(j4array[0]);
01055 if( j4array[0] > IKPI )
01056 {
01057 j4array[0]-=IK2PI;
01058 }
01059 else if( j4array[0] < -IKPI )
01060 { j4array[0]+=IK2PI;
01061 }
01062 j4valid[0] = true;
01063 for(int ij4 = 0; ij4 < 1; ++ij4)
01064 {
01065 if( !j4valid[ij4] )
01066 {
01067 continue;
01068 }
01069 _ij4[0] = ij4; _ij4[1] = -1;
01070 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01071 {
01072 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01073 {
01074 j4valid[iij4]=false; _ij4[1] = iij4; break;
01075 }
01076 }
01077 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01078 {
01079 IkReal evalcond[4];
01080 IkReal x330=IKcos(j4);
01081 IkReal x331=IKsin(j4);
01082 IkReal x332=(sj0*sj1);
01083 IkReal x333=(cj0*sj1);
01084 IkReal x334=((1.0)*sj0);
01085 evalcond[0]=((((-1.0)*r00*x334))+x330+((cj0*r01)));
01086 evalcond[1]=((-0.23744884)+(((-1.0)*px*x334))+(((0.05525)*x330))+((cj0*py)));
01087 evalcond[2]=(((r01*x332))+((r00*x333))+((cj1*r02))+(((-1.0)*x331)));
01088 evalcond[3]=((-0.26630543)+(((-0.05525)*x331))+((px*x333))+((cj1*pz))+((py*x332)));
01089 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01090 {
01091 continue;
01092 }
01093 }
01094
01095 {
01096 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01097 vinfos[0].jointtype = 1;
01098 vinfos[0].foffset = j0;
01099 vinfos[0].indices[0] = _ij0[0];
01100 vinfos[0].indices[1] = _ij0[1];
01101 vinfos[0].maxsolutions = _nj0;
01102 vinfos[1].jointtype = 1;
01103 vinfos[1].foffset = j1;
01104 vinfos[1].indices[0] = _ij1[0];
01105 vinfos[1].indices[1] = _ij1[1];
01106 vinfos[1].maxsolutions = _nj1;
01107 vinfos[2].jointtype = 1;
01108 vinfos[2].foffset = j2;
01109 vinfos[2].indices[0] = _ij2[0];
01110 vinfos[2].indices[1] = _ij2[1];
01111 vinfos[2].maxsolutions = _nj2;
01112 vinfos[3].jointtype = 1;
01113 vinfos[3].foffset = j3;
01114 vinfos[3].indices[0] = _ij3[0];
01115 vinfos[3].indices[1] = _ij3[1];
01116 vinfos[3].maxsolutions = _nj3;
01117 vinfos[4].jointtype = 1;
01118 vinfos[4].foffset = j4;
01119 vinfos[4].indices[0] = _ij4[0];
01120 vinfos[4].indices[1] = _ij4[1];
01121 vinfos[4].maxsolutions = _nj4;
01122 std::vector<int> vfree(0);
01123 solutions.AddSolution(vinfos,vfree);
01124 }
01125 }
01126 }
01127
01128 }
01129 } while(0);
01130 if( bgotonextstatement )
01131 {
01132 bool bgotonextstatement = true;
01133 do
01134 {
01135 IkReal x335=((1.0)*sj0);
01136 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
01137 evalcond[1]=((((-1.0)*r00*x335))+((cj0*r01)));
01138 evalcond[2]=((-0.50252384)+(((-1.0)*px*x335))+((cj0*py)));
01139 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01140 {
01141 bgotonextstatement=false;
01142 {
01143 IkReal j4array[1], cj4array[1], sj4array[1];
01144 bool j4valid[1]={false};
01145 _nj4 = 1;
01146 IkReal x336=((1.0)*cj1);
01147 IkReal x337=(cj0*r00);
01148 IkReal x338=(r01*sj0);
01149 if( IKabs((((cj1*r02))+((sj1*x337))+((sj1*x338)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*x336*x337))+(((-1.0)*x336*x338)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x337))+((sj1*x338))))+IKsqr((((r02*sj1))+(((-1.0)*x336*x337))+(((-1.0)*x336*x338))))-1) <= IKFAST_SINCOS_THRESH )
01150 continue;
01151 j4array[0]=IKatan2((((cj1*r02))+((sj1*x337))+((sj1*x338))), (((r02*sj1))+(((-1.0)*x336*x337))+(((-1.0)*x336*x338))));
01152 sj4array[0]=IKsin(j4array[0]);
01153 cj4array[0]=IKcos(j4array[0]);
01154 if( j4array[0] > IKPI )
01155 {
01156 j4array[0]-=IK2PI;
01157 }
01158 else if( j4array[0] < -IKPI )
01159 { j4array[0]+=IK2PI;
01160 }
01161 j4valid[0] = true;
01162 for(int ij4 = 0; ij4 < 1; ++ij4)
01163 {
01164 if( !j4valid[ij4] )
01165 {
01166 continue;
01167 }
01168 _ij4[0] = ij4; _ij4[1] = -1;
01169 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01170 {
01171 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01172 {
01173 j4valid[iij4]=false; _ij4[1] = iij4; break;
01174 }
01175 }
01176 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01177 {
01178 IkReal evalcond[4];
01179 IkReal x339=IKsin(j4);
01180 IkReal x340=IKcos(j4);
01181 IkReal x341=(sj0*sj1);
01182 IkReal x342=(cj0*sj1);
01183 IkReal x343=((1.0)*cj0*cj1);
01184 IkReal x344=((1.0)*cj1*sj0);
01185 evalcond[0]=(((r01*x341))+((r00*x342))+((cj1*r02))+(((-1.0)*x339)));
01186 evalcond[1]=((-0.26630543)+(((-0.05525)*x339))+((py*x341))+((cj1*pz))+((px*x342)));
01187 evalcond[2]=(((r02*sj1))+(((-1.0)*r01*x344))+(((-1.0)*r00*x343))+(((-1.0)*x340)));
01188 evalcond[3]=((0.0137)+(((-1.0)*px*x343))+(((-0.05525)*x340))+((pz*sj1))+(((-1.0)*py*x344)));
01189 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01190 {
01191 continue;
01192 }
01193 }
01194
01195 {
01196 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01197 vinfos[0].jointtype = 1;
01198 vinfos[0].foffset = j0;
01199 vinfos[0].indices[0] = _ij0[0];
01200 vinfos[0].indices[1] = _ij0[1];
01201 vinfos[0].maxsolutions = _nj0;
01202 vinfos[1].jointtype = 1;
01203 vinfos[1].foffset = j1;
01204 vinfos[1].indices[0] = _ij1[0];
01205 vinfos[1].indices[1] = _ij1[1];
01206 vinfos[1].maxsolutions = _nj1;
01207 vinfos[2].jointtype = 1;
01208 vinfos[2].foffset = j2;
01209 vinfos[2].indices[0] = _ij2[0];
01210 vinfos[2].indices[1] = _ij2[1];
01211 vinfos[2].maxsolutions = _nj2;
01212 vinfos[3].jointtype = 1;
01213 vinfos[3].foffset = j3;
01214 vinfos[3].indices[0] = _ij3[0];
01215 vinfos[3].indices[1] = _ij3[1];
01216 vinfos[3].maxsolutions = _nj3;
01217 vinfos[4].jointtype = 1;
01218 vinfos[4].foffset = j4;
01219 vinfos[4].indices[0] = _ij4[0];
01220 vinfos[4].indices[1] = _ij4[1];
01221 vinfos[4].maxsolutions = _nj4;
01222 std::vector<int> vfree(0);
01223 solutions.AddSolution(vinfos,vfree);
01224 }
01225 }
01226 }
01227
01228 }
01229 } while(0);
01230 if( bgotonextstatement )
01231 {
01232 bool bgotonextstatement = true;
01233 do
01234 {
01235 IkReal x345=((1.0)*sj0);
01236 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
01237 evalcond[1]=((((-1.0)*r00*x345))+((cj0*r01)));
01238 evalcond[2]=((0.05502616)+(((-1.0)*px*x345))+((cj0*py)));
01239 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01240 {
01241 bgotonextstatement=false;
01242 {
01243 IkReal j4array[1], cj4array[1], sj4array[1];
01244 bool j4valid[1]={false};
01245 _nj4 = 1;
01246 IkReal x346=(r01*sj0);
01247 IkReal x347=(cj0*r00);
01248 if( IKabs((((cj1*r02))+((sj1*x347))+((sj1*x346)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*x346))+((cj1*x347))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x347))+((sj1*x346))))+IKsqr((((cj1*x346))+((cj1*x347))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
01249 continue;
01250 j4array[0]=IKatan2((((cj1*r02))+((sj1*x347))+((sj1*x346))), (((cj1*x346))+((cj1*x347))+(((-1.0)*r02*sj1))));
01251 sj4array[0]=IKsin(j4array[0]);
01252 cj4array[0]=IKcos(j4array[0]);
01253 if( j4array[0] > IKPI )
01254 {
01255 j4array[0]-=IK2PI;
01256 }
01257 else if( j4array[0] < -IKPI )
01258 { j4array[0]+=IK2PI;
01259 }
01260 j4valid[0] = true;
01261 for(int ij4 = 0; ij4 < 1; ++ij4)
01262 {
01263 if( !j4valid[ij4] )
01264 {
01265 continue;
01266 }
01267 _ij4[0] = ij4; _ij4[1] = -1;
01268 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01269 {
01270 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01271 {
01272 j4valid[iij4]=false; _ij4[1] = iij4; break;
01273 }
01274 }
01275 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01276 {
01277 IkReal evalcond[4];
01278 IkReal x348=IKsin(j4);
01279 IkReal x349=IKcos(j4);
01280 IkReal x350=(cj0*r00);
01281 IkReal x351=(r01*sj0);
01282 IkReal x352=((1.0)*cj1);
01283 IkReal x353=(py*sj0);
01284 IkReal x354=(cj0*px);
01285 evalcond[0]=(((r02*sj1))+x349+(((-1.0)*x351*x352))+(((-1.0)*x350*x352)));
01286 evalcond[1]=(((cj1*r02))+((sj1*x350))+((sj1*x351))+(((-1.0)*x348)));
01287 evalcond[2]=((-0.26630543)+(((-0.05525)*x348))+((cj1*pz))+((sj1*x354))+((sj1*x353)));
01288 evalcond[3]=((-0.0137)+(((0.05525)*x349))+((pz*sj1))+(((-1.0)*x352*x353))+(((-1.0)*x352*x354)));
01289 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01290 {
01291 continue;
01292 }
01293 }
01294
01295 {
01296 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01297 vinfos[0].jointtype = 1;
01298 vinfos[0].foffset = j0;
01299 vinfos[0].indices[0] = _ij0[0];
01300 vinfos[0].indices[1] = _ij0[1];
01301 vinfos[0].maxsolutions = _nj0;
01302 vinfos[1].jointtype = 1;
01303 vinfos[1].foffset = j1;
01304 vinfos[1].indices[0] = _ij1[0];
01305 vinfos[1].indices[1] = _ij1[1];
01306 vinfos[1].maxsolutions = _nj1;
01307 vinfos[2].jointtype = 1;
01308 vinfos[2].foffset = j2;
01309 vinfos[2].indices[0] = _ij2[0];
01310 vinfos[2].indices[1] = _ij2[1];
01311 vinfos[2].maxsolutions = _nj2;
01312 vinfos[3].jointtype = 1;
01313 vinfos[3].foffset = j3;
01314 vinfos[3].indices[0] = _ij3[0];
01315 vinfos[3].indices[1] = _ij3[1];
01316 vinfos[3].maxsolutions = _nj3;
01317 vinfos[4].jointtype = 1;
01318 vinfos[4].foffset = j4;
01319 vinfos[4].indices[0] = _ij4[0];
01320 vinfos[4].indices[1] = _ij4[1];
01321 vinfos[4].maxsolutions = _nj4;
01322 std::vector<int> vfree(0);
01323 solutions.AddSolution(vinfos,vfree);
01324 }
01325 }
01326 }
01327
01328 }
01329 } while(0);
01330 if( bgotonextstatement )
01331 {
01332 bool bgotonextstatement = true;
01333 do
01334 {
01335 if( 1 )
01336 {
01337 bgotonextstatement=false;
01338 continue;
01339
01340 }
01341 } while(0);
01342 if( bgotonextstatement )
01343 {
01344 }
01345 }
01346 }
01347 }
01348 }
01349 }
01350
01351 } else
01352 {
01353 {
01354 IkReal j4array[1], cj4array[1], sj4array[1];
01355 bool j4valid[1]={false};
01356 _nj4 = 1;
01357 IkReal x355=((1.0)*cj1);
01358 IkReal x356=(cj0*r00);
01359 IkReal x357=(r01*sj0);
01360 CheckValue<IkReal> x358=IKPowWithIntegerCheck(cj3,-1);
01361 if(!x358.valid){
01362 continue;
01363 }
01364 if( IKabs((((cj1*r02))+((sj1*x356))+((sj1*x357)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x358.value)*((((r02*sj1))+(((-1.0)*x355*x356))+(((-1.0)*x355*x357)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x356))+((sj1*x357))))+IKsqr(((x358.value)*((((r02*sj1))+(((-1.0)*x355*x356))+(((-1.0)*x355*x357))))))-1) <= IKFAST_SINCOS_THRESH )
01365 continue;
01366 j4array[0]=IKatan2((((cj1*r02))+((sj1*x356))+((sj1*x357))), ((x358.value)*((((r02*sj1))+(((-1.0)*x355*x356))+(((-1.0)*x355*x357))))));
01367 sj4array[0]=IKsin(j4array[0]);
01368 cj4array[0]=IKcos(j4array[0]);
01369 if( j4array[0] > IKPI )
01370 {
01371 j4array[0]-=IK2PI;
01372 }
01373 else if( j4array[0] < -IKPI )
01374 { j4array[0]+=IK2PI;
01375 }
01376 j4valid[0] = true;
01377 for(int ij4 = 0; ij4 < 1; ++ij4)
01378 {
01379 if( !j4valid[ij4] )
01380 {
01381 continue;
01382 }
01383 _ij4[0] = ij4; _ij4[1] = -1;
01384 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01385 {
01386 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01387 {
01388 j4valid[iij4]=false; _ij4[1] = iij4; break;
01389 }
01390 }
01391 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01392 {
01393 IkReal evalcond[6];
01394 IkReal x359=IKsin(j4);
01395 IkReal x360=IKcos(j4);
01396 IkReal x361=(cj0*px);
01397 IkReal x362=(sj0*sj1);
01398 IkReal x363=((1.0)*cj1);
01399 IkReal x364=((1.0)*sj0);
01400 IkReal x365=(cj0*r00);
01401 IkReal x366=((1.0)*x360);
01402 IkReal x367=((0.05525)*x360);
01403 evalcond[0]=((((-1.0)*r00*x364))+(((-1.0)*sj3*x366))+((cj0*r01)));
01404 evalcond[1]=(((r01*x362))+((sj1*x365))+((cj1*r02))+(((-1.0)*x359)));
01405 evalcond[2]=((-0.26630543)+((sj1*x361))+(((-0.05525)*x359))+((cj1*pz))+((py*x362)));
01406 evalcond[3]=((((-1.0)*x363*x365))+((r02*sj1))+(((-1.0)*cj3*x366))+(((-1.0)*r01*sj0*x363)));
01407 evalcond[4]=((-0.22374884)+(((-1.0)*sj3*x367))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((cj0*py))+(((-1.0)*px*x364)));
01408 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x361*x363))+(((-1.0)*py*sj0*x363))+((pz*sj1))+(((-1.0)*cj3*x367))+(((0.278775)*sj3)));
01409 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
01410 {
01411 continue;
01412 }
01413 }
01414
01415 {
01416 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01417 vinfos[0].jointtype = 1;
01418 vinfos[0].foffset = j0;
01419 vinfos[0].indices[0] = _ij0[0];
01420 vinfos[0].indices[1] = _ij0[1];
01421 vinfos[0].maxsolutions = _nj0;
01422 vinfos[1].jointtype = 1;
01423 vinfos[1].foffset = j1;
01424 vinfos[1].indices[0] = _ij1[0];
01425 vinfos[1].indices[1] = _ij1[1];
01426 vinfos[1].maxsolutions = _nj1;
01427 vinfos[2].jointtype = 1;
01428 vinfos[2].foffset = j2;
01429 vinfos[2].indices[0] = _ij2[0];
01430 vinfos[2].indices[1] = _ij2[1];
01431 vinfos[2].maxsolutions = _nj2;
01432 vinfos[3].jointtype = 1;
01433 vinfos[3].foffset = j3;
01434 vinfos[3].indices[0] = _ij3[0];
01435 vinfos[3].indices[1] = _ij3[1];
01436 vinfos[3].maxsolutions = _nj3;
01437 vinfos[4].jointtype = 1;
01438 vinfos[4].foffset = j4;
01439 vinfos[4].indices[0] = _ij4[0];
01440 vinfos[4].indices[1] = _ij4[1];
01441 vinfos[4].maxsolutions = _nj4;
01442 std::vector<int> vfree(0);
01443 solutions.AddSolution(vinfos,vfree);
01444 }
01445 }
01446 }
01447
01448 }
01449
01450 }
01451
01452 } else
01453 {
01454 {
01455 IkReal j4array[1], cj4array[1], sj4array[1];
01456 bool j4valid[1]={false};
01457 _nj4 = 1;
01458 CheckValue<IkReal> x368=IKPowWithIntegerCheck(sj3,-1);
01459 if(!x368.valid){
01460 continue;
01461 }
01462 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x368.value)*(((((-1.0)*r00*sj0))+((cj0*r01)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr(((x368.value)*(((((-1.0)*r00*sj0))+((cj0*r01))))))-1) <= IKFAST_SINCOS_THRESH )
01463 continue;
01464 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), ((x368.value)*(((((-1.0)*r00*sj0))+((cj0*r01))))));
01465 sj4array[0]=IKsin(j4array[0]);
01466 cj4array[0]=IKcos(j4array[0]);
01467 if( j4array[0] > IKPI )
01468 {
01469 j4array[0]-=IK2PI;
01470 }
01471 else if( j4array[0] < -IKPI )
01472 { j4array[0]+=IK2PI;
01473 }
01474 j4valid[0] = true;
01475 for(int ij4 = 0; ij4 < 1; ++ij4)
01476 {
01477 if( !j4valid[ij4] )
01478 {
01479 continue;
01480 }
01481 _ij4[0] = ij4; _ij4[1] = -1;
01482 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01483 {
01484 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01485 {
01486 j4valid[iij4]=false; _ij4[1] = iij4; break;
01487 }
01488 }
01489 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01490 {
01491 IkReal evalcond[6];
01492 IkReal x369=IKsin(j4);
01493 IkReal x370=IKcos(j4);
01494 IkReal x371=(cj0*px);
01495 IkReal x372=(sj0*sj1);
01496 IkReal x373=((1.0)*cj1);
01497 IkReal x374=((1.0)*sj0);
01498 IkReal x375=(cj0*r00);
01499 IkReal x376=((1.0)*x370);
01500 IkReal x377=((0.05525)*x370);
01501 evalcond[0]=((((-1.0)*r00*x374))+(((-1.0)*sj3*x376))+((cj0*r01)));
01502 evalcond[1]=((((-1.0)*x369))+((sj1*x375))+((r01*x372))+((cj1*r02)));
01503 evalcond[2]=((-0.26630543)+((sj1*x371))+((cj1*pz))+(((-0.05525)*x369))+((py*x372)));
01504 evalcond[3]=((((-1.0)*r01*sj0*x373))+((r02*sj1))+(((-1.0)*x373*x375))+(((-1.0)*cj3*x376)));
01505 evalcond[4]=((-0.22374884)+(((-1.0)*sj3*x377))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((cj0*py))+(((-1.0)*px*x374)));
01506 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x373))+(((-1.0)*x371*x373))+((pz*sj1))+(((-1.0)*cj3*x377))+(((0.278775)*sj3)));
01507 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
01508 {
01509 continue;
01510 }
01511 }
01512
01513 {
01514 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01515 vinfos[0].jointtype = 1;
01516 vinfos[0].foffset = j0;
01517 vinfos[0].indices[0] = _ij0[0];
01518 vinfos[0].indices[1] = _ij0[1];
01519 vinfos[0].maxsolutions = _nj0;
01520 vinfos[1].jointtype = 1;
01521 vinfos[1].foffset = j1;
01522 vinfos[1].indices[0] = _ij1[0];
01523 vinfos[1].indices[1] = _ij1[1];
01524 vinfos[1].maxsolutions = _nj1;
01525 vinfos[2].jointtype = 1;
01526 vinfos[2].foffset = j2;
01527 vinfos[2].indices[0] = _ij2[0];
01528 vinfos[2].indices[1] = _ij2[1];
01529 vinfos[2].maxsolutions = _nj2;
01530 vinfos[3].jointtype = 1;
01531 vinfos[3].foffset = j3;
01532 vinfos[3].indices[0] = _ij3[0];
01533 vinfos[3].indices[1] = _ij3[1];
01534 vinfos[3].maxsolutions = _nj3;
01535 vinfos[4].jointtype = 1;
01536 vinfos[4].foffset = j4;
01537 vinfos[4].indices[0] = _ij4[0];
01538 vinfos[4].indices[1] = _ij4[1];
01539 vinfos[4].maxsolutions = _nj4;
01540 std::vector<int> vfree(0);
01541 solutions.AddSolution(vinfos,vfree);
01542 }
01543 }
01544 }
01545
01546 }
01547
01548 }
01549 }
01550 }
01551
01552 }
01553 } while(0);
01554 if( bgotonextstatement )
01555 {
01556 bool bgotonextstatement = true;
01557 do
01558 {
01559 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j2)))), 6.28318530717959)));
01560 if( IKabs(evalcond[0]) < 0.0000010000000000 )
01561 {
01562 bgotonextstatement=false;
01563 {
01564 IkReal j3array[1], cj3array[1], sj3array[1];
01565 bool j3valid[1]={false};
01566 _nj3 = 1;
01567 IkReal x378=(pz*sj1);
01568 IkReal x379=(cj1*sj0);
01569 IkReal x380=((3.57847987692738)*py);
01570 IkReal x381=((0.197711013200238)*r01);
01571 IkReal x382=(r00*sj0);
01572 IkReal x383=(cj0*cj1);
01573 IkReal x384=((3.57847987692738)*px);
01574 IkReal x385=((0.175859292669375)*px);
01575 IkReal x386=(r02*sj1);
01576 IkReal x387=((0.175859292669375)*py);
01577 IkReal x388=((0.00971622591998298)*r01);
01578 if( IKabs(((0.0394366503778869)+(((0.00971622591998298)*x382))+(((-0.197711013200238)*r00*x383))+(((-1.0)*x379*x381))+((x383*x384))+(((-3.57847987692738)*x378))+(((-1.0)*cj0*x388))+((x379*x380))+((cj0*x387))+(((-1.0)*sj0*x385))+(((0.197711013200238)*x386)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-0.802478263437622)+(((0.00971622591998298)*x386))+(((-1.0)*x379*x388))+((x383*x385))+(((-0.00971622591998298)*r00*x383))+(((-0.175859292669375)*x378))+(((-1.0)*cj0*x380))+((x379*x387))+(((-0.197711013200238)*x382))+((cj0*x381))+((sj0*x384)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0394366503778869)+(((0.00971622591998298)*x382))+(((-0.197711013200238)*r00*x383))+(((-1.0)*x379*x381))+((x383*x384))+(((-3.57847987692738)*x378))+(((-1.0)*cj0*x388))+((x379*x380))+((cj0*x387))+(((-1.0)*sj0*x385))+(((0.197711013200238)*x386))))+IKsqr(((-0.802478263437622)+(((0.00971622591998298)*x386))+(((-1.0)*x379*x388))+((x383*x385))+(((-0.00971622591998298)*r00*x383))+(((-0.175859292669375)*x378))+(((-1.0)*cj0*x380))+((x379*x387))+(((-0.197711013200238)*x382))+((cj0*x381))+((sj0*x384))))-1) <= IKFAST_SINCOS_THRESH )
01579 continue;
01580 j3array[0]=IKatan2(((0.0394366503778869)+(((0.00971622591998298)*x382))+(((-0.197711013200238)*r00*x383))+(((-1.0)*x379*x381))+((x383*x384))+(((-3.57847987692738)*x378))+(((-1.0)*cj0*x388))+((x379*x380))+((cj0*x387))+(((-1.0)*sj0*x385))+(((0.197711013200238)*x386))), ((-0.802478263437622)+(((0.00971622591998298)*x386))+(((-1.0)*x379*x388))+((x383*x385))+(((-0.00971622591998298)*r00*x383))+(((-0.175859292669375)*x378))+(((-1.0)*cj0*x380))+((x379*x387))+(((-0.197711013200238)*x382))+((cj0*x381))+((sj0*x384))));
01581 sj3array[0]=IKsin(j3array[0]);
01582 cj3array[0]=IKcos(j3array[0]);
01583 if( j3array[0] > IKPI )
01584 {
01585 j3array[0]-=IK2PI;
01586 }
01587 else if( j3array[0] < -IKPI )
01588 { j3array[0]+=IK2PI;
01589 }
01590 j3valid[0] = true;
01591 for(int ij3 = 0; ij3 < 1; ++ij3)
01592 {
01593 if( !j3valid[ij3] )
01594 {
01595 continue;
01596 }
01597 _ij3[0] = ij3; _ij3[1] = -1;
01598 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
01599 {
01600 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
01601 {
01602 j3valid[iij3]=false; _ij3[1] = iij3; break;
01603 }
01604 }
01605 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
01606 {
01607 IkReal evalcond[2];
01608 IkReal x389=IKsin(j3);
01609 IkReal x390=IKcos(j3);
01610 IkReal x391=((0.05525)*r01);
01611 IkReal x392=(cj1*sj0);
01612 IkReal x393=((0.05525)*r00);
01613 IkReal x394=(cj0*cj1);
01614 IkReal x395=((1.0)*py);
01615 evalcond[0]=((-0.22425116)+(((-1.0)*cj0*x395))+(((-1.0)*sj0*x393))+((cj0*x391))+(((0.0137)*x389))+(((-0.278775)*x390))+((px*sj0)));
01616 evalcond[1]=((((-0.05525)*r02*sj1))+((x391*x392))+(((0.278775)*x389))+((pz*sj1))+(((-1.0)*px*x394))+(((0.0137)*x390))+(((-1.0)*x392*x395))+((x393*x394)));
01617 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
01618 {
01619 continue;
01620 }
01621 }
01622
01623 {
01624 IkReal j4eval[1];
01625 sj2=-1.0;
01626 cj2=0;
01627 j2=-1.5707963267949;
01628 j4eval[0]=sj3;
01629 if( IKabs(j4eval[0]) < 0.0000010000000000 )
01630 {
01631 {
01632 IkReal j4eval[1];
01633 sj2=-1.0;
01634 cj2=0;
01635 j2=-1.5707963267949;
01636 j4eval[0]=cj3;
01637 if( IKabs(j4eval[0]) < 0.0000010000000000 )
01638 {
01639 {
01640 IkReal evalcond[3];
01641 bool bgotonextstatement = true;
01642 do
01643 {
01644 IkReal x396=((1.0)*cj1);
01645 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
01646 evalcond[1]=((((-1.0)*cj0*r00*x396))+((r02*sj1))+(((-1.0)*r01*sj0*x396)));
01647 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x396))+(((-1.0)*cj0*px*x396))+((pz*sj1)));
01648 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01649 {
01650 bgotonextstatement=false;
01651 {
01652 IkReal j4array[1], cj4array[1], sj4array[1];
01653 bool j4valid[1]={false};
01654 _nj4 = 1;
01655 IkReal x397=((1.0)*sj1);
01656 if( IKabs(((((-1.0)*cj0*r00*x397))+(((-1.0)*cj1*r02))+(((-1.0)*r01*sj0*x397)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*cj0*r00*x397))+(((-1.0)*cj1*r02))+(((-1.0)*r01*sj0*x397))))+IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
01657 continue;
01658 j4array[0]=IKatan2(((((-1.0)*cj0*r00*x397))+(((-1.0)*cj1*r02))+(((-1.0)*r01*sj0*x397))), (((r00*sj0))+(((-1.0)*cj0*r01))));
01659 sj4array[0]=IKsin(j4array[0]);
01660 cj4array[0]=IKcos(j4array[0]);
01661 if( j4array[0] > IKPI )
01662 {
01663 j4array[0]-=IK2PI;
01664 }
01665 else if( j4array[0] < -IKPI )
01666 { j4array[0]+=IK2PI;
01667 }
01668 j4valid[0] = true;
01669 for(int ij4 = 0; ij4 < 1; ++ij4)
01670 {
01671 if( !j4valid[ij4] )
01672 {
01673 continue;
01674 }
01675 _ij4[0] = ij4; _ij4[1] = -1;
01676 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01677 {
01678 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01679 {
01680 j4valid[iij4]=false; _ij4[1] = iij4; break;
01681 }
01682 }
01683 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01684 {
01685 IkReal evalcond[4];
01686 IkReal x398=IKcos(j4);
01687 IkReal x399=IKsin(j4);
01688 IkReal x400=(sj0*sj1);
01689 IkReal x401=(cj0*sj1);
01690 IkReal x402=((1.0)*sj0);
01691 evalcond[0]=(x398+(((-1.0)*r00*x402))+((cj0*r01)));
01692 evalcond[1]=((0.21055116)+(((-1.0)*px*x402))+((cj0*py))+(((0.05525)*x398)));
01693 evalcond[2]=(((cj1*r02))+x399+((r00*x401))+((r01*x400)));
01694 evalcond[3]=((-0.26630543)+((py*x400))+((px*x401))+((cj1*pz))+(((0.05525)*x399)));
01695 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01696 {
01697 continue;
01698 }
01699 }
01700
01701 {
01702 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01703 vinfos[0].jointtype = 1;
01704 vinfos[0].foffset = j0;
01705 vinfos[0].indices[0] = _ij0[0];
01706 vinfos[0].indices[1] = _ij0[1];
01707 vinfos[0].maxsolutions = _nj0;
01708 vinfos[1].jointtype = 1;
01709 vinfos[1].foffset = j1;
01710 vinfos[1].indices[0] = _ij1[0];
01711 vinfos[1].indices[1] = _ij1[1];
01712 vinfos[1].maxsolutions = _nj1;
01713 vinfos[2].jointtype = 1;
01714 vinfos[2].foffset = j2;
01715 vinfos[2].indices[0] = _ij2[0];
01716 vinfos[2].indices[1] = _ij2[1];
01717 vinfos[2].maxsolutions = _nj2;
01718 vinfos[3].jointtype = 1;
01719 vinfos[3].foffset = j3;
01720 vinfos[3].indices[0] = _ij3[0];
01721 vinfos[3].indices[1] = _ij3[1];
01722 vinfos[3].maxsolutions = _nj3;
01723 vinfos[4].jointtype = 1;
01724 vinfos[4].foffset = j4;
01725 vinfos[4].indices[0] = _ij4[0];
01726 vinfos[4].indices[1] = _ij4[1];
01727 vinfos[4].maxsolutions = _nj4;
01728 std::vector<int> vfree(0);
01729 solutions.AddSolution(vinfos,vfree);
01730 }
01731 }
01732 }
01733
01734 }
01735 } while(0);
01736 if( bgotonextstatement )
01737 {
01738 bool bgotonextstatement = true;
01739 do
01740 {
01741 IkReal x403=((1.0)*cj1);
01742 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
01743 evalcond[1]=((((-1.0)*r01*sj0*x403))+((r02*sj1))+(((-1.0)*cj0*r00*x403)));
01744 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x403))+((pz*sj1))+(((-1.0)*cj0*px*x403)));
01745 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01746 {
01747 bgotonextstatement=false;
01748 {
01749 IkReal j4array[1], cj4array[1], sj4array[1];
01750 bool j4valid[1]={false};
01751 _nj4 = 1;
01752 IkReal x404=((1.0)*sj1);
01753 if( IKabs(((((-1.0)*r01*sj0*x404))+(((-1.0)*cj0*r00*x404))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r01*sj0*x404))+(((-1.0)*cj0*r00*x404))+(((-1.0)*cj1*r02))))+IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
01754 continue;
01755 j4array[0]=IKatan2(((((-1.0)*r01*sj0*x404))+(((-1.0)*cj0*r00*x404))+(((-1.0)*cj1*r02))), ((((-1.0)*r00*sj0))+((cj0*r01))));
01756 sj4array[0]=IKsin(j4array[0]);
01757 cj4array[0]=IKcos(j4array[0]);
01758 if( j4array[0] > IKPI )
01759 {
01760 j4array[0]-=IK2PI;
01761 }
01762 else if( j4array[0] < -IKPI )
01763 { j4array[0]+=IK2PI;
01764 }
01765 j4valid[0] = true;
01766 for(int ij4 = 0; ij4 < 1; ++ij4)
01767 {
01768 if( !j4valid[ij4] )
01769 {
01770 continue;
01771 }
01772 _ij4[0] = ij4; _ij4[1] = -1;
01773 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01774 {
01775 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01776 {
01777 j4valid[iij4]=false; _ij4[1] = iij4; break;
01778 }
01779 }
01780 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01781 {
01782 IkReal evalcond[4];
01783 IkReal x405=IKcos(j4);
01784 IkReal x406=IKsin(j4);
01785 IkReal x407=(sj0*sj1);
01786 IkReal x408=(cj0*sj1);
01787 IkReal x409=((1.0)*sj0);
01788 evalcond[0]=((((-1.0)*r00*x409))+(((-1.0)*x405))+((cj0*r01)));
01789 evalcond[1]=((0.23795116)+(((-0.05525)*x405))+(((-1.0)*px*x409))+((cj0*py)));
01790 evalcond[2]=(((cj1*r02))+((r00*x408))+((r01*x407))+x406);
01791 evalcond[3]=((-0.26630543)+(((0.05525)*x406))+((py*x407))+((px*x408))+((cj1*pz)));
01792 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01793 {
01794 continue;
01795 }
01796 }
01797
01798 {
01799 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01800 vinfos[0].jointtype = 1;
01801 vinfos[0].foffset = j0;
01802 vinfos[0].indices[0] = _ij0[0];
01803 vinfos[0].indices[1] = _ij0[1];
01804 vinfos[0].maxsolutions = _nj0;
01805 vinfos[1].jointtype = 1;
01806 vinfos[1].foffset = j1;
01807 vinfos[1].indices[0] = _ij1[0];
01808 vinfos[1].indices[1] = _ij1[1];
01809 vinfos[1].maxsolutions = _nj1;
01810 vinfos[2].jointtype = 1;
01811 vinfos[2].foffset = j2;
01812 vinfos[2].indices[0] = _ij2[0];
01813 vinfos[2].indices[1] = _ij2[1];
01814 vinfos[2].maxsolutions = _nj2;
01815 vinfos[3].jointtype = 1;
01816 vinfos[3].foffset = j3;
01817 vinfos[3].indices[0] = _ij3[0];
01818 vinfos[3].indices[1] = _ij3[1];
01819 vinfos[3].maxsolutions = _nj3;
01820 vinfos[4].jointtype = 1;
01821 vinfos[4].foffset = j4;
01822 vinfos[4].indices[0] = _ij4[0];
01823 vinfos[4].indices[1] = _ij4[1];
01824 vinfos[4].maxsolutions = _nj4;
01825 std::vector<int> vfree(0);
01826 solutions.AddSolution(vinfos,vfree);
01827 }
01828 }
01829 }
01830
01831 }
01832 } while(0);
01833 if( bgotonextstatement )
01834 {
01835 bool bgotonextstatement = true;
01836 do
01837 {
01838 IkReal x410=((1.0)*sj0);
01839 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
01840 evalcond[1]=((((-1.0)*r00*x410))+((cj0*r01)));
01841 evalcond[2]=((0.50302616)+(((-1.0)*px*x410))+((cj0*py)));
01842 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01843 {
01844 bgotonextstatement=false;
01845 {
01846 IkReal j4array[1], cj4array[1], sj4array[1];
01847 bool j4valid[1]={false};
01848 _nj4 = 1;
01849 IkReal x411=((1.0)*cj1);
01850 IkReal x412=(r01*sj0);
01851 IkReal x413=((1.0)*sj1);
01852 IkReal x414=(cj0*r00);
01853 if( IKabs(((((-1.0)*x412*x413))+(((-1.0)*r02*x411))+(((-1.0)*x413*x414)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*x411*x414))+(((-1.0)*x411*x412)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*x412*x413))+(((-1.0)*r02*x411))+(((-1.0)*x413*x414))))+IKsqr((((r02*sj1))+(((-1.0)*x411*x414))+(((-1.0)*x411*x412))))-1) <= IKFAST_SINCOS_THRESH )
01854 continue;
01855 j4array[0]=IKatan2(((((-1.0)*x412*x413))+(((-1.0)*r02*x411))+(((-1.0)*x413*x414))), (((r02*sj1))+(((-1.0)*x411*x414))+(((-1.0)*x411*x412))));
01856 sj4array[0]=IKsin(j4array[0]);
01857 cj4array[0]=IKcos(j4array[0]);
01858 if( j4array[0] > IKPI )
01859 {
01860 j4array[0]-=IK2PI;
01861 }
01862 else if( j4array[0] < -IKPI )
01863 { j4array[0]+=IK2PI;
01864 }
01865 j4valid[0] = true;
01866 for(int ij4 = 0; ij4 < 1; ++ij4)
01867 {
01868 if( !j4valid[ij4] )
01869 {
01870 continue;
01871 }
01872 _ij4[0] = ij4; _ij4[1] = -1;
01873 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01874 {
01875 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01876 {
01877 j4valid[iij4]=false; _ij4[1] = iij4; break;
01878 }
01879 }
01880 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01881 {
01882 IkReal evalcond[4];
01883 IkReal x415=IKsin(j4);
01884 IkReal x416=IKcos(j4);
01885 IkReal x417=(r01*sj0);
01886 IkReal x418=(cj0*sj1);
01887 IkReal x419=((1.0)*cj1);
01888 IkReal x420=(py*sj0);
01889 evalcond[0]=(((sj1*x417))+((cj1*r02))+((r00*x418))+x415);
01890 evalcond[1]=((-0.26630543)+(((0.05525)*x415))+((cj1*pz))+((px*x418))+((sj1*x420)));
01891 evalcond[2]=((((-1.0)*x417*x419))+((r02*sj1))+(((-1.0)*cj0*r00*x419))+(((-1.0)*x416)));
01892 evalcond[3]=((0.0137)+(((-1.0)*cj0*px*x419))+(((-0.05525)*x416))+(((-1.0)*x419*x420))+((pz*sj1)));
01893 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01894 {
01895 continue;
01896 }
01897 }
01898
01899 {
01900 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
01901 vinfos[0].jointtype = 1;
01902 vinfos[0].foffset = j0;
01903 vinfos[0].indices[0] = _ij0[0];
01904 vinfos[0].indices[1] = _ij0[1];
01905 vinfos[0].maxsolutions = _nj0;
01906 vinfos[1].jointtype = 1;
01907 vinfos[1].foffset = j1;
01908 vinfos[1].indices[0] = _ij1[0];
01909 vinfos[1].indices[1] = _ij1[1];
01910 vinfos[1].maxsolutions = _nj1;
01911 vinfos[2].jointtype = 1;
01912 vinfos[2].foffset = j2;
01913 vinfos[2].indices[0] = _ij2[0];
01914 vinfos[2].indices[1] = _ij2[1];
01915 vinfos[2].maxsolutions = _nj2;
01916 vinfos[3].jointtype = 1;
01917 vinfos[3].foffset = j3;
01918 vinfos[3].indices[0] = _ij3[0];
01919 vinfos[3].indices[1] = _ij3[1];
01920 vinfos[3].maxsolutions = _nj3;
01921 vinfos[4].jointtype = 1;
01922 vinfos[4].foffset = j4;
01923 vinfos[4].indices[0] = _ij4[0];
01924 vinfos[4].indices[1] = _ij4[1];
01925 vinfos[4].maxsolutions = _nj4;
01926 std::vector<int> vfree(0);
01927 solutions.AddSolution(vinfos,vfree);
01928 }
01929 }
01930 }
01931
01932 }
01933 } while(0);
01934 if( bgotonextstatement )
01935 {
01936 bool bgotonextstatement = true;
01937 do
01938 {
01939 IkReal x421=((1.0)*sj0);
01940 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
01941 evalcond[1]=((((-1.0)*r00*x421))+((cj0*r01)));
01942 evalcond[2]=((-0.05452384)+(((-1.0)*px*x421))+((cj0*py)));
01943 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
01944 {
01945 bgotonextstatement=false;
01946 {
01947 IkReal j4array[1], cj4array[1], sj4array[1];
01948 bool j4valid[1]={false};
01949 _nj4 = 1;
01950 IkReal x422=((1.0)*r02);
01951 IkReal x423=((1.0)*sj1);
01952 IkReal x424=(cj0*r00);
01953 IkReal x425=(r01*sj0);
01954 if( IKabs(((((-1.0)*cj1*x422))+(((-1.0)*x423*x424))+(((-1.0)*x423*x425)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*sj1*x422))+((cj1*x425))+((cj1*x424)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*cj1*x422))+(((-1.0)*x423*x424))+(((-1.0)*x423*x425))))+IKsqr(((((-1.0)*sj1*x422))+((cj1*x425))+((cj1*x424))))-1) <= IKFAST_SINCOS_THRESH )
01955 continue;
01956 j4array[0]=IKatan2(((((-1.0)*cj1*x422))+(((-1.0)*x423*x424))+(((-1.0)*x423*x425))), ((((-1.0)*sj1*x422))+((cj1*x425))+((cj1*x424))));
01957 sj4array[0]=IKsin(j4array[0]);
01958 cj4array[0]=IKcos(j4array[0]);
01959 if( j4array[0] > IKPI )
01960 {
01961 j4array[0]-=IK2PI;
01962 }
01963 else if( j4array[0] < -IKPI )
01964 { j4array[0]+=IK2PI;
01965 }
01966 j4valid[0] = true;
01967 for(int ij4 = 0; ij4 < 1; ++ij4)
01968 {
01969 if( !j4valid[ij4] )
01970 {
01971 continue;
01972 }
01973 _ij4[0] = ij4; _ij4[1] = -1;
01974 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
01975 {
01976 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
01977 {
01978 j4valid[iij4]=false; _ij4[1] = iij4; break;
01979 }
01980 }
01981 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
01982 {
01983 IkReal evalcond[4];
01984 IkReal x426=IKsin(j4);
01985 IkReal x427=IKcos(j4);
01986 IkReal x428=((1.0)*cj1);
01987 IkReal x429=(cj0*r00);
01988 IkReal x430=(r01*sj0);
01989 IkReal x431=(py*sj0);
01990 IkReal x432=(cj0*px);
01991 evalcond[0]=(((cj1*r02))+x426+((sj1*x429))+((sj1*x430)));
01992 evalcond[1]=(((r02*sj1))+x427+(((-1.0)*x428*x429))+(((-1.0)*x428*x430)));
01993 evalcond[2]=((-0.26630543)+(((0.05525)*x426))+((cj1*pz))+((sj1*x432))+((sj1*x431)));
01994 evalcond[3]=((-0.0137)+(((0.05525)*x427))+((pz*sj1))+(((-1.0)*x428*x432))+(((-1.0)*x428*x431)));
01995 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
01996 {
01997 continue;
01998 }
01999 }
02000
02001 {
02002 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02003 vinfos[0].jointtype = 1;
02004 vinfos[0].foffset = j0;
02005 vinfos[0].indices[0] = _ij0[0];
02006 vinfos[0].indices[1] = _ij0[1];
02007 vinfos[0].maxsolutions = _nj0;
02008 vinfos[1].jointtype = 1;
02009 vinfos[1].foffset = j1;
02010 vinfos[1].indices[0] = _ij1[0];
02011 vinfos[1].indices[1] = _ij1[1];
02012 vinfos[1].maxsolutions = _nj1;
02013 vinfos[2].jointtype = 1;
02014 vinfos[2].foffset = j2;
02015 vinfos[2].indices[0] = _ij2[0];
02016 vinfos[2].indices[1] = _ij2[1];
02017 vinfos[2].maxsolutions = _nj2;
02018 vinfos[3].jointtype = 1;
02019 vinfos[3].foffset = j3;
02020 vinfos[3].indices[0] = _ij3[0];
02021 vinfos[3].indices[1] = _ij3[1];
02022 vinfos[3].maxsolutions = _nj3;
02023 vinfos[4].jointtype = 1;
02024 vinfos[4].foffset = j4;
02025 vinfos[4].indices[0] = _ij4[0];
02026 vinfos[4].indices[1] = _ij4[1];
02027 vinfos[4].maxsolutions = _nj4;
02028 std::vector<int> vfree(0);
02029 solutions.AddSolution(vinfos,vfree);
02030 }
02031 }
02032 }
02033
02034 }
02035 } while(0);
02036 if( bgotonextstatement )
02037 {
02038 bool bgotonextstatement = true;
02039 do
02040 {
02041 if( 1 )
02042 {
02043 bgotonextstatement=false;
02044 continue;
02045
02046 }
02047 } while(0);
02048 if( bgotonextstatement )
02049 {
02050 }
02051 }
02052 }
02053 }
02054 }
02055 }
02056
02057 } else
02058 {
02059 {
02060 IkReal j4array[1], cj4array[1], sj4array[1];
02061 bool j4valid[1]={false};
02062 _nj4 = 1;
02063 IkReal x433=((1.0)*cj1);
02064 IkReal x434=(r01*sj0);
02065 IkReal x435=((1.0)*sj1);
02066 IkReal x436=(cj0*r00);
02067 CheckValue<IkReal> x437=IKPowWithIntegerCheck(cj3,-1);
02068 if(!x437.valid){
02069 continue;
02070 }
02071 if( IKabs(((((-1.0)*x435*x436))+(((-1.0)*x434*x435))+(((-1.0)*r02*x433)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x437.value)*(((((-1.0)*x433*x434))+(((-1.0)*x433*x436))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*x435*x436))+(((-1.0)*x434*x435))+(((-1.0)*r02*x433))))+IKsqr(((x437.value)*(((((-1.0)*x433*x434))+(((-1.0)*x433*x436))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
02072 continue;
02073 j4array[0]=IKatan2(((((-1.0)*x435*x436))+(((-1.0)*x434*x435))+(((-1.0)*r02*x433))), ((x437.value)*(((((-1.0)*x433*x434))+(((-1.0)*x433*x436))+((r02*sj1))))));
02074 sj4array[0]=IKsin(j4array[0]);
02075 cj4array[0]=IKcos(j4array[0]);
02076 if( j4array[0] > IKPI )
02077 {
02078 j4array[0]-=IK2PI;
02079 }
02080 else if( j4array[0] < -IKPI )
02081 { j4array[0]+=IK2PI;
02082 }
02083 j4valid[0] = true;
02084 for(int ij4 = 0; ij4 < 1; ++ij4)
02085 {
02086 if( !j4valid[ij4] )
02087 {
02088 continue;
02089 }
02090 _ij4[0] = ij4; _ij4[1] = -1;
02091 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02092 {
02093 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02094 {
02095 j4valid[iij4]=false; _ij4[1] = iij4; break;
02096 }
02097 }
02098 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02099 {
02100 IkReal evalcond[6];
02101 IkReal x438=IKsin(j4);
02102 IkReal x439=IKcos(j4);
02103 IkReal x440=(cj0*px);
02104 IkReal x441=(sj0*sj1);
02105 IkReal x442=((1.0)*cj1);
02106 IkReal x443=((1.0)*sj0);
02107 IkReal x444=(cj0*r00);
02108 IkReal x445=(cj3*x439);
02109 IkReal x446=(sj3*x439);
02110 evalcond[0]=(x446+(((-1.0)*r00*x443))+((cj0*r01)));
02111 evalcond[1]=(((sj1*x444))+((cj1*r02))+x438+((r01*x441)));
02112 evalcond[2]=((-0.26630543)+((sj1*x440))+((py*x441))+((cj1*pz))+(((0.05525)*x438)));
02113 evalcond[3]=((((-1.0)*r01*sj0*x442))+(((-1.0)*x445))+((r02*sj1))+(((-1.0)*x442*x444)));
02114 evalcond[4]=((0.22425116)+(((0.278775)*cj3))+(((-0.0137)*sj3))+((cj0*py))+(((-1.0)*px*x443))+(((0.05525)*x446)));
02115 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x442))+(((-0.05525)*x445))+((pz*sj1))+(((-1.0)*x440*x442))+(((0.278775)*sj3)));
02116 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
02117 {
02118 continue;
02119 }
02120 }
02121
02122 {
02123 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02124 vinfos[0].jointtype = 1;
02125 vinfos[0].foffset = j0;
02126 vinfos[0].indices[0] = _ij0[0];
02127 vinfos[0].indices[1] = _ij0[1];
02128 vinfos[0].maxsolutions = _nj0;
02129 vinfos[1].jointtype = 1;
02130 vinfos[1].foffset = j1;
02131 vinfos[1].indices[0] = _ij1[0];
02132 vinfos[1].indices[1] = _ij1[1];
02133 vinfos[1].maxsolutions = _nj1;
02134 vinfos[2].jointtype = 1;
02135 vinfos[2].foffset = j2;
02136 vinfos[2].indices[0] = _ij2[0];
02137 vinfos[2].indices[1] = _ij2[1];
02138 vinfos[2].maxsolutions = _nj2;
02139 vinfos[3].jointtype = 1;
02140 vinfos[3].foffset = j3;
02141 vinfos[3].indices[0] = _ij3[0];
02142 vinfos[3].indices[1] = _ij3[1];
02143 vinfos[3].maxsolutions = _nj3;
02144 vinfos[4].jointtype = 1;
02145 vinfos[4].foffset = j4;
02146 vinfos[4].indices[0] = _ij4[0];
02147 vinfos[4].indices[1] = _ij4[1];
02148 vinfos[4].maxsolutions = _nj4;
02149 std::vector<int> vfree(0);
02150 solutions.AddSolution(vinfos,vfree);
02151 }
02152 }
02153 }
02154
02155 }
02156
02157 }
02158
02159 } else
02160 {
02161 {
02162 IkReal j4array[1], cj4array[1], sj4array[1];
02163 bool j4valid[1]={false};
02164 _nj4 = 1;
02165 IkReal x447=((1.0)*cj0);
02166 CheckValue<IkReal> x448=IKPowWithIntegerCheck(sj3,-1);
02167 if(!x448.valid){
02168 continue;
02169 }
02170 if( IKabs(((((-1.0)*r00*sj1*x447))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x448.value)*((((r00*sj0))+(((-1.0)*r01*x447)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj1*x447))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02))))+IKsqr(((x448.value)*((((r00*sj0))+(((-1.0)*r01*x447))))))-1) <= IKFAST_SINCOS_THRESH )
02171 continue;
02172 j4array[0]=IKatan2(((((-1.0)*r00*sj1*x447))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02))), ((x448.value)*((((r00*sj0))+(((-1.0)*r01*x447))))));
02173 sj4array[0]=IKsin(j4array[0]);
02174 cj4array[0]=IKcos(j4array[0]);
02175 if( j4array[0] > IKPI )
02176 {
02177 j4array[0]-=IK2PI;
02178 }
02179 else if( j4array[0] < -IKPI )
02180 { j4array[0]+=IK2PI;
02181 }
02182 j4valid[0] = true;
02183 for(int ij4 = 0; ij4 < 1; ++ij4)
02184 {
02185 if( !j4valid[ij4] )
02186 {
02187 continue;
02188 }
02189 _ij4[0] = ij4; _ij4[1] = -1;
02190 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02191 {
02192 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02193 {
02194 j4valid[iij4]=false; _ij4[1] = iij4; break;
02195 }
02196 }
02197 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02198 {
02199 IkReal evalcond[6];
02200 IkReal x449=IKsin(j4);
02201 IkReal x450=IKcos(j4);
02202 IkReal x451=(cj0*px);
02203 IkReal x452=(sj0*sj1);
02204 IkReal x453=((1.0)*cj1);
02205 IkReal x454=((1.0)*sj0);
02206 IkReal x455=(cj0*r00);
02207 IkReal x456=(cj3*x450);
02208 IkReal x457=(sj3*x450);
02209 evalcond[0]=((((-1.0)*r00*x454))+x457+((cj0*r01)));
02210 evalcond[1]=(((cj1*r02))+x449+((sj1*x455))+((r01*x452)));
02211 evalcond[2]=((-0.26630543)+((cj1*pz))+((sj1*x451))+((py*x452))+(((0.05525)*x449)));
02212 evalcond[3]=((((-1.0)*x456))+((r02*sj1))+(((-1.0)*x453*x455))+(((-1.0)*r01*sj0*x453)));
02213 evalcond[4]=((0.22425116)+(((0.278775)*cj3))+(((-0.0137)*sj3))+(((0.05525)*x457))+((cj0*py))+(((-1.0)*px*x454)));
02214 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x453))+(((-0.05525)*x456))+(((-1.0)*x451*x453))+((pz*sj1))+(((0.278775)*sj3)));
02215 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
02216 {
02217 continue;
02218 }
02219 }
02220
02221 {
02222 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02223 vinfos[0].jointtype = 1;
02224 vinfos[0].foffset = j0;
02225 vinfos[0].indices[0] = _ij0[0];
02226 vinfos[0].indices[1] = _ij0[1];
02227 vinfos[0].maxsolutions = _nj0;
02228 vinfos[1].jointtype = 1;
02229 vinfos[1].foffset = j1;
02230 vinfos[1].indices[0] = _ij1[0];
02231 vinfos[1].indices[1] = _ij1[1];
02232 vinfos[1].maxsolutions = _nj1;
02233 vinfos[2].jointtype = 1;
02234 vinfos[2].foffset = j2;
02235 vinfos[2].indices[0] = _ij2[0];
02236 vinfos[2].indices[1] = _ij2[1];
02237 vinfos[2].maxsolutions = _nj2;
02238 vinfos[3].jointtype = 1;
02239 vinfos[3].foffset = j3;
02240 vinfos[3].indices[0] = _ij3[0];
02241 vinfos[3].indices[1] = _ij3[1];
02242 vinfos[3].maxsolutions = _nj3;
02243 vinfos[4].jointtype = 1;
02244 vinfos[4].foffset = j4;
02245 vinfos[4].indices[0] = _ij4[0];
02246 vinfos[4].indices[1] = _ij4[1];
02247 vinfos[4].maxsolutions = _nj4;
02248 std::vector<int> vfree(0);
02249 solutions.AddSolution(vinfos,vfree);
02250 }
02251 }
02252 }
02253
02254 }
02255
02256 }
02257 }
02258 }
02259
02260 }
02261 } while(0);
02262 if( bgotonextstatement )
02263 {
02264 bool bgotonextstatement = true;
02265 do
02266 {
02267 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j2))), 6.28318530717959)));
02268 if( IKabs(evalcond[0]) < 0.0000010000000000 )
02269 {
02270 bgotonextstatement=false;
02271 {
02272 IkReal j3array[1], cj3array[1], sj3array[1];
02273 bool j3valid[1]={false};
02274 _nj3 = 1;
02275 IkReal x458=(r01*sj0);
02276 IkReal x459=((0.00971622591998298)*sj1);
02277 IkReal x460=((0.197711013200238)*cj1);
02278 IkReal x461=(cj0*r00);
02279 IkReal x462=((3.57847987692738)*sj1);
02280 IkReal x463=((0.00971622591998298)*cj1);
02281 IkReal x464=(py*sj0);
02282 IkReal x465=((0.175859292669375)*sj1);
02283 IkReal x466=((0.197711013200238)*sj1);
02284 IkReal x467=((3.57847987692738)*cj1);
02285 IkReal x468=((0.175859292669375)*cj1);
02286 IkReal x469=(cj0*px);
02287 IkReal x470=(cj1*x469);
02288 if( IKabs(((0.0862247661117539)+(((-1.0)*x465*x469))+(((-1.0)*x460*x461))+(((-1.0)*x464*x465))+(((-1.0)*pz*x462))+(((-1.0)*pz*x468))+((x467*x469))+((r02*x466))+((r02*x463))+(((-1.0)*x458*x460))+((x459*x461))+((x458*x459))+((x464*x467)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-1.75454811480322)+((x468*x469))+(((-1.0)*pz*x465))+((r02*x459))+(((-1.0)*r02*x460))+(((-1.0)*x461*x463))+(((-1.0)*x461*x466))+(((-1.0)*x458*x463))+(((-1.0)*x458*x466))+((pz*x467))+((x464*x468))+((x462*x464))+((x462*x469)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0862247661117539)+(((-1.0)*x465*x469))+(((-1.0)*x460*x461))+(((-1.0)*x464*x465))+(((-1.0)*pz*x462))+(((-1.0)*pz*x468))+((x467*x469))+((r02*x466))+((r02*x463))+(((-1.0)*x458*x460))+((x459*x461))+((x458*x459))+((x464*x467))))+IKsqr(((-1.75454811480322)+((x468*x469))+(((-1.0)*pz*x465))+((r02*x459))+(((-1.0)*r02*x460))+(((-1.0)*x461*x463))+(((-1.0)*x461*x466))+(((-1.0)*x458*x463))+(((-1.0)*x458*x466))+((pz*x467))+((x464*x468))+((x462*x464))+((x462*x469))))-1) <= IKFAST_SINCOS_THRESH )
02289 continue;
02290 j3array[0]=IKatan2(((0.0862247661117539)+(((-1.0)*x465*x469))+(((-1.0)*x460*x461))+(((-1.0)*x464*x465))+(((-1.0)*pz*x462))+(((-1.0)*pz*x468))+((x467*x469))+((r02*x466))+((r02*x463))+(((-1.0)*x458*x460))+((x459*x461))+((x458*x459))+((x464*x467))), ((-1.75454811480322)+((x468*x469))+(((-1.0)*pz*x465))+((r02*x459))+(((-1.0)*r02*x460))+(((-1.0)*x461*x463))+(((-1.0)*x461*x466))+(((-1.0)*x458*x463))+(((-1.0)*x458*x466))+((pz*x467))+((x464*x468))+((x462*x464))+((x462*x469))));
02291 sj3array[0]=IKsin(j3array[0]);
02292 cj3array[0]=IKcos(j3array[0]);
02293 if( j3array[0] > IKPI )
02294 {
02295 j3array[0]-=IK2PI;
02296 }
02297 else if( j3array[0] < -IKPI )
02298 { j3array[0]+=IK2PI;
02299 }
02300 j3valid[0] = true;
02301 for(int ij3 = 0; ij3 < 1; ++ij3)
02302 {
02303 if( !j3valid[ij3] )
02304 {
02305 continue;
02306 }
02307 _ij3[0] = ij3; _ij3[1] = -1;
02308 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
02309 {
02310 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
02311 {
02312 j3valid[iij3]=false; _ij3[1] = iij3; break;
02313 }
02314 }
02315 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
02316 {
02317 IkReal evalcond[2];
02318 IkReal x471=IKsin(j3);
02319 IkReal x472=IKcos(j3);
02320 IkReal x473=((0.05525)*cj1);
02321 IkReal x474=(r01*sj0);
02322 IkReal x475=(cj0*px);
02323 IkReal x476=((1.0)*cj1);
02324 IkReal x477=(py*sj0);
02325 IkReal x478=(cj0*r00);
02326 IkReal x479=((0.05525)*sj1);
02327 evalcond[0]=((-0.49030543)+(((0.0137)*x471))+(((-1.0)*x478*x479))+((cj1*pz))+((sj1*x477))+((sj1*x475))+(((-1.0)*x474*x479))+(((-1.0)*r02*x473))+(((-0.278775)*x472)));
02328 evalcond[1]=(((x473*x478))+((x473*x474))+(((0.0137)*x472))+(((-1.0)*x475*x476))+(((-1.0)*x476*x477))+((pz*sj1))+(((0.278775)*x471))+(((-1.0)*r02*x479)));
02329 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
02330 {
02331 continue;
02332 }
02333 }
02334
02335 {
02336 IkReal j4eval[1];
02337 sj2=0;
02338 cj2=1.0;
02339 j2=0;
02340 j4eval[0]=sj3;
02341 if( IKabs(j4eval[0]) < 0.0000010000000000 )
02342 {
02343 {
02344 IkReal j4eval[1];
02345 sj2=0;
02346 cj2=1.0;
02347 j2=0;
02348 j4eval[0]=cj3;
02349 if( IKabs(j4eval[0]) < 0.0000010000000000 )
02350 {
02351 {
02352 IkReal evalcond[3];
02353 bool bgotonextstatement = true;
02354 do
02355 {
02356 IkReal x480=((1.0)*cj1);
02357 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
02358 evalcond[1]=((((-1.0)*cj0*r00*x480))+((r02*sj1))+(((-1.0)*r01*sj0*x480)));
02359 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x480))+(((-1.0)*cj0*px*x480))+((pz*sj1)));
02360 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
02361 {
02362 bgotonextstatement=false;
02363 {
02364 IkReal j4array[1], cj4array[1], sj4array[1];
02365 bool j4valid[1]={false};
02366 _nj4 = 1;
02367 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))-1) <= IKFAST_SINCOS_THRESH )
02368 continue;
02369 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), (((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))));
02370 sj4array[0]=IKsin(j4array[0]);
02371 cj4array[0]=IKcos(j4array[0]);
02372 if( j4array[0] > IKPI )
02373 {
02374 j4array[0]-=IK2PI;
02375 }
02376 else if( j4array[0] < -IKPI )
02377 { j4array[0]+=IK2PI;
02378 }
02379 j4valid[0] = true;
02380 for(int ij4 = 0; ij4 < 1; ++ij4)
02381 {
02382 if( !j4valid[ij4] )
02383 {
02384 continue;
02385 }
02386 _ij4[0] = ij4; _ij4[1] = -1;
02387 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02388 {
02389 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02390 {
02391 j4valid[iij4]=false; _ij4[1] = iij4; break;
02392 }
02393 }
02394 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02395 {
02396 IkReal evalcond[4];
02397 IkReal x481=IKsin(j4);
02398 IkReal x482=IKcos(j4);
02399 IkReal x483=(sj0*sj1);
02400 IkReal x484=(cj0*sj1);
02401 IkReal x485=((1.0)*sj0);
02402 evalcond[0]=(x481+((cj0*r01))+(((-1.0)*r00*x485)));
02403 evalcond[1]=((0.00025116)+(((0.05525)*x481))+(((-1.0)*px*x485))+((cj0*py)));
02404 evalcond[2]=(((cj1*r02))+(((-1.0)*x482))+((r01*x483))+((r00*x484)));
02405 evalcond[3]=((-0.47660543)+((py*x483))+(((-0.05525)*x482))+((px*x484))+((cj1*pz)));
02406 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
02407 {
02408 continue;
02409 }
02410 }
02411
02412 {
02413 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02414 vinfos[0].jointtype = 1;
02415 vinfos[0].foffset = j0;
02416 vinfos[0].indices[0] = _ij0[0];
02417 vinfos[0].indices[1] = _ij0[1];
02418 vinfos[0].maxsolutions = _nj0;
02419 vinfos[1].jointtype = 1;
02420 vinfos[1].foffset = j1;
02421 vinfos[1].indices[0] = _ij1[0];
02422 vinfos[1].indices[1] = _ij1[1];
02423 vinfos[1].maxsolutions = _nj1;
02424 vinfos[2].jointtype = 1;
02425 vinfos[2].foffset = j2;
02426 vinfos[2].indices[0] = _ij2[0];
02427 vinfos[2].indices[1] = _ij2[1];
02428 vinfos[2].maxsolutions = _nj2;
02429 vinfos[3].jointtype = 1;
02430 vinfos[3].foffset = j3;
02431 vinfos[3].indices[0] = _ij3[0];
02432 vinfos[3].indices[1] = _ij3[1];
02433 vinfos[3].maxsolutions = _nj3;
02434 vinfos[4].jointtype = 1;
02435 vinfos[4].foffset = j4;
02436 vinfos[4].indices[0] = _ij4[0];
02437 vinfos[4].indices[1] = _ij4[1];
02438 vinfos[4].maxsolutions = _nj4;
02439 std::vector<int> vfree(0);
02440 solutions.AddSolution(vinfos,vfree);
02441 }
02442 }
02443 }
02444
02445 }
02446 } while(0);
02447 if( bgotonextstatement )
02448 {
02449 bool bgotonextstatement = true;
02450 do
02451 {
02452 IkReal x486=((1.0)*cj1);
02453 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
02454 evalcond[1]=((((-1.0)*cj0*r00*x486))+((r02*sj1))+(((-1.0)*r01*sj0*x486)));
02455 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x486))+(((-1.0)*cj0*px*x486))+((pz*sj1)));
02456 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
02457 {
02458 bgotonextstatement=false;
02459 {
02460 IkReal j4array[1], cj4array[1], sj4array[1];
02461 bool j4valid[1]={false};
02462 _nj4 = 1;
02463 IkReal x487=((1.0)*sj1);
02464 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*r00*x487))+(((-1.0)*r01*sj0*x487))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr(((((-1.0)*cj0*r00*x487))+(((-1.0)*r01*sj0*x487))+(((-1.0)*cj1*r02))))-1) <= IKFAST_SINCOS_THRESH )
02465 continue;
02466 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), ((((-1.0)*cj0*r00*x487))+(((-1.0)*r01*sj0*x487))+(((-1.0)*cj1*r02))));
02467 sj4array[0]=IKsin(j4array[0]);
02468 cj4array[0]=IKcos(j4array[0]);
02469 if( j4array[0] > IKPI )
02470 {
02471 j4array[0]-=IK2PI;
02472 }
02473 else if( j4array[0] < -IKPI )
02474 { j4array[0]+=IK2PI;
02475 }
02476 j4valid[0] = true;
02477 for(int ij4 = 0; ij4 < 1; ++ij4)
02478 {
02479 if( !j4valid[ij4] )
02480 {
02481 continue;
02482 }
02483 _ij4[0] = ij4; _ij4[1] = -1;
02484 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02485 {
02486 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02487 {
02488 j4valid[iij4]=false; _ij4[1] = iij4; break;
02489 }
02490 }
02491 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02492 {
02493 IkReal evalcond[4];
02494 IkReal x488=IKsin(j4);
02495 IkReal x489=IKcos(j4);
02496 IkReal x490=(sj0*sj1);
02497 IkReal x491=(cj0*sj1);
02498 IkReal x492=((1.0)*sj0);
02499 evalcond[0]=((((-1.0)*r00*x492))+x488+((cj0*r01)));
02500 evalcond[1]=((0.00025116)+(((0.05525)*x488))+(((-1.0)*px*x492))+((cj0*py)));
02501 evalcond[2]=(((cj1*r02))+x489+((r00*x491))+((r01*x490)));
02502 evalcond[3]=((-0.50400543)+(((0.05525)*x489))+((py*x490))+((cj1*pz))+((px*x491)));
02503 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
02504 {
02505 continue;
02506 }
02507 }
02508
02509 {
02510 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02511 vinfos[0].jointtype = 1;
02512 vinfos[0].foffset = j0;
02513 vinfos[0].indices[0] = _ij0[0];
02514 vinfos[0].indices[1] = _ij0[1];
02515 vinfos[0].maxsolutions = _nj0;
02516 vinfos[1].jointtype = 1;
02517 vinfos[1].foffset = j1;
02518 vinfos[1].indices[0] = _ij1[0];
02519 vinfos[1].indices[1] = _ij1[1];
02520 vinfos[1].maxsolutions = _nj1;
02521 vinfos[2].jointtype = 1;
02522 vinfos[2].foffset = j2;
02523 vinfos[2].indices[0] = _ij2[0];
02524 vinfos[2].indices[1] = _ij2[1];
02525 vinfos[2].maxsolutions = _nj2;
02526 vinfos[3].jointtype = 1;
02527 vinfos[3].foffset = j3;
02528 vinfos[3].indices[0] = _ij3[0];
02529 vinfos[3].indices[1] = _ij3[1];
02530 vinfos[3].maxsolutions = _nj3;
02531 vinfos[4].jointtype = 1;
02532 vinfos[4].foffset = j4;
02533 vinfos[4].indices[0] = _ij4[0];
02534 vinfos[4].indices[1] = _ij4[1];
02535 vinfos[4].maxsolutions = _nj4;
02536 std::vector<int> vfree(0);
02537 solutions.AddSolution(vinfos,vfree);
02538 }
02539 }
02540 }
02541
02542 }
02543 } while(0);
02544 if( bgotonextstatement )
02545 {
02546 bool bgotonextstatement = true;
02547 do
02548 {
02549 IkReal x493=(sj0*sj1);
02550 IkReal x494=(cj0*sj1);
02551 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
02552 evalcond[1]=(((cj1*r02))+((r00*x494))+((r01*x493)));
02553 evalcond[2]=((-0.76908043)+((py*x493))+((cj1*pz))+((px*x494)));
02554 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
02555 {
02556 bgotonextstatement=false;
02557 {
02558 IkReal j4array[1], cj4array[1], sj4array[1];
02559 bool j4valid[1]={false};
02560 _nj4 = 1;
02561 IkReal x495=((1.0)*cj0);
02562 if( IKabs((((r00*sj0))+(((-1.0)*r01*x495)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj1*r00*x495))+((r02*sj1))+(((-1.0)*cj1*r01*sj0)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*r01*x495))))+IKsqr(((((-1.0)*cj1*r00*x495))+((r02*sj1))+(((-1.0)*cj1*r01*sj0))))-1) <= IKFAST_SINCOS_THRESH )
02563 continue;
02564 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*r01*x495))), ((((-1.0)*cj1*r00*x495))+((r02*sj1))+(((-1.0)*cj1*r01*sj0))));
02565 sj4array[0]=IKsin(j4array[0]);
02566 cj4array[0]=IKcos(j4array[0]);
02567 if( j4array[0] > IKPI )
02568 {
02569 j4array[0]-=IK2PI;
02570 }
02571 else if( j4array[0] < -IKPI )
02572 { j4array[0]+=IK2PI;
02573 }
02574 j4valid[0] = true;
02575 for(int ij4 = 0; ij4 < 1; ++ij4)
02576 {
02577 if( !j4valid[ij4] )
02578 {
02579 continue;
02580 }
02581 _ij4[0] = ij4; _ij4[1] = -1;
02582 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02583 {
02584 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02585 {
02586 j4valid[iij4]=false; _ij4[1] = iij4; break;
02587 }
02588 }
02589 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02590 {
02591 IkReal evalcond[4];
02592 IkReal x496=IKsin(j4);
02593 IkReal x497=IKcos(j4);
02594 IkReal x498=((1.0)*cj1);
02595 IkReal x499=((1.0)*sj0);
02596 evalcond[0]=((((-1.0)*r00*x499))+x496+((cj0*r01)));
02597 evalcond[1]=((0.00025116)+(((-1.0)*px*x499))+(((0.05525)*x496))+((cj0*py)));
02598 evalcond[2]=(((r02*sj1))+(((-1.0)*x497))+(((-1.0)*r01*sj0*x498))+(((-1.0)*cj0*r00*x498)));
02599 evalcond[3]=((0.0137)+(((-0.05525)*x497))+(((-1.0)*py*sj0*x498))+(((-1.0)*cj0*px*x498))+((pz*sj1)));
02600 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
02601 {
02602 continue;
02603 }
02604 }
02605
02606 {
02607 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02608 vinfos[0].jointtype = 1;
02609 vinfos[0].foffset = j0;
02610 vinfos[0].indices[0] = _ij0[0];
02611 vinfos[0].indices[1] = _ij0[1];
02612 vinfos[0].maxsolutions = _nj0;
02613 vinfos[1].jointtype = 1;
02614 vinfos[1].foffset = j1;
02615 vinfos[1].indices[0] = _ij1[0];
02616 vinfos[1].indices[1] = _ij1[1];
02617 vinfos[1].maxsolutions = _nj1;
02618 vinfos[2].jointtype = 1;
02619 vinfos[2].foffset = j2;
02620 vinfos[2].indices[0] = _ij2[0];
02621 vinfos[2].indices[1] = _ij2[1];
02622 vinfos[2].maxsolutions = _nj2;
02623 vinfos[3].jointtype = 1;
02624 vinfos[3].foffset = j3;
02625 vinfos[3].indices[0] = _ij3[0];
02626 vinfos[3].indices[1] = _ij3[1];
02627 vinfos[3].maxsolutions = _nj3;
02628 vinfos[4].jointtype = 1;
02629 vinfos[4].foffset = j4;
02630 vinfos[4].indices[0] = _ij4[0];
02631 vinfos[4].indices[1] = _ij4[1];
02632 vinfos[4].maxsolutions = _nj4;
02633 std::vector<int> vfree(0);
02634 solutions.AddSolution(vinfos,vfree);
02635 }
02636 }
02637 }
02638
02639 }
02640 } while(0);
02641 if( bgotonextstatement )
02642 {
02643 bool bgotonextstatement = true;
02644 do
02645 {
02646 IkReal x500=(sj0*sj1);
02647 IkReal x501=(cj0*sj1);
02648 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
02649 evalcond[1]=(((cj1*r02))+((r01*x500))+((r00*x501)));
02650 evalcond[2]=((-0.21153043)+((cj1*pz))+((px*x501))+((py*x500)));
02651 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
02652 {
02653 bgotonextstatement=false;
02654 {
02655 IkReal j4array[1], cj4array[1], sj4array[1];
02656 bool j4valid[1]={false};
02657 _nj4 = 1;
02658 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
02659 continue;
02660 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
02661 sj4array[0]=IKsin(j4array[0]);
02662 cj4array[0]=IKcos(j4array[0]);
02663 if( j4array[0] > IKPI )
02664 {
02665 j4array[0]-=IK2PI;
02666 }
02667 else if( j4array[0] < -IKPI )
02668 { j4array[0]+=IK2PI;
02669 }
02670 j4valid[0] = true;
02671 for(int ij4 = 0; ij4 < 1; ++ij4)
02672 {
02673 if( !j4valid[ij4] )
02674 {
02675 continue;
02676 }
02677 _ij4[0] = ij4; _ij4[1] = -1;
02678 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02679 {
02680 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02681 {
02682 j4valid[iij4]=false; _ij4[1] = iij4; break;
02683 }
02684 }
02685 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02686 {
02687 IkReal evalcond[4];
02688 IkReal x502=IKsin(j4);
02689 IkReal x503=IKcos(j4);
02690 IkReal x504=((1.0)*cj1);
02691 IkReal x505=((1.0)*sj0);
02692 evalcond[0]=((((-1.0)*r00*x505))+x502+((cj0*r01)));
02693 evalcond[1]=((0.00025116)+(((0.05525)*x502))+((cj0*py))+(((-1.0)*px*x505)));
02694 evalcond[2]=(((r02*sj1))+x503+(((-1.0)*r01*sj0*x504))+(((-1.0)*cj0*r00*x504)));
02695 evalcond[3]=((-0.0137)+(((0.05525)*x503))+(((-1.0)*cj0*px*x504))+(((-1.0)*py*sj0*x504))+((pz*sj1)));
02696 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
02697 {
02698 continue;
02699 }
02700 }
02701
02702 {
02703 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02704 vinfos[0].jointtype = 1;
02705 vinfos[0].foffset = j0;
02706 vinfos[0].indices[0] = _ij0[0];
02707 vinfos[0].indices[1] = _ij0[1];
02708 vinfos[0].maxsolutions = _nj0;
02709 vinfos[1].jointtype = 1;
02710 vinfos[1].foffset = j1;
02711 vinfos[1].indices[0] = _ij1[0];
02712 vinfos[1].indices[1] = _ij1[1];
02713 vinfos[1].maxsolutions = _nj1;
02714 vinfos[2].jointtype = 1;
02715 vinfos[2].foffset = j2;
02716 vinfos[2].indices[0] = _ij2[0];
02717 vinfos[2].indices[1] = _ij2[1];
02718 vinfos[2].maxsolutions = _nj2;
02719 vinfos[3].jointtype = 1;
02720 vinfos[3].foffset = j3;
02721 vinfos[3].indices[0] = _ij3[0];
02722 vinfos[3].indices[1] = _ij3[1];
02723 vinfos[3].maxsolutions = _nj3;
02724 vinfos[4].jointtype = 1;
02725 vinfos[4].foffset = j4;
02726 vinfos[4].indices[0] = _ij4[0];
02727 vinfos[4].indices[1] = _ij4[1];
02728 vinfos[4].maxsolutions = _nj4;
02729 std::vector<int> vfree(0);
02730 solutions.AddSolution(vinfos,vfree);
02731 }
02732 }
02733 }
02734
02735 }
02736 } while(0);
02737 if( bgotonextstatement )
02738 {
02739 bool bgotonextstatement = true;
02740 do
02741 {
02742 if( 1 )
02743 {
02744 bgotonextstatement=false;
02745 continue;
02746
02747 }
02748 } while(0);
02749 if( bgotonextstatement )
02750 {
02751 }
02752 }
02753 }
02754 }
02755 }
02756 }
02757
02758 } else
02759 {
02760 {
02761 IkReal j4array[1], cj4array[1], sj4array[1];
02762 bool j4valid[1]={false};
02763 _nj4 = 1;
02764 IkReal x506=((1.0)*r01);
02765 CheckValue<IkReal> x507=IKPowWithIntegerCheck(cj3,-1);
02766 if(!x507.valid){
02767 continue;
02768 }
02769 if( IKabs((((r00*sj0))+(((-1.0)*cj0*x506)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x507.value)*(((((-1.0)*cj0*cj1*r00))+((r02*sj1))+(((-1.0)*cj1*sj0*x506)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*x506))))+IKsqr(((x507.value)*(((((-1.0)*cj0*cj1*r00))+((r02*sj1))+(((-1.0)*cj1*sj0*x506))))))-1) <= IKFAST_SINCOS_THRESH )
02770 continue;
02771 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*x506))), ((x507.value)*(((((-1.0)*cj0*cj1*r00))+((r02*sj1))+(((-1.0)*cj1*sj0*x506))))));
02772 sj4array[0]=IKsin(j4array[0]);
02773 cj4array[0]=IKcos(j4array[0]);
02774 if( j4array[0] > IKPI )
02775 {
02776 j4array[0]-=IK2PI;
02777 }
02778 else if( j4array[0] < -IKPI )
02779 { j4array[0]+=IK2PI;
02780 }
02781 j4valid[0] = true;
02782 for(int ij4 = 0; ij4 < 1; ++ij4)
02783 {
02784 if( !j4valid[ij4] )
02785 {
02786 continue;
02787 }
02788 _ij4[0] = ij4; _ij4[1] = -1;
02789 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02790 {
02791 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02792 {
02793 j4valid[iij4]=false; _ij4[1] = iij4; break;
02794 }
02795 }
02796 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02797 {
02798 IkReal evalcond[6];
02799 IkReal x508=IKsin(j4);
02800 IkReal x509=IKcos(j4);
02801 IkReal x510=(cj0*px);
02802 IkReal x511=(sj0*sj1);
02803 IkReal x512=((1.0)*cj1);
02804 IkReal x513=((1.0)*sj0);
02805 IkReal x514=(cj0*r00);
02806 IkReal x515=((1.0)*x509);
02807 IkReal x516=((0.05525)*x509);
02808 evalcond[0]=((((-1.0)*r00*x513))+x508+((cj0*r01)));
02809 evalcond[1]=((0.00025116)+(((0.05525)*x508))+(((-1.0)*px*x513))+((cj0*py)));
02810 evalcond[2]=(((r01*x511))+((cj1*r02))+(((-1.0)*sj3*x515))+((sj1*x514)));
02811 evalcond[3]=((((-1.0)*r01*sj0*x512))+(((-1.0)*cj3*x515))+((r02*sj1))+(((-1.0)*x512*x514)));
02812 evalcond[4]=((-0.49030543)+(((-1.0)*sj3*x516))+((py*x511))+((cj1*pz))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((sj1*x510)));
02813 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*cj3*x516))+(((-1.0)*py*sj0*x512))+((pz*sj1))+(((-1.0)*x510*x512))+(((0.278775)*sj3)));
02814 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
02815 {
02816 continue;
02817 }
02818 }
02819
02820 {
02821 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02822 vinfos[0].jointtype = 1;
02823 vinfos[0].foffset = j0;
02824 vinfos[0].indices[0] = _ij0[0];
02825 vinfos[0].indices[1] = _ij0[1];
02826 vinfos[0].maxsolutions = _nj0;
02827 vinfos[1].jointtype = 1;
02828 vinfos[1].foffset = j1;
02829 vinfos[1].indices[0] = _ij1[0];
02830 vinfos[1].indices[1] = _ij1[1];
02831 vinfos[1].maxsolutions = _nj1;
02832 vinfos[2].jointtype = 1;
02833 vinfos[2].foffset = j2;
02834 vinfos[2].indices[0] = _ij2[0];
02835 vinfos[2].indices[1] = _ij2[1];
02836 vinfos[2].maxsolutions = _nj2;
02837 vinfos[3].jointtype = 1;
02838 vinfos[3].foffset = j3;
02839 vinfos[3].indices[0] = _ij3[0];
02840 vinfos[3].indices[1] = _ij3[1];
02841 vinfos[3].maxsolutions = _nj3;
02842 vinfos[4].jointtype = 1;
02843 vinfos[4].foffset = j4;
02844 vinfos[4].indices[0] = _ij4[0];
02845 vinfos[4].indices[1] = _ij4[1];
02846 vinfos[4].maxsolutions = _nj4;
02847 std::vector<int> vfree(0);
02848 solutions.AddSolution(vinfos,vfree);
02849 }
02850 }
02851 }
02852
02853 }
02854
02855 }
02856
02857 } else
02858 {
02859 {
02860 IkReal j4array[1], cj4array[1], sj4array[1];
02861 bool j4valid[1]={false};
02862 _nj4 = 1;
02863 CheckValue<IkReal> x517=IKPowWithIntegerCheck(sj3,-1);
02864 if(!x517.valid){
02865 continue;
02866 }
02867 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x517.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr(((x517.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
02868 continue;
02869 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), ((x517.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))));
02870 sj4array[0]=IKsin(j4array[0]);
02871 cj4array[0]=IKcos(j4array[0]);
02872 if( j4array[0] > IKPI )
02873 {
02874 j4array[0]-=IK2PI;
02875 }
02876 else if( j4array[0] < -IKPI )
02877 { j4array[0]+=IK2PI;
02878 }
02879 j4valid[0] = true;
02880 for(int ij4 = 0; ij4 < 1; ++ij4)
02881 {
02882 if( !j4valid[ij4] )
02883 {
02884 continue;
02885 }
02886 _ij4[0] = ij4; _ij4[1] = -1;
02887 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
02888 {
02889 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
02890 {
02891 j4valid[iij4]=false; _ij4[1] = iij4; break;
02892 }
02893 }
02894 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
02895 {
02896 IkReal evalcond[6];
02897 IkReal x518=IKsin(j4);
02898 IkReal x519=IKcos(j4);
02899 IkReal x520=(cj0*px);
02900 IkReal x521=(sj0*sj1);
02901 IkReal x522=((1.0)*cj1);
02902 IkReal x523=((1.0)*sj0);
02903 IkReal x524=(cj0*r00);
02904 IkReal x525=((1.0)*x519);
02905 IkReal x526=((0.05525)*x519);
02906 evalcond[0]=((((-1.0)*r00*x523))+x518+((cj0*r01)));
02907 evalcond[1]=((0.00025116)+(((-1.0)*px*x523))+(((0.05525)*x518))+((cj0*py)));
02908 evalcond[2]=(((sj1*x524))+(((-1.0)*sj3*x525))+((cj1*r02))+((r01*x521)));
02909 evalcond[3]=((((-1.0)*cj3*x525))+((r02*sj1))+(((-1.0)*x522*x524))+(((-1.0)*r01*sj0*x522)));
02910 evalcond[4]=((-0.49030543)+((sj1*x520))+(((-1.0)*sj3*x526))+((cj1*pz))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((py*x521)));
02911 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x520*x522))+(((-1.0)*cj3*x526))+(((-1.0)*py*sj0*x522))+((pz*sj1))+(((0.278775)*sj3)));
02912 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
02913 {
02914 continue;
02915 }
02916 }
02917
02918 {
02919 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
02920 vinfos[0].jointtype = 1;
02921 vinfos[0].foffset = j0;
02922 vinfos[0].indices[0] = _ij0[0];
02923 vinfos[0].indices[1] = _ij0[1];
02924 vinfos[0].maxsolutions = _nj0;
02925 vinfos[1].jointtype = 1;
02926 vinfos[1].foffset = j1;
02927 vinfos[1].indices[0] = _ij1[0];
02928 vinfos[1].indices[1] = _ij1[1];
02929 vinfos[1].maxsolutions = _nj1;
02930 vinfos[2].jointtype = 1;
02931 vinfos[2].foffset = j2;
02932 vinfos[2].indices[0] = _ij2[0];
02933 vinfos[2].indices[1] = _ij2[1];
02934 vinfos[2].maxsolutions = _nj2;
02935 vinfos[3].jointtype = 1;
02936 vinfos[3].foffset = j3;
02937 vinfos[3].indices[0] = _ij3[0];
02938 vinfos[3].indices[1] = _ij3[1];
02939 vinfos[3].maxsolutions = _nj3;
02940 vinfos[4].jointtype = 1;
02941 vinfos[4].foffset = j4;
02942 vinfos[4].indices[0] = _ij4[0];
02943 vinfos[4].indices[1] = _ij4[1];
02944 vinfos[4].maxsolutions = _nj4;
02945 std::vector<int> vfree(0);
02946 solutions.AddSolution(vinfos,vfree);
02947 }
02948 }
02949 }
02950
02951 }
02952
02953 }
02954 }
02955 }
02956
02957 }
02958 } while(0);
02959 if( bgotonextstatement )
02960 {
02961 bool bgotonextstatement = true;
02962 do
02963 {
02964 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j2)))), 6.28318530717959)));
02965 if( IKabs(evalcond[0]) < 0.0000010000000000 )
02966 {
02967 bgotonextstatement=false;
02968 {
02969 IkReal j3array[1], cj3array[1], sj3array[1];
02970 bool j3valid[1]={false};
02971 _nj3 = 1;
02972 IkReal x527=((3.57847987692738)*sj1);
02973 IkReal x528=((0.197711013200238)*cj1);
02974 IkReal x529=(r01*sj0);
02975 IkReal x530=(cj0*r00);
02976 IkReal x531=((0.00971622591998298)*sj1);
02977 IkReal x532=((0.00971622591998298)*cj1);
02978 IkReal x533=(py*sj0);
02979 IkReal x534=((0.175859292669375)*sj1);
02980 IkReal x535=((0.197711013200238)*sj1);
02981 IkReal x536=((3.57847987692738)*cj1);
02982 IkReal x537=((0.175859292669375)*cj1);
02983 IkReal x538=(cj0*px);
02984 IkReal x539=(cj1*x538);
02985 if( IKabs(((-0.00743980299587377)+((pz*x537))+((r02*x535))+(((-1.0)*x530*x531))+(((-1.0)*x529*x531))+(((-1.0)*x528*x529))+(((-1.0)*r02*x532))+(((-1.0)*x528*x530))+((x536*x538))+((x534*x538))+(((-1.0)*pz*x527))+((x533*x536))+((x533*x534)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((0.15138912993976)+((r02*x528))+((r02*x531))+(((-1.0)*x527*x533))+(((-1.0)*x527*x538))+(((-1.0)*x530*x532))+(((-1.0)*x529*x532))+((x537*x538))+(((-1.0)*pz*x536))+(((-1.0)*pz*x534))+((x530*x535))+((x529*x535))+((x533*x537)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((-0.00743980299587377)+((pz*x537))+((r02*x535))+(((-1.0)*x530*x531))+(((-1.0)*x529*x531))+(((-1.0)*x528*x529))+(((-1.0)*r02*x532))+(((-1.0)*x528*x530))+((x536*x538))+((x534*x538))+(((-1.0)*pz*x527))+((x533*x536))+((x533*x534))))+IKsqr(((0.15138912993976)+((r02*x528))+((r02*x531))+(((-1.0)*x527*x533))+(((-1.0)*x527*x538))+(((-1.0)*x530*x532))+(((-1.0)*x529*x532))+((x537*x538))+(((-1.0)*pz*x536))+(((-1.0)*pz*x534))+((x530*x535))+((x529*x535))+((x533*x537))))-1) <= IKFAST_SINCOS_THRESH )
02986 continue;
02987 j3array[0]=IKatan2(((-0.00743980299587377)+((pz*x537))+((r02*x535))+(((-1.0)*x530*x531))+(((-1.0)*x529*x531))+(((-1.0)*x528*x529))+(((-1.0)*r02*x532))+(((-1.0)*x528*x530))+((x536*x538))+((x534*x538))+(((-1.0)*pz*x527))+((x533*x536))+((x533*x534))), ((0.15138912993976)+((r02*x528))+((r02*x531))+(((-1.0)*x527*x533))+(((-1.0)*x527*x538))+(((-1.0)*x530*x532))+(((-1.0)*x529*x532))+((x537*x538))+(((-1.0)*pz*x536))+(((-1.0)*pz*x534))+((x530*x535))+((x529*x535))+((x533*x537))));
02988 sj3array[0]=IKsin(j3array[0]);
02989 cj3array[0]=IKcos(j3array[0]);
02990 if( j3array[0] > IKPI )
02991 {
02992 j3array[0]-=IK2PI;
02993 }
02994 else if( j3array[0] < -IKPI )
02995 { j3array[0]+=IK2PI;
02996 }
02997 j3valid[0] = true;
02998 for(int ij3 = 0; ij3 < 1; ++ij3)
02999 {
03000 if( !j3valid[ij3] )
03001 {
03002 continue;
03003 }
03004 _ij3[0] = ij3; _ij3[1] = -1;
03005 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
03006 {
03007 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
03008 {
03009 j3valid[iij3]=false; _ij3[1] = iij3; break;
03010 }
03011 }
03012 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
03013 {
03014 IkReal evalcond[2];
03015 IkReal x540=IKsin(j3);
03016 IkReal x541=IKcos(j3);
03017 IkReal x542=((1.0)*cj1);
03018 IkReal x543=(cj0*px);
03019 IkReal x544=((0.05525)*r02);
03020 IkReal x545=((1.0)*sj1);
03021 IkReal x546=(py*sj0);
03022 IkReal x547=((0.05525)*cj0*r00);
03023 IkReal x548=((0.05525)*r01*sj0);
03024 evalcond[0]=((((-1.0)*x542*x546))+(((-1.0)*x542*x543))+(((-1.0)*sj1*x544))+((cj1*x547))+((cj1*x548))+(((0.278775)*x540))+((pz*sj1))+(((0.0137)*x541)));
03025 evalcond[1]=((0.04230543)+((sj1*x548))+((sj1*x547))+(((-1.0)*x545*x546))+(((-0.278775)*x541))+((cj1*x544))+(((-1.0)*pz*x542))+(((-1.0)*x543*x545))+(((0.0137)*x540)));
03026 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
03027 {
03028 continue;
03029 }
03030 }
03031
03032 {
03033 IkReal j4eval[1];
03034 sj2=0;
03035 cj2=-1.0;
03036 j2=3.14159265358979;
03037 j4eval[0]=cj3;
03038 if( IKabs(j4eval[0]) < 0.0000010000000000 )
03039 {
03040 {
03041 IkReal j4eval[1];
03042 sj2=0;
03043 cj2=-1.0;
03044 j2=3.14159265358979;
03045 j4eval[0]=sj3;
03046 if( IKabs(j4eval[0]) < 0.0000010000000000 )
03047 {
03048 {
03049 IkReal evalcond[3];
03050 bool bgotonextstatement = true;
03051 do
03052 {
03053 IkReal x549=(sj0*sj1);
03054 IkReal x550=(cj0*sj1);
03055 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
03056 evalcond[1]=(((cj1*r02))+((r00*x550))+((r01*x549)));
03057 evalcond[2]=((0.23646957)+((py*x549))+((px*x550))+((cj1*pz)));
03058 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
03059 {
03060 bgotonextstatement=false;
03061 {
03062 IkReal j4array[1], cj4array[1], sj4array[1];
03063 bool j4valid[1]={false};
03064 _nj4 = 1;
03065 IkReal x551=((1.0)*cj1);
03066 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r01*sj0*x551))+((r02*sj1))+(((-1.0)*cj0*r00*x551)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((((-1.0)*r01*sj0*x551))+((r02*sj1))+(((-1.0)*cj0*r00*x551))))-1) <= IKFAST_SINCOS_THRESH )
03067 continue;
03068 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((((-1.0)*r01*sj0*x551))+((r02*sj1))+(((-1.0)*cj0*r00*x551))));
03069 sj4array[0]=IKsin(j4array[0]);
03070 cj4array[0]=IKcos(j4array[0]);
03071 if( j4array[0] > IKPI )
03072 {
03073 j4array[0]-=IK2PI;
03074 }
03075 else if( j4array[0] < -IKPI )
03076 { j4array[0]+=IK2PI;
03077 }
03078 j4valid[0] = true;
03079 for(int ij4 = 0; ij4 < 1; ++ij4)
03080 {
03081 if( !j4valid[ij4] )
03082 {
03083 continue;
03084 }
03085 _ij4[0] = ij4; _ij4[1] = -1;
03086 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
03087 {
03088 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03089 {
03090 j4valid[iij4]=false; _ij4[1] = iij4; break;
03091 }
03092 }
03093 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03094 {
03095 IkReal evalcond[4];
03096 IkReal x552=IKsin(j4);
03097 IkReal x553=IKcos(j4);
03098 IkReal x554=((1.0)*cj1);
03099 IkReal x555=((1.0)*sj0);
03100 evalcond[0]=((((-1.0)*x552))+(((-1.0)*r00*x555))+((cj0*r01)));
03101 evalcond[1]=((0.00025116)+(((-0.05525)*x552))+(((-1.0)*px*x555))+((cj0*py)));
03102 evalcond[2]=((((-1.0)*x553))+(((-1.0)*r01*sj0*x554))+((r02*sj1))+(((-1.0)*cj0*r00*x554)));
03103 evalcond[3]=((0.0137)+(((-0.05525)*x553))+(((-1.0)*py*sj0*x554))+((pz*sj1))+(((-1.0)*cj0*px*x554)));
03104 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
03105 {
03106 continue;
03107 }
03108 }
03109
03110 {
03111 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03112 vinfos[0].jointtype = 1;
03113 vinfos[0].foffset = j0;
03114 vinfos[0].indices[0] = _ij0[0];
03115 vinfos[0].indices[1] = _ij0[1];
03116 vinfos[0].maxsolutions = _nj0;
03117 vinfos[1].jointtype = 1;
03118 vinfos[1].foffset = j1;
03119 vinfos[1].indices[0] = _ij1[0];
03120 vinfos[1].indices[1] = _ij1[1];
03121 vinfos[1].maxsolutions = _nj1;
03122 vinfos[2].jointtype = 1;
03123 vinfos[2].foffset = j2;
03124 vinfos[2].indices[0] = _ij2[0];
03125 vinfos[2].indices[1] = _ij2[1];
03126 vinfos[2].maxsolutions = _nj2;
03127 vinfos[3].jointtype = 1;
03128 vinfos[3].foffset = j3;
03129 vinfos[3].indices[0] = _ij3[0];
03130 vinfos[3].indices[1] = _ij3[1];
03131 vinfos[3].maxsolutions = _nj3;
03132 vinfos[4].jointtype = 1;
03133 vinfos[4].foffset = j4;
03134 vinfos[4].indices[0] = _ij4[0];
03135 vinfos[4].indices[1] = _ij4[1];
03136 vinfos[4].maxsolutions = _nj4;
03137 std::vector<int> vfree(0);
03138 solutions.AddSolution(vinfos,vfree);
03139 }
03140 }
03141 }
03142
03143 }
03144 } while(0);
03145 if( bgotonextstatement )
03146 {
03147 bool bgotonextstatement = true;
03148 do
03149 {
03150 IkReal x556=(sj0*sj1);
03151 IkReal x557=(cj0*sj1);
03152 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
03153 evalcond[1]=(((cj1*r02))+((r01*x556))+((r00*x557)));
03154 evalcond[2]=((-0.32108043)+((py*x556))+((px*x557))+((cj1*pz)));
03155 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
03156 {
03157 bgotonextstatement=false;
03158 {
03159 IkReal j4array[1], cj4array[1], sj4array[1];
03160 bool j4valid[1]={false};
03161 _nj4 = 1;
03162 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
03163 continue;
03164 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
03165 sj4array[0]=IKsin(j4array[0]);
03166 cj4array[0]=IKcos(j4array[0]);
03167 if( j4array[0] > IKPI )
03168 {
03169 j4array[0]-=IK2PI;
03170 }
03171 else if( j4array[0] < -IKPI )
03172 { j4array[0]+=IK2PI;
03173 }
03174 j4valid[0] = true;
03175 for(int ij4 = 0; ij4 < 1; ++ij4)
03176 {
03177 if( !j4valid[ij4] )
03178 {
03179 continue;
03180 }
03181 _ij4[0] = ij4; _ij4[1] = -1;
03182 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
03183 {
03184 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03185 {
03186 j4valid[iij4]=false; _ij4[1] = iij4; break;
03187 }
03188 }
03189 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03190 {
03191 IkReal evalcond[4];
03192 IkReal x558=IKsin(j4);
03193 IkReal x559=IKcos(j4);
03194 IkReal x560=((1.0)*cj1);
03195 IkReal x561=((1.0)*sj0);
03196 evalcond[0]=((((-1.0)*x558))+(((-1.0)*r00*x561))+((cj0*r01)));
03197 evalcond[1]=((0.00025116)+(((-0.05525)*x558))+((cj0*py))+(((-1.0)*px*x561)));
03198 evalcond[2]=((((-1.0)*cj0*r00*x560))+(((-1.0)*r01*sj0*x560))+((r02*sj1))+x559);
03199 evalcond[3]=((-0.0137)+(((-1.0)*py*sj0*x560))+(((-1.0)*cj0*px*x560))+((pz*sj1))+(((0.05525)*x559)));
03200 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
03201 {
03202 continue;
03203 }
03204 }
03205
03206 {
03207 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03208 vinfos[0].jointtype = 1;
03209 vinfos[0].foffset = j0;
03210 vinfos[0].indices[0] = _ij0[0];
03211 vinfos[0].indices[1] = _ij0[1];
03212 vinfos[0].maxsolutions = _nj0;
03213 vinfos[1].jointtype = 1;
03214 vinfos[1].foffset = j1;
03215 vinfos[1].indices[0] = _ij1[0];
03216 vinfos[1].indices[1] = _ij1[1];
03217 vinfos[1].maxsolutions = _nj1;
03218 vinfos[2].jointtype = 1;
03219 vinfos[2].foffset = j2;
03220 vinfos[2].indices[0] = _ij2[0];
03221 vinfos[2].indices[1] = _ij2[1];
03222 vinfos[2].maxsolutions = _nj2;
03223 vinfos[3].jointtype = 1;
03224 vinfos[3].foffset = j3;
03225 vinfos[3].indices[0] = _ij3[0];
03226 vinfos[3].indices[1] = _ij3[1];
03227 vinfos[3].maxsolutions = _nj3;
03228 vinfos[4].jointtype = 1;
03229 vinfos[4].foffset = j4;
03230 vinfos[4].indices[0] = _ij4[0];
03231 vinfos[4].indices[1] = _ij4[1];
03232 vinfos[4].maxsolutions = _nj4;
03233 std::vector<int> vfree(0);
03234 solutions.AddSolution(vinfos,vfree);
03235 }
03236 }
03237 }
03238
03239 }
03240 } while(0);
03241 if( bgotonextstatement )
03242 {
03243 bool bgotonextstatement = true;
03244 do
03245 {
03246 IkReal x562=((1.0)*cj1);
03247 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
03248 evalcond[1]=((((-1.0)*cj0*r00*x562))+(((-1.0)*r01*sj0*x562))+((r02*sj1)));
03249 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x562))+(((-1.0)*cj0*px*x562))+((pz*sj1)));
03250 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
03251 {
03252 bgotonextstatement=false;
03253 {
03254 IkReal j4array[1], cj4array[1], sj4array[1];
03255 bool j4valid[1]={false};
03256 _nj4 = 1;
03257 IkReal x563=((1.0)*sj1);
03258 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*r00*x563))+(((-1.0)*r01*sj0*x563))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((((-1.0)*cj0*r00*x563))+(((-1.0)*r01*sj0*x563))+(((-1.0)*cj1*r02))))-1) <= IKFAST_SINCOS_THRESH )
03259 continue;
03260 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((((-1.0)*cj0*r00*x563))+(((-1.0)*r01*sj0*x563))+(((-1.0)*cj1*r02))));
03261 sj4array[0]=IKsin(j4array[0]);
03262 cj4array[0]=IKcos(j4array[0]);
03263 if( j4array[0] > IKPI )
03264 {
03265 j4array[0]-=IK2PI;
03266 }
03267 else if( j4array[0] < -IKPI )
03268 { j4array[0]+=IK2PI;
03269 }
03270 j4valid[0] = true;
03271 for(int ij4 = 0; ij4 < 1; ++ij4)
03272 {
03273 if( !j4valid[ij4] )
03274 {
03275 continue;
03276 }
03277 _ij4[0] = ij4; _ij4[1] = -1;
03278 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
03279 {
03280 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03281 {
03282 j4valid[iij4]=false; _ij4[1] = iij4; break;
03283 }
03284 }
03285 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03286 {
03287 IkReal evalcond[4];
03288 IkReal x564=IKsin(j4);
03289 IkReal x565=IKcos(j4);
03290 IkReal x566=(cj0*sj1);
03291 IkReal x567=(sj0*sj1);
03292 IkReal x568=((1.0)*sj0);
03293 evalcond[0]=((((-1.0)*x564))+(((-1.0)*r00*x568))+((cj0*r01)));
03294 evalcond[1]=((0.00025116)+(((-0.05525)*x564))+((cj0*py))+(((-1.0)*px*x568)));
03295 evalcond[2]=(((r01*x567))+((r00*x566))+((cj1*r02))+x565);
03296 evalcond[3]=((-0.05600543)+(((0.05525)*x565))+((cj1*pz))+((py*x567))+((px*x566)));
03297 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
03298 {
03299 continue;
03300 }
03301 }
03302
03303 {
03304 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03305 vinfos[0].jointtype = 1;
03306 vinfos[0].foffset = j0;
03307 vinfos[0].indices[0] = _ij0[0];
03308 vinfos[0].indices[1] = _ij0[1];
03309 vinfos[0].maxsolutions = _nj0;
03310 vinfos[1].jointtype = 1;
03311 vinfos[1].foffset = j1;
03312 vinfos[1].indices[0] = _ij1[0];
03313 vinfos[1].indices[1] = _ij1[1];
03314 vinfos[1].maxsolutions = _nj1;
03315 vinfos[2].jointtype = 1;
03316 vinfos[2].foffset = j2;
03317 vinfos[2].indices[0] = _ij2[0];
03318 vinfos[2].indices[1] = _ij2[1];
03319 vinfos[2].maxsolutions = _nj2;
03320 vinfos[3].jointtype = 1;
03321 vinfos[3].foffset = j3;
03322 vinfos[3].indices[0] = _ij3[0];
03323 vinfos[3].indices[1] = _ij3[1];
03324 vinfos[3].maxsolutions = _nj3;
03325 vinfos[4].jointtype = 1;
03326 vinfos[4].foffset = j4;
03327 vinfos[4].indices[0] = _ij4[0];
03328 vinfos[4].indices[1] = _ij4[1];
03329 vinfos[4].maxsolutions = _nj4;
03330 std::vector<int> vfree(0);
03331 solutions.AddSolution(vinfos,vfree);
03332 }
03333 }
03334 }
03335
03336 }
03337 } while(0);
03338 if( bgotonextstatement )
03339 {
03340 bool bgotonextstatement = true;
03341 do
03342 {
03343 IkReal x569=((1.0)*cj1);
03344 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
03345 evalcond[1]=((((-1.0)*cj0*r00*x569))+(((-1.0)*r01*sj0*x569))+((r02*sj1)));
03346 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x569))+(((-1.0)*cj0*px*x569))+((pz*sj1)));
03347 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
03348 {
03349 bgotonextstatement=false;
03350 {
03351 IkReal j4array[1], cj4array[1], sj4array[1];
03352 bool j4valid[1]={false};
03353 _nj4 = 1;
03354 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))-1) <= IKFAST_SINCOS_THRESH )
03355 continue;
03356 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), (((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))));
03357 sj4array[0]=IKsin(j4array[0]);
03358 cj4array[0]=IKcos(j4array[0]);
03359 if( j4array[0] > IKPI )
03360 {
03361 j4array[0]-=IK2PI;
03362 }
03363 else if( j4array[0] < -IKPI )
03364 { j4array[0]+=IK2PI;
03365 }
03366 j4valid[0] = true;
03367 for(int ij4 = 0; ij4 < 1; ++ij4)
03368 {
03369 if( !j4valid[ij4] )
03370 {
03371 continue;
03372 }
03373 _ij4[0] = ij4; _ij4[1] = -1;
03374 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
03375 {
03376 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03377 {
03378 j4valid[iij4]=false; _ij4[1] = iij4; break;
03379 }
03380 }
03381 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03382 {
03383 IkReal evalcond[4];
03384 IkReal x570=IKsin(j4);
03385 IkReal x571=IKcos(j4);
03386 IkReal x572=(cj0*sj1);
03387 IkReal x573=(sj0*sj1);
03388 IkReal x574=((1.0)*sj0);
03389 evalcond[0]=((((-1.0)*r00*x574))+(((-1.0)*x570))+((cj0*r01)));
03390 evalcond[1]=((0.00025116)+(((-1.0)*px*x574))+(((-0.05525)*x570))+((cj0*py)));
03391 evalcond[2]=(((r01*x573))+((r00*x572))+((cj1*r02))+(((-1.0)*x571)));
03392 evalcond[3]=((-0.02860543)+((py*x573))+((px*x572))+((cj1*pz))+(((-0.05525)*x571)));
03393 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
03394 {
03395 continue;
03396 }
03397 }
03398
03399 {
03400 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03401 vinfos[0].jointtype = 1;
03402 vinfos[0].foffset = j0;
03403 vinfos[0].indices[0] = _ij0[0];
03404 vinfos[0].indices[1] = _ij0[1];
03405 vinfos[0].maxsolutions = _nj0;
03406 vinfos[1].jointtype = 1;
03407 vinfos[1].foffset = j1;
03408 vinfos[1].indices[0] = _ij1[0];
03409 vinfos[1].indices[1] = _ij1[1];
03410 vinfos[1].maxsolutions = _nj1;
03411 vinfos[2].jointtype = 1;
03412 vinfos[2].foffset = j2;
03413 vinfos[2].indices[0] = _ij2[0];
03414 vinfos[2].indices[1] = _ij2[1];
03415 vinfos[2].maxsolutions = _nj2;
03416 vinfos[3].jointtype = 1;
03417 vinfos[3].foffset = j3;
03418 vinfos[3].indices[0] = _ij3[0];
03419 vinfos[3].indices[1] = _ij3[1];
03420 vinfos[3].maxsolutions = _nj3;
03421 vinfos[4].jointtype = 1;
03422 vinfos[4].foffset = j4;
03423 vinfos[4].indices[0] = _ij4[0];
03424 vinfos[4].indices[1] = _ij4[1];
03425 vinfos[4].maxsolutions = _nj4;
03426 std::vector<int> vfree(0);
03427 solutions.AddSolution(vinfos,vfree);
03428 }
03429 }
03430 }
03431
03432 }
03433 } while(0);
03434 if( bgotonextstatement )
03435 {
03436 bool bgotonextstatement = true;
03437 do
03438 {
03439 if( 1 )
03440 {
03441 bgotonextstatement=false;
03442 continue;
03443
03444 }
03445 } while(0);
03446 if( bgotonextstatement )
03447 {
03448 }
03449 }
03450 }
03451 }
03452 }
03453 }
03454
03455 } else
03456 {
03457 {
03458 IkReal j4array[1], cj4array[1], sj4array[1];
03459 bool j4valid[1]={false};
03460 _nj4 = 1;
03461 IkReal x575=((1.0)*sj1);
03462 CheckValue<IkReal> x576=IKPowWithIntegerCheck(sj3,-1);
03463 if(!x576.valid){
03464 continue;
03465 }
03466 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x576.value)*(((((-1.0)*cj0*r00*x575))+(((-1.0)*cj1*r02))+(((-1.0)*r01*sj0*x575)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((x576.value)*(((((-1.0)*cj0*r00*x575))+(((-1.0)*cj1*r02))+(((-1.0)*r01*sj0*x575))))))-1) <= IKFAST_SINCOS_THRESH )
03467 continue;
03468 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((x576.value)*(((((-1.0)*cj0*r00*x575))+(((-1.0)*cj1*r02))+(((-1.0)*r01*sj0*x575))))));
03469 sj4array[0]=IKsin(j4array[0]);
03470 cj4array[0]=IKcos(j4array[0]);
03471 if( j4array[0] > IKPI )
03472 {
03473 j4array[0]-=IK2PI;
03474 }
03475 else if( j4array[0] < -IKPI )
03476 { j4array[0]+=IK2PI;
03477 }
03478 j4valid[0] = true;
03479 for(int ij4 = 0; ij4 < 1; ++ij4)
03480 {
03481 if( !j4valid[ij4] )
03482 {
03483 continue;
03484 }
03485 _ij4[0] = ij4; _ij4[1] = -1;
03486 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
03487 {
03488 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03489 {
03490 j4valid[iij4]=false; _ij4[1] = iij4; break;
03491 }
03492 }
03493 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03494 {
03495 IkReal evalcond[6];
03496 IkReal x577=IKsin(j4);
03497 IkReal x578=IKcos(j4);
03498 IkReal x579=(cj0*px);
03499 IkReal x580=(sj0*sj1);
03500 IkReal x581=((1.0)*cj1);
03501 IkReal x582=((1.0)*sj0);
03502 IkReal x583=(cj0*r00);
03503 IkReal x584=(cj3*x578);
03504 IkReal x585=(sj3*x578);
03505 evalcond[0]=((((-1.0)*x577))+(((-1.0)*r00*x582))+((cj0*r01)));
03506 evalcond[1]=((0.00025116)+(((-1.0)*px*x582))+(((-0.05525)*x577))+((cj0*py)));
03507 evalcond[2]=(((sj1*x583))+((cj1*r02))+x585+((r01*x580)));
03508 evalcond[3]=((((-1.0)*x584))+(((-1.0)*r01*sj0*x581))+((r02*sj1))+(((-1.0)*x581*x583)));
03509 evalcond[4]=((-0.04230543)+((sj1*x579))+(((0.278775)*cj3))+((cj1*pz))+(((-0.0137)*sj3))+(((0.05525)*x585))+((py*x580)));
03510 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x579*x581))+((pz*sj1))+(((-0.05525)*x584))+(((-1.0)*py*sj0*x581))+(((0.278775)*sj3)));
03511 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
03512 {
03513 continue;
03514 }
03515 }
03516
03517 {
03518 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03519 vinfos[0].jointtype = 1;
03520 vinfos[0].foffset = j0;
03521 vinfos[0].indices[0] = _ij0[0];
03522 vinfos[0].indices[1] = _ij0[1];
03523 vinfos[0].maxsolutions = _nj0;
03524 vinfos[1].jointtype = 1;
03525 vinfos[1].foffset = j1;
03526 vinfos[1].indices[0] = _ij1[0];
03527 vinfos[1].indices[1] = _ij1[1];
03528 vinfos[1].maxsolutions = _nj1;
03529 vinfos[2].jointtype = 1;
03530 vinfos[2].foffset = j2;
03531 vinfos[2].indices[0] = _ij2[0];
03532 vinfos[2].indices[1] = _ij2[1];
03533 vinfos[2].maxsolutions = _nj2;
03534 vinfos[3].jointtype = 1;
03535 vinfos[3].foffset = j3;
03536 vinfos[3].indices[0] = _ij3[0];
03537 vinfos[3].indices[1] = _ij3[1];
03538 vinfos[3].maxsolutions = _nj3;
03539 vinfos[4].jointtype = 1;
03540 vinfos[4].foffset = j4;
03541 vinfos[4].indices[0] = _ij4[0];
03542 vinfos[4].indices[1] = _ij4[1];
03543 vinfos[4].maxsolutions = _nj4;
03544 std::vector<int> vfree(0);
03545 solutions.AddSolution(vinfos,vfree);
03546 }
03547 }
03548 }
03549
03550 }
03551
03552 }
03553
03554 } else
03555 {
03556 {
03557 IkReal j4array[1], cj4array[1], sj4array[1];
03558 bool j4valid[1]={false};
03559 _nj4 = 1;
03560 IkReal x586=((1.0)*cj1);
03561 CheckValue<IkReal> x587=IKPowWithIntegerCheck(cj3,-1);
03562 if(!x587.valid){
03563 continue;
03564 }
03565 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x587.value)*(((((-1.0)*r01*sj0*x586))+(((-1.0)*cj0*r00*x586))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((x587.value)*(((((-1.0)*r01*sj0*x586))+(((-1.0)*cj0*r00*x586))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
03566 continue;
03567 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((x587.value)*(((((-1.0)*r01*sj0*x586))+(((-1.0)*cj0*r00*x586))+((r02*sj1))))));
03568 sj4array[0]=IKsin(j4array[0]);
03569 cj4array[0]=IKcos(j4array[0]);
03570 if( j4array[0] > IKPI )
03571 {
03572 j4array[0]-=IK2PI;
03573 }
03574 else if( j4array[0] < -IKPI )
03575 { j4array[0]+=IK2PI;
03576 }
03577 j4valid[0] = true;
03578 for(int ij4 = 0; ij4 < 1; ++ij4)
03579 {
03580 if( !j4valid[ij4] )
03581 {
03582 continue;
03583 }
03584 _ij4[0] = ij4; _ij4[1] = -1;
03585 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
03586 {
03587 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03588 {
03589 j4valid[iij4]=false; _ij4[1] = iij4; break;
03590 }
03591 }
03592 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03593 {
03594 IkReal evalcond[6];
03595 IkReal x588=IKsin(j4);
03596 IkReal x589=IKcos(j4);
03597 IkReal x590=(cj0*px);
03598 IkReal x591=(sj0*sj1);
03599 IkReal x592=((1.0)*cj1);
03600 IkReal x593=((1.0)*sj0);
03601 IkReal x594=(cj0*r00);
03602 IkReal x595=(cj3*x589);
03603 IkReal x596=(sj3*x589);
03604 evalcond[0]=((((-1.0)*x588))+(((-1.0)*r00*x593))+((cj0*r01)));
03605 evalcond[1]=((0.00025116)+(((-1.0)*px*x593))+(((-0.05525)*x588))+((cj0*py)));
03606 evalcond[2]=(((cj1*r02))+((r01*x591))+x596+((sj1*x594)));
03607 evalcond[3]=((((-1.0)*r01*sj0*x592))+(((-1.0)*x595))+(((-1.0)*x592*x594))+((r02*sj1)));
03608 evalcond[4]=((-0.04230543)+(((0.05525)*x596))+((py*x591))+(((0.278775)*cj3))+((cj1*pz))+(((-0.0137)*sj3))+((sj1*x590)));
03609 evalcond[5]=((((0.0137)*cj3))+(((-0.05525)*x595))+(((-1.0)*py*sj0*x592))+(((-1.0)*x590*x592))+((pz*sj1))+(((0.278775)*sj3)));
03610 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
03611 {
03612 continue;
03613 }
03614 }
03615
03616 {
03617 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03618 vinfos[0].jointtype = 1;
03619 vinfos[0].foffset = j0;
03620 vinfos[0].indices[0] = _ij0[0];
03621 vinfos[0].indices[1] = _ij0[1];
03622 vinfos[0].maxsolutions = _nj0;
03623 vinfos[1].jointtype = 1;
03624 vinfos[1].foffset = j1;
03625 vinfos[1].indices[0] = _ij1[0];
03626 vinfos[1].indices[1] = _ij1[1];
03627 vinfos[1].maxsolutions = _nj1;
03628 vinfos[2].jointtype = 1;
03629 vinfos[2].foffset = j2;
03630 vinfos[2].indices[0] = _ij2[0];
03631 vinfos[2].indices[1] = _ij2[1];
03632 vinfos[2].maxsolutions = _nj2;
03633 vinfos[3].jointtype = 1;
03634 vinfos[3].foffset = j3;
03635 vinfos[3].indices[0] = _ij3[0];
03636 vinfos[3].indices[1] = _ij3[1];
03637 vinfos[3].maxsolutions = _nj3;
03638 vinfos[4].jointtype = 1;
03639 vinfos[4].foffset = j4;
03640 vinfos[4].indices[0] = _ij4[0];
03641 vinfos[4].indices[1] = _ij4[1];
03642 vinfos[4].maxsolutions = _nj4;
03643 std::vector<int> vfree(0);
03644 solutions.AddSolution(vinfos,vfree);
03645 }
03646 }
03647 }
03648
03649 }
03650
03651 }
03652 }
03653 }
03654
03655 }
03656 } while(0);
03657 if( bgotonextstatement )
03658 {
03659 bool bgotonextstatement = true;
03660 do
03661 {
03662 if( 1 )
03663 {
03664 bgotonextstatement=false;
03665 continue;
03666
03667 }
03668 } while(0);
03669 if( bgotonextstatement )
03670 {
03671 }
03672 }
03673 }
03674 }
03675 }
03676 }
03677
03678 } else
03679 {
03680 {
03681 IkReal j4array[2], cj4array[2], sj4array[2];
03682 bool j4valid[2]={false};
03683 _nj4 = 2;
03684 IkReal x597=((-1.0)*sj2);
03685 CheckValue<IkReal> x598=IKPowWithIntegerCheck(((((-1.0)*(cj2*cj2)))+(((-1.0)*(sj2*sj2)))),-1);
03686 if(!x598.valid){
03687 continue;
03688 }
03689 sj4array[0]=((x598.value)*(((((1.0)*cj0*cj2*r01))+(((-1.0)*cj2*r00*sj0))+((cj1*r02*x597))+((cj0*r00*sj1*x597))+((r01*sj0*sj1*x597)))));
03690 if( sj4array[0] >= -1-IKFAST_SINCOS_THRESH && sj4array[0] <= 1+IKFAST_SINCOS_THRESH )
03691 {
03692 j4valid[0] = j4valid[1] = true;
03693 j4array[0] = IKasin(sj4array[0]);
03694 cj4array[0] = IKcos(j4array[0]);
03695 sj4array[1] = sj4array[0];
03696 j4array[1] = j4array[0] > 0 ? (IKPI-j4array[0]) : (-IKPI-j4array[0]);
03697 cj4array[1] = -cj4array[0];
03698 }
03699 else if( isnan(sj4array[0]) )
03700 {
03701
03702 j4valid[0] = true;
03703 cj4array[0] = 1; sj4array[0] = 0; j4array[0] = 0;
03704 }
03705 for(int ij4 = 0; ij4 < 2; ++ij4)
03706 {
03707 if( !j4valid[ij4] )
03708 {
03709 continue;
03710 }
03711 _ij4[0] = ij4; _ij4[1] = -1;
03712 for(int iij4 = ij4+1; iij4 < 2; ++iij4)
03713 {
03714 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
03715 {
03716 j4valid[iij4]=false; _ij4[1] = iij4; break;
03717 }
03718 }
03719 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
03720 {
03721 IkReal evalcond[1];
03722 IkReal x599=((0.05525)*cj0);
03723 IkReal x600=(sj1*sj2);
03724 IkReal x601=((0.05525)*sj0);
03725 evalcond[0]=(((px*x599*x600))+(((-1.0)*cj2*py*x599))+(((((((-0.0030525625)*(cj2*cj2)))+(((-0.0030525625)*(sj2*sj2)))))*(IKsin(j4))))+((py*x600*x601))+((cj2*px*x601))+(((-1.387659e-5)*cj2))+(((0.05525)*cj1*pz*sj2))+(((-0.0147133750075)*sj2)));
03726 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH )
03727 {
03728 continue;
03729 }
03730 }
03731
03732 {
03733 IkReal j3eval[1];
03734 j3eval[0]=cj4;
03735 if( IKabs(j3eval[0]) < 0.0000010000000000 )
03736 {
03737 {
03738 IkReal j3eval[2];
03739 j3eval[0]=cj4;
03740 j3eval[1]=sj2;
03741 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
03742 {
03743 {
03744 IkReal j3eval[2];
03745 j3eval[0]=cj2;
03746 j3eval[1]=cj4;
03747 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
03748 {
03749 {
03750 IkReal evalcond[4];
03751 bool bgotonextstatement = true;
03752 do
03753 {
03754 IkReal x602=(sj0*sj1);
03755 IkReal x603=(cj0*sj1);
03756 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j2)))), 6.28318530717959)));
03757 evalcond[1]=(((r00*x603))+(((-1.0)*sj4))+((cj1*r02))+((r01*x602)));
03758 evalcond[2]=((-0.26630543)+(((-0.05525)*sj4))+((px*x603))+((cj1*pz))+((py*x602)));
03759 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
03760 {
03761 bgotonextstatement=false;
03762 {
03763 IkReal j3eval[3];
03764 sj2=1.0;
03765 cj2=0;
03766 j2=1.5707963267949;
03767 IkReal x604=((1.0)*cj1);
03768 j3eval[0]=cj4;
03769 j3eval[1]=IKsign(cj4);
03770 j3eval[2]=((IKabs(((((-1.0)*cj0*r00*x604))+((r02*sj1))+(((-1.0)*r01*sj0*x604)))))+(IKabs(((((-1.0)*r00*sj0))+((cj0*r01))))));
03771 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 || IKabs(j3eval[2]) < 0.0000010000000000 )
03772 {
03773 {
03774 IkReal j3eval[1];
03775 sj2=1.0;
03776 cj2=0;
03777 j2=1.5707963267949;
03778 j3eval[0]=cj4;
03779 if( IKabs(j3eval[0]) < 0.0000010000000000 )
03780 {
03781 {
03782 IkReal j3eval[2];
03783 sj2=1.0;
03784 cj2=0;
03785 j2=1.5707963267949;
03786 j3eval[0]=cj4;
03787 j3eval[1]=(cj4+(((-4.03284671532847)*(cj4*cj4))));
03788 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
03789 {
03790 {
03791 IkReal evalcond[5];
03792 bool bgotonextstatement = true;
03793 do
03794 {
03795 IkReal x605=(cj0*r00);
03796 IkReal x606=(r01*sj0);
03797 IkReal x607=((1.0)*cj1);
03798 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j4)))), 6.28318530717959)));
03799 evalcond[1]=((((-1.0)*r00*sj0))+((cj0*r01)));
03800 evalcond[2]=((((-1.0)*x605*x607))+((r02*sj1))+(((-1.0)*x606*x607)));
03801 evalcond[3]=((-1.0)+((sj1*x605))+((sj1*x606))+((cj1*r02)));
03802 evalcond[4]=((-0.32155543)+((cj1*pz))+((cj0*px*sj1))+((py*sj0*sj1)));
03803 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
03804 {
03805 bgotonextstatement=false;
03806 {
03807 IkReal j3array[1], cj3array[1], sj3array[1];
03808 bool j3valid[1]={false};
03809 _nj3 = 1;
03810 IkReal x608=((3.57847987692738)*cj1);
03811 IkReal x609=(py*sj0);
03812 IkReal x610=(cj0*px);
03813 IkReal x611=(px*sj0);
03814 IkReal x612=((0.175859292669375)*cj1);
03815 IkReal x613=(cj0*py);
03816 IkReal x614=(pz*sj1);
03817 if( IKabs(((0.0393483127379932)+((x608*x609))+((x608*x610))+(((-0.175859292669375)*x613))+(((0.175859292669375)*x611))+(((-3.57847987692738)*x614)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-0.800680721425843)+(((-0.175859292669375)*x614))+((x609*x612))+(((-3.57847987692738)*x611))+(((3.57847987692738)*x613))+((x610*x612)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0393483127379932)+((x608*x609))+((x608*x610))+(((-0.175859292669375)*x613))+(((0.175859292669375)*x611))+(((-3.57847987692738)*x614))))+IKsqr(((-0.800680721425843)+(((-0.175859292669375)*x614))+((x609*x612))+(((-3.57847987692738)*x611))+(((3.57847987692738)*x613))+((x610*x612))))-1) <= IKFAST_SINCOS_THRESH )
03818 continue;
03819 j3array[0]=IKatan2(((0.0393483127379932)+((x608*x609))+((x608*x610))+(((-0.175859292669375)*x613))+(((0.175859292669375)*x611))+(((-3.57847987692738)*x614))), ((-0.800680721425843)+(((-0.175859292669375)*x614))+((x609*x612))+(((-3.57847987692738)*x611))+(((3.57847987692738)*x613))+((x610*x612))));
03820 sj3array[0]=IKsin(j3array[0]);
03821 cj3array[0]=IKcos(j3array[0]);
03822 if( j3array[0] > IKPI )
03823 {
03824 j3array[0]-=IK2PI;
03825 }
03826 else if( j3array[0] < -IKPI )
03827 { j3array[0]+=IK2PI;
03828 }
03829 j3valid[0] = true;
03830 for(int ij3 = 0; ij3 < 1; ++ij3)
03831 {
03832 if( !j3valid[ij3] )
03833 {
03834 continue;
03835 }
03836 _ij3[0] = ij3; _ij3[1] = -1;
03837 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
03838 {
03839 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
03840 {
03841 j3valid[iij3]=false; _ij3[1] = iij3; break;
03842 }
03843 }
03844 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
03845 {
03846 IkReal evalcond[2];
03847 IkReal x615=IKsin(j3);
03848 IkReal x616=IKcos(j3);
03849 IkReal x617=((1.0)*cj1);
03850 evalcond[0]=((-0.22374884)+(((-0.278775)*x616))+(((-1.0)*px*sj0))+(((0.0137)*x615))+((cj0*py)));
03851 evalcond[1]=((((-1.0)*py*sj0*x617))+(((0.278775)*x615))+(((-1.0)*cj0*px*x617))+((pz*sj1))+(((0.0137)*x616)));
03852 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
03853 {
03854 continue;
03855 }
03856 }
03857
03858 {
03859 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03860 vinfos[0].jointtype = 1;
03861 vinfos[0].foffset = j0;
03862 vinfos[0].indices[0] = _ij0[0];
03863 vinfos[0].indices[1] = _ij0[1];
03864 vinfos[0].maxsolutions = _nj0;
03865 vinfos[1].jointtype = 1;
03866 vinfos[1].foffset = j1;
03867 vinfos[1].indices[0] = _ij1[0];
03868 vinfos[1].indices[1] = _ij1[1];
03869 vinfos[1].maxsolutions = _nj1;
03870 vinfos[2].jointtype = 1;
03871 vinfos[2].foffset = j2;
03872 vinfos[2].indices[0] = _ij2[0];
03873 vinfos[2].indices[1] = _ij2[1];
03874 vinfos[2].maxsolutions = _nj2;
03875 vinfos[3].jointtype = 1;
03876 vinfos[3].foffset = j3;
03877 vinfos[3].indices[0] = _ij3[0];
03878 vinfos[3].indices[1] = _ij3[1];
03879 vinfos[3].maxsolutions = _nj3;
03880 vinfos[4].jointtype = 1;
03881 vinfos[4].foffset = j4;
03882 vinfos[4].indices[0] = _ij4[0];
03883 vinfos[4].indices[1] = _ij4[1];
03884 vinfos[4].maxsolutions = _nj4;
03885 std::vector<int> vfree(0);
03886 solutions.AddSolution(vinfos,vfree);
03887 }
03888 }
03889 }
03890
03891 }
03892 } while(0);
03893 if( bgotonextstatement )
03894 {
03895 bool bgotonextstatement = true;
03896 do
03897 {
03898 IkReal x618=(cj0*r00);
03899 IkReal x619=(r01*sj0);
03900 IkReal x620=((1.0)*cj1);
03901 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j4)))), 6.28318530717959)));
03902 evalcond[1]=((((-1.0)*r00*sj0))+((cj0*r01)));
03903 evalcond[2]=(((r02*sj1))+(((-1.0)*x619*x620))+(((-1.0)*x618*x620)));
03904 evalcond[3]=((1.0)+((sj1*x619))+((sj1*x618))+((cj1*r02)));
03905 evalcond[4]=((-0.21105543)+((cj1*pz))+((cj0*px*sj1))+((py*sj0*sj1)));
03906 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
03907 {
03908 bgotonextstatement=false;
03909 {
03910 IkReal j3array[1], cj3array[1], sj3array[1];
03911 bool j3valid[1]={false};
03912 _nj3 = 1;
03913 IkReal x621=((3.57847987692738)*cj1);
03914 IkReal x622=(py*sj0);
03915 IkReal x623=(cj0*px);
03916 IkReal x624=(px*sj0);
03917 IkReal x625=((0.175859292669375)*cj1);
03918 IkReal x626=(cj0*py);
03919 IkReal x627=(pz*sj1);
03920 if( IKabs(((0.0393483127379932)+(((-3.57847987692738)*x627))+(((0.175859292669375)*x624))+((x621*x622))+((x621*x623))+(((-0.175859292669375)*x626)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-0.800680721425843)+(((-3.57847987692738)*x624))+(((3.57847987692738)*x626))+(((-0.175859292669375)*x627))+((x623*x625))+((x622*x625)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0393483127379932)+(((-3.57847987692738)*x627))+(((0.175859292669375)*x624))+((x621*x622))+((x621*x623))+(((-0.175859292669375)*x626))))+IKsqr(((-0.800680721425843)+(((-3.57847987692738)*x624))+(((3.57847987692738)*x626))+(((-0.175859292669375)*x627))+((x623*x625))+((x622*x625))))-1) <= IKFAST_SINCOS_THRESH )
03921 continue;
03922 j3array[0]=IKatan2(((0.0393483127379932)+(((-3.57847987692738)*x627))+(((0.175859292669375)*x624))+((x621*x622))+((x621*x623))+(((-0.175859292669375)*x626))), ((-0.800680721425843)+(((-3.57847987692738)*x624))+(((3.57847987692738)*x626))+(((-0.175859292669375)*x627))+((x623*x625))+((x622*x625))));
03923 sj3array[0]=IKsin(j3array[0]);
03924 cj3array[0]=IKcos(j3array[0]);
03925 if( j3array[0] > IKPI )
03926 {
03927 j3array[0]-=IK2PI;
03928 }
03929 else if( j3array[0] < -IKPI )
03930 { j3array[0]+=IK2PI;
03931 }
03932 j3valid[0] = true;
03933 for(int ij3 = 0; ij3 < 1; ++ij3)
03934 {
03935 if( !j3valid[ij3] )
03936 {
03937 continue;
03938 }
03939 _ij3[0] = ij3; _ij3[1] = -1;
03940 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
03941 {
03942 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
03943 {
03944 j3valid[iij3]=false; _ij3[1] = iij3; break;
03945 }
03946 }
03947 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
03948 {
03949 IkReal evalcond[2];
03950 IkReal x628=IKsin(j3);
03951 IkReal x629=IKcos(j3);
03952 IkReal x630=((1.0)*cj1);
03953 evalcond[0]=((-0.22374884)+(((-0.278775)*x629))+(((0.0137)*x628))+(((-1.0)*px*sj0))+((cj0*py)));
03954 evalcond[1]=((((0.278775)*x628))+(((0.0137)*x629))+((pz*sj1))+(((-1.0)*cj0*px*x630))+(((-1.0)*py*sj0*x630)));
03955 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
03956 {
03957 continue;
03958 }
03959 }
03960
03961 {
03962 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
03963 vinfos[0].jointtype = 1;
03964 vinfos[0].foffset = j0;
03965 vinfos[0].indices[0] = _ij0[0];
03966 vinfos[0].indices[1] = _ij0[1];
03967 vinfos[0].maxsolutions = _nj0;
03968 vinfos[1].jointtype = 1;
03969 vinfos[1].foffset = j1;
03970 vinfos[1].indices[0] = _ij1[0];
03971 vinfos[1].indices[1] = _ij1[1];
03972 vinfos[1].maxsolutions = _nj1;
03973 vinfos[2].jointtype = 1;
03974 vinfos[2].foffset = j2;
03975 vinfos[2].indices[0] = _ij2[0];
03976 vinfos[2].indices[1] = _ij2[1];
03977 vinfos[2].maxsolutions = _nj2;
03978 vinfos[3].jointtype = 1;
03979 vinfos[3].foffset = j3;
03980 vinfos[3].indices[0] = _ij3[0];
03981 vinfos[3].indices[1] = _ij3[1];
03982 vinfos[3].maxsolutions = _nj3;
03983 vinfos[4].jointtype = 1;
03984 vinfos[4].foffset = j4;
03985 vinfos[4].indices[0] = _ij4[0];
03986 vinfos[4].indices[1] = _ij4[1];
03987 vinfos[4].maxsolutions = _nj4;
03988 std::vector<int> vfree(0);
03989 solutions.AddSolution(vinfos,vfree);
03990 }
03991 }
03992 }
03993
03994 }
03995 } while(0);
03996 if( bgotonextstatement )
03997 {
03998 bool bgotonextstatement = true;
03999 do
04000 {
04001 if( 1 )
04002 {
04003 bgotonextstatement=false;
04004 continue;
04005
04006 }
04007 } while(0);
04008 if( bgotonextstatement )
04009 {
04010 }
04011 }
04012 }
04013 }
04014
04015 } else
04016 {
04017 {
04018 IkReal j3array[1], cj3array[1], sj3array[1];
04019 bool j3valid[1]={false};
04020 _nj3 = 1;
04021 IkReal x631=(cj0*r01);
04022 IkReal x632=(r00*sj0);
04023 IkReal x633=((40000.0)*cj1*cj4);
04024 CheckValue<IkReal> x634=IKPowWithIntegerCheck(cj4,-1);
04025 if(!x634.valid){
04026 continue;
04027 }
04028 CheckValue<IkReal> x635=IKPowWithIntegerCheck(((((548.0)*cj4))+(((-2210.0)*(cj4*cj4)))),-1);
04029 if(!x635.valid){
04030 continue;
04031 }
04032 if( IKabs(((x634.value)*((x631+(((-1.0)*x632)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x635.value)*((((cj0*px*x633))+(((-11151.0)*x631))+((py*sj0*x633))+(((-40000.0)*cj4*pz*sj1))+(((11151.0)*x632)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x634.value)*((x631+(((-1.0)*x632))))))+IKsqr(((x635.value)*((((cj0*px*x633))+(((-11151.0)*x631))+((py*sj0*x633))+(((-40000.0)*cj4*pz*sj1))+(((11151.0)*x632))))))-1) <= IKFAST_SINCOS_THRESH )
04033 continue;
04034 j3array[0]=IKatan2(((x634.value)*((x631+(((-1.0)*x632))))), ((x635.value)*((((cj0*px*x633))+(((-11151.0)*x631))+((py*sj0*x633))+(((-40000.0)*cj4*pz*sj1))+(((11151.0)*x632))))));
04035 sj3array[0]=IKsin(j3array[0]);
04036 cj3array[0]=IKcos(j3array[0]);
04037 if( j3array[0] > IKPI )
04038 {
04039 j3array[0]-=IK2PI;
04040 }
04041 else if( j3array[0] < -IKPI )
04042 { j3array[0]+=IK2PI;
04043 }
04044 j3valid[0] = true;
04045 for(int ij3 = 0; ij3 < 1; ++ij3)
04046 {
04047 if( !j3valid[ij3] )
04048 {
04049 continue;
04050 }
04051 _ij3[0] = ij3; _ij3[1] = -1;
04052 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04053 {
04054 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04055 {
04056 j3valid[iij3]=false; _ij3[1] = iij3; break;
04057 }
04058 }
04059 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04060 {
04061 IkReal evalcond[4];
04062 IkReal x636=IKsin(j3);
04063 IkReal x637=IKcos(j3);
04064 IkReal x638=((1.0)*sj0);
04065 IkReal x639=(cj4*x636);
04066 IkReal x640=(cj1*x638);
04067 IkReal x641=((1.0)*cj0*cj1);
04068 IkReal x642=(cj4*x637);
04069 evalcond[0]=((((-1.0)*r00*x638))+(((-1.0)*x639))+((cj0*r01)));
04070 evalcond[1]=((((-1.0)*x642))+(((-1.0)*r01*x640))+(((-1.0)*r00*x641))+((r02*sj1)));
04071 evalcond[2]=((-0.22374884)+(((-0.278775)*x637))+(((0.0137)*x636))+(((-1.0)*px*x638))+((cj0*py))+(((-0.05525)*x639)));
04072 evalcond[3]=((((-0.05525)*x642))+(((-1.0)*px*x641))+(((0.278775)*x636))+(((0.0137)*x637))+((pz*sj1))+(((-1.0)*py*x640)));
04073 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
04074 {
04075 continue;
04076 }
04077 }
04078
04079 {
04080 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04081 vinfos[0].jointtype = 1;
04082 vinfos[0].foffset = j0;
04083 vinfos[0].indices[0] = _ij0[0];
04084 vinfos[0].indices[1] = _ij0[1];
04085 vinfos[0].maxsolutions = _nj0;
04086 vinfos[1].jointtype = 1;
04087 vinfos[1].foffset = j1;
04088 vinfos[1].indices[0] = _ij1[0];
04089 vinfos[1].indices[1] = _ij1[1];
04090 vinfos[1].maxsolutions = _nj1;
04091 vinfos[2].jointtype = 1;
04092 vinfos[2].foffset = j2;
04093 vinfos[2].indices[0] = _ij2[0];
04094 vinfos[2].indices[1] = _ij2[1];
04095 vinfos[2].maxsolutions = _nj2;
04096 vinfos[3].jointtype = 1;
04097 vinfos[3].foffset = j3;
04098 vinfos[3].indices[0] = _ij3[0];
04099 vinfos[3].indices[1] = _ij3[1];
04100 vinfos[3].maxsolutions = _nj3;
04101 vinfos[4].jointtype = 1;
04102 vinfos[4].foffset = j4;
04103 vinfos[4].indices[0] = _ij4[0];
04104 vinfos[4].indices[1] = _ij4[1];
04105 vinfos[4].maxsolutions = _nj4;
04106 std::vector<int> vfree(0);
04107 solutions.AddSolution(vinfos,vfree);
04108 }
04109 }
04110 }
04111
04112 }
04113
04114 }
04115
04116 } else
04117 {
04118 {
04119 IkReal j3array[1], cj3array[1], sj3array[1];
04120 bool j3valid[1]={false};
04121 _nj3 = 1;
04122 CheckValue<IkReal> x648=IKPowWithIntegerCheck(cj4,-1);
04123 if(!x648.valid){
04124 continue;
04125 }
04126 IkReal x643=x648.value;
04127 IkReal x644=(cj0*r01);
04128 IkReal x645=(r00*sj0);
04129 IkReal x646=((40000.0)*cj4);
04130 IkReal x647=((2210.0)*cj4);
04131 if( IKabs((x643*(((((-1.0)*x645))+x644)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((8.96780557797507e-5)*x643*(((((-8949.9536)*cj4))+(((-548.0)*x645))+((cj0*py*x646))+((x645*x647))+(((-1.0)*x644*x647))+(((548.0)*x644))+(((-1.0)*px*sj0*x646)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x643*(((((-1.0)*x645))+x644))))+IKsqr(((8.96780557797507e-5)*x643*(((((-8949.9536)*cj4))+(((-548.0)*x645))+((cj0*py*x646))+((x645*x647))+(((-1.0)*x644*x647))+(((548.0)*x644))+(((-1.0)*px*sj0*x646))))))-1) <= IKFAST_SINCOS_THRESH )
04132 continue;
04133 j3array[0]=IKatan2((x643*(((((-1.0)*x645))+x644))), ((8.96780557797507e-5)*x643*(((((-8949.9536)*cj4))+(((-548.0)*x645))+((cj0*py*x646))+((x645*x647))+(((-1.0)*x644*x647))+(((548.0)*x644))+(((-1.0)*px*sj0*x646))))));
04134 sj3array[0]=IKsin(j3array[0]);
04135 cj3array[0]=IKcos(j3array[0]);
04136 if( j3array[0] > IKPI )
04137 {
04138 j3array[0]-=IK2PI;
04139 }
04140 else if( j3array[0] < -IKPI )
04141 { j3array[0]+=IK2PI;
04142 }
04143 j3valid[0] = true;
04144 for(int ij3 = 0; ij3 < 1; ++ij3)
04145 {
04146 if( !j3valid[ij3] )
04147 {
04148 continue;
04149 }
04150 _ij3[0] = ij3; _ij3[1] = -1;
04151 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04152 {
04153 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04154 {
04155 j3valid[iij3]=false; _ij3[1] = iij3; break;
04156 }
04157 }
04158 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04159 {
04160 IkReal evalcond[4];
04161 IkReal x649=IKsin(j3);
04162 IkReal x650=IKcos(j3);
04163 IkReal x651=((1.0)*sj0);
04164 IkReal x652=(cj4*x649);
04165 IkReal x653=(cj1*x651);
04166 IkReal x654=((1.0)*cj0*cj1);
04167 IkReal x655=(cj4*x650);
04168 evalcond[0]=((((-1.0)*x652))+(((-1.0)*r00*x651))+((cj0*r01)));
04169 evalcond[1]=((((-1.0)*x655))+(((-1.0)*r00*x654))+(((-1.0)*r01*x653))+((r02*sj1)));
04170 evalcond[2]=((-0.22374884)+(((-1.0)*px*x651))+(((-0.05525)*x652))+(((-0.278775)*x650))+(((0.0137)*x649))+((cj0*py)));
04171 evalcond[3]=((((-1.0)*px*x654))+(((-0.05525)*x655))+(((0.278775)*x649))+(((0.0137)*x650))+((pz*sj1))+(((-1.0)*py*x653)));
04172 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
04173 {
04174 continue;
04175 }
04176 }
04177
04178 {
04179 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04180 vinfos[0].jointtype = 1;
04181 vinfos[0].foffset = j0;
04182 vinfos[0].indices[0] = _ij0[0];
04183 vinfos[0].indices[1] = _ij0[1];
04184 vinfos[0].maxsolutions = _nj0;
04185 vinfos[1].jointtype = 1;
04186 vinfos[1].foffset = j1;
04187 vinfos[1].indices[0] = _ij1[0];
04188 vinfos[1].indices[1] = _ij1[1];
04189 vinfos[1].maxsolutions = _nj1;
04190 vinfos[2].jointtype = 1;
04191 vinfos[2].foffset = j2;
04192 vinfos[2].indices[0] = _ij2[0];
04193 vinfos[2].indices[1] = _ij2[1];
04194 vinfos[2].maxsolutions = _nj2;
04195 vinfos[3].jointtype = 1;
04196 vinfos[3].foffset = j3;
04197 vinfos[3].indices[0] = _ij3[0];
04198 vinfos[3].indices[1] = _ij3[1];
04199 vinfos[3].maxsolutions = _nj3;
04200 vinfos[4].jointtype = 1;
04201 vinfos[4].foffset = j4;
04202 vinfos[4].indices[0] = _ij4[0];
04203 vinfos[4].indices[1] = _ij4[1];
04204 vinfos[4].maxsolutions = _nj4;
04205 std::vector<int> vfree(0);
04206 solutions.AddSolution(vinfos,vfree);
04207 }
04208 }
04209 }
04210
04211 }
04212
04213 }
04214
04215 } else
04216 {
04217 {
04218 IkReal j3array[1], cj3array[1], sj3array[1];
04219 bool j3valid[1]={false};
04220 _nj3 = 1;
04221 IkReal x656=((1.0)*cj1);
04222 CheckValue<IkReal> x657=IKPowWithIntegerCheck(IKsign(cj4),-1);
04223 if(!x657.valid){
04224 continue;
04225 }
04226 CheckValue<IkReal> x658 = IKatan2WithCheck(IkReal(((((-1.0)*r00*sj0))+((cj0*r01)))),(((r02*sj1))+(((-1.0)*r01*sj0*x656))+(((-1.0)*cj0*r00*x656))),IKFAST_ATAN2_MAGTHRESH);
04227 if(!x658.valid){
04228 continue;
04229 }
04230 j3array[0]=((-1.5707963267949)+(((1.5707963267949)*(x657.value)))+(x658.value));
04231 sj3array[0]=IKsin(j3array[0]);
04232 cj3array[0]=IKcos(j3array[0]);
04233 if( j3array[0] > IKPI )
04234 {
04235 j3array[0]-=IK2PI;
04236 }
04237 else if( j3array[0] < -IKPI )
04238 { j3array[0]+=IK2PI;
04239 }
04240 j3valid[0] = true;
04241 for(int ij3 = 0; ij3 < 1; ++ij3)
04242 {
04243 if( !j3valid[ij3] )
04244 {
04245 continue;
04246 }
04247 _ij3[0] = ij3; _ij3[1] = -1;
04248 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04249 {
04250 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04251 {
04252 j3valid[iij3]=false; _ij3[1] = iij3; break;
04253 }
04254 }
04255 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04256 {
04257 IkReal evalcond[4];
04258 IkReal x659=IKsin(j3);
04259 IkReal x660=IKcos(j3);
04260 IkReal x661=((1.0)*sj0);
04261 IkReal x662=(cj4*x659);
04262 IkReal x663=(cj1*x661);
04263 IkReal x664=((1.0)*cj0*cj1);
04264 IkReal x665=(cj4*x660);
04265 evalcond[0]=((((-1.0)*r00*x661))+(((-1.0)*x662))+((cj0*r01)));
04266 evalcond[1]=((((-1.0)*r01*x663))+(((-1.0)*r00*x664))+((r02*sj1))+(((-1.0)*x665)));
04267 evalcond[2]=((-0.22374884)+(((-0.278775)*x660))+(((0.0137)*x659))+(((-0.05525)*x662))+(((-1.0)*px*x661))+((cj0*py)));
04268 evalcond[3]=((((-1.0)*py*x663))+(((0.278775)*x659))+(((-0.05525)*x665))+((pz*sj1))+(((-1.0)*px*x664))+(((0.0137)*x660)));
04269 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
04270 {
04271 continue;
04272 }
04273 }
04274
04275 {
04276 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04277 vinfos[0].jointtype = 1;
04278 vinfos[0].foffset = j0;
04279 vinfos[0].indices[0] = _ij0[0];
04280 vinfos[0].indices[1] = _ij0[1];
04281 vinfos[0].maxsolutions = _nj0;
04282 vinfos[1].jointtype = 1;
04283 vinfos[1].foffset = j1;
04284 vinfos[1].indices[0] = _ij1[0];
04285 vinfos[1].indices[1] = _ij1[1];
04286 vinfos[1].maxsolutions = _nj1;
04287 vinfos[2].jointtype = 1;
04288 vinfos[2].foffset = j2;
04289 vinfos[2].indices[0] = _ij2[0];
04290 vinfos[2].indices[1] = _ij2[1];
04291 vinfos[2].maxsolutions = _nj2;
04292 vinfos[3].jointtype = 1;
04293 vinfos[3].foffset = j3;
04294 vinfos[3].indices[0] = _ij3[0];
04295 vinfos[3].indices[1] = _ij3[1];
04296 vinfos[3].maxsolutions = _nj3;
04297 vinfos[4].jointtype = 1;
04298 vinfos[4].foffset = j4;
04299 vinfos[4].indices[0] = _ij4[0];
04300 vinfos[4].indices[1] = _ij4[1];
04301 vinfos[4].maxsolutions = _nj4;
04302 std::vector<int> vfree(0);
04303 solutions.AddSolution(vinfos,vfree);
04304 }
04305 }
04306 }
04307
04308 }
04309
04310 }
04311
04312 }
04313 } while(0);
04314 if( bgotonextstatement )
04315 {
04316 bool bgotonextstatement = true;
04317 do
04318 {
04319 IkReal x666=(sj0*sj1);
04320 IkReal x667=(cj0*sj1);
04321 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j2)))), 6.28318530717959)));
04322 evalcond[1]=(((r01*x666))+sj4+((r00*x667))+((cj1*r02)));
04323 evalcond[2]=((-0.26630543)+(((0.05525)*sj4))+((px*x667))+((cj1*pz))+((py*x666)));
04324 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
04325 {
04326 bgotonextstatement=false;
04327 {
04328 IkReal j3eval[3];
04329 sj2=-1.0;
04330 cj2=0;
04331 j2=-1.5707963267949;
04332 IkReal x668=((1.0)*cj0);
04333 j3eval[0]=cj4;
04334 j3eval[1]=IKsign(cj4);
04335 j3eval[2]=((IKabs((((r00*sj0))+(((-1.0)*r01*x668)))))+(IKabs((((r02*sj1))+(((-1.0)*cj1*r00*x668))+(((-1.0)*cj1*r01*sj0))))));
04336 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 || IKabs(j3eval[2]) < 0.0000010000000000 )
04337 {
04338 {
04339 IkReal j3eval[1];
04340 sj2=-1.0;
04341 cj2=0;
04342 j2=-1.5707963267949;
04343 j3eval[0]=cj4;
04344 if( IKabs(j3eval[0]) < 0.0000010000000000 )
04345 {
04346 {
04347 IkReal j3eval[2];
04348 sj2=-1.0;
04349 cj2=0;
04350 j2=-1.5707963267949;
04351 j3eval[0]=cj4;
04352 j3eval[1]=(cj4+(((-4.03284671532847)*(cj4*cj4))));
04353 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
04354 {
04355 {
04356 IkReal evalcond[5];
04357 bool bgotonextstatement = true;
04358 do
04359 {
04360 IkReal x669=(cj0*r00);
04361 IkReal x670=(r01*sj0);
04362 IkReal x671=((1.0)*cj1);
04363 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j4)))), 6.28318530717959)));
04364 evalcond[1]=((((-1.0)*r00*sj0))+((cj0*r01)));
04365 evalcond[2]=(((r02*sj1))+(((-1.0)*x670*x671))+(((-1.0)*x669*x671)));
04366 evalcond[3]=((1.0)+((sj1*x669))+((cj1*r02))+((sj1*x670)));
04367 evalcond[4]=((-0.21105543)+((cj1*pz))+((cj0*px*sj1))+((py*sj0*sj1)));
04368 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
04369 {
04370 bgotonextstatement=false;
04371 {
04372 IkReal j3array[1], cj3array[1], sj3array[1];
04373 bool j3valid[1]={false};
04374 _nj3 = 1;
04375 IkReal x672=((3.57847987692738)*cj1);
04376 IkReal x673=(py*sj0);
04377 IkReal x674=(cj0*px);
04378 IkReal x675=(px*sj0);
04379 IkReal x676=((0.175859292669375)*cj1);
04380 IkReal x677=(cj0*py);
04381 IkReal x678=(pz*sj1);
04382 if( IKabs(((0.0394366503778869)+(((0.175859292669375)*x677))+((x672*x674))+((x672*x673))+(((-0.175859292669375)*x675))+(((-3.57847987692738)*x678)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-0.802478263437622)+((x673*x676))+(((-0.175859292669375)*x678))+(((-3.57847987692738)*x677))+((x674*x676))+(((3.57847987692738)*x675)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0394366503778869)+(((0.175859292669375)*x677))+((x672*x674))+((x672*x673))+(((-0.175859292669375)*x675))+(((-3.57847987692738)*x678))))+IKsqr(((-0.802478263437622)+((x673*x676))+(((-0.175859292669375)*x678))+(((-3.57847987692738)*x677))+((x674*x676))+(((3.57847987692738)*x675))))-1) <= IKFAST_SINCOS_THRESH )
04383 continue;
04384 j3array[0]=IKatan2(((0.0394366503778869)+(((0.175859292669375)*x677))+((x672*x674))+((x672*x673))+(((-0.175859292669375)*x675))+(((-3.57847987692738)*x678))), ((-0.802478263437622)+((x673*x676))+(((-0.175859292669375)*x678))+(((-3.57847987692738)*x677))+((x674*x676))+(((3.57847987692738)*x675))));
04385 sj3array[0]=IKsin(j3array[0]);
04386 cj3array[0]=IKcos(j3array[0]);
04387 if( j3array[0] > IKPI )
04388 {
04389 j3array[0]-=IK2PI;
04390 }
04391 else if( j3array[0] < -IKPI )
04392 { j3array[0]+=IK2PI;
04393 }
04394 j3valid[0] = true;
04395 for(int ij3 = 0; ij3 < 1; ++ij3)
04396 {
04397 if( !j3valid[ij3] )
04398 {
04399 continue;
04400 }
04401 _ij3[0] = ij3; _ij3[1] = -1;
04402 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04403 {
04404 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04405 {
04406 j3valid[iij3]=false; _ij3[1] = iij3; break;
04407 }
04408 }
04409 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04410 {
04411 IkReal evalcond[2];
04412 IkReal x679=IKsin(j3);
04413 IkReal x680=IKcos(j3);
04414 IkReal x681=((1.0)*cj1);
04415 evalcond[0]=((0.22425116)+(((-0.0137)*x679))+(((0.278775)*x680))+(((-1.0)*px*sj0))+((cj0*py)));
04416 evalcond[1]=((((0.0137)*x680))+((pz*sj1))+(((0.278775)*x679))+(((-1.0)*cj0*px*x681))+(((-1.0)*py*sj0*x681)));
04417 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
04418 {
04419 continue;
04420 }
04421 }
04422
04423 {
04424 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04425 vinfos[0].jointtype = 1;
04426 vinfos[0].foffset = j0;
04427 vinfos[0].indices[0] = _ij0[0];
04428 vinfos[0].indices[1] = _ij0[1];
04429 vinfos[0].maxsolutions = _nj0;
04430 vinfos[1].jointtype = 1;
04431 vinfos[1].foffset = j1;
04432 vinfos[1].indices[0] = _ij1[0];
04433 vinfos[1].indices[1] = _ij1[1];
04434 vinfos[1].maxsolutions = _nj1;
04435 vinfos[2].jointtype = 1;
04436 vinfos[2].foffset = j2;
04437 vinfos[2].indices[0] = _ij2[0];
04438 vinfos[2].indices[1] = _ij2[1];
04439 vinfos[2].maxsolutions = _nj2;
04440 vinfos[3].jointtype = 1;
04441 vinfos[3].foffset = j3;
04442 vinfos[3].indices[0] = _ij3[0];
04443 vinfos[3].indices[1] = _ij3[1];
04444 vinfos[3].maxsolutions = _nj3;
04445 vinfos[4].jointtype = 1;
04446 vinfos[4].foffset = j4;
04447 vinfos[4].indices[0] = _ij4[0];
04448 vinfos[4].indices[1] = _ij4[1];
04449 vinfos[4].maxsolutions = _nj4;
04450 std::vector<int> vfree(0);
04451 solutions.AddSolution(vinfos,vfree);
04452 }
04453 }
04454 }
04455
04456 }
04457 } while(0);
04458 if( bgotonextstatement )
04459 {
04460 bool bgotonextstatement = true;
04461 do
04462 {
04463 IkReal x682=(cj0*r00);
04464 IkReal x683=(r01*sj0);
04465 IkReal x684=((1.0)*cj1);
04466 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j4)))), 6.28318530717959)));
04467 evalcond[1]=((((-1.0)*r00*sj0))+((cj0*r01)));
04468 evalcond[2]=(((r02*sj1))+(((-1.0)*x682*x684))+(((-1.0)*x683*x684)));
04469 evalcond[3]=((-1.0)+((cj1*r02))+((sj1*x682))+((sj1*x683)));
04470 evalcond[4]=((-0.32155543)+((cj1*pz))+((cj0*px*sj1))+((py*sj0*sj1)));
04471 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
04472 {
04473 bgotonextstatement=false;
04474 {
04475 IkReal j3array[1], cj3array[1], sj3array[1];
04476 bool j3valid[1]={false};
04477 _nj3 = 1;
04478 IkReal x685=((3.57847987692738)*cj1);
04479 IkReal x686=(py*sj0);
04480 IkReal x687=(cj0*px);
04481 IkReal x688=(px*sj0);
04482 IkReal x689=((0.175859292669375)*cj1);
04483 IkReal x690=(cj0*py);
04484 IkReal x691=(pz*sj1);
04485 if( IKabs(((0.0394366503778869)+(((-3.57847987692738)*x691))+((x685*x686))+((x685*x687))+(((0.175859292669375)*x690))+(((-0.175859292669375)*x688)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-0.802478263437622)+(((-3.57847987692738)*x690))+((x686*x689))+((x687*x689))+(((3.57847987692738)*x688))+(((-0.175859292669375)*x691)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0394366503778869)+(((-3.57847987692738)*x691))+((x685*x686))+((x685*x687))+(((0.175859292669375)*x690))+(((-0.175859292669375)*x688))))+IKsqr(((-0.802478263437622)+(((-3.57847987692738)*x690))+((x686*x689))+((x687*x689))+(((3.57847987692738)*x688))+(((-0.175859292669375)*x691))))-1) <= IKFAST_SINCOS_THRESH )
04486 continue;
04487 j3array[0]=IKatan2(((0.0394366503778869)+(((-3.57847987692738)*x691))+((x685*x686))+((x685*x687))+(((0.175859292669375)*x690))+(((-0.175859292669375)*x688))), ((-0.802478263437622)+(((-3.57847987692738)*x690))+((x686*x689))+((x687*x689))+(((3.57847987692738)*x688))+(((-0.175859292669375)*x691))));
04488 sj3array[0]=IKsin(j3array[0]);
04489 cj3array[0]=IKcos(j3array[0]);
04490 if( j3array[0] > IKPI )
04491 {
04492 j3array[0]-=IK2PI;
04493 }
04494 else if( j3array[0] < -IKPI )
04495 { j3array[0]+=IK2PI;
04496 }
04497 j3valid[0] = true;
04498 for(int ij3 = 0; ij3 < 1; ++ij3)
04499 {
04500 if( !j3valid[ij3] )
04501 {
04502 continue;
04503 }
04504 _ij3[0] = ij3; _ij3[1] = -1;
04505 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04506 {
04507 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04508 {
04509 j3valid[iij3]=false; _ij3[1] = iij3; break;
04510 }
04511 }
04512 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04513 {
04514 IkReal evalcond[2];
04515 IkReal x692=IKsin(j3);
04516 IkReal x693=IKcos(j3);
04517 IkReal x694=((1.0)*cj1);
04518 evalcond[0]=((0.22425116)+(((-0.0137)*x692))+(((0.278775)*x693))+(((-1.0)*px*sj0))+((cj0*py)));
04519 evalcond[1]=((((0.278775)*x692))+(((-1.0)*py*sj0*x694))+((pz*sj1))+(((0.0137)*x693))+(((-1.0)*cj0*px*x694)));
04520 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
04521 {
04522 continue;
04523 }
04524 }
04525
04526 {
04527 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04528 vinfos[0].jointtype = 1;
04529 vinfos[0].foffset = j0;
04530 vinfos[0].indices[0] = _ij0[0];
04531 vinfos[0].indices[1] = _ij0[1];
04532 vinfos[0].maxsolutions = _nj0;
04533 vinfos[1].jointtype = 1;
04534 vinfos[1].foffset = j1;
04535 vinfos[1].indices[0] = _ij1[0];
04536 vinfos[1].indices[1] = _ij1[1];
04537 vinfos[1].maxsolutions = _nj1;
04538 vinfos[2].jointtype = 1;
04539 vinfos[2].foffset = j2;
04540 vinfos[2].indices[0] = _ij2[0];
04541 vinfos[2].indices[1] = _ij2[1];
04542 vinfos[2].maxsolutions = _nj2;
04543 vinfos[3].jointtype = 1;
04544 vinfos[3].foffset = j3;
04545 vinfos[3].indices[0] = _ij3[0];
04546 vinfos[3].indices[1] = _ij3[1];
04547 vinfos[3].maxsolutions = _nj3;
04548 vinfos[4].jointtype = 1;
04549 vinfos[4].foffset = j4;
04550 vinfos[4].indices[0] = _ij4[0];
04551 vinfos[4].indices[1] = _ij4[1];
04552 vinfos[4].maxsolutions = _nj4;
04553 std::vector<int> vfree(0);
04554 solutions.AddSolution(vinfos,vfree);
04555 }
04556 }
04557 }
04558
04559 }
04560 } while(0);
04561 if( bgotonextstatement )
04562 {
04563 bool bgotonextstatement = true;
04564 do
04565 {
04566 if( 1 )
04567 {
04568 bgotonextstatement=false;
04569 continue;
04570
04571 }
04572 } while(0);
04573 if( bgotonextstatement )
04574 {
04575 }
04576 }
04577 }
04578 }
04579
04580 } else
04581 {
04582 {
04583 IkReal j3array[1], cj3array[1], sj3array[1];
04584 bool j3valid[1]={false};
04585 _nj3 = 1;
04586 IkReal x695=(cj0*r01);
04587 IkReal x696=(r00*sj0);
04588 IkReal x697=((40000.0)*cj1*cj4);
04589 CheckValue<IkReal> x698=IKPowWithIntegerCheck(cj4,-1);
04590 if(!x698.valid){
04591 continue;
04592 }
04593 CheckValue<IkReal> x699=IKPowWithIntegerCheck(((((548.0)*cj4))+(((-2210.0)*(cj4*cj4)))),-1);
04594 if(!x699.valid){
04595 continue;
04596 }
04597 if( IKabs(((x698.value)*((x696+(((-1.0)*x695)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x699.value)*((((py*sj0*x697))+(((-11151.0)*x696))+(((11151.0)*x695))+((cj0*px*x697))+(((-40000.0)*cj4*pz*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x698.value)*((x696+(((-1.0)*x695))))))+IKsqr(((x699.value)*((((py*sj0*x697))+(((-11151.0)*x696))+(((11151.0)*x695))+((cj0*px*x697))+(((-40000.0)*cj4*pz*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
04598 continue;
04599 j3array[0]=IKatan2(((x698.value)*((x696+(((-1.0)*x695))))), ((x699.value)*((((py*sj0*x697))+(((-11151.0)*x696))+(((11151.0)*x695))+((cj0*px*x697))+(((-40000.0)*cj4*pz*sj1))))));
04600 sj3array[0]=IKsin(j3array[0]);
04601 cj3array[0]=IKcos(j3array[0]);
04602 if( j3array[0] > IKPI )
04603 {
04604 j3array[0]-=IK2PI;
04605 }
04606 else if( j3array[0] < -IKPI )
04607 { j3array[0]+=IK2PI;
04608 }
04609 j3valid[0] = true;
04610 for(int ij3 = 0; ij3 < 1; ++ij3)
04611 {
04612 if( !j3valid[ij3] )
04613 {
04614 continue;
04615 }
04616 _ij3[0] = ij3; _ij3[1] = -1;
04617 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04618 {
04619 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04620 {
04621 j3valid[iij3]=false; _ij3[1] = iij3; break;
04622 }
04623 }
04624 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04625 {
04626 IkReal evalcond[4];
04627 IkReal x700=IKsin(j3);
04628 IkReal x701=IKcos(j3);
04629 IkReal x702=((1.0)*sj0);
04630 IkReal x703=(cj4*x700);
04631 IkReal x704=(cj1*x702);
04632 IkReal x705=((1.0)*cj0*cj1);
04633 IkReal x706=(cj4*x701);
04634 evalcond[0]=(x703+(((-1.0)*r00*x702))+((cj0*r01)));
04635 evalcond[1]=((((-1.0)*x706))+((r02*sj1))+(((-1.0)*r01*x704))+(((-1.0)*r00*x705)));
04636 evalcond[2]=((0.22425116)+(((0.05525)*x703))+(((-0.0137)*x700))+(((-1.0)*px*x702))+((cj0*py))+(((0.278775)*x701)));
04637 evalcond[3]=((((-1.0)*py*x704))+(((-0.05525)*x706))+(((-1.0)*px*x705))+((pz*sj1))+(((0.278775)*x700))+(((0.0137)*x701)));
04638 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
04639 {
04640 continue;
04641 }
04642 }
04643
04644 {
04645 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04646 vinfos[0].jointtype = 1;
04647 vinfos[0].foffset = j0;
04648 vinfos[0].indices[0] = _ij0[0];
04649 vinfos[0].indices[1] = _ij0[1];
04650 vinfos[0].maxsolutions = _nj0;
04651 vinfos[1].jointtype = 1;
04652 vinfos[1].foffset = j1;
04653 vinfos[1].indices[0] = _ij1[0];
04654 vinfos[1].indices[1] = _ij1[1];
04655 vinfos[1].maxsolutions = _nj1;
04656 vinfos[2].jointtype = 1;
04657 vinfos[2].foffset = j2;
04658 vinfos[2].indices[0] = _ij2[0];
04659 vinfos[2].indices[1] = _ij2[1];
04660 vinfos[2].maxsolutions = _nj2;
04661 vinfos[3].jointtype = 1;
04662 vinfos[3].foffset = j3;
04663 vinfos[3].indices[0] = _ij3[0];
04664 vinfos[3].indices[1] = _ij3[1];
04665 vinfos[3].maxsolutions = _nj3;
04666 vinfos[4].jointtype = 1;
04667 vinfos[4].foffset = j4;
04668 vinfos[4].indices[0] = _ij4[0];
04669 vinfos[4].indices[1] = _ij4[1];
04670 vinfos[4].maxsolutions = _nj4;
04671 std::vector<int> vfree(0);
04672 solutions.AddSolution(vinfos,vfree);
04673 }
04674 }
04675 }
04676
04677 }
04678
04679 }
04680
04681 } else
04682 {
04683 {
04684 IkReal j3array[1], cj3array[1], sj3array[1];
04685 bool j3valid[1]={false};
04686 _nj3 = 1;
04687 CheckValue<IkReal> x712=IKPowWithIntegerCheck(cj4,-1);
04688 if(!x712.valid){
04689 continue;
04690 }
04691 IkReal x707=x712.value;
04692 IkReal x708=(cj0*r01);
04693 IkReal x709=(r00*sj0);
04694 IkReal x710=((40000.0)*cj4);
04695 IkReal x711=((2210.0)*cj4);
04696 if( IKabs((x707*(((((-1.0)*x708))+x709)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((8.96780557797507e-5)*x707*(((((-548.0)*x708))+(((-8970.0464)*cj4))+((px*sj0*x710))+(((-1.0)*cj0*py*x710))+(((-1.0)*x709*x711))+(((548.0)*x709))+((x708*x711)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x707*(((((-1.0)*x708))+x709))))+IKsqr(((8.96780557797507e-5)*x707*(((((-548.0)*x708))+(((-8970.0464)*cj4))+((px*sj0*x710))+(((-1.0)*cj0*py*x710))+(((-1.0)*x709*x711))+(((548.0)*x709))+((x708*x711))))))-1) <= IKFAST_SINCOS_THRESH )
04697 continue;
04698 j3array[0]=IKatan2((x707*(((((-1.0)*x708))+x709))), ((8.96780557797507e-5)*x707*(((((-548.0)*x708))+(((-8970.0464)*cj4))+((px*sj0*x710))+(((-1.0)*cj0*py*x710))+(((-1.0)*x709*x711))+(((548.0)*x709))+((x708*x711))))));
04699 sj3array[0]=IKsin(j3array[0]);
04700 cj3array[0]=IKcos(j3array[0]);
04701 if( j3array[0] > IKPI )
04702 {
04703 j3array[0]-=IK2PI;
04704 }
04705 else if( j3array[0] < -IKPI )
04706 { j3array[0]+=IK2PI;
04707 }
04708 j3valid[0] = true;
04709 for(int ij3 = 0; ij3 < 1; ++ij3)
04710 {
04711 if( !j3valid[ij3] )
04712 {
04713 continue;
04714 }
04715 _ij3[0] = ij3; _ij3[1] = -1;
04716 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04717 {
04718 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04719 {
04720 j3valid[iij3]=false; _ij3[1] = iij3; break;
04721 }
04722 }
04723 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04724 {
04725 IkReal evalcond[4];
04726 IkReal x713=IKsin(j3);
04727 IkReal x714=IKcos(j3);
04728 IkReal x715=((1.0)*sj0);
04729 IkReal x716=(cj4*x713);
04730 IkReal x717=(cj1*x715);
04731 IkReal x718=((1.0)*cj0*cj1);
04732 IkReal x719=(cj4*x714);
04733 evalcond[0]=(x716+(((-1.0)*r00*x715))+((cj0*r01)));
04734 evalcond[1]=((((-1.0)*x719))+((r02*sj1))+(((-1.0)*r01*x717))+(((-1.0)*r00*x718)));
04735 evalcond[2]=((0.22425116)+(((0.05525)*x716))+(((-0.0137)*x713))+(((-1.0)*px*x715))+((cj0*py))+(((0.278775)*x714)));
04736 evalcond[3]=((((-0.05525)*x719))+(((-1.0)*px*x718))+((pz*sj1))+(((-1.0)*py*x717))+(((0.278775)*x713))+(((0.0137)*x714)));
04737 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
04738 {
04739 continue;
04740 }
04741 }
04742
04743 {
04744 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04745 vinfos[0].jointtype = 1;
04746 vinfos[0].foffset = j0;
04747 vinfos[0].indices[0] = _ij0[0];
04748 vinfos[0].indices[1] = _ij0[1];
04749 vinfos[0].maxsolutions = _nj0;
04750 vinfos[1].jointtype = 1;
04751 vinfos[1].foffset = j1;
04752 vinfos[1].indices[0] = _ij1[0];
04753 vinfos[1].indices[1] = _ij1[1];
04754 vinfos[1].maxsolutions = _nj1;
04755 vinfos[2].jointtype = 1;
04756 vinfos[2].foffset = j2;
04757 vinfos[2].indices[0] = _ij2[0];
04758 vinfos[2].indices[1] = _ij2[1];
04759 vinfos[2].maxsolutions = _nj2;
04760 vinfos[3].jointtype = 1;
04761 vinfos[3].foffset = j3;
04762 vinfos[3].indices[0] = _ij3[0];
04763 vinfos[3].indices[1] = _ij3[1];
04764 vinfos[3].maxsolutions = _nj3;
04765 vinfos[4].jointtype = 1;
04766 vinfos[4].foffset = j4;
04767 vinfos[4].indices[0] = _ij4[0];
04768 vinfos[4].indices[1] = _ij4[1];
04769 vinfos[4].maxsolutions = _nj4;
04770 std::vector<int> vfree(0);
04771 solutions.AddSolution(vinfos,vfree);
04772 }
04773 }
04774 }
04775
04776 }
04777
04778 }
04779
04780 } else
04781 {
04782 {
04783 IkReal j3array[1], cj3array[1], sj3array[1];
04784 bool j3valid[1]={false};
04785 _nj3 = 1;
04786 IkReal x720=((1.0)*r01);
04787 CheckValue<IkReal> x721=IKPowWithIntegerCheck(IKsign(cj4),-1);
04788 if(!x721.valid){
04789 continue;
04790 }
04791 CheckValue<IkReal> x722 = IKatan2WithCheck(IkReal((((r00*sj0))+(((-1.0)*cj0*x720)))),((((-1.0)*cj1*sj0*x720))+(((-1.0)*cj0*cj1*r00))+((r02*sj1))),IKFAST_ATAN2_MAGTHRESH);
04792 if(!x722.valid){
04793 continue;
04794 }
04795 j3array[0]=((-1.5707963267949)+(((1.5707963267949)*(x721.value)))+(x722.value));
04796 sj3array[0]=IKsin(j3array[0]);
04797 cj3array[0]=IKcos(j3array[0]);
04798 if( j3array[0] > IKPI )
04799 {
04800 j3array[0]-=IK2PI;
04801 }
04802 else if( j3array[0] < -IKPI )
04803 { j3array[0]+=IK2PI;
04804 }
04805 j3valid[0] = true;
04806 for(int ij3 = 0; ij3 < 1; ++ij3)
04807 {
04808 if( !j3valid[ij3] )
04809 {
04810 continue;
04811 }
04812 _ij3[0] = ij3; _ij3[1] = -1;
04813 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04814 {
04815 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04816 {
04817 j3valid[iij3]=false; _ij3[1] = iij3; break;
04818 }
04819 }
04820 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04821 {
04822 IkReal evalcond[4];
04823 IkReal x723=IKsin(j3);
04824 IkReal x724=IKcos(j3);
04825 IkReal x725=((1.0)*sj0);
04826 IkReal x726=(cj4*x723);
04827 IkReal x727=(cj1*x725);
04828 IkReal x728=((1.0)*cj0*cj1);
04829 IkReal x729=(cj4*x724);
04830 evalcond[0]=((((-1.0)*r00*x725))+x726+((cj0*r01)));
04831 evalcond[1]=((((-1.0)*r00*x728))+((r02*sj1))+(((-1.0)*x729))+(((-1.0)*r01*x727)));
04832 evalcond[2]=((0.22425116)+(((0.278775)*x724))+(((0.05525)*x726))+(((-1.0)*px*x725))+(((-0.0137)*x723))+((cj0*py)));
04833 evalcond[3]=((((0.278775)*x723))+(((-1.0)*px*x728))+(((-0.05525)*x729))+((pz*sj1))+(((0.0137)*x724))+(((-1.0)*py*x727)));
04834 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
04835 {
04836 continue;
04837 }
04838 }
04839
04840 {
04841 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04842 vinfos[0].jointtype = 1;
04843 vinfos[0].foffset = j0;
04844 vinfos[0].indices[0] = _ij0[0];
04845 vinfos[0].indices[1] = _ij0[1];
04846 vinfos[0].maxsolutions = _nj0;
04847 vinfos[1].jointtype = 1;
04848 vinfos[1].foffset = j1;
04849 vinfos[1].indices[0] = _ij1[0];
04850 vinfos[1].indices[1] = _ij1[1];
04851 vinfos[1].maxsolutions = _nj1;
04852 vinfos[2].jointtype = 1;
04853 vinfos[2].foffset = j2;
04854 vinfos[2].indices[0] = _ij2[0];
04855 vinfos[2].indices[1] = _ij2[1];
04856 vinfos[2].maxsolutions = _nj2;
04857 vinfos[3].jointtype = 1;
04858 vinfos[3].foffset = j3;
04859 vinfos[3].indices[0] = _ij3[0];
04860 vinfos[3].indices[1] = _ij3[1];
04861 vinfos[3].maxsolutions = _nj3;
04862 vinfos[4].jointtype = 1;
04863 vinfos[4].foffset = j4;
04864 vinfos[4].indices[0] = _ij4[0];
04865 vinfos[4].indices[1] = _ij4[1];
04866 vinfos[4].maxsolutions = _nj4;
04867 std::vector<int> vfree(0);
04868 solutions.AddSolution(vinfos,vfree);
04869 }
04870 }
04871 }
04872
04873 }
04874
04875 }
04876
04877 }
04878 } while(0);
04879 if( bgotonextstatement )
04880 {
04881 bool bgotonextstatement = true;
04882 do
04883 {
04884 IkReal x730=(cj0*r00);
04885 IkReal x731=(r01*sj0);
04886 IkReal x732=((1.0)*cj1);
04887 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j4)))), 6.28318530717959)));
04888 evalcond[1]=(cj2+(((-1.0)*r00*sj0))+((cj0*r01)));
04889 evalcond[2]=((((-1.0)*x731*x732))+((r02*sj1))+(((-1.0)*x730*x732)));
04890 evalcond[3]=((((-1.0)*sj2))+((cj1*r02))+((sj1*x730))+((sj1*x731)));
04891 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 )
04892 {
04893 bgotonextstatement=false;
04894 {
04895 IkReal j3eval[2];
04896 sj4=1.0;
04897 cj4=0;
04898 j4=1.5707963267949;
04899 j3eval[0]=sj2;
04900 j3eval[1]=IKsign(sj2);
04901 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
04902 {
04903 {
04904 IkReal j3eval[2];
04905 sj4=1.0;
04906 cj4=0;
04907 j4=1.5707963267949;
04908 j3eval[0]=cj2;
04909 j3eval[1]=IKsign(cj2);
04910 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
04911 {
04912 {
04913 IkReal evalcond[5];
04914 bool bgotonextstatement = true;
04915 do
04916 {
04917 IkReal x733=(cj0*r00);
04918 IkReal x734=(r01*sj0);
04919 IkReal x735=((1.0)*cj1);
04920 IkReal x736=((1.0)*sj0);
04921 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j2))), 6.28318530717959)));
04922 evalcond[1]=((1.0)+(((-1.0)*r00*x736))+((cj0*r01)));
04923 evalcond[2]=((((-1.0)*x734*x735))+(((-1.0)*x733*x735))+((r02*sj1)));
04924 evalcond[3]=(((cj1*r02))+((sj1*x733))+((sj1*x734)));
04925 evalcond[4]=((0.05550116)+(((-1.0)*px*x736))+((cj0*py)));
04926 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
04927 {
04928 bgotonextstatement=false;
04929 {
04930 IkReal j3array[1], cj3array[1], sj3array[1];
04931 bool j3valid[1]={false};
04932 _nj3 = 1;
04933 IkReal x737=((3.57847987692738)*cj1);
04934 IkReal x738=(cj0*px);
04935 IkReal x739=((0.175859292669375)*cj1);
04936 IkReal x740=((3.57847987692738)*sj1);
04937 IkReal x741=((0.175859292669375)*sj1);
04938 IkReal x742=(py*sj0);
04939 IkReal x743=((3.57847987692738)*x742);
04940 if( IKabs(((0.0862247661117539)+(((-1.0)*x738*x741))+(((-1.0)*pz*x740))+((x737*x742))+(((-1.0)*x741*x742))+(((-1.0)*pz*x739))+((x737*x738)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-1.75454811480322)+((x738*x740))+((x739*x742))+((x740*x742))+(((-1.0)*pz*x741))+((pz*x737))+((x738*x739)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0862247661117539)+(((-1.0)*x738*x741))+(((-1.0)*pz*x740))+((x737*x742))+(((-1.0)*x741*x742))+(((-1.0)*pz*x739))+((x737*x738))))+IKsqr(((-1.75454811480322)+((x738*x740))+((x739*x742))+((x740*x742))+(((-1.0)*pz*x741))+((pz*x737))+((x738*x739))))-1) <= IKFAST_SINCOS_THRESH )
04941 continue;
04942 j3array[0]=IKatan2(((0.0862247661117539)+(((-1.0)*x738*x741))+(((-1.0)*pz*x740))+((x737*x742))+(((-1.0)*x741*x742))+(((-1.0)*pz*x739))+((x737*x738))), ((-1.75454811480322)+((x738*x740))+((x739*x742))+((x740*x742))+(((-1.0)*pz*x741))+((pz*x737))+((x738*x739))));
04943 sj3array[0]=IKsin(j3array[0]);
04944 cj3array[0]=IKcos(j3array[0]);
04945 if( j3array[0] > IKPI )
04946 {
04947 j3array[0]-=IK2PI;
04948 }
04949 else if( j3array[0] < -IKPI )
04950 { j3array[0]+=IK2PI;
04951 }
04952 j3valid[0] = true;
04953 for(int ij3 = 0; ij3 < 1; ++ij3)
04954 {
04955 if( !j3valid[ij3] )
04956 {
04957 continue;
04958 }
04959 _ij3[0] = ij3; _ij3[1] = -1;
04960 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
04961 {
04962 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
04963 {
04964 j3valid[iij3]=false; _ij3[1] = iij3; break;
04965 }
04966 }
04967 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
04968 {
04969 IkReal evalcond[2];
04970 IkReal x744=IKsin(j3);
04971 IkReal x745=IKcos(j3);
04972 IkReal x746=(cj0*px);
04973 IkReal x747=(py*sj0);
04974 IkReal x748=((1.0)*cj1);
04975 evalcond[0]=((-0.49030543)+(((0.0137)*x744))+((cj1*pz))+((sj1*x747))+((sj1*x746))+(((-0.278775)*x745)));
04976 evalcond[1]=((((0.0137)*x745))+(((-1.0)*x746*x748))+(((-1.0)*x747*x748))+((pz*sj1))+(((0.278775)*x744)));
04977 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
04978 {
04979 continue;
04980 }
04981 }
04982
04983 {
04984 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
04985 vinfos[0].jointtype = 1;
04986 vinfos[0].foffset = j0;
04987 vinfos[0].indices[0] = _ij0[0];
04988 vinfos[0].indices[1] = _ij0[1];
04989 vinfos[0].maxsolutions = _nj0;
04990 vinfos[1].jointtype = 1;
04991 vinfos[1].foffset = j1;
04992 vinfos[1].indices[0] = _ij1[0];
04993 vinfos[1].indices[1] = _ij1[1];
04994 vinfos[1].maxsolutions = _nj1;
04995 vinfos[2].jointtype = 1;
04996 vinfos[2].foffset = j2;
04997 vinfos[2].indices[0] = _ij2[0];
04998 vinfos[2].indices[1] = _ij2[1];
04999 vinfos[2].maxsolutions = _nj2;
05000 vinfos[3].jointtype = 1;
05001 vinfos[3].foffset = j3;
05002 vinfos[3].indices[0] = _ij3[0];
05003 vinfos[3].indices[1] = _ij3[1];
05004 vinfos[3].maxsolutions = _nj3;
05005 vinfos[4].jointtype = 1;
05006 vinfos[4].foffset = j4;
05007 vinfos[4].indices[0] = _ij4[0];
05008 vinfos[4].indices[1] = _ij4[1];
05009 vinfos[4].maxsolutions = _nj4;
05010 std::vector<int> vfree(0);
05011 solutions.AddSolution(vinfos,vfree);
05012 }
05013 }
05014 }
05015
05016 }
05017 } while(0);
05018 if( bgotonextstatement )
05019 {
05020 bool bgotonextstatement = true;
05021 do
05022 {
05023 IkReal x749=(cj0*r00);
05024 IkReal x750=(r01*sj0);
05025 IkReal x751=((1.0)*cj1);
05026 IkReal x752=((1.0)*sj0);
05027 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j2)))), 6.28318530717959)));
05028 evalcond[1]=((-1.0)+(((-1.0)*r00*x752))+((cj0*r01)));
05029 evalcond[2]=((((-1.0)*x750*x751))+((r02*sj1))+(((-1.0)*x749*x751)));
05030 evalcond[3]=(((cj1*r02))+((sj1*x750))+((sj1*x749)));
05031 evalcond[4]=((-0.05499884)+(((-1.0)*px*x752))+((cj0*py)));
05032 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
05033 {
05034 bgotonextstatement=false;
05035 {
05036 IkReal j3array[1], cj3array[1], sj3array[1];
05037 bool j3valid[1]={false};
05038 _nj3 = 1;
05039 IkReal x753=((3.57847987692738)*cj1);
05040 IkReal x754=(cj0*px);
05041 IkReal x755=((0.175859292669375)*cj1);
05042 IkReal x756=((3.57847987692738)*sj1);
05043 IkReal x757=((0.175859292669375)*sj1);
05044 IkReal x758=(py*sj0);
05045 IkReal x759=((3.57847987692738)*x758);
05046 if( IKabs(((-0.00743980299587377)+((pz*x755))+(((-1.0)*pz*x756))+((x753*x758))+((x753*x754))+((x757*x758))+((x754*x757)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((0.15138912993976)+(((-1.0)*x754*x756))+(((-1.0)*x756*x758))+((x755*x758))+(((-1.0)*pz*x753))+(((-1.0)*pz*x757))+((x754*x755)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((-0.00743980299587377)+((pz*x755))+(((-1.0)*pz*x756))+((x753*x758))+((x753*x754))+((x757*x758))+((x754*x757))))+IKsqr(((0.15138912993976)+(((-1.0)*x754*x756))+(((-1.0)*x756*x758))+((x755*x758))+(((-1.0)*pz*x753))+(((-1.0)*pz*x757))+((x754*x755))))-1) <= IKFAST_SINCOS_THRESH )
05047 continue;
05048 j3array[0]=IKatan2(((-0.00743980299587377)+((pz*x755))+(((-1.0)*pz*x756))+((x753*x758))+((x753*x754))+((x757*x758))+((x754*x757))), ((0.15138912993976)+(((-1.0)*x754*x756))+(((-1.0)*x756*x758))+((x755*x758))+(((-1.0)*pz*x753))+(((-1.0)*pz*x757))+((x754*x755))));
05049 sj3array[0]=IKsin(j3array[0]);
05050 cj3array[0]=IKcos(j3array[0]);
05051 if( j3array[0] > IKPI )
05052 {
05053 j3array[0]-=IK2PI;
05054 }
05055 else if( j3array[0] < -IKPI )
05056 { j3array[0]+=IK2PI;
05057 }
05058 j3valid[0] = true;
05059 for(int ij3 = 0; ij3 < 1; ++ij3)
05060 {
05061 if( !j3valid[ij3] )
05062 {
05063 continue;
05064 }
05065 _ij3[0] = ij3; _ij3[1] = -1;
05066 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05067 {
05068 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05069 {
05070 j3valid[iij3]=false; _ij3[1] = iij3; break;
05071 }
05072 }
05073 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05074 {
05075 IkReal evalcond[2];
05076 IkReal x760=IKsin(j3);
05077 IkReal x761=IKcos(j3);
05078 IkReal x762=(cj0*px);
05079 IkReal x763=(py*sj0);
05080 IkReal x764=((1.0)*cj1);
05081 evalcond[0]=((-0.04230543)+(((-0.0137)*x760))+((sj1*x763))+((sj1*x762))+(((0.278775)*x761))+((cj1*pz)));
05082 evalcond[1]=((((-1.0)*x763*x764))+(((-1.0)*x762*x764))+(((0.0137)*x761))+(((0.278775)*x760))+((pz*sj1)));
05083 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
05084 {
05085 continue;
05086 }
05087 }
05088
05089 {
05090 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05091 vinfos[0].jointtype = 1;
05092 vinfos[0].foffset = j0;
05093 vinfos[0].indices[0] = _ij0[0];
05094 vinfos[0].indices[1] = _ij0[1];
05095 vinfos[0].maxsolutions = _nj0;
05096 vinfos[1].jointtype = 1;
05097 vinfos[1].foffset = j1;
05098 vinfos[1].indices[0] = _ij1[0];
05099 vinfos[1].indices[1] = _ij1[1];
05100 vinfos[1].maxsolutions = _nj1;
05101 vinfos[2].jointtype = 1;
05102 vinfos[2].foffset = j2;
05103 vinfos[2].indices[0] = _ij2[0];
05104 vinfos[2].indices[1] = _ij2[1];
05105 vinfos[2].maxsolutions = _nj2;
05106 vinfos[3].jointtype = 1;
05107 vinfos[3].foffset = j3;
05108 vinfos[3].indices[0] = _ij3[0];
05109 vinfos[3].indices[1] = _ij3[1];
05110 vinfos[3].maxsolutions = _nj3;
05111 vinfos[4].jointtype = 1;
05112 vinfos[4].foffset = j4;
05113 vinfos[4].indices[0] = _ij4[0];
05114 vinfos[4].indices[1] = _ij4[1];
05115 vinfos[4].maxsolutions = _nj4;
05116 std::vector<int> vfree(0);
05117 solutions.AddSolution(vinfos,vfree);
05118 }
05119 }
05120 }
05121
05122 }
05123 } while(0);
05124 if( bgotonextstatement )
05125 {
05126 bool bgotonextstatement = true;
05127 do
05128 {
05129 if( 1 )
05130 {
05131 bgotonextstatement=false;
05132 continue;
05133
05134 }
05135 } while(0);
05136 if( bgotonextstatement )
05137 {
05138 }
05139 }
05140 }
05141 }
05142
05143 } else
05144 {
05145 {
05146 IkReal j3array[1], cj3array[1], sj3array[1];
05147 bool j3valid[1]={false};
05148 _nj3 = 1;
05149 IkReal x765=(py*sj0);
05150 IkReal x766=((4384000.0)*sj1);
05151 IkReal x767=(cj0*px);
05152 IkReal x768=((89208000.0)*sj1);
05153 IkReal x769=(cj2*pz);
05154 IkReal x770=(cj1*pz);
05155 IkReal x771=((89208000.0)*cj1*cj2);
05156 IkReal x772=((4384000.0)*cj1*cj2);
05157 CheckValue<IkReal> x773 = IKatan2WithCheck(IkReal(((1167483.00512)+(((-4384000.0)*x770))+(((-1.0)*x765*x766))+(((982016.0)*cj2))+(((242216.0)*sj2))+(((-1.0)*x766*x767))+((x767*x771))+((x765*x771))+(((-1.0)*x768*x769)))),((-23756574.79944)+(((-19982592.0)*cj2))+(((89208000.0)*x770))+(((-4928742.0)*sj2))+(((-1.0)*x766*x769))+((x767*x772))+((x765*x772))+((x765*x768))+((x767*x768))),IKFAST_ATAN2_MAGTHRESH);
05158 if(!x773.valid){
05159 continue;
05160 }
05161 CheckValue<IkReal> x774=IKPowWithIntegerCheck(IKsign(cj2),-1);
05162 if(!x774.valid){
05163 continue;
05164 }
05165 j3array[0]=((-1.5707963267949)+(x773.value)+(((1.5707963267949)*(x774.value))));
05166 sj3array[0]=IKsin(j3array[0]);
05167 cj3array[0]=IKcos(j3array[0]);
05168 if( j3array[0] > IKPI )
05169 {
05170 j3array[0]-=IK2PI;
05171 }
05172 else if( j3array[0] < -IKPI )
05173 { j3array[0]+=IK2PI;
05174 }
05175 j3valid[0] = true;
05176 for(int ij3 = 0; ij3 < 1; ++ij3)
05177 {
05178 if( !j3valid[ij3] )
05179 {
05180 continue;
05181 }
05182 _ij3[0] = ij3; _ij3[1] = -1;
05183 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05184 {
05185 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05186 {
05187 j3valid[iij3]=false; _ij3[1] = iij3; break;
05188 }
05189 }
05190 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05191 {
05192 IkReal evalcond[3];
05193 IkReal x775=IKsin(j3);
05194 IkReal x776=IKcos(j3);
05195 IkReal x777=(cj0*px);
05196 IkReal x778=(py*sj0);
05197 IkReal x779=((1.0)*cj1);
05198 IkReal x780=((0.278775)*x776);
05199 IkReal x781=((0.0137)*x775);
05200 evalcond[0]=((((0.0137)*x776))+(((-1.0)*x778*x779))+((pz*sj1))+(((0.278775)*x775))+(((-1.0)*x777*x779)));
05201 evalcond[1]=((0.00025116)+((sj2*x781))+(((0.05525)*cj2))+(((-0.224)*sj2))+(((-1.0)*px*sj0))+(((-1.0)*sj2*x780))+((cj0*py)));
05202 evalcond[2]=((-0.26630543)+(((-0.05525)*sj2))+(((-1.0)*cj2*x780))+((cj1*pz))+((sj1*x778))+((sj1*x777))+(((-0.224)*cj2))+((cj2*x781)));
05203 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH )
05204 {
05205 continue;
05206 }
05207 }
05208
05209 {
05210 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05211 vinfos[0].jointtype = 1;
05212 vinfos[0].foffset = j0;
05213 vinfos[0].indices[0] = _ij0[0];
05214 vinfos[0].indices[1] = _ij0[1];
05215 vinfos[0].maxsolutions = _nj0;
05216 vinfos[1].jointtype = 1;
05217 vinfos[1].foffset = j1;
05218 vinfos[1].indices[0] = _ij1[0];
05219 vinfos[1].indices[1] = _ij1[1];
05220 vinfos[1].maxsolutions = _nj1;
05221 vinfos[2].jointtype = 1;
05222 vinfos[2].foffset = j2;
05223 vinfos[2].indices[0] = _ij2[0];
05224 vinfos[2].indices[1] = _ij2[1];
05225 vinfos[2].maxsolutions = _nj2;
05226 vinfos[3].jointtype = 1;
05227 vinfos[3].foffset = j3;
05228 vinfos[3].indices[0] = _ij3[0];
05229 vinfos[3].indices[1] = _ij3[1];
05230 vinfos[3].maxsolutions = _nj3;
05231 vinfos[4].jointtype = 1;
05232 vinfos[4].foffset = j4;
05233 vinfos[4].indices[0] = _ij4[0];
05234 vinfos[4].indices[1] = _ij4[1];
05235 vinfos[4].maxsolutions = _nj4;
05236 std::vector<int> vfree(0);
05237 solutions.AddSolution(vinfos,vfree);
05238 }
05239 }
05240 }
05241
05242 }
05243
05244 }
05245
05246 } else
05247 {
05248 {
05249 IkReal j3array[1], cj3array[1], sj3array[1];
05250 bool j3valid[1]={false};
05251 _nj3 = 1;
05252 IkReal x782=((4384000.0)*px);
05253 IkReal x783=(cj0*py);
05254 IkReal x784=(cj1*sj2);
05255 IkReal x785=(py*sj0);
05256 IkReal x786=((89208000.0)*px);
05257 IkReal x787=(pz*sj1*sj2);
05258 CheckValue<IkReal> x788 = IKatan2WithCheck(IkReal(((-1101.08544)+(((-4384000.0)*x783))+(((982016.0)*sj2))+((sj0*x782))+((cj0*x784*x786))+(((-242216.0)*cj2))+(((89208000.0)*x784*x785))+(((-89208000.0)*x787)))),((22405.48128)+(((-19982592.0)*sj2))+(((4384000.0)*x784*x785))+(((-4384000.0)*x787))+(((-1.0)*sj0*x786))+(((4928742.0)*cj2))+((cj0*x782*x784))+(((89208000.0)*x783))),IKFAST_ATAN2_MAGTHRESH);
05259 if(!x788.valid){
05260 continue;
05261 }
05262 CheckValue<IkReal> x789=IKPowWithIntegerCheck(IKsign(sj2),-1);
05263 if(!x789.valid){
05264 continue;
05265 }
05266 j3array[0]=((-1.5707963267949)+(x788.value)+(((1.5707963267949)*(x789.value))));
05267 sj3array[0]=IKsin(j3array[0]);
05268 cj3array[0]=IKcos(j3array[0]);
05269 if( j3array[0] > IKPI )
05270 {
05271 j3array[0]-=IK2PI;
05272 }
05273 else if( j3array[0] < -IKPI )
05274 { j3array[0]+=IK2PI;
05275 }
05276 j3valid[0] = true;
05277 for(int ij3 = 0; ij3 < 1; ++ij3)
05278 {
05279 if( !j3valid[ij3] )
05280 {
05281 continue;
05282 }
05283 _ij3[0] = ij3; _ij3[1] = -1;
05284 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05285 {
05286 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05287 {
05288 j3valid[iij3]=false; _ij3[1] = iij3; break;
05289 }
05290 }
05291 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05292 {
05293 IkReal evalcond[3];
05294 IkReal x790=IKsin(j3);
05295 IkReal x791=IKcos(j3);
05296 IkReal x792=(cj0*px);
05297 IkReal x793=(py*sj0);
05298 IkReal x794=((1.0)*cj1);
05299 IkReal x795=((0.278775)*x791);
05300 IkReal x796=((0.0137)*x790);
05301 evalcond[0]=((((-1.0)*x792*x794))+(((0.0137)*x791))+(((-1.0)*x793*x794))+(((0.278775)*x790))+((pz*sj1)));
05302 evalcond[1]=((0.00025116)+(((0.05525)*cj2))+(((-0.224)*sj2))+(((-1.0)*px*sj0))+((cj0*py))+(((-1.0)*sj2*x795))+((sj2*x796)));
05303 evalcond[2]=((-0.26630543)+(((-0.05525)*sj2))+(((-1.0)*cj2*x795))+((sj1*x792))+((sj1*x793))+((cj1*pz))+(((-0.224)*cj2))+((cj2*x796)));
05304 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH )
05305 {
05306 continue;
05307 }
05308 }
05309
05310 {
05311 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05312 vinfos[0].jointtype = 1;
05313 vinfos[0].foffset = j0;
05314 vinfos[0].indices[0] = _ij0[0];
05315 vinfos[0].indices[1] = _ij0[1];
05316 vinfos[0].maxsolutions = _nj0;
05317 vinfos[1].jointtype = 1;
05318 vinfos[1].foffset = j1;
05319 vinfos[1].indices[0] = _ij1[0];
05320 vinfos[1].indices[1] = _ij1[1];
05321 vinfos[1].maxsolutions = _nj1;
05322 vinfos[2].jointtype = 1;
05323 vinfos[2].foffset = j2;
05324 vinfos[2].indices[0] = _ij2[0];
05325 vinfos[2].indices[1] = _ij2[1];
05326 vinfos[2].maxsolutions = _nj2;
05327 vinfos[3].jointtype = 1;
05328 vinfos[3].foffset = j3;
05329 vinfos[3].indices[0] = _ij3[0];
05330 vinfos[3].indices[1] = _ij3[1];
05331 vinfos[3].maxsolutions = _nj3;
05332 vinfos[4].jointtype = 1;
05333 vinfos[4].foffset = j4;
05334 vinfos[4].indices[0] = _ij4[0];
05335 vinfos[4].indices[1] = _ij4[1];
05336 vinfos[4].maxsolutions = _nj4;
05337 std::vector<int> vfree(0);
05338 solutions.AddSolution(vinfos,vfree);
05339 }
05340 }
05341 }
05342
05343 }
05344
05345 }
05346
05347 }
05348 } while(0);
05349 if( bgotonextstatement )
05350 {
05351 bool bgotonextstatement = true;
05352 do
05353 {
05354 IkReal x797=(cj0*r00);
05355 IkReal x798=(r01*sj0);
05356 IkReal x799=((1.0)*cj1);
05357 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j4)))), 6.28318530717959)));
05358 evalcond[1]=((((-1.0)*r00*sj0))+(((-1.0)*cj2))+((cj0*r01)));
05359 evalcond[2]=((((-1.0)*x798*x799))+(((-1.0)*x797*x799))+((r02*sj1)));
05360 evalcond[3]=(sj2+((sj1*x798))+((sj1*x797))+((cj1*r02)));
05361 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 )
05362 {
05363 bgotonextstatement=false;
05364 {
05365 IkReal j3eval[2];
05366 sj4=-1.0;
05367 cj4=0;
05368 j4=-1.5707963267949;
05369 j3eval[0]=sj2;
05370 j3eval[1]=IKsign(sj2);
05371 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
05372 {
05373 {
05374 IkReal j3eval[2];
05375 sj4=-1.0;
05376 cj4=0;
05377 j4=-1.5707963267949;
05378 j3eval[0]=cj2;
05379 j3eval[1]=IKsign(cj2);
05380 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
05381 {
05382 {
05383 IkReal evalcond[5];
05384 bool bgotonextstatement = true;
05385 do
05386 {
05387 IkReal x800=(cj0*r00);
05388 IkReal x801=(r01*sj0);
05389 IkReal x802=((1.0)*cj1);
05390 IkReal x803=((1.0)*sj0);
05391 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j2))), 6.28318530717959)));
05392 evalcond[1]=((-1.0)+(((-1.0)*r00*x803))+((cj0*r01)));
05393 evalcond[2]=(((r02*sj1))+(((-1.0)*x800*x802))+(((-1.0)*x801*x802)));
05394 evalcond[3]=(((cj1*r02))+((sj1*x800))+((sj1*x801)));
05395 evalcond[4]=((-0.05499884)+(((-1.0)*px*x803))+((cj0*py)));
05396 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
05397 {
05398 bgotonextstatement=false;
05399 {
05400 IkReal j3array[1], cj3array[1], sj3array[1];
05401 bool j3valid[1]={false};
05402 _nj3 = 1;
05403 IkReal x804=((3.57847987692738)*cj1);
05404 IkReal x805=(cj0*px);
05405 IkReal x806=((0.175859292669375)*cj1);
05406 IkReal x807=((3.57847987692738)*sj1);
05407 IkReal x808=((0.175859292669375)*sj1);
05408 IkReal x809=(py*sj0);
05409 IkReal x810=((3.57847987692738)*x809);
05410 if( IKabs(((0.0862247661117539)+((x804*x809))+((x804*x805))+(((-1.0)*x805*x808))+(((-1.0)*x808*x809))+(((-1.0)*pz*x807))+(((-1.0)*pz*x806)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((-1.75454811480322)+((x806*x809))+((x805*x807))+((x805*x806))+((pz*x804))+(((-1.0)*pz*x808))+((x807*x809)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((0.0862247661117539)+((x804*x809))+((x804*x805))+(((-1.0)*x805*x808))+(((-1.0)*x808*x809))+(((-1.0)*pz*x807))+(((-1.0)*pz*x806))))+IKsqr(((-1.75454811480322)+((x806*x809))+((x805*x807))+((x805*x806))+((pz*x804))+(((-1.0)*pz*x808))+((x807*x809))))-1) <= IKFAST_SINCOS_THRESH )
05411 continue;
05412 j3array[0]=IKatan2(((0.0862247661117539)+((x804*x809))+((x804*x805))+(((-1.0)*x805*x808))+(((-1.0)*x808*x809))+(((-1.0)*pz*x807))+(((-1.0)*pz*x806))), ((-1.75454811480322)+((x806*x809))+((x805*x807))+((x805*x806))+((pz*x804))+(((-1.0)*pz*x808))+((x807*x809))));
05413 sj3array[0]=IKsin(j3array[0]);
05414 cj3array[0]=IKcos(j3array[0]);
05415 if( j3array[0] > IKPI )
05416 {
05417 j3array[0]-=IK2PI;
05418 }
05419 else if( j3array[0] < -IKPI )
05420 { j3array[0]+=IK2PI;
05421 }
05422 j3valid[0] = true;
05423 for(int ij3 = 0; ij3 < 1; ++ij3)
05424 {
05425 if( !j3valid[ij3] )
05426 {
05427 continue;
05428 }
05429 _ij3[0] = ij3; _ij3[1] = -1;
05430 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05431 {
05432 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05433 {
05434 j3valid[iij3]=false; _ij3[1] = iij3; break;
05435 }
05436 }
05437 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05438 {
05439 IkReal evalcond[2];
05440 IkReal x811=IKsin(j3);
05441 IkReal x812=IKcos(j3);
05442 IkReal x813=(cj0*px);
05443 IkReal x814=(py*sj0);
05444 IkReal x815=((1.0)*cj1);
05445 evalcond[0]=((-0.49030543)+((sj1*x813))+((sj1*x814))+(((0.0137)*x811))+((cj1*pz))+(((-0.278775)*x812)));
05446 evalcond[1]=((((0.0137)*x812))+(((-1.0)*x814*x815))+(((-1.0)*x813*x815))+(((0.278775)*x811))+((pz*sj1)));
05447 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
05448 {
05449 continue;
05450 }
05451 }
05452
05453 {
05454 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05455 vinfos[0].jointtype = 1;
05456 vinfos[0].foffset = j0;
05457 vinfos[0].indices[0] = _ij0[0];
05458 vinfos[0].indices[1] = _ij0[1];
05459 vinfos[0].maxsolutions = _nj0;
05460 vinfos[1].jointtype = 1;
05461 vinfos[1].foffset = j1;
05462 vinfos[1].indices[0] = _ij1[0];
05463 vinfos[1].indices[1] = _ij1[1];
05464 vinfos[1].maxsolutions = _nj1;
05465 vinfos[2].jointtype = 1;
05466 vinfos[2].foffset = j2;
05467 vinfos[2].indices[0] = _ij2[0];
05468 vinfos[2].indices[1] = _ij2[1];
05469 vinfos[2].maxsolutions = _nj2;
05470 vinfos[3].jointtype = 1;
05471 vinfos[3].foffset = j3;
05472 vinfos[3].indices[0] = _ij3[0];
05473 vinfos[3].indices[1] = _ij3[1];
05474 vinfos[3].maxsolutions = _nj3;
05475 vinfos[4].jointtype = 1;
05476 vinfos[4].foffset = j4;
05477 vinfos[4].indices[0] = _ij4[0];
05478 vinfos[4].indices[1] = _ij4[1];
05479 vinfos[4].maxsolutions = _nj4;
05480 std::vector<int> vfree(0);
05481 solutions.AddSolution(vinfos,vfree);
05482 }
05483 }
05484 }
05485
05486 }
05487 } while(0);
05488 if( bgotonextstatement )
05489 {
05490 bool bgotonextstatement = true;
05491 do
05492 {
05493 IkReal x816=(cj0*r00);
05494 IkReal x817=(r01*sj0);
05495 IkReal x818=((1.0)*cj1);
05496 IkReal x819=((1.0)*sj0);
05497 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j2)))), 6.28318530717959)));
05498 evalcond[1]=((1.0)+(((-1.0)*r00*x819))+((cj0*r01)));
05499 evalcond[2]=((((-1.0)*x816*x818))+(((-1.0)*x817*x818))+((r02*sj1)));
05500 evalcond[3]=(((sj1*x816))+((sj1*x817))+((cj1*r02)));
05501 evalcond[4]=((0.05550116)+(((-1.0)*px*x819))+((cj0*py)));
05502 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 && IKabs(evalcond[3]) < 0.0000010000000000 && IKabs(evalcond[4]) < 0.0000010000000000 )
05503 {
05504 bgotonextstatement=false;
05505 {
05506 IkReal j3array[1], cj3array[1], sj3array[1];
05507 bool j3valid[1]={false};
05508 _nj3 = 1;
05509 IkReal x820=((3.57847987692738)*cj1);
05510 IkReal x821=(cj0*px);
05511 IkReal x822=((0.175859292669375)*cj1);
05512 IkReal x823=((3.57847987692738)*sj1);
05513 IkReal x824=((0.175859292669375)*sj1);
05514 IkReal x825=(py*sj0);
05515 IkReal x826=((3.57847987692738)*x825);
05516 if( IKabs(((-0.00743980299587377)+((pz*x822))+((x820*x825))+((x820*x821))+((x821*x824))+(((-1.0)*pz*x823))+((x824*x825)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((0.15138912993976)+((x821*x822))+(((-1.0)*pz*x824))+(((-1.0)*pz*x820))+(((-1.0)*x823*x825))+(((-1.0)*x821*x823))+((x822*x825)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((-0.00743980299587377)+((pz*x822))+((x820*x825))+((x820*x821))+((x821*x824))+(((-1.0)*pz*x823))+((x824*x825))))+IKsqr(((0.15138912993976)+((x821*x822))+(((-1.0)*pz*x824))+(((-1.0)*pz*x820))+(((-1.0)*x823*x825))+(((-1.0)*x821*x823))+((x822*x825))))-1) <= IKFAST_SINCOS_THRESH )
05517 continue;
05518 j3array[0]=IKatan2(((-0.00743980299587377)+((pz*x822))+((x820*x825))+((x820*x821))+((x821*x824))+(((-1.0)*pz*x823))+((x824*x825))), ((0.15138912993976)+((x821*x822))+(((-1.0)*pz*x824))+(((-1.0)*pz*x820))+(((-1.0)*x823*x825))+(((-1.0)*x821*x823))+((x822*x825))));
05519 sj3array[0]=IKsin(j3array[0]);
05520 cj3array[0]=IKcos(j3array[0]);
05521 if( j3array[0] > IKPI )
05522 {
05523 j3array[0]-=IK2PI;
05524 }
05525 else if( j3array[0] < -IKPI )
05526 { j3array[0]+=IK2PI;
05527 }
05528 j3valid[0] = true;
05529 for(int ij3 = 0; ij3 < 1; ++ij3)
05530 {
05531 if( !j3valid[ij3] )
05532 {
05533 continue;
05534 }
05535 _ij3[0] = ij3; _ij3[1] = -1;
05536 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05537 {
05538 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05539 {
05540 j3valid[iij3]=false; _ij3[1] = iij3; break;
05541 }
05542 }
05543 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05544 {
05545 IkReal evalcond[2];
05546 IkReal x827=IKsin(j3);
05547 IkReal x828=IKcos(j3);
05548 IkReal x829=(cj0*px);
05549 IkReal x830=(py*sj0);
05550 IkReal x831=((1.0)*cj1);
05551 evalcond[0]=((-0.04230543)+((sj1*x829))+((cj1*pz))+(((-0.0137)*x827))+(((0.278775)*x828))+((sj1*x830)));
05552 evalcond[1]=((((0.0137)*x828))+(((-1.0)*x830*x831))+((pz*sj1))+(((0.278775)*x827))+(((-1.0)*x829*x831)));
05553 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH )
05554 {
05555 continue;
05556 }
05557 }
05558
05559 {
05560 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05561 vinfos[0].jointtype = 1;
05562 vinfos[0].foffset = j0;
05563 vinfos[0].indices[0] = _ij0[0];
05564 vinfos[0].indices[1] = _ij0[1];
05565 vinfos[0].maxsolutions = _nj0;
05566 vinfos[1].jointtype = 1;
05567 vinfos[1].foffset = j1;
05568 vinfos[1].indices[0] = _ij1[0];
05569 vinfos[1].indices[1] = _ij1[1];
05570 vinfos[1].maxsolutions = _nj1;
05571 vinfos[2].jointtype = 1;
05572 vinfos[2].foffset = j2;
05573 vinfos[2].indices[0] = _ij2[0];
05574 vinfos[2].indices[1] = _ij2[1];
05575 vinfos[2].maxsolutions = _nj2;
05576 vinfos[3].jointtype = 1;
05577 vinfos[3].foffset = j3;
05578 vinfos[3].indices[0] = _ij3[0];
05579 vinfos[3].indices[1] = _ij3[1];
05580 vinfos[3].maxsolutions = _nj3;
05581 vinfos[4].jointtype = 1;
05582 vinfos[4].foffset = j4;
05583 vinfos[4].indices[0] = _ij4[0];
05584 vinfos[4].indices[1] = _ij4[1];
05585 vinfos[4].maxsolutions = _nj4;
05586 std::vector<int> vfree(0);
05587 solutions.AddSolution(vinfos,vfree);
05588 }
05589 }
05590 }
05591
05592 }
05593 } while(0);
05594 if( bgotonextstatement )
05595 {
05596 bool bgotonextstatement = true;
05597 do
05598 {
05599 if( 1 )
05600 {
05601 bgotonextstatement=false;
05602 continue;
05603
05604 }
05605 } while(0);
05606 if( bgotonextstatement )
05607 {
05608 }
05609 }
05610 }
05611 }
05612
05613 } else
05614 {
05615 {
05616 IkReal j3array[1], cj3array[1], sj3array[1];
05617 bool j3valid[1]={false};
05618 _nj3 = 1;
05619 IkReal x832=(py*sj0);
05620 IkReal x833=((4384000.0)*sj1);
05621 IkReal x834=(cj0*px);
05622 IkReal x835=((89208000.0)*sj1);
05623 IkReal x836=(cj2*pz);
05624 IkReal x837=(cj1*pz);
05625 IkReal x838=((89208000.0)*cj1*cj2);
05626 IkReal x839=((4384000.0)*cj1*cj2);
05627 CheckValue<IkReal> x840=IKPowWithIntegerCheck(IKsign(cj2),-1);
05628 if(!x840.valid){
05629 continue;
05630 }
05631 CheckValue<IkReal> x841 = IKatan2WithCheck(IkReal(((1167483.00512)+(((-1.0)*x832*x833))+(((-1.0)*x835*x836))+((x832*x838))+(((982016.0)*cj2))+(((-1.0)*x833*x834))+((x834*x838))+(((-242216.0)*sj2))+(((-4384000.0)*x837)))),((-23756574.79944)+(((-19982592.0)*cj2))+((x832*x839))+((x832*x835))+(((89208000.0)*x837))+(((-1.0)*x833*x836))+(((4928742.0)*sj2))+((x834*x839))+((x834*x835))),IKFAST_ATAN2_MAGTHRESH);
05632 if(!x841.valid){
05633 continue;
05634 }
05635 j3array[0]=((-1.5707963267949)+(((1.5707963267949)*(x840.value)))+(x841.value));
05636 sj3array[0]=IKsin(j3array[0]);
05637 cj3array[0]=IKcos(j3array[0]);
05638 if( j3array[0] > IKPI )
05639 {
05640 j3array[0]-=IK2PI;
05641 }
05642 else if( j3array[0] < -IKPI )
05643 { j3array[0]+=IK2PI;
05644 }
05645 j3valid[0] = true;
05646 for(int ij3 = 0; ij3 < 1; ++ij3)
05647 {
05648 if( !j3valid[ij3] )
05649 {
05650 continue;
05651 }
05652 _ij3[0] = ij3; _ij3[1] = -1;
05653 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05654 {
05655 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05656 {
05657 j3valid[iij3]=false; _ij3[1] = iij3; break;
05658 }
05659 }
05660 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05661 {
05662 IkReal evalcond[3];
05663 IkReal x842=IKsin(j3);
05664 IkReal x843=IKcos(j3);
05665 IkReal x844=(cj0*px);
05666 IkReal x845=(py*sj0);
05667 IkReal x846=((1.0)*cj1);
05668 IkReal x847=((0.278775)*x843);
05669 IkReal x848=((0.0137)*x842);
05670 evalcond[0]=((((0.278775)*x842))+(((-1.0)*x844*x846))+(((0.0137)*x843))+(((-1.0)*x845*x846))+((pz*sj1)));
05671 evalcond[1]=((0.00025116)+(((-1.0)*sj2*x847))+(((-0.224)*sj2))+((sj2*x848))+(((-1.0)*px*sj0))+((cj0*py))+(((-0.05525)*cj2)));
05672 evalcond[2]=((-0.26630543)+(((0.05525)*sj2))+((cj1*pz))+(((-0.224)*cj2))+((cj2*x848))+(((-1.0)*cj2*x847))+((sj1*x844))+((sj1*x845)));
05673 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH )
05674 {
05675 continue;
05676 }
05677 }
05678
05679 {
05680 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05681 vinfos[0].jointtype = 1;
05682 vinfos[0].foffset = j0;
05683 vinfos[0].indices[0] = _ij0[0];
05684 vinfos[0].indices[1] = _ij0[1];
05685 vinfos[0].maxsolutions = _nj0;
05686 vinfos[1].jointtype = 1;
05687 vinfos[1].foffset = j1;
05688 vinfos[1].indices[0] = _ij1[0];
05689 vinfos[1].indices[1] = _ij1[1];
05690 vinfos[1].maxsolutions = _nj1;
05691 vinfos[2].jointtype = 1;
05692 vinfos[2].foffset = j2;
05693 vinfos[2].indices[0] = _ij2[0];
05694 vinfos[2].indices[1] = _ij2[1];
05695 vinfos[2].maxsolutions = _nj2;
05696 vinfos[3].jointtype = 1;
05697 vinfos[3].foffset = j3;
05698 vinfos[3].indices[0] = _ij3[0];
05699 vinfos[3].indices[1] = _ij3[1];
05700 vinfos[3].maxsolutions = _nj3;
05701 vinfos[4].jointtype = 1;
05702 vinfos[4].foffset = j4;
05703 vinfos[4].indices[0] = _ij4[0];
05704 vinfos[4].indices[1] = _ij4[1];
05705 vinfos[4].maxsolutions = _nj4;
05706 std::vector<int> vfree(0);
05707 solutions.AddSolution(vinfos,vfree);
05708 }
05709 }
05710 }
05711
05712 }
05713
05714 }
05715
05716 } else
05717 {
05718 {
05719 IkReal j3array[1], cj3array[1], sj3array[1];
05720 bool j3valid[1]={false};
05721 _nj3 = 1;
05722 IkReal x849=((4384000.0)*px);
05723 IkReal x850=(cj0*py);
05724 IkReal x851=(cj1*sj2);
05725 IkReal x852=((89208000.0)*sj0);
05726 IkReal x853=(pz*sj1*sj2);
05727 CheckValue<IkReal> x854=IKPowWithIntegerCheck(IKsign(sj2),-1);
05728 if(!x854.valid){
05729 continue;
05730 }
05731 CheckValue<IkReal> x855 = IKatan2WithCheck(IkReal(((-1101.08544)+(((-89208000.0)*x853))+(((982016.0)*sj2))+(((-4384000.0)*x850))+(((89208000.0)*cj0*px*x851))+((py*x851*x852))+((sj0*x849))+(((242216.0)*cj2)))),((22405.48128)+(((-19982592.0)*sj2))+(((-4384000.0)*x853))+((cj0*x849*x851))+(((89208000.0)*x850))+(((4384000.0)*py*sj0*x851))+(((-4928742.0)*cj2))+(((-1.0)*px*x852))),IKFAST_ATAN2_MAGTHRESH);
05732 if(!x855.valid){
05733 continue;
05734 }
05735 j3array[0]=((-1.5707963267949)+(((1.5707963267949)*(x854.value)))+(x855.value));
05736 sj3array[0]=IKsin(j3array[0]);
05737 cj3array[0]=IKcos(j3array[0]);
05738 if( j3array[0] > IKPI )
05739 {
05740 j3array[0]-=IK2PI;
05741 }
05742 else if( j3array[0] < -IKPI )
05743 { j3array[0]+=IK2PI;
05744 }
05745 j3valid[0] = true;
05746 for(int ij3 = 0; ij3 < 1; ++ij3)
05747 {
05748 if( !j3valid[ij3] )
05749 {
05750 continue;
05751 }
05752 _ij3[0] = ij3; _ij3[1] = -1;
05753 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05754 {
05755 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05756 {
05757 j3valid[iij3]=false; _ij3[1] = iij3; break;
05758 }
05759 }
05760 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05761 {
05762 IkReal evalcond[3];
05763 IkReal x856=IKsin(j3);
05764 IkReal x857=IKcos(j3);
05765 IkReal x858=(cj0*px);
05766 IkReal x859=(py*sj0);
05767 IkReal x860=((1.0)*cj1);
05768 IkReal x861=((0.278775)*x857);
05769 IkReal x862=((0.0137)*x856);
05770 evalcond[0]=((((0.0137)*x857))+(((-1.0)*x858*x860))+(((-1.0)*x859*x860))+((pz*sj1))+(((0.278775)*x856)));
05771 evalcond[1]=((0.00025116)+((sj2*x862))+(((-0.224)*sj2))+(((-1.0)*sj2*x861))+(((-1.0)*px*sj0))+((cj0*py))+(((-0.05525)*cj2)));
05772 evalcond[2]=((-0.26630543)+((cj2*x862))+(((0.05525)*sj2))+(((-1.0)*cj2*x861))+((sj1*x859))+((sj1*x858))+((cj1*pz))+(((-0.224)*cj2)));
05773 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH )
05774 {
05775 continue;
05776 }
05777 }
05778
05779 {
05780 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05781 vinfos[0].jointtype = 1;
05782 vinfos[0].foffset = j0;
05783 vinfos[0].indices[0] = _ij0[0];
05784 vinfos[0].indices[1] = _ij0[1];
05785 vinfos[0].maxsolutions = _nj0;
05786 vinfos[1].jointtype = 1;
05787 vinfos[1].foffset = j1;
05788 vinfos[1].indices[0] = _ij1[0];
05789 vinfos[1].indices[1] = _ij1[1];
05790 vinfos[1].maxsolutions = _nj1;
05791 vinfos[2].jointtype = 1;
05792 vinfos[2].foffset = j2;
05793 vinfos[2].indices[0] = _ij2[0];
05794 vinfos[2].indices[1] = _ij2[1];
05795 vinfos[2].maxsolutions = _nj2;
05796 vinfos[3].jointtype = 1;
05797 vinfos[3].foffset = j3;
05798 vinfos[3].indices[0] = _ij3[0];
05799 vinfos[3].indices[1] = _ij3[1];
05800 vinfos[3].maxsolutions = _nj3;
05801 vinfos[4].jointtype = 1;
05802 vinfos[4].foffset = j4;
05803 vinfos[4].indices[0] = _ij4[0];
05804 vinfos[4].indices[1] = _ij4[1];
05805 vinfos[4].maxsolutions = _nj4;
05806 std::vector<int> vfree(0);
05807 solutions.AddSolution(vinfos,vfree);
05808 }
05809 }
05810 }
05811
05812 }
05813
05814 }
05815
05816 }
05817 } while(0);
05818 if( bgotonextstatement )
05819 {
05820 bool bgotonextstatement = true;
05821 do
05822 {
05823 IkReal x863=((1.0)*sj0);
05824 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j2))), 6.28318530717959)));
05825 evalcond[1]=(sj4+(((-1.0)*r00*x863))+((cj0*r01)));
05826 evalcond[2]=((0.00025116)+(((0.05525)*sj4))+((cj0*py))+(((-1.0)*px*x863)));
05827 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
05828 {
05829 bgotonextstatement=false;
05830 {
05831 IkReal j3eval[3];
05832 sj2=0;
05833 cj2=1.0;
05834 j2=0;
05835 IkReal x864=((1.0)*cj1);
05836 IkReal x865=(cj0*r00);
05837 IkReal x866=(r01*sj0);
05838 j3eval[0]=cj4;
05839 j3eval[1]=IKsign(cj4);
05840 j3eval[2]=((IKabs((((cj1*r02))+((sj1*x865))+((sj1*x866)))))+(IKabs(((((-1.0)*x864*x866))+(((-1.0)*x864*x865))+((r02*sj1))))));
05841 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 || IKabs(j3eval[2]) < 0.0000010000000000 )
05842 {
05843 {
05844 IkReal j3eval[2];
05845 sj2=0;
05846 cj2=1.0;
05847 j2=0;
05848 j3eval[0]=cj4;
05849 j3eval[1]=(cj4+(((-4.03284671532847)*(cj4*cj4))));
05850 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
05851 {
05852 {
05853 IkReal j3eval[1];
05854 sj2=0;
05855 cj2=1.0;
05856 j2=0;
05857 j3eval[0]=cj4;
05858 if( IKabs(j3eval[0]) < 0.0000010000000000 )
05859 {
05860 continue;
05861
05862 } else
05863 {
05864 {
05865 IkReal j3array[1], cj3array[1], sj3array[1];
05866 bool j3valid[1]={false};
05867 _nj3 = 1;
05868 CheckValue<IkReal> x873=IKPowWithIntegerCheck(cj4,-1);
05869 if(!x873.valid){
05870 continue;
05871 }
05872 IkReal x867=x873.value;
05873 IkReal x868=((2210.0)*cj4);
05874 IkReal x869=(cj1*r02);
05875 IkReal x870=((40000.0)*cj4);
05876 IkReal x871=(cj0*r00*sj1);
05877 IkReal x872=(r01*sj0*sj1);
05878 if( IKabs((x867*((x869+x871+x872)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((8.96780557797507e-5)*x867*(((((548.0)*x871))+(((548.0)*x872))+(((548.0)*x869))+(((-1.0)*x868*x871))+(((-1.0)*x868*x872))+((cj1*pz*x870))+(((-1.0)*x868*x869))+(((-19612.2172)*cj4))+((cj0*px*sj1*x870))+((py*sj0*sj1*x870)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x867*((x869+x871+x872))))+IKsqr(((8.96780557797507e-5)*x867*(((((548.0)*x871))+(((548.0)*x872))+(((548.0)*x869))+(((-1.0)*x868*x871))+(((-1.0)*x868*x872))+((cj1*pz*x870))+(((-1.0)*x868*x869))+(((-19612.2172)*cj4))+((cj0*px*sj1*x870))+((py*sj0*sj1*x870))))))-1) <= IKFAST_SINCOS_THRESH )
05879 continue;
05880 j3array[0]=IKatan2((x867*((x869+x871+x872))), ((8.96780557797507e-5)*x867*(((((548.0)*x871))+(((548.0)*x872))+(((548.0)*x869))+(((-1.0)*x868*x871))+(((-1.0)*x868*x872))+((cj1*pz*x870))+(((-1.0)*x868*x869))+(((-19612.2172)*cj4))+((cj0*px*sj1*x870))+((py*sj0*sj1*x870))))));
05881 sj3array[0]=IKsin(j3array[0]);
05882 cj3array[0]=IKcos(j3array[0]);
05883 if( j3array[0] > IKPI )
05884 {
05885 j3array[0]-=IK2PI;
05886 }
05887 else if( j3array[0] < -IKPI )
05888 { j3array[0]+=IK2PI;
05889 }
05890 j3valid[0] = true;
05891 for(int ij3 = 0; ij3 < 1; ++ij3)
05892 {
05893 if( !j3valid[ij3] )
05894 {
05895 continue;
05896 }
05897 _ij3[0] = ij3; _ij3[1] = -1;
05898 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
05899 {
05900 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
05901 {
05902 j3valid[iij3]=false; _ij3[1] = iij3; break;
05903 }
05904 }
05905 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
05906 {
05907 IkReal evalcond[4];
05908 IkReal x874=IKsin(j3);
05909 IkReal x875=IKcos(j3);
05910 IkReal x876=((1.0)*cj1);
05911 IkReal x877=(cj0*r00);
05912 IkReal x878=(r01*sj0);
05913 IkReal x879=(py*sj0);
05914 IkReal x880=(cj0*px);
05915 IkReal x881=(cj4*x874);
05916 IkReal x882=(cj4*x875);
05917 evalcond[0]=(((cj1*r02))+(((-1.0)*x881))+((sj1*x877))+((sj1*x878)));
05918 evalcond[1]=((((-1.0)*x876*x878))+(((-1.0)*x876*x877))+(((-1.0)*x882))+((r02*sj1)));
05919 evalcond[2]=((-0.49030543)+((sj1*x880))+(((-0.278775)*x875))+((cj1*pz))+((sj1*x879))+(((-0.05525)*x881))+(((0.0137)*x874)));
05920 evalcond[3]=((((0.278775)*x874))+(((-1.0)*x876*x879))+(((-1.0)*x876*x880))+((pz*sj1))+(((-0.05525)*x882))+(((0.0137)*x875)));
05921 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
05922 {
05923 continue;
05924 }
05925 }
05926
05927 {
05928 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
05929 vinfos[0].jointtype = 1;
05930 vinfos[0].foffset = j0;
05931 vinfos[0].indices[0] = _ij0[0];
05932 vinfos[0].indices[1] = _ij0[1];
05933 vinfos[0].maxsolutions = _nj0;
05934 vinfos[1].jointtype = 1;
05935 vinfos[1].foffset = j1;
05936 vinfos[1].indices[0] = _ij1[0];
05937 vinfos[1].indices[1] = _ij1[1];
05938 vinfos[1].maxsolutions = _nj1;
05939 vinfos[2].jointtype = 1;
05940 vinfos[2].foffset = j2;
05941 vinfos[2].indices[0] = _ij2[0];
05942 vinfos[2].indices[1] = _ij2[1];
05943 vinfos[2].maxsolutions = _nj2;
05944 vinfos[3].jointtype = 1;
05945 vinfos[3].foffset = j3;
05946 vinfos[3].indices[0] = _ij3[0];
05947 vinfos[3].indices[1] = _ij3[1];
05948 vinfos[3].maxsolutions = _nj3;
05949 vinfos[4].jointtype = 1;
05950 vinfos[4].foffset = j4;
05951 vinfos[4].indices[0] = _ij4[0];
05952 vinfos[4].indices[1] = _ij4[1];
05953 vinfos[4].maxsolutions = _nj4;
05954 std::vector<int> vfree(0);
05955 solutions.AddSolution(vinfos,vfree);
05956 }
05957 }
05958 }
05959
05960 }
05961
05962 }
05963
05964 } else
05965 {
05966 {
05967 IkReal j3array[1], cj3array[1], sj3array[1];
05968 bool j3valid[1]={false};
05969 _nj3 = 1;
05970 IkReal x883=(cj1*r02);
05971 IkReal x884=(r01*sj0*sj1);
05972 IkReal x885=((40000.0)*cj1*cj4);
05973 IkReal x886=(cj0*r00*sj1);
05974 CheckValue<IkReal> x887=IKPowWithIntegerCheck(cj4,-1);
05975 if(!x887.valid){
05976 continue;
05977 }
05978 CheckValue<IkReal> x888=IKPowWithIntegerCheck(((((548.0)*cj4))+(((-2210.0)*(cj4*cj4)))),-1);
05979 if(!x888.valid){
05980 continue;
05981 }
05982 if( IKabs(((x887.value)*((x884+x886+x883)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x888.value)*(((((-11151.0)*x884))+(((-11151.0)*x886))+(((-11151.0)*x883))+(((-40000.0)*cj4*pz*sj1))+((py*sj0*x885))+((cj0*px*x885)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x887.value)*((x884+x886+x883))))+IKsqr(((x888.value)*(((((-11151.0)*x884))+(((-11151.0)*x886))+(((-11151.0)*x883))+(((-40000.0)*cj4*pz*sj1))+((py*sj0*x885))+((cj0*px*x885))))))-1) <= IKFAST_SINCOS_THRESH )
05983 continue;
05984 j3array[0]=IKatan2(((x887.value)*((x884+x886+x883))), ((x888.value)*(((((-11151.0)*x884))+(((-11151.0)*x886))+(((-11151.0)*x883))+(((-40000.0)*cj4*pz*sj1))+((py*sj0*x885))+((cj0*px*x885))))));
05985 sj3array[0]=IKsin(j3array[0]);
05986 cj3array[0]=IKcos(j3array[0]);
05987 if( j3array[0] > IKPI )
05988 {
05989 j3array[0]-=IK2PI;
05990 }
05991 else if( j3array[0] < -IKPI )
05992 { j3array[0]+=IK2PI;
05993 }
05994 j3valid[0] = true;
05995 for(int ij3 = 0; ij3 < 1; ++ij3)
05996 {
05997 if( !j3valid[ij3] )
05998 {
05999 continue;
06000 }
06001 _ij3[0] = ij3; _ij3[1] = -1;
06002 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06003 {
06004 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06005 {
06006 j3valid[iij3]=false; _ij3[1] = iij3; break;
06007 }
06008 }
06009 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06010 {
06011 IkReal evalcond[4];
06012 IkReal x889=IKsin(j3);
06013 IkReal x890=IKcos(j3);
06014 IkReal x891=((1.0)*cj1);
06015 IkReal x892=(cj0*r00);
06016 IkReal x893=(r01*sj0);
06017 IkReal x894=(py*sj0);
06018 IkReal x895=(cj0*px);
06019 IkReal x896=(cj4*x889);
06020 IkReal x897=(cj4*x890);
06021 evalcond[0]=(((sj1*x893))+((sj1*x892))+((cj1*r02))+(((-1.0)*x896)));
06022 evalcond[1]=(((r02*sj1))+(((-1.0)*x897))+(((-1.0)*x891*x893))+(((-1.0)*x891*x892)));
06023 evalcond[2]=((-0.49030543)+((sj1*x895))+((sj1*x894))+(((0.0137)*x889))+((cj1*pz))+(((-0.278775)*x890))+(((-0.05525)*x896)));
06024 evalcond[3]=((((0.0137)*x890))+((pz*sj1))+(((0.278775)*x889))+(((-1.0)*x891*x894))+(((-1.0)*x891*x895))+(((-0.05525)*x897)));
06025 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
06026 {
06027 continue;
06028 }
06029 }
06030
06031 {
06032 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06033 vinfos[0].jointtype = 1;
06034 vinfos[0].foffset = j0;
06035 vinfos[0].indices[0] = _ij0[0];
06036 vinfos[0].indices[1] = _ij0[1];
06037 vinfos[0].maxsolutions = _nj0;
06038 vinfos[1].jointtype = 1;
06039 vinfos[1].foffset = j1;
06040 vinfos[1].indices[0] = _ij1[0];
06041 vinfos[1].indices[1] = _ij1[1];
06042 vinfos[1].maxsolutions = _nj1;
06043 vinfos[2].jointtype = 1;
06044 vinfos[2].foffset = j2;
06045 vinfos[2].indices[0] = _ij2[0];
06046 vinfos[2].indices[1] = _ij2[1];
06047 vinfos[2].maxsolutions = _nj2;
06048 vinfos[3].jointtype = 1;
06049 vinfos[3].foffset = j3;
06050 vinfos[3].indices[0] = _ij3[0];
06051 vinfos[3].indices[1] = _ij3[1];
06052 vinfos[3].maxsolutions = _nj3;
06053 vinfos[4].jointtype = 1;
06054 vinfos[4].foffset = j4;
06055 vinfos[4].indices[0] = _ij4[0];
06056 vinfos[4].indices[1] = _ij4[1];
06057 vinfos[4].maxsolutions = _nj4;
06058 std::vector<int> vfree(0);
06059 solutions.AddSolution(vinfos,vfree);
06060 }
06061 }
06062 }
06063
06064 }
06065
06066 }
06067
06068 } else
06069 {
06070 {
06071 IkReal j3array[1], cj3array[1], sj3array[1];
06072 bool j3valid[1]={false};
06073 _nj3 = 1;
06074 IkReal x898=((1.0)*cj1);
06075 IkReal x899=(cj0*r00);
06076 IkReal x900=(r01*sj0);
06077 CheckValue<IkReal> x901=IKPowWithIntegerCheck(IKsign(cj4),-1);
06078 if(!x901.valid){
06079 continue;
06080 }
06081 CheckValue<IkReal> x902 = IKatan2WithCheck(IkReal((((sj1*x899))+((cj1*r02))+((sj1*x900)))),((((-1.0)*x898*x899))+(((-1.0)*x898*x900))+((r02*sj1))),IKFAST_ATAN2_MAGTHRESH);
06082 if(!x902.valid){
06083 continue;
06084 }
06085 j3array[0]=((-1.5707963267949)+(((1.5707963267949)*(x901.value)))+(x902.value));
06086 sj3array[0]=IKsin(j3array[0]);
06087 cj3array[0]=IKcos(j3array[0]);
06088 if( j3array[0] > IKPI )
06089 {
06090 j3array[0]-=IK2PI;
06091 }
06092 else if( j3array[0] < -IKPI )
06093 { j3array[0]+=IK2PI;
06094 }
06095 j3valid[0] = true;
06096 for(int ij3 = 0; ij3 < 1; ++ij3)
06097 {
06098 if( !j3valid[ij3] )
06099 {
06100 continue;
06101 }
06102 _ij3[0] = ij3; _ij3[1] = -1;
06103 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06104 {
06105 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06106 {
06107 j3valid[iij3]=false; _ij3[1] = iij3; break;
06108 }
06109 }
06110 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06111 {
06112 IkReal evalcond[4];
06113 IkReal x903=IKsin(j3);
06114 IkReal x904=IKcos(j3);
06115 IkReal x905=((1.0)*cj1);
06116 IkReal x906=(cj0*r00);
06117 IkReal x907=(r01*sj0);
06118 IkReal x908=(py*sj0);
06119 IkReal x909=(cj0*px);
06120 IkReal x910=(cj4*x903);
06121 IkReal x911=(cj4*x904);
06122 evalcond[0]=(((cj1*r02))+(((-1.0)*x910))+((sj1*x907))+((sj1*x906)));
06123 evalcond[1]=(((r02*sj1))+(((-1.0)*x911))+(((-1.0)*x905*x907))+(((-1.0)*x905*x906)));
06124 evalcond[2]=((-0.49030543)+(((0.0137)*x903))+(((-0.278775)*x904))+((cj1*pz))+(((-0.05525)*x910))+((sj1*x909))+((sj1*x908)));
06125 evalcond[3]=((((0.0137)*x904))+(((0.278775)*x903))+(((-0.05525)*x911))+((pz*sj1))+(((-1.0)*x905*x908))+(((-1.0)*x905*x909)));
06126 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
06127 {
06128 continue;
06129 }
06130 }
06131
06132 {
06133 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06134 vinfos[0].jointtype = 1;
06135 vinfos[0].foffset = j0;
06136 vinfos[0].indices[0] = _ij0[0];
06137 vinfos[0].indices[1] = _ij0[1];
06138 vinfos[0].maxsolutions = _nj0;
06139 vinfos[1].jointtype = 1;
06140 vinfos[1].foffset = j1;
06141 vinfos[1].indices[0] = _ij1[0];
06142 vinfos[1].indices[1] = _ij1[1];
06143 vinfos[1].maxsolutions = _nj1;
06144 vinfos[2].jointtype = 1;
06145 vinfos[2].foffset = j2;
06146 vinfos[2].indices[0] = _ij2[0];
06147 vinfos[2].indices[1] = _ij2[1];
06148 vinfos[2].maxsolutions = _nj2;
06149 vinfos[3].jointtype = 1;
06150 vinfos[3].foffset = j3;
06151 vinfos[3].indices[0] = _ij3[0];
06152 vinfos[3].indices[1] = _ij3[1];
06153 vinfos[3].maxsolutions = _nj3;
06154 vinfos[4].jointtype = 1;
06155 vinfos[4].foffset = j4;
06156 vinfos[4].indices[0] = _ij4[0];
06157 vinfos[4].indices[1] = _ij4[1];
06158 vinfos[4].maxsolutions = _nj4;
06159 std::vector<int> vfree(0);
06160 solutions.AddSolution(vinfos,vfree);
06161 }
06162 }
06163 }
06164
06165 }
06166
06167 }
06168
06169 }
06170 } while(0);
06171 if( bgotonextstatement )
06172 {
06173 bool bgotonextstatement = true;
06174 do
06175 {
06176 IkReal x912=((1.0)*sj0);
06177 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j2)))), 6.28318530717959)));
06178 evalcond[1]=((((-1.0)*sj4))+(((-1.0)*r00*x912))+((cj0*r01)));
06179 evalcond[2]=((0.00025116)+(((-0.05525)*sj4))+(((-1.0)*px*x912))+((cj0*py)));
06180 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
06181 {
06182 bgotonextstatement=false;
06183 {
06184 IkReal j3eval[3];
06185 sj2=0;
06186 cj2=-1.0;
06187 j2=3.14159265358979;
06188 IkReal x913=((1.0)*cj1);
06189 IkReal x914=(r01*sj0);
06190 IkReal x915=((1.0)*sj1);
06191 IkReal x916=(cj0*r00);
06192 j3eval[0]=cj4;
06193 j3eval[1]=((IKabs(((((-1.0)*x913*x914))+(((-1.0)*x913*x916))+((r02*sj1)))))+(IKabs(((((-1.0)*r02*x913))+(((-1.0)*x914*x915))+(((-1.0)*x915*x916))))));
06194 j3eval[2]=IKsign(cj4);
06195 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 || IKabs(j3eval[2]) < 0.0000010000000000 )
06196 {
06197 {
06198 IkReal j3eval[2];
06199 sj2=0;
06200 cj2=-1.0;
06201 j2=3.14159265358979;
06202 j3eval[0]=cj4;
06203 j3eval[1]=(cj4+(((-4.03284671532847)*(cj4*cj4))));
06204 if( IKabs(j3eval[0]) < 0.0000010000000000 || IKabs(j3eval[1]) < 0.0000010000000000 )
06205 {
06206 {
06207 IkReal j3eval[1];
06208 sj2=0;
06209 cj2=-1.0;
06210 j2=3.14159265358979;
06211 j3eval[0]=cj4;
06212 if( IKabs(j3eval[0]) < 0.0000010000000000 )
06213 {
06214 continue;
06215
06216 } else
06217 {
06218 {
06219 IkReal j3array[1], cj3array[1], sj3array[1];
06220 bool j3valid[1]={false};
06221 _nj3 = 1;
06222 CheckValue<IkReal> x924=IKPowWithIntegerCheck(cj4,-1);
06223 if(!x924.valid){
06224 continue;
06225 }
06226 IkReal x917=x924.value;
06227 IkReal x918=(cj1*r02);
06228 IkReal x919=((2210.0)*cj4);
06229 IkReal x920=((40000.0)*cj4);
06230 IkReal x921=(cj0*r00*sj1);
06231 IkReal x922=(cj4*sj0*sj1);
06232 IkReal x923=(r01*sj0*sj1);
06233 if( IKabs((x917*(((((-1.0)*x921))+(((-1.0)*x923))+(((-1.0)*x918)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((8.96780557797507e-5)*x917*(((((-548.0)*x921))+(((-548.0)*x923))+((x919*x923))+((x919*x921))+(((-1.0)*cj1*pz*x920))+(((1692.2172)*cj4))+((x918*x919))+(((-548.0)*x918))+(((-1.0)*cj0*px*sj1*x920))+(((-1.0)*py*sj0*sj1*x920)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x917*(((((-1.0)*x921))+(((-1.0)*x923))+(((-1.0)*x918))))))+IKsqr(((8.96780557797507e-5)*x917*(((((-548.0)*x921))+(((-548.0)*x923))+((x919*x923))+((x919*x921))+(((-1.0)*cj1*pz*x920))+(((1692.2172)*cj4))+((x918*x919))+(((-548.0)*x918))+(((-1.0)*cj0*px*sj1*x920))+(((-1.0)*py*sj0*sj1*x920))))))-1) <= IKFAST_SINCOS_THRESH )
06234 continue;
06235 j3array[0]=IKatan2((x917*(((((-1.0)*x921))+(((-1.0)*x923))+(((-1.0)*x918))))), ((8.96780557797507e-5)*x917*(((((-548.0)*x921))+(((-548.0)*x923))+((x919*x923))+((x919*x921))+(((-1.0)*cj1*pz*x920))+(((1692.2172)*cj4))+((x918*x919))+(((-548.0)*x918))+(((-1.0)*cj0*px*sj1*x920))+(((-1.0)*py*sj0*sj1*x920))))));
06236 sj3array[0]=IKsin(j3array[0]);
06237 cj3array[0]=IKcos(j3array[0]);
06238 if( j3array[0] > IKPI )
06239 {
06240 j3array[0]-=IK2PI;
06241 }
06242 else if( j3array[0] < -IKPI )
06243 { j3array[0]+=IK2PI;
06244 }
06245 j3valid[0] = true;
06246 for(int ij3 = 0; ij3 < 1; ++ij3)
06247 {
06248 if( !j3valid[ij3] )
06249 {
06250 continue;
06251 }
06252 _ij3[0] = ij3; _ij3[1] = -1;
06253 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06254 {
06255 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06256 {
06257 j3valid[iij3]=false; _ij3[1] = iij3; break;
06258 }
06259 }
06260 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06261 {
06262 IkReal evalcond[4];
06263 IkReal x925=IKsin(j3);
06264 IkReal x926=IKcos(j3);
06265 IkReal x927=((1.0)*cj1);
06266 IkReal x928=(cj0*r00);
06267 IkReal x929=(r01*sj0);
06268 IkReal x930=(py*sj0);
06269 IkReal x931=(cj0*px);
06270 IkReal x932=(cj4*x925);
06271 IkReal x933=(cj4*x926);
06272 evalcond[0]=(((cj1*r02))+((sj1*x929))+((sj1*x928))+x932);
06273 evalcond[1]=((((-1.0)*x927*x928))+(((-1.0)*x927*x929))+((r02*sj1))+(((-1.0)*x933)));
06274 evalcond[2]=((-0.04230543)+((sj1*x930))+((sj1*x931))+((cj1*pz))+(((0.05525)*x932))+(((-0.0137)*x925))+(((0.278775)*x926)));
06275 evalcond[3]=((((-0.05525)*x933))+(((-1.0)*x927*x930))+(((-1.0)*x927*x931))+(((0.278775)*x925))+((pz*sj1))+(((0.0137)*x926)));
06276 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
06277 {
06278 continue;
06279 }
06280 }
06281
06282 {
06283 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06284 vinfos[0].jointtype = 1;
06285 vinfos[0].foffset = j0;
06286 vinfos[0].indices[0] = _ij0[0];
06287 vinfos[0].indices[1] = _ij0[1];
06288 vinfos[0].maxsolutions = _nj0;
06289 vinfos[1].jointtype = 1;
06290 vinfos[1].foffset = j1;
06291 vinfos[1].indices[0] = _ij1[0];
06292 vinfos[1].indices[1] = _ij1[1];
06293 vinfos[1].maxsolutions = _nj1;
06294 vinfos[2].jointtype = 1;
06295 vinfos[2].foffset = j2;
06296 vinfos[2].indices[0] = _ij2[0];
06297 vinfos[2].indices[1] = _ij2[1];
06298 vinfos[2].maxsolutions = _nj2;
06299 vinfos[3].jointtype = 1;
06300 vinfos[3].foffset = j3;
06301 vinfos[3].indices[0] = _ij3[0];
06302 vinfos[3].indices[1] = _ij3[1];
06303 vinfos[3].maxsolutions = _nj3;
06304 vinfos[4].jointtype = 1;
06305 vinfos[4].foffset = j4;
06306 vinfos[4].indices[0] = _ij4[0];
06307 vinfos[4].indices[1] = _ij4[1];
06308 vinfos[4].maxsolutions = _nj4;
06309 std::vector<int> vfree(0);
06310 solutions.AddSolution(vinfos,vfree);
06311 }
06312 }
06313 }
06314
06315 }
06316
06317 }
06318
06319 } else
06320 {
06321 {
06322 IkReal j3array[1], cj3array[1], sj3array[1];
06323 bool j3valid[1]={false};
06324 _nj3 = 1;
06325 IkReal x934=(cj1*r02);
06326 IkReal x935=(r01*sj0*sj1);
06327 IkReal x936=(cj0*r00*sj1);
06328 IkReal x937=((40000.0)*cj1*cj4);
06329 CheckValue<IkReal> x938=IKPowWithIntegerCheck(cj4,-1);
06330 if(!x938.valid){
06331 continue;
06332 }
06333 CheckValue<IkReal> x939=IKPowWithIntegerCheck(((((548.0)*cj4))+(((-2210.0)*(cj4*cj4)))),-1);
06334 if(!x939.valid){
06335 continue;
06336 }
06337 if( IKabs(((x938.value)*(((((-1.0)*x936))+(((-1.0)*x935))+(((-1.0)*x934)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x939.value)*(((((11151.0)*x936))+(((11151.0)*x935))+(((11151.0)*x934))+((cj0*px*x937))+(((-40000.0)*cj4*pz*sj1))+((py*sj0*x937)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x938.value)*(((((-1.0)*x936))+(((-1.0)*x935))+(((-1.0)*x934))))))+IKsqr(((x939.value)*(((((11151.0)*x936))+(((11151.0)*x935))+(((11151.0)*x934))+((cj0*px*x937))+(((-40000.0)*cj4*pz*sj1))+((py*sj0*x937))))))-1) <= IKFAST_SINCOS_THRESH )
06338 continue;
06339 j3array[0]=IKatan2(((x938.value)*(((((-1.0)*x936))+(((-1.0)*x935))+(((-1.0)*x934))))), ((x939.value)*(((((11151.0)*x936))+(((11151.0)*x935))+(((11151.0)*x934))+((cj0*px*x937))+(((-40000.0)*cj4*pz*sj1))+((py*sj0*x937))))));
06340 sj3array[0]=IKsin(j3array[0]);
06341 cj3array[0]=IKcos(j3array[0]);
06342 if( j3array[0] > IKPI )
06343 {
06344 j3array[0]-=IK2PI;
06345 }
06346 else if( j3array[0] < -IKPI )
06347 { j3array[0]+=IK2PI;
06348 }
06349 j3valid[0] = true;
06350 for(int ij3 = 0; ij3 < 1; ++ij3)
06351 {
06352 if( !j3valid[ij3] )
06353 {
06354 continue;
06355 }
06356 _ij3[0] = ij3; _ij3[1] = -1;
06357 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06358 {
06359 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06360 {
06361 j3valid[iij3]=false; _ij3[1] = iij3; break;
06362 }
06363 }
06364 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06365 {
06366 IkReal evalcond[4];
06367 IkReal x940=IKsin(j3);
06368 IkReal x941=IKcos(j3);
06369 IkReal x942=((1.0)*cj1);
06370 IkReal x943=(cj0*r00);
06371 IkReal x944=(r01*sj0);
06372 IkReal x945=(py*sj0);
06373 IkReal x946=(cj0*px);
06374 IkReal x947=(cj4*x940);
06375 IkReal x948=(cj4*x941);
06376 evalcond[0]=(((sj1*x944))+((sj1*x943))+((cj1*r02))+x947);
06377 evalcond[1]=((((-1.0)*x942*x944))+(((-1.0)*x942*x943))+((r02*sj1))+(((-1.0)*x948)));
06378 evalcond[2]=((-0.04230543)+((sj1*x946))+((sj1*x945))+(((-0.0137)*x940))+((cj1*pz))+(((0.278775)*x941))+(((0.05525)*x947)));
06379 evalcond[3]=((((-0.05525)*x948))+(((-1.0)*x942*x946))+(((-1.0)*x942*x945))+(((0.278775)*x940))+((pz*sj1))+(((0.0137)*x941)));
06380 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
06381 {
06382 continue;
06383 }
06384 }
06385
06386 {
06387 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06388 vinfos[0].jointtype = 1;
06389 vinfos[0].foffset = j0;
06390 vinfos[0].indices[0] = _ij0[0];
06391 vinfos[0].indices[1] = _ij0[1];
06392 vinfos[0].maxsolutions = _nj0;
06393 vinfos[1].jointtype = 1;
06394 vinfos[1].foffset = j1;
06395 vinfos[1].indices[0] = _ij1[0];
06396 vinfos[1].indices[1] = _ij1[1];
06397 vinfos[1].maxsolutions = _nj1;
06398 vinfos[2].jointtype = 1;
06399 vinfos[2].foffset = j2;
06400 vinfos[2].indices[0] = _ij2[0];
06401 vinfos[2].indices[1] = _ij2[1];
06402 vinfos[2].maxsolutions = _nj2;
06403 vinfos[3].jointtype = 1;
06404 vinfos[3].foffset = j3;
06405 vinfos[3].indices[0] = _ij3[0];
06406 vinfos[3].indices[1] = _ij3[1];
06407 vinfos[3].maxsolutions = _nj3;
06408 vinfos[4].jointtype = 1;
06409 vinfos[4].foffset = j4;
06410 vinfos[4].indices[0] = _ij4[0];
06411 vinfos[4].indices[1] = _ij4[1];
06412 vinfos[4].maxsolutions = _nj4;
06413 std::vector<int> vfree(0);
06414 solutions.AddSolution(vinfos,vfree);
06415 }
06416 }
06417 }
06418
06419 }
06420
06421 }
06422
06423 } else
06424 {
06425 {
06426 IkReal j3array[1], cj3array[1], sj3array[1];
06427 bool j3valid[1]={false};
06428 _nj3 = 1;
06429 IkReal x949=((1.0)*cj1);
06430 IkReal x950=(r01*sj0);
06431 IkReal x951=((1.0)*sj1);
06432 IkReal x952=(cj0*r00);
06433 CheckValue<IkReal> x953 = IKatan2WithCheck(IkReal(((((-1.0)*r02*x949))+(((-1.0)*x950*x951))+(((-1.0)*x951*x952)))),(((r02*sj1))+(((-1.0)*x949*x950))+(((-1.0)*x949*x952))),IKFAST_ATAN2_MAGTHRESH);
06434 if(!x953.valid){
06435 continue;
06436 }
06437 CheckValue<IkReal> x954=IKPowWithIntegerCheck(IKsign(cj4),-1);
06438 if(!x954.valid){
06439 continue;
06440 }
06441 j3array[0]=((-1.5707963267949)+(x953.value)+(((1.5707963267949)*(x954.value))));
06442 sj3array[0]=IKsin(j3array[0]);
06443 cj3array[0]=IKcos(j3array[0]);
06444 if( j3array[0] > IKPI )
06445 {
06446 j3array[0]-=IK2PI;
06447 }
06448 else if( j3array[0] < -IKPI )
06449 { j3array[0]+=IK2PI;
06450 }
06451 j3valid[0] = true;
06452 for(int ij3 = 0; ij3 < 1; ++ij3)
06453 {
06454 if( !j3valid[ij3] )
06455 {
06456 continue;
06457 }
06458 _ij3[0] = ij3; _ij3[1] = -1;
06459 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06460 {
06461 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06462 {
06463 j3valid[iij3]=false; _ij3[1] = iij3; break;
06464 }
06465 }
06466 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06467 {
06468 IkReal evalcond[4];
06469 IkReal x955=IKsin(j3);
06470 IkReal x956=IKcos(j3);
06471 IkReal x957=((1.0)*cj1);
06472 IkReal x958=(cj0*r00);
06473 IkReal x959=(r01*sj0);
06474 IkReal x960=(py*sj0);
06475 IkReal x961=(cj0*px);
06476 IkReal x962=(cj4*x955);
06477 IkReal x963=(cj4*x956);
06478 evalcond[0]=(((cj1*r02))+((sj1*x958))+((sj1*x959))+x962);
06479 evalcond[1]=((((-1.0)*x963))+((r02*sj1))+(((-1.0)*x957*x958))+(((-1.0)*x957*x959)));
06480 evalcond[2]=((-0.04230543)+(((-0.0137)*x955))+((cj1*pz))+((sj1*x961))+((sj1*x960))+(((0.05525)*x962))+(((0.278775)*x956)));
06481 evalcond[3]=((((-0.05525)*x963))+(((0.0137)*x956))+(((-1.0)*x957*x961))+(((-1.0)*x957*x960))+((pz*sj1))+(((0.278775)*x955)));
06482 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
06483 {
06484 continue;
06485 }
06486 }
06487
06488 {
06489 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06490 vinfos[0].jointtype = 1;
06491 vinfos[0].foffset = j0;
06492 vinfos[0].indices[0] = _ij0[0];
06493 vinfos[0].indices[1] = _ij0[1];
06494 vinfos[0].maxsolutions = _nj0;
06495 vinfos[1].jointtype = 1;
06496 vinfos[1].foffset = j1;
06497 vinfos[1].indices[0] = _ij1[0];
06498 vinfos[1].indices[1] = _ij1[1];
06499 vinfos[1].maxsolutions = _nj1;
06500 vinfos[2].jointtype = 1;
06501 vinfos[2].foffset = j2;
06502 vinfos[2].indices[0] = _ij2[0];
06503 vinfos[2].indices[1] = _ij2[1];
06504 vinfos[2].maxsolutions = _nj2;
06505 vinfos[3].jointtype = 1;
06506 vinfos[3].foffset = j3;
06507 vinfos[3].indices[0] = _ij3[0];
06508 vinfos[3].indices[1] = _ij3[1];
06509 vinfos[3].maxsolutions = _nj3;
06510 vinfos[4].jointtype = 1;
06511 vinfos[4].foffset = j4;
06512 vinfos[4].indices[0] = _ij4[0];
06513 vinfos[4].indices[1] = _ij4[1];
06514 vinfos[4].maxsolutions = _nj4;
06515 std::vector<int> vfree(0);
06516 solutions.AddSolution(vinfos,vfree);
06517 }
06518 }
06519 }
06520
06521 }
06522
06523 }
06524
06525 }
06526 } while(0);
06527 if( bgotonextstatement )
06528 {
06529 bool bgotonextstatement = true;
06530 do
06531 {
06532 if( 1 )
06533 {
06534 bgotonextstatement=false;
06535 continue;
06536
06537 }
06538 } while(0);
06539 if( bgotonextstatement )
06540 {
06541 }
06542 }
06543 }
06544 }
06545 }
06546 }
06547 }
06548 }
06549
06550 } else
06551 {
06552 {
06553 IkReal j3array[1], cj3array[1], sj3array[1];
06554 bool j3valid[1]={false};
06555 _nj3 = 1;
06556 CheckValue<IkReal> x968=IKPowWithIntegerCheck(cj4,-1);
06557 if(!x968.valid){
06558 continue;
06559 }
06560 IkReal x964=x968.value;
06561 IkReal x965=((1.0)*cj1);
06562 IkReal x966=(cj0*r00);
06563 IkReal x967=(r01*sj0);
06564 CheckValue<IkReal> x969=IKPowWithIntegerCheck(cj2,-1);
06565 if(!x969.valid){
06566 continue;
06567 }
06568 if( IKabs((x964*(x969.value)*((((cj1*r02))+(((-1.0)*sj2*sj4))+((sj1*x967))+((sj1*x966)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x964*(((((-1.0)*x965*x966))+(((-1.0)*x965*x967))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x964*(x969.value)*((((cj1*r02))+(((-1.0)*sj2*sj4))+((sj1*x967))+((sj1*x966))))))+IKsqr((x964*(((((-1.0)*x965*x966))+(((-1.0)*x965*x967))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
06569 continue;
06570 j3array[0]=IKatan2((x964*(x969.value)*((((cj1*r02))+(((-1.0)*sj2*sj4))+((sj1*x967))+((sj1*x966))))), (x964*(((((-1.0)*x965*x966))+(((-1.0)*x965*x967))+((r02*sj1))))));
06571 sj3array[0]=IKsin(j3array[0]);
06572 cj3array[0]=IKcos(j3array[0]);
06573 if( j3array[0] > IKPI )
06574 {
06575 j3array[0]-=IK2PI;
06576 }
06577 else if( j3array[0] < -IKPI )
06578 { j3array[0]+=IK2PI;
06579 }
06580 j3valid[0] = true;
06581 for(int ij3 = 0; ij3 < 1; ++ij3)
06582 {
06583 if( !j3valid[ij3] )
06584 {
06585 continue;
06586 }
06587 _ij3[0] = ij3; _ij3[1] = -1;
06588 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06589 {
06590 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06591 {
06592 j3valid[iij3]=false; _ij3[1] = iij3; break;
06593 }
06594 }
06595 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06596 {
06597 IkReal evalcond[6];
06598 IkReal x970=IKsin(j3);
06599 IkReal x971=IKcos(j3);
06600 IkReal x972=(sj2*sj4);
06601 IkReal x973=(cj0*px);
06602 IkReal x974=(sj0*sj1);
06603 IkReal x975=((1.0)*sj0);
06604 IkReal x976=((1.0)*cj1);
06605 IkReal x977=(cj0*r00);
06606 IkReal x978=(cj2*sj4);
06607 IkReal x979=((0.05525)*cj4);
06608 IkReal x980=((1.0)*cj4);
06609 IkReal x981=(cj2*x970);
06610 IkReal x982=((0.278775)*x971);
06611 IkReal x983=(sj2*x970);
06612 evalcond[0]=((((-1.0)*r00*x975))+(((-1.0)*x980*x983))+x978+((cj0*r01)));
06613 evalcond[1]=((((-1.0)*cj1*r01*x975))+(((-1.0)*x971*x980))+((r02*sj1))+(((-1.0)*x976*x977)));
06614 evalcond[2]=((((-1.0)*x972))+((cj1*r02))+((r01*x974))+((sj1*x977))+(((-1.0)*x980*x981)));
06615 evalcond[3]=((((-1.0)*x971*x979))+(((0.0137)*x971))+((pz*sj1))+(((0.278775)*x970))+(((-1.0)*cj1*py*x975))+(((-1.0)*x973*x976)));
06616 evalcond[4]=((0.00025116)+(((-1.0)*px*x975))+(((-0.224)*sj2))+(((0.0137)*x983))+(((-1.0)*sj2*x982))+((cj0*py))+(((-1.0)*x979*x983))+(((0.05525)*x978)));
06617 evalcond[5]=((-0.26630543)+(((-0.05525)*x972))+(((-1.0)*cj2*x982))+((cj1*pz))+((sj1*x973))+(((0.0137)*x981))+(((-0.224)*cj2))+((py*x974))+(((-1.0)*x979*x981)));
06618 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
06619 {
06620 continue;
06621 }
06622 }
06623
06624 {
06625 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06626 vinfos[0].jointtype = 1;
06627 vinfos[0].foffset = j0;
06628 vinfos[0].indices[0] = _ij0[0];
06629 vinfos[0].indices[1] = _ij0[1];
06630 vinfos[0].maxsolutions = _nj0;
06631 vinfos[1].jointtype = 1;
06632 vinfos[1].foffset = j1;
06633 vinfos[1].indices[0] = _ij1[0];
06634 vinfos[1].indices[1] = _ij1[1];
06635 vinfos[1].maxsolutions = _nj1;
06636 vinfos[2].jointtype = 1;
06637 vinfos[2].foffset = j2;
06638 vinfos[2].indices[0] = _ij2[0];
06639 vinfos[2].indices[1] = _ij2[1];
06640 vinfos[2].maxsolutions = _nj2;
06641 vinfos[3].jointtype = 1;
06642 vinfos[3].foffset = j3;
06643 vinfos[3].indices[0] = _ij3[0];
06644 vinfos[3].indices[1] = _ij3[1];
06645 vinfos[3].maxsolutions = _nj3;
06646 vinfos[4].jointtype = 1;
06647 vinfos[4].foffset = j4;
06648 vinfos[4].indices[0] = _ij4[0];
06649 vinfos[4].indices[1] = _ij4[1];
06650 vinfos[4].maxsolutions = _nj4;
06651 std::vector<int> vfree(0);
06652 solutions.AddSolution(vinfos,vfree);
06653 }
06654 }
06655 }
06656
06657 }
06658
06659 }
06660
06661 } else
06662 {
06663 {
06664 IkReal j3array[1], cj3array[1], sj3array[1];
06665 bool j3valid[1]={false};
06666 _nj3 = 1;
06667 CheckValue<IkReal> x986=IKPowWithIntegerCheck(cj4,-1);
06668 if(!x986.valid){
06669 continue;
06670 }
06671 IkReal x984=x986.value;
06672 IkReal x985=((1.0)*cj1);
06673 CheckValue<IkReal> x987=IKPowWithIntegerCheck(sj2,-1);
06674 if(!x987.valid){
06675 continue;
06676 }
06677 if( IKabs((x984*(x987.value)*((((cj2*sj4))+(((-1.0)*r00*sj0))+((cj0*r01)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x984*(((((-1.0)*r01*sj0*x985))+((r02*sj1))+(((-1.0)*cj0*r00*x985)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x984*(x987.value)*((((cj2*sj4))+(((-1.0)*r00*sj0))+((cj0*r01))))))+IKsqr((x984*(((((-1.0)*r01*sj0*x985))+((r02*sj1))+(((-1.0)*cj0*r00*x985))))))-1) <= IKFAST_SINCOS_THRESH )
06678 continue;
06679 j3array[0]=IKatan2((x984*(x987.value)*((((cj2*sj4))+(((-1.0)*r00*sj0))+((cj0*r01))))), (x984*(((((-1.0)*r01*sj0*x985))+((r02*sj1))+(((-1.0)*cj0*r00*x985))))));
06680 sj3array[0]=IKsin(j3array[0]);
06681 cj3array[0]=IKcos(j3array[0]);
06682 if( j3array[0] > IKPI )
06683 {
06684 j3array[0]-=IK2PI;
06685 }
06686 else if( j3array[0] < -IKPI )
06687 { j3array[0]+=IK2PI;
06688 }
06689 j3valid[0] = true;
06690 for(int ij3 = 0; ij3 < 1; ++ij3)
06691 {
06692 if( !j3valid[ij3] )
06693 {
06694 continue;
06695 }
06696 _ij3[0] = ij3; _ij3[1] = -1;
06697 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06698 {
06699 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06700 {
06701 j3valid[iij3]=false; _ij3[1] = iij3; break;
06702 }
06703 }
06704 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06705 {
06706 IkReal evalcond[6];
06707 IkReal x988=IKsin(j3);
06708 IkReal x989=IKcos(j3);
06709 IkReal x990=(sj2*sj4);
06710 IkReal x991=(cj0*px);
06711 IkReal x992=(sj0*sj1);
06712 IkReal x993=((1.0)*sj0);
06713 IkReal x994=((1.0)*cj1);
06714 IkReal x995=(cj0*r00);
06715 IkReal x996=(cj2*sj4);
06716 IkReal x997=((0.05525)*cj4);
06717 IkReal x998=((1.0)*cj4);
06718 IkReal x999=(cj2*x988);
06719 IkReal x1000=((0.278775)*x989);
06720 IkReal x1001=(sj2*x988);
06721 evalcond[0]=((((-1.0)*x1001*x998))+(((-1.0)*r00*x993))+x996+((cj0*r01)));
06722 evalcond[1]=((((-1.0)*x994*x995))+((r02*sj1))+(((-1.0)*cj1*r01*x993))+(((-1.0)*x989*x998)));
06723 evalcond[2]=((((-1.0)*x990))+((r01*x992))+((cj1*r02))+(((-1.0)*x998*x999))+((sj1*x995)));
06724 evalcond[3]=((((-1.0)*x991*x994))+(((-1.0)*cj1*py*x993))+(((0.0137)*x989))+((pz*sj1))+(((-1.0)*x989*x997))+(((0.278775)*x988)));
06725 evalcond[4]=((0.00025116)+(((0.05525)*x996))+(((0.0137)*x1001))+(((-1.0)*px*x993))+(((-0.224)*sj2))+(((-1.0)*x1001*x997))+(((-1.0)*sj2*x1000))+((cj0*py)));
06726 evalcond[5]=((-0.26630543)+((py*x992))+(((0.0137)*x999))+(((-1.0)*x997*x999))+((cj1*pz))+(((-0.224)*cj2))+(((-1.0)*cj2*x1000))+(((-0.05525)*x990))+((sj1*x991)));
06727 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
06728 {
06729 continue;
06730 }
06731 }
06732
06733 {
06734 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06735 vinfos[0].jointtype = 1;
06736 vinfos[0].foffset = j0;
06737 vinfos[0].indices[0] = _ij0[0];
06738 vinfos[0].indices[1] = _ij0[1];
06739 vinfos[0].maxsolutions = _nj0;
06740 vinfos[1].jointtype = 1;
06741 vinfos[1].foffset = j1;
06742 vinfos[1].indices[0] = _ij1[0];
06743 vinfos[1].indices[1] = _ij1[1];
06744 vinfos[1].maxsolutions = _nj1;
06745 vinfos[2].jointtype = 1;
06746 vinfos[2].foffset = j2;
06747 vinfos[2].indices[0] = _ij2[0];
06748 vinfos[2].indices[1] = _ij2[1];
06749 vinfos[2].maxsolutions = _nj2;
06750 vinfos[3].jointtype = 1;
06751 vinfos[3].foffset = j3;
06752 vinfos[3].indices[0] = _ij3[0];
06753 vinfos[3].indices[1] = _ij3[1];
06754 vinfos[3].maxsolutions = _nj3;
06755 vinfos[4].jointtype = 1;
06756 vinfos[4].foffset = j4;
06757 vinfos[4].indices[0] = _ij4[0];
06758 vinfos[4].indices[1] = _ij4[1];
06759 vinfos[4].maxsolutions = _nj4;
06760 std::vector<int> vfree(0);
06761 solutions.AddSolution(vinfos,vfree);
06762 }
06763 }
06764 }
06765
06766 }
06767
06768 }
06769
06770 } else
06771 {
06772 {
06773 IkReal j3array[1], cj3array[1], sj3array[1];
06774 bool j3valid[1]={false};
06775 _nj3 = 1;
06776 CheckValue<IkReal> x1008=IKPowWithIntegerCheck(cj4,-1);
06777 if(!x1008.valid){
06778 continue;
06779 }
06780 IkReal x1002=x1008.value;
06781 IkReal x1003=(r02*sj1);
06782 IkReal x1004=((2210.0)*cj4);
06783 IkReal x1005=(cj1*r01*sj0);
06784 IkReal x1006=((40000.0)*cj1*cj4);
06785 IkReal x1007=(cj0*cj1*r00);
06786 if( IKabs(((8.96780557797507e-5)*x1002*((((py*sj0*x1006))+((cj0*px*x1006))+(((-1.0)*x1004*x1005))+(((-1.0)*x1004*x1007))+(((548.0)*x1005))+(((548.0)*x1007))+(((-548.0)*x1003))+(((-40000.0)*cj4*pz*sj1))+((x1003*x1004)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x1002*(((((-1.0)*x1007))+(((-1.0)*x1005))+x1003)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((8.96780557797507e-5)*x1002*((((py*sj0*x1006))+((cj0*px*x1006))+(((-1.0)*x1004*x1005))+(((-1.0)*x1004*x1007))+(((548.0)*x1005))+(((548.0)*x1007))+(((-548.0)*x1003))+(((-40000.0)*cj4*pz*sj1))+((x1003*x1004))))))+IKsqr((x1002*(((((-1.0)*x1007))+(((-1.0)*x1005))+x1003))))-1) <= IKFAST_SINCOS_THRESH )
06787 continue;
06788 j3array[0]=IKatan2(((8.96780557797507e-5)*x1002*((((py*sj0*x1006))+((cj0*px*x1006))+(((-1.0)*x1004*x1005))+(((-1.0)*x1004*x1007))+(((548.0)*x1005))+(((548.0)*x1007))+(((-548.0)*x1003))+(((-40000.0)*cj4*pz*sj1))+((x1003*x1004))))), (x1002*(((((-1.0)*x1007))+(((-1.0)*x1005))+x1003))));
06789 sj3array[0]=IKsin(j3array[0]);
06790 cj3array[0]=IKcos(j3array[0]);
06791 if( j3array[0] > IKPI )
06792 {
06793 j3array[0]-=IK2PI;
06794 }
06795 else if( j3array[0] < -IKPI )
06796 { j3array[0]+=IK2PI;
06797 }
06798 j3valid[0] = true;
06799 for(int ij3 = 0; ij3 < 1; ++ij3)
06800 {
06801 if( !j3valid[ij3] )
06802 {
06803 continue;
06804 }
06805 _ij3[0] = ij3; _ij3[1] = -1;
06806 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06807 {
06808 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06809 {
06810 j3valid[iij3]=false; _ij3[1] = iij3; break;
06811 }
06812 }
06813 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06814 {
06815 IkReal evalcond[6];
06816 IkReal x1009=IKsin(j3);
06817 IkReal x1010=IKcos(j3);
06818 IkReal x1011=(sj2*sj4);
06819 IkReal x1012=(cj0*px);
06820 IkReal x1013=(sj0*sj1);
06821 IkReal x1014=((1.0)*sj0);
06822 IkReal x1015=((1.0)*cj1);
06823 IkReal x1016=(cj0*r00);
06824 IkReal x1017=(cj2*sj4);
06825 IkReal x1018=((0.05525)*cj4);
06826 IkReal x1019=((1.0)*cj4);
06827 IkReal x1020=(cj2*x1009);
06828 IkReal x1021=((0.278775)*x1010);
06829 IkReal x1022=(sj2*x1009);
06830 evalcond[0]=(x1017+(((-1.0)*x1019*x1022))+(((-1.0)*r00*x1014))+((cj0*r01)));
06831 evalcond[1]=((((-1.0)*x1010*x1019))+(((-1.0)*x1015*x1016))+((r02*sj1))+(((-1.0)*cj1*r01*x1014)));
06832 evalcond[2]=(((sj1*x1016))+((cj1*r02))+(((-1.0)*x1019*x1020))+((r01*x1013))+(((-1.0)*x1011)));
06833 evalcond[3]=((((-1.0)*x1012*x1015))+(((0.278775)*x1009))+(((-1.0)*x1010*x1018))+(((-1.0)*cj1*py*x1014))+(((0.0137)*x1010))+((pz*sj1)));
06834 evalcond[4]=((0.00025116)+(((-1.0)*px*x1014))+(((-0.224)*sj2))+(((-1.0)*x1018*x1022))+(((0.0137)*x1022))+(((0.05525)*x1017))+((cj0*py))+(((-1.0)*sj2*x1021)));
06835 evalcond[5]=((-0.26630543)+((sj1*x1012))+(((-1.0)*x1018*x1020))+((cj1*pz))+(((-0.05525)*x1011))+(((0.0137)*x1020))+(((-0.224)*cj2))+(((-1.0)*cj2*x1021))+((py*x1013)));
06836 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
06837 {
06838 continue;
06839 }
06840 }
06841
06842 {
06843 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
06844 vinfos[0].jointtype = 1;
06845 vinfos[0].foffset = j0;
06846 vinfos[0].indices[0] = _ij0[0];
06847 vinfos[0].indices[1] = _ij0[1];
06848 vinfos[0].maxsolutions = _nj0;
06849 vinfos[1].jointtype = 1;
06850 vinfos[1].foffset = j1;
06851 vinfos[1].indices[0] = _ij1[0];
06852 vinfos[1].indices[1] = _ij1[1];
06853 vinfos[1].maxsolutions = _nj1;
06854 vinfos[2].jointtype = 1;
06855 vinfos[2].foffset = j2;
06856 vinfos[2].indices[0] = _ij2[0];
06857 vinfos[2].indices[1] = _ij2[1];
06858 vinfos[2].maxsolutions = _nj2;
06859 vinfos[3].jointtype = 1;
06860 vinfos[3].foffset = j3;
06861 vinfos[3].indices[0] = _ij3[0];
06862 vinfos[3].indices[1] = _ij3[1];
06863 vinfos[3].maxsolutions = _nj3;
06864 vinfos[4].jointtype = 1;
06865 vinfos[4].foffset = j4;
06866 vinfos[4].indices[0] = _ij4[0];
06867 vinfos[4].indices[1] = _ij4[1];
06868 vinfos[4].maxsolutions = _nj4;
06869 std::vector<int> vfree(0);
06870 solutions.AddSolution(vinfos,vfree);
06871 }
06872 }
06873 }
06874
06875 }
06876
06877 }
06878 }
06879 }
06880
06881 }
06882
06883 }
06884
06885 } else
06886 {
06887 {
06888 IkReal j3array[1], cj3array[1], sj3array[1];
06889 bool j3valid[1]={false};
06890 _nj3 = 1;
06891 IkReal x1023=cj2*cj2;
06892 IkReal x1024=(r01*sj0);
06893 IkReal x1025=(cj2*sj1);
06894 IkReal x1026=((0.05525)*cj1);
06895 IkReal x1027=(py*sj0);
06896 IkReal x1028=(cj0*r00);
06897 IkReal x1029=(cj0*px);
06898 IkReal x1030=((1.0)*cj1);
06899 IkReal x1031=(cj1*cj2*r02);
06900 IkReal x1032=(cj1*cj2*pz);
06901 IkReal x1033=((((-1.0)*x1027*x1030))+(((-1.0)*x1029*x1030))+(((-0.05525)*r02*sj1))+((x1026*x1028))+((pz*sj1))+((x1024*x1026)));
06902 IkReal x1034=(x1023*x1033);
06903 CheckValue<IkReal> x1035=IKPowWithIntegerCheck(IKsign(x1023),-1);
06904 if(!x1035.valid){
06905 continue;
06906 }
06907 CheckValue<IkReal> x1036 = IKatan2WithCheck(IkReal(((((-30.277)*x1031))+(((548.0)*x1032))+(((-145.93537564)*cj2))+(((548.0)*x1025*x1027))+(((548.0)*x1025*x1029))+(((-122.752)*x1023))+(((-30.277)*x1025*x1028))+(((-30.277)*x1024*x1025))+(((11151.0)*x1034)))),((((2969.57184993)*cj2))+(((616.09275)*x1031))+(((548.0)*x1034))+(((616.09275)*x1024*x1025))+(((-11151.0)*x1032))+(((-11151.0)*x1025*x1029))+(((-11151.0)*x1025*x1027))+(((2497.824)*x1023))+(((616.09275)*x1025*x1028))),IKFAST_ATAN2_MAGTHRESH);
06908 if(!x1036.valid){
06909 continue;
06910 }
06911 j3array[0]=((-1.5707963267949)+(((-1.5707963267949)*(x1035.value)))+(x1036.value));
06912 sj3array[0]=IKsin(j3array[0]);
06913 cj3array[0]=IKcos(j3array[0]);
06914 if( j3array[0] > IKPI )
06915 {
06916 j3array[0]-=IK2PI;
06917 }
06918 else if( j3array[0] < -IKPI )
06919 { j3array[0]+=IK2PI;
06920 }
06921 j3valid[0] = true;
06922 for(int ij3 = 0; ij3 < 1; ++ij3)
06923 {
06924 if( !j3valid[ij3] )
06925 {
06926 continue;
06927 }
06928 _ij3[0] = ij3; _ij3[1] = -1;
06929 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
06930 {
06931 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
06932 {
06933 j3valid[iij3]=false; _ij3[1] = iij3; break;
06934 }
06935 }
06936 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
06937 {
06938 IkReal evalcond[3];
06939 IkReal x1037=sj2*sj2;
06940 IkReal x1038=IKsin(j3);
06941 IkReal x1039=IKcos(j3);
06942 IkReal x1040=cj2*cj2;
06943 IkReal x1041=((0.05525)*r00);
06944 IkReal x1042=(cj0*sj2);
06945 IkReal x1043=(py*sj0);
06946 IkReal x1044=(cj2*sj1);
06947 IkReal x1045=((0.05525)*r02);
06948 IkReal x1046=(cj1*cj2);
06949 IkReal x1047=(sj0*sj2);
06950 IkReal x1048=(cj0*cj1);
06951 IkReal x1049=((1.0)*px);
06952 IkReal x1050=(cj0*x1044);
06953 IkReal x1051=((0.0137)*x1038);
06954 IkReal x1052=((0.278775)*x1039);
06955 IkReal x1053=((0.05525)*r01*sj0);
06956 evalcond[0]=(((x1037*x1051))+(((-0.05525)*r01*x1042))+((x1041*x1047))+((py*x1042))+(((-1.0)*x1037*x1052))+(((-0.224)*x1037))+(((-1.0)*x1047*x1049))+(((0.00025116)*sj2)));
06957 evalcond[1]=((((0.0137)*x1039))+((x1041*x1048))+(((-1.0)*cj1*x1043))+((cj1*x1053))+(((-1.0)*sj1*x1045))+(((-1.0)*x1048*x1049))+((pz*sj1))+(((0.278775)*x1038)));
06958 evalcond[2]=(((x1043*x1044))+((px*x1050))+(((-1.0)*x1045*x1046))+(((-1.0)*x1044*x1053))+((x1040*x1051))+(((-0.26630543)*cj2))+((pz*x1046))+(((-1.0)*x1041*x1050))+(((-1.0)*x1040*x1052))+(((-0.224)*x1040)));
06959 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH )
06960 {
06961 continue;
06962 }
06963 }
06964
06965 {
06966 IkReal j4eval[1];
06967 j4eval[0]=sj3;
06968 if( IKabs(j4eval[0]) < 0.0000010000000000 )
06969 {
06970 {
06971 IkReal j4eval[2];
06972 j4eval[0]=cj2;
06973 j4eval[1]=cj3;
06974 if( IKabs(j4eval[0]) < 0.0000010000000000 || IKabs(j4eval[1]) < 0.0000010000000000 )
06975 {
06976 {
06977 IkReal j4eval[2];
06978 j4eval[0]=cj3;
06979 j4eval[1]=sj2;
06980 if( IKabs(j4eval[0]) < 0.0000010000000000 || IKabs(j4eval[1]) < 0.0000010000000000 )
06981 {
06982 {
06983 IkReal evalcond[3];
06984 bool bgotonextstatement = true;
06985 do
06986 {
06987 IkReal x1054=((1.0)*cj1);
06988 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
06989 evalcond[1]=((((-1.0)*cj0*r00*x1054))+((r02*sj1))+(((-1.0)*r01*sj0*x1054)));
06990 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x1054))+(((-1.0)*cj0*px*x1054))+((pz*sj1)));
06991 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
06992 {
06993 bgotonextstatement=false;
06994 {
06995 IkReal j4array[1], cj4array[1], sj4array[1];
06996 bool j4valid[1]={false};
06997 _nj4 = 1;
06998 IkReal x1055=(r01*sj2);
06999 IkReal x1056=(sj0*sj1);
07000 IkReal x1057=(cj2*r01);
07001 IkReal x1058=(r00*sj0);
07002 IkReal x1059=(cj1*r02);
07003 IkReal x1060=(cj0*r00*sj1);
07004 if( IKabs((((x1055*x1056))+((sj2*x1060))+((sj2*x1059))+((cj2*x1058))+(((-1.0)*cj0*x1057)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj0*x1055))+((x1056*x1057))+((cj2*x1060))+(((-1.0)*sj2*x1058))+((cj2*x1059)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((x1055*x1056))+((sj2*x1060))+((sj2*x1059))+((cj2*x1058))+(((-1.0)*cj0*x1057))))+IKsqr((((cj0*x1055))+((x1056*x1057))+((cj2*x1060))+(((-1.0)*sj2*x1058))+((cj2*x1059))))-1) <= IKFAST_SINCOS_THRESH )
07005 continue;
07006 j4array[0]=IKatan2((((x1055*x1056))+((sj2*x1060))+((sj2*x1059))+((cj2*x1058))+(((-1.0)*cj0*x1057))), (((cj0*x1055))+((x1056*x1057))+((cj2*x1060))+(((-1.0)*sj2*x1058))+((cj2*x1059))));
07007 sj4array[0]=IKsin(j4array[0]);
07008 cj4array[0]=IKcos(j4array[0]);
07009 if( j4array[0] > IKPI )
07010 {
07011 j4array[0]-=IK2PI;
07012 }
07013 else if( j4array[0] < -IKPI )
07014 { j4array[0]+=IK2PI;
07015 }
07016 j4valid[0] = true;
07017 for(int ij4 = 0; ij4 < 1; ++ij4)
07018 {
07019 if( !j4valid[ij4] )
07020 {
07021 continue;
07022 }
07023 _ij4[0] = ij4; _ij4[1] = -1;
07024 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07025 {
07026 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07027 {
07028 j4valid[iij4]=false; _ij4[1] = iij4; break;
07029 }
07030 }
07031 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07032 {
07033 IkReal evalcond[4];
07034 IkReal x1061=IKcos(j4);
07035 IkReal x1062=IKsin(j4);
07036 IkReal x1063=((1.0)*sj2);
07037 IkReal x1064=(sj0*sj1);
07038 IkReal x1065=(cj0*sj1);
07039 IkReal x1066=((1.0)*sj0);
07040 IkReal x1067=((0.05525)*x1061);
07041 IkReal x1068=(cj2*x1062);
07042 evalcond[0]=(x1068+(((-1.0)*r00*x1066))+(((-1.0)*x1061*x1063))+((cj0*r01)));
07043 evalcond[1]=((((-1.0)*cj2*x1061))+((cj1*r02))+(((-1.0)*x1062*x1063))+((r01*x1064))+((r00*x1065)));
07044 evalcond[2]=((0.00025116)+(((-1.0)*px*x1066))+(((-1.0)*sj2*x1067))+(((0.05525)*x1068))+(((-0.2103)*sj2))+((cj0*py)));
07045 evalcond[3]=((-0.26630543)+(((-0.2103)*cj2))+((py*x1064))+((px*x1065))+((cj1*pz))+(((-0.05525)*sj2*x1062))+(((-1.0)*cj2*x1067)));
07046 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07047 {
07048 continue;
07049 }
07050 }
07051
07052 {
07053 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07054 vinfos[0].jointtype = 1;
07055 vinfos[0].foffset = j0;
07056 vinfos[0].indices[0] = _ij0[0];
07057 vinfos[0].indices[1] = _ij0[1];
07058 vinfos[0].maxsolutions = _nj0;
07059 vinfos[1].jointtype = 1;
07060 vinfos[1].foffset = j1;
07061 vinfos[1].indices[0] = _ij1[0];
07062 vinfos[1].indices[1] = _ij1[1];
07063 vinfos[1].maxsolutions = _nj1;
07064 vinfos[2].jointtype = 1;
07065 vinfos[2].foffset = j2;
07066 vinfos[2].indices[0] = _ij2[0];
07067 vinfos[2].indices[1] = _ij2[1];
07068 vinfos[2].maxsolutions = _nj2;
07069 vinfos[3].jointtype = 1;
07070 vinfos[3].foffset = j3;
07071 vinfos[3].indices[0] = _ij3[0];
07072 vinfos[3].indices[1] = _ij3[1];
07073 vinfos[3].maxsolutions = _nj3;
07074 vinfos[4].jointtype = 1;
07075 vinfos[4].foffset = j4;
07076 vinfos[4].indices[0] = _ij4[0];
07077 vinfos[4].indices[1] = _ij4[1];
07078 vinfos[4].maxsolutions = _nj4;
07079 std::vector<int> vfree(0);
07080 solutions.AddSolution(vinfos,vfree);
07081 }
07082 }
07083 }
07084
07085 }
07086 } while(0);
07087 if( bgotonextstatement )
07088 {
07089 bool bgotonextstatement = true;
07090 do
07091 {
07092 IkReal x1069=((1.0)*cj1);
07093 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
07094 evalcond[1]=((((-1.0)*cj0*r00*x1069))+((r02*sj1))+(((-1.0)*r01*sj0*x1069)));
07095 evalcond[2]=((-0.278775)+((pz*sj1))+(((-1.0)*py*sj0*x1069))+(((-1.0)*cj0*px*x1069)));
07096 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07097 {
07098 bgotonextstatement=false;
07099 {
07100 IkReal j4array[1], cj4array[1], sj4array[1];
07101 bool j4valid[1]={false};
07102 _nj4 = 1;
07103 IkReal x1070=((1.0)*cj2);
07104 IkReal x1071=(r00*sj0);
07105 IkReal x1072=(cj1*r02);
07106 IkReal x1073=(cj0*sj2);
07107 IkReal x1074=(r00*sj1);
07108 IkReal x1075=(r01*sj0*sj1);
07109 if( IKabs((((sj2*x1075))+((sj2*x1072))+(((-1.0)*cj0*r01*x1070))+((cj2*x1071))+((x1073*x1074)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*x1070*x1074))+(((-1.0)*x1070*x1075))+(((-1.0)*x1070*x1072))+((sj2*x1071))+(((-1.0)*r01*x1073)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((sj2*x1075))+((sj2*x1072))+(((-1.0)*cj0*r01*x1070))+((cj2*x1071))+((x1073*x1074))))+IKsqr(((((-1.0)*cj0*x1070*x1074))+(((-1.0)*x1070*x1075))+(((-1.0)*x1070*x1072))+((sj2*x1071))+(((-1.0)*r01*x1073))))-1) <= IKFAST_SINCOS_THRESH )
07110 continue;
07111 j4array[0]=IKatan2((((sj2*x1075))+((sj2*x1072))+(((-1.0)*cj0*r01*x1070))+((cj2*x1071))+((x1073*x1074))), ((((-1.0)*cj0*x1070*x1074))+(((-1.0)*x1070*x1075))+(((-1.0)*x1070*x1072))+((sj2*x1071))+(((-1.0)*r01*x1073))));
07112 sj4array[0]=IKsin(j4array[0]);
07113 cj4array[0]=IKcos(j4array[0]);
07114 if( j4array[0] > IKPI )
07115 {
07116 j4array[0]-=IK2PI;
07117 }
07118 else if( j4array[0] < -IKPI )
07119 { j4array[0]+=IK2PI;
07120 }
07121 j4valid[0] = true;
07122 for(int ij4 = 0; ij4 < 1; ++ij4)
07123 {
07124 if( !j4valid[ij4] )
07125 {
07126 continue;
07127 }
07128 _ij4[0] = ij4; _ij4[1] = -1;
07129 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07130 {
07131 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07132 {
07133 j4valid[iij4]=false; _ij4[1] = iij4; break;
07134 }
07135 }
07136 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07137 {
07138 IkReal evalcond[4];
07139 IkReal x1076=IKcos(j4);
07140 IkReal x1077=IKsin(j4);
07141 IkReal x1078=(sj0*sj1);
07142 IkReal x1079=(cj0*sj1);
07143 IkReal x1080=((1.0)*sj0);
07144 IkReal x1081=(sj2*x1077);
07145 IkReal x1082=((0.05525)*x1076);
07146 IkReal x1083=(cj2*x1077);
07147 evalcond[0]=(x1083+((sj2*x1076))+(((-1.0)*r00*x1080))+((cj0*r01)));
07148 evalcond[1]=(((cj1*r02))+((cj2*x1076))+(((-1.0)*x1081))+((r00*x1079))+((r01*x1078)));
07149 evalcond[2]=((0.00025116)+(((0.05525)*x1083))+((sj2*x1082))+((cj0*py))+(((-1.0)*px*x1080))+(((-0.2377)*sj2)));
07150 evalcond[3]=((-0.26630543)+((px*x1079))+((py*x1078))+((cj1*pz))+(((-0.2377)*cj2))+((cj2*x1082))+(((-0.05525)*x1081)));
07151 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07152 {
07153 continue;
07154 }
07155 }
07156
07157 {
07158 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07159 vinfos[0].jointtype = 1;
07160 vinfos[0].foffset = j0;
07161 vinfos[0].indices[0] = _ij0[0];
07162 vinfos[0].indices[1] = _ij0[1];
07163 vinfos[0].maxsolutions = _nj0;
07164 vinfos[1].jointtype = 1;
07165 vinfos[1].foffset = j1;
07166 vinfos[1].indices[0] = _ij1[0];
07167 vinfos[1].indices[1] = _ij1[1];
07168 vinfos[1].maxsolutions = _nj1;
07169 vinfos[2].jointtype = 1;
07170 vinfos[2].foffset = j2;
07171 vinfos[2].indices[0] = _ij2[0];
07172 vinfos[2].indices[1] = _ij2[1];
07173 vinfos[2].maxsolutions = _nj2;
07174 vinfos[3].jointtype = 1;
07175 vinfos[3].foffset = j3;
07176 vinfos[3].indices[0] = _ij3[0];
07177 vinfos[3].indices[1] = _ij3[1];
07178 vinfos[3].maxsolutions = _nj3;
07179 vinfos[4].jointtype = 1;
07180 vinfos[4].foffset = j4;
07181 vinfos[4].indices[0] = _ij4[0];
07182 vinfos[4].indices[1] = _ij4[1];
07183 vinfos[4].maxsolutions = _nj4;
07184 std::vector<int> vfree(0);
07185 solutions.AddSolution(vinfos,vfree);
07186 }
07187 }
07188 }
07189
07190 }
07191 } while(0);
07192 if( bgotonextstatement )
07193 {
07194 bool bgotonextstatement = true;
07195 do
07196 {
07197 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j2))), 6.28318530717959)));
07198 if( IKabs(evalcond[0]) < 0.0000010000000000 )
07199 {
07200 bgotonextstatement=false;
07201 {
07202 IkReal j4eval[1];
07203 sj2=0;
07204 cj2=1.0;
07205 j2=0;
07206 j4eval[0]=sj3;
07207 if( IKabs(j4eval[0]) < 0.0000010000000000 )
07208 {
07209 {
07210 IkReal j4eval[1];
07211 sj2=0;
07212 cj2=1.0;
07213 j2=0;
07214 j4eval[0]=cj3;
07215 if( IKabs(j4eval[0]) < 0.0000010000000000 )
07216 {
07217 {
07218 IkReal evalcond[3];
07219 bool bgotonextstatement = true;
07220 do
07221 {
07222 IkReal x1084=((1.0)*cj1);
07223 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
07224 evalcond[1]=((((-1.0)*cj0*r00*x1084))+(((-1.0)*r01*sj0*x1084))+((r02*sj1)));
07225 evalcond[2]=((0.278775)+(((-1.0)*cj0*px*x1084))+(((-1.0)*py*sj0*x1084))+((pz*sj1)));
07226 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07227 {
07228 bgotonextstatement=false;
07229 {
07230 IkReal j4array[1], cj4array[1], sj4array[1];
07231 bool j4valid[1]={false};
07232 _nj4 = 1;
07233 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))-1) <= IKFAST_SINCOS_THRESH )
07234 continue;
07235 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), (((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))));
07236 sj4array[0]=IKsin(j4array[0]);
07237 cj4array[0]=IKcos(j4array[0]);
07238 if( j4array[0] > IKPI )
07239 {
07240 j4array[0]-=IK2PI;
07241 }
07242 else if( j4array[0] < -IKPI )
07243 { j4array[0]+=IK2PI;
07244 }
07245 j4valid[0] = true;
07246 for(int ij4 = 0; ij4 < 1; ++ij4)
07247 {
07248 if( !j4valid[ij4] )
07249 {
07250 continue;
07251 }
07252 _ij4[0] = ij4; _ij4[1] = -1;
07253 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07254 {
07255 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07256 {
07257 j4valid[iij4]=false; _ij4[1] = iij4; break;
07258 }
07259 }
07260 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07261 {
07262 IkReal evalcond[4];
07263 IkReal x1085=IKsin(j4);
07264 IkReal x1086=IKcos(j4);
07265 IkReal x1087=(sj0*sj1);
07266 IkReal x1088=(cj0*sj1);
07267 IkReal x1089=((1.0)*sj0);
07268 evalcond[0]=(x1085+(((-1.0)*r00*x1089))+((cj0*r01)));
07269 evalcond[1]=((0.00025116)+(((0.05525)*x1085))+((cj0*py))+(((-1.0)*px*x1089)));
07270 evalcond[2]=(((r00*x1088))+((cj1*r02))+((r01*x1087))+(((-1.0)*x1086)));
07271 evalcond[3]=((-0.47660543)+((py*x1087))+((px*x1088))+((cj1*pz))+(((-0.05525)*x1086)));
07272 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07273 {
07274 continue;
07275 }
07276 }
07277
07278 {
07279 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07280 vinfos[0].jointtype = 1;
07281 vinfos[0].foffset = j0;
07282 vinfos[0].indices[0] = _ij0[0];
07283 vinfos[0].indices[1] = _ij0[1];
07284 vinfos[0].maxsolutions = _nj0;
07285 vinfos[1].jointtype = 1;
07286 vinfos[1].foffset = j1;
07287 vinfos[1].indices[0] = _ij1[0];
07288 vinfos[1].indices[1] = _ij1[1];
07289 vinfos[1].maxsolutions = _nj1;
07290 vinfos[2].jointtype = 1;
07291 vinfos[2].foffset = j2;
07292 vinfos[2].indices[0] = _ij2[0];
07293 vinfos[2].indices[1] = _ij2[1];
07294 vinfos[2].maxsolutions = _nj2;
07295 vinfos[3].jointtype = 1;
07296 vinfos[3].foffset = j3;
07297 vinfos[3].indices[0] = _ij3[0];
07298 vinfos[3].indices[1] = _ij3[1];
07299 vinfos[3].maxsolutions = _nj3;
07300 vinfos[4].jointtype = 1;
07301 vinfos[4].foffset = j4;
07302 vinfos[4].indices[0] = _ij4[0];
07303 vinfos[4].indices[1] = _ij4[1];
07304 vinfos[4].maxsolutions = _nj4;
07305 std::vector<int> vfree(0);
07306 solutions.AddSolution(vinfos,vfree);
07307 }
07308 }
07309 }
07310
07311 }
07312 } while(0);
07313 if( bgotonextstatement )
07314 {
07315 bool bgotonextstatement = true;
07316 do
07317 {
07318 IkReal x1090=((1.0)*cj1);
07319 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
07320 evalcond[1]=((((-1.0)*cj0*r00*x1090))+((r02*sj1))+(((-1.0)*r01*sj0*x1090)));
07321 evalcond[2]=((-0.278775)+((pz*sj1))+(((-1.0)*py*sj0*x1090))+(((-1.0)*cj0*px*x1090)));
07322 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07323 {
07324 bgotonextstatement=false;
07325 {
07326 IkReal j4array[1], cj4array[1], sj4array[1];
07327 bool j4valid[1]={false};
07328 _nj4 = 1;
07329 IkReal x1091=((1.0)*sj1);
07330 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*r00*x1091))+(((-1.0)*r01*sj0*x1091))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr(((((-1.0)*cj0*r00*x1091))+(((-1.0)*r01*sj0*x1091))+(((-1.0)*cj1*r02))))-1) <= IKFAST_SINCOS_THRESH )
07331 continue;
07332 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), ((((-1.0)*cj0*r00*x1091))+(((-1.0)*r01*sj0*x1091))+(((-1.0)*cj1*r02))));
07333 sj4array[0]=IKsin(j4array[0]);
07334 cj4array[0]=IKcos(j4array[0]);
07335 if( j4array[0] > IKPI )
07336 {
07337 j4array[0]-=IK2PI;
07338 }
07339 else if( j4array[0] < -IKPI )
07340 { j4array[0]+=IK2PI;
07341 }
07342 j4valid[0] = true;
07343 for(int ij4 = 0; ij4 < 1; ++ij4)
07344 {
07345 if( !j4valid[ij4] )
07346 {
07347 continue;
07348 }
07349 _ij4[0] = ij4; _ij4[1] = -1;
07350 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07351 {
07352 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07353 {
07354 j4valid[iij4]=false; _ij4[1] = iij4; break;
07355 }
07356 }
07357 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07358 {
07359 IkReal evalcond[4];
07360 IkReal x1092=IKsin(j4);
07361 IkReal x1093=IKcos(j4);
07362 IkReal x1094=(sj0*sj1);
07363 IkReal x1095=(cj0*sj1);
07364 IkReal x1096=((1.0)*sj0);
07365 evalcond[0]=(x1092+(((-1.0)*r00*x1096))+((cj0*r01)));
07366 evalcond[1]=((0.00025116)+(((0.05525)*x1092))+((cj0*py))+(((-1.0)*px*x1096)));
07367 evalcond[2]=(x1093+((r01*x1094))+((r00*x1095))+((cj1*r02)));
07368 evalcond[3]=((-0.50400543)+(((0.05525)*x1093))+((cj1*pz))+((py*x1094))+((px*x1095)));
07369 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07370 {
07371 continue;
07372 }
07373 }
07374
07375 {
07376 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07377 vinfos[0].jointtype = 1;
07378 vinfos[0].foffset = j0;
07379 vinfos[0].indices[0] = _ij0[0];
07380 vinfos[0].indices[1] = _ij0[1];
07381 vinfos[0].maxsolutions = _nj0;
07382 vinfos[1].jointtype = 1;
07383 vinfos[1].foffset = j1;
07384 vinfos[1].indices[0] = _ij1[0];
07385 vinfos[1].indices[1] = _ij1[1];
07386 vinfos[1].maxsolutions = _nj1;
07387 vinfos[2].jointtype = 1;
07388 vinfos[2].foffset = j2;
07389 vinfos[2].indices[0] = _ij2[0];
07390 vinfos[2].indices[1] = _ij2[1];
07391 vinfos[2].maxsolutions = _nj2;
07392 vinfos[3].jointtype = 1;
07393 vinfos[3].foffset = j3;
07394 vinfos[3].indices[0] = _ij3[0];
07395 vinfos[3].indices[1] = _ij3[1];
07396 vinfos[3].maxsolutions = _nj3;
07397 vinfos[4].jointtype = 1;
07398 vinfos[4].foffset = j4;
07399 vinfos[4].indices[0] = _ij4[0];
07400 vinfos[4].indices[1] = _ij4[1];
07401 vinfos[4].maxsolutions = _nj4;
07402 std::vector<int> vfree(0);
07403 solutions.AddSolution(vinfos,vfree);
07404 }
07405 }
07406 }
07407
07408 }
07409 } while(0);
07410 if( bgotonextstatement )
07411 {
07412 bool bgotonextstatement = true;
07413 do
07414 {
07415 IkReal x1097=(sj0*sj1);
07416 IkReal x1098=(cj0*sj1);
07417 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
07418 evalcond[1]=(((r01*x1097))+((r00*x1098))+((cj1*r02)));
07419 evalcond[2]=((-0.76908043)+((cj1*pz))+((py*x1097))+((px*x1098)));
07420 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07421 {
07422 bgotonextstatement=false;
07423 {
07424 IkReal j4array[1], cj4array[1], sj4array[1];
07425 bool j4valid[1]={false};
07426 _nj4 = 1;
07427 IkReal x1099=((1.0)*cj0);
07428 if( IKabs((((r00*sj0))+(((-1.0)*r01*x1099)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*cj1*r00*x1099))+(((-1.0)*cj1*r01*sj0)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*r01*x1099))))+IKsqr((((r02*sj1))+(((-1.0)*cj1*r00*x1099))+(((-1.0)*cj1*r01*sj0))))-1) <= IKFAST_SINCOS_THRESH )
07429 continue;
07430 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*r01*x1099))), (((r02*sj1))+(((-1.0)*cj1*r00*x1099))+(((-1.0)*cj1*r01*sj0))));
07431 sj4array[0]=IKsin(j4array[0]);
07432 cj4array[0]=IKcos(j4array[0]);
07433 if( j4array[0] > IKPI )
07434 {
07435 j4array[0]-=IK2PI;
07436 }
07437 else if( j4array[0] < -IKPI )
07438 { j4array[0]+=IK2PI;
07439 }
07440 j4valid[0] = true;
07441 for(int ij4 = 0; ij4 < 1; ++ij4)
07442 {
07443 if( !j4valid[ij4] )
07444 {
07445 continue;
07446 }
07447 _ij4[0] = ij4; _ij4[1] = -1;
07448 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07449 {
07450 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07451 {
07452 j4valid[iij4]=false; _ij4[1] = iij4; break;
07453 }
07454 }
07455 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07456 {
07457 IkReal evalcond[4];
07458 IkReal x1100=IKsin(j4);
07459 IkReal x1101=IKcos(j4);
07460 IkReal x1102=((1.0)*cj1);
07461 IkReal x1103=((1.0)*sj0);
07462 evalcond[0]=(x1100+(((-1.0)*r00*x1103))+((cj0*r01)));
07463 evalcond[1]=((0.00025116)+(((0.05525)*x1100))+(((-1.0)*px*x1103))+((cj0*py)));
07464 evalcond[2]=((((-1.0)*r01*sj0*x1102))+(((-1.0)*x1101))+((r02*sj1))+(((-1.0)*cj0*r00*x1102)));
07465 evalcond[3]=((0.0137)+(((-1.0)*cj0*px*x1102))+(((-1.0)*py*sj0*x1102))+(((-0.05525)*x1101))+((pz*sj1)));
07466 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07467 {
07468 continue;
07469 }
07470 }
07471
07472 {
07473 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07474 vinfos[0].jointtype = 1;
07475 vinfos[0].foffset = j0;
07476 vinfos[0].indices[0] = _ij0[0];
07477 vinfos[0].indices[1] = _ij0[1];
07478 vinfos[0].maxsolutions = _nj0;
07479 vinfos[1].jointtype = 1;
07480 vinfos[1].foffset = j1;
07481 vinfos[1].indices[0] = _ij1[0];
07482 vinfos[1].indices[1] = _ij1[1];
07483 vinfos[1].maxsolutions = _nj1;
07484 vinfos[2].jointtype = 1;
07485 vinfos[2].foffset = j2;
07486 vinfos[2].indices[0] = _ij2[0];
07487 vinfos[2].indices[1] = _ij2[1];
07488 vinfos[2].maxsolutions = _nj2;
07489 vinfos[3].jointtype = 1;
07490 vinfos[3].foffset = j3;
07491 vinfos[3].indices[0] = _ij3[0];
07492 vinfos[3].indices[1] = _ij3[1];
07493 vinfos[3].maxsolutions = _nj3;
07494 vinfos[4].jointtype = 1;
07495 vinfos[4].foffset = j4;
07496 vinfos[4].indices[0] = _ij4[0];
07497 vinfos[4].indices[1] = _ij4[1];
07498 vinfos[4].maxsolutions = _nj4;
07499 std::vector<int> vfree(0);
07500 solutions.AddSolution(vinfos,vfree);
07501 }
07502 }
07503 }
07504
07505 }
07506 } while(0);
07507 if( bgotonextstatement )
07508 {
07509 bool bgotonextstatement = true;
07510 do
07511 {
07512 IkReal x1104=(sj0*sj1);
07513 IkReal x1105=(cj0*sj1);
07514 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
07515 evalcond[1]=(((cj1*r02))+((r01*x1104))+((r00*x1105)));
07516 evalcond[2]=((-0.21153043)+((cj1*pz))+((py*x1104))+((px*x1105)));
07517 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07518 {
07519 bgotonextstatement=false;
07520 {
07521 IkReal j4array[1], cj4array[1], sj4array[1];
07522 bool j4valid[1]={false};
07523 _nj4 = 1;
07524 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
07525 continue;
07526 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
07527 sj4array[0]=IKsin(j4array[0]);
07528 cj4array[0]=IKcos(j4array[0]);
07529 if( j4array[0] > IKPI )
07530 {
07531 j4array[0]-=IK2PI;
07532 }
07533 else if( j4array[0] < -IKPI )
07534 { j4array[0]+=IK2PI;
07535 }
07536 j4valid[0] = true;
07537 for(int ij4 = 0; ij4 < 1; ++ij4)
07538 {
07539 if( !j4valid[ij4] )
07540 {
07541 continue;
07542 }
07543 _ij4[0] = ij4; _ij4[1] = -1;
07544 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07545 {
07546 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07547 {
07548 j4valid[iij4]=false; _ij4[1] = iij4; break;
07549 }
07550 }
07551 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07552 {
07553 IkReal evalcond[4];
07554 IkReal x1106=IKsin(j4);
07555 IkReal x1107=IKcos(j4);
07556 IkReal x1108=((1.0)*cj1);
07557 IkReal x1109=((1.0)*sj0);
07558 evalcond[0]=(x1106+(((-1.0)*r00*x1109))+((cj0*r01)));
07559 evalcond[1]=((0.00025116)+(((0.05525)*x1106))+(((-1.0)*px*x1109))+((cj0*py)));
07560 evalcond[2]=(x1107+(((-1.0)*r01*sj0*x1108))+((r02*sj1))+(((-1.0)*cj0*r00*x1108)));
07561 evalcond[3]=((-0.0137)+(((0.05525)*x1107))+(((-1.0)*cj0*px*x1108))+(((-1.0)*py*sj0*x1108))+((pz*sj1)));
07562 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07563 {
07564 continue;
07565 }
07566 }
07567
07568 {
07569 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07570 vinfos[0].jointtype = 1;
07571 vinfos[0].foffset = j0;
07572 vinfos[0].indices[0] = _ij0[0];
07573 vinfos[0].indices[1] = _ij0[1];
07574 vinfos[0].maxsolutions = _nj0;
07575 vinfos[1].jointtype = 1;
07576 vinfos[1].foffset = j1;
07577 vinfos[1].indices[0] = _ij1[0];
07578 vinfos[1].indices[1] = _ij1[1];
07579 vinfos[1].maxsolutions = _nj1;
07580 vinfos[2].jointtype = 1;
07581 vinfos[2].foffset = j2;
07582 vinfos[2].indices[0] = _ij2[0];
07583 vinfos[2].indices[1] = _ij2[1];
07584 vinfos[2].maxsolutions = _nj2;
07585 vinfos[3].jointtype = 1;
07586 vinfos[3].foffset = j3;
07587 vinfos[3].indices[0] = _ij3[0];
07588 vinfos[3].indices[1] = _ij3[1];
07589 vinfos[3].maxsolutions = _nj3;
07590 vinfos[4].jointtype = 1;
07591 vinfos[4].foffset = j4;
07592 vinfos[4].indices[0] = _ij4[0];
07593 vinfos[4].indices[1] = _ij4[1];
07594 vinfos[4].maxsolutions = _nj4;
07595 std::vector<int> vfree(0);
07596 solutions.AddSolution(vinfos,vfree);
07597 }
07598 }
07599 }
07600
07601 }
07602 } while(0);
07603 if( bgotonextstatement )
07604 {
07605 bool bgotonextstatement = true;
07606 do
07607 {
07608 if( 1 )
07609 {
07610 bgotonextstatement=false;
07611 continue;
07612
07613 }
07614 } while(0);
07615 if( bgotonextstatement )
07616 {
07617 }
07618 }
07619 }
07620 }
07621 }
07622 }
07623
07624 } else
07625 {
07626 {
07627 IkReal j4array[1], cj4array[1], sj4array[1];
07628 bool j4valid[1]={false};
07629 _nj4 = 1;
07630 IkReal x1110=((1.0)*r01);
07631 CheckValue<IkReal> x1111=IKPowWithIntegerCheck(cj3,-1);
07632 if(!x1111.valid){
07633 continue;
07634 }
07635 if( IKabs((((r00*sj0))+(((-1.0)*cj0*x1110)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1111.value)*(((((-1.0)*cj0*cj1*r00))+(((-1.0)*cj1*sj0*x1110))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*x1110))))+IKsqr(((x1111.value)*(((((-1.0)*cj0*cj1*r00))+(((-1.0)*cj1*sj0*x1110))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
07636 continue;
07637 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*x1110))), ((x1111.value)*(((((-1.0)*cj0*cj1*r00))+(((-1.0)*cj1*sj0*x1110))+((r02*sj1))))));
07638 sj4array[0]=IKsin(j4array[0]);
07639 cj4array[0]=IKcos(j4array[0]);
07640 if( j4array[0] > IKPI )
07641 {
07642 j4array[0]-=IK2PI;
07643 }
07644 else if( j4array[0] < -IKPI )
07645 { j4array[0]+=IK2PI;
07646 }
07647 j4valid[0] = true;
07648 for(int ij4 = 0; ij4 < 1; ++ij4)
07649 {
07650 if( !j4valid[ij4] )
07651 {
07652 continue;
07653 }
07654 _ij4[0] = ij4; _ij4[1] = -1;
07655 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07656 {
07657 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07658 {
07659 j4valid[iij4]=false; _ij4[1] = iij4; break;
07660 }
07661 }
07662 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07663 {
07664 IkReal evalcond[6];
07665 IkReal x1112=IKsin(j4);
07666 IkReal x1113=IKcos(j4);
07667 IkReal x1114=(cj0*px);
07668 IkReal x1115=(sj0*sj1);
07669 IkReal x1116=((1.0)*cj1);
07670 IkReal x1117=((1.0)*sj0);
07671 IkReal x1118=(cj0*r00);
07672 IkReal x1119=((1.0)*x1113);
07673 IkReal x1120=((0.05525)*x1113);
07674 evalcond[0]=(x1112+(((-1.0)*r00*x1117))+((cj0*r01)));
07675 evalcond[1]=((0.00025116)+(((0.05525)*x1112))+(((-1.0)*px*x1117))+((cj0*py)));
07676 evalcond[2]=(((cj1*r02))+((r01*x1115))+(((-1.0)*sj3*x1119))+((sj1*x1118)));
07677 evalcond[3]=((((-1.0)*r01*sj0*x1116))+(((-1.0)*x1116*x1118))+((r02*sj1))+(((-1.0)*cj3*x1119)));
07678 evalcond[4]=((-0.49030543)+(((-1.0)*sj3*x1120))+((cj1*pz))+((py*x1115))+((sj1*x1114))+(((-0.278775)*cj3))+(((0.0137)*sj3)));
07679 evalcond[5]=((((-1.0)*x1114*x1116))+(((0.0137)*cj3))+(((-1.0)*py*sj0*x1116))+(((-1.0)*cj3*x1120))+((pz*sj1))+(((0.278775)*sj3)));
07680 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
07681 {
07682 continue;
07683 }
07684 }
07685
07686 {
07687 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07688 vinfos[0].jointtype = 1;
07689 vinfos[0].foffset = j0;
07690 vinfos[0].indices[0] = _ij0[0];
07691 vinfos[0].indices[1] = _ij0[1];
07692 vinfos[0].maxsolutions = _nj0;
07693 vinfos[1].jointtype = 1;
07694 vinfos[1].foffset = j1;
07695 vinfos[1].indices[0] = _ij1[0];
07696 vinfos[1].indices[1] = _ij1[1];
07697 vinfos[1].maxsolutions = _nj1;
07698 vinfos[2].jointtype = 1;
07699 vinfos[2].foffset = j2;
07700 vinfos[2].indices[0] = _ij2[0];
07701 vinfos[2].indices[1] = _ij2[1];
07702 vinfos[2].maxsolutions = _nj2;
07703 vinfos[3].jointtype = 1;
07704 vinfos[3].foffset = j3;
07705 vinfos[3].indices[0] = _ij3[0];
07706 vinfos[3].indices[1] = _ij3[1];
07707 vinfos[3].maxsolutions = _nj3;
07708 vinfos[4].jointtype = 1;
07709 vinfos[4].foffset = j4;
07710 vinfos[4].indices[0] = _ij4[0];
07711 vinfos[4].indices[1] = _ij4[1];
07712 vinfos[4].maxsolutions = _nj4;
07713 std::vector<int> vfree(0);
07714 solutions.AddSolution(vinfos,vfree);
07715 }
07716 }
07717 }
07718
07719 }
07720
07721 }
07722
07723 } else
07724 {
07725 {
07726 IkReal j4array[1], cj4array[1], sj4array[1];
07727 bool j4valid[1]={false};
07728 _nj4 = 1;
07729 CheckValue<IkReal> x1121=IKPowWithIntegerCheck(sj3,-1);
07730 if(!x1121.valid){
07731 continue;
07732 }
07733 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1121.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr(((x1121.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
07734 continue;
07735 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), ((x1121.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))));
07736 sj4array[0]=IKsin(j4array[0]);
07737 cj4array[0]=IKcos(j4array[0]);
07738 if( j4array[0] > IKPI )
07739 {
07740 j4array[0]-=IK2PI;
07741 }
07742 else if( j4array[0] < -IKPI )
07743 { j4array[0]+=IK2PI;
07744 }
07745 j4valid[0] = true;
07746 for(int ij4 = 0; ij4 < 1; ++ij4)
07747 {
07748 if( !j4valid[ij4] )
07749 {
07750 continue;
07751 }
07752 _ij4[0] = ij4; _ij4[1] = -1;
07753 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07754 {
07755 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07756 {
07757 j4valid[iij4]=false; _ij4[1] = iij4; break;
07758 }
07759 }
07760 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07761 {
07762 IkReal evalcond[6];
07763 IkReal x1122=IKsin(j4);
07764 IkReal x1123=IKcos(j4);
07765 IkReal x1124=(cj0*px);
07766 IkReal x1125=(sj0*sj1);
07767 IkReal x1126=((1.0)*cj1);
07768 IkReal x1127=((1.0)*sj0);
07769 IkReal x1128=(cj0*r00);
07770 IkReal x1129=((1.0)*x1123);
07771 IkReal x1130=((0.05525)*x1123);
07772 evalcond[0]=(x1122+(((-1.0)*r00*x1127))+((cj0*r01)));
07773 evalcond[1]=((0.00025116)+(((0.05525)*x1122))+((cj0*py))+(((-1.0)*px*x1127)));
07774 evalcond[2]=((((-1.0)*sj3*x1129))+((r01*x1125))+((sj1*x1128))+((cj1*r02)));
07775 evalcond[3]=((((-1.0)*r01*sj0*x1126))+(((-1.0)*x1126*x1128))+((r02*sj1))+(((-1.0)*cj3*x1129)));
07776 evalcond[4]=((-0.49030543)+(((-1.0)*sj3*x1130))+((sj1*x1124))+((cj1*pz))+((py*x1125))+(((-0.278775)*cj3))+(((0.0137)*sj3)));
07777 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*cj3*x1130))+((pz*sj1))+(((-1.0)*x1124*x1126))+(((-1.0)*py*sj0*x1126))+(((0.278775)*sj3)));
07778 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
07779 {
07780 continue;
07781 }
07782 }
07783
07784 {
07785 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07786 vinfos[0].jointtype = 1;
07787 vinfos[0].foffset = j0;
07788 vinfos[0].indices[0] = _ij0[0];
07789 vinfos[0].indices[1] = _ij0[1];
07790 vinfos[0].maxsolutions = _nj0;
07791 vinfos[1].jointtype = 1;
07792 vinfos[1].foffset = j1;
07793 vinfos[1].indices[0] = _ij1[0];
07794 vinfos[1].indices[1] = _ij1[1];
07795 vinfos[1].maxsolutions = _nj1;
07796 vinfos[2].jointtype = 1;
07797 vinfos[2].foffset = j2;
07798 vinfos[2].indices[0] = _ij2[0];
07799 vinfos[2].indices[1] = _ij2[1];
07800 vinfos[2].maxsolutions = _nj2;
07801 vinfos[3].jointtype = 1;
07802 vinfos[3].foffset = j3;
07803 vinfos[3].indices[0] = _ij3[0];
07804 vinfos[3].indices[1] = _ij3[1];
07805 vinfos[3].maxsolutions = _nj3;
07806 vinfos[4].jointtype = 1;
07807 vinfos[4].foffset = j4;
07808 vinfos[4].indices[0] = _ij4[0];
07809 vinfos[4].indices[1] = _ij4[1];
07810 vinfos[4].maxsolutions = _nj4;
07811 std::vector<int> vfree(0);
07812 solutions.AddSolution(vinfos,vfree);
07813 }
07814 }
07815 }
07816
07817 }
07818
07819 }
07820
07821 }
07822 } while(0);
07823 if( bgotonextstatement )
07824 {
07825 bool bgotonextstatement = true;
07826 do
07827 {
07828 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j2)))), 6.28318530717959)));
07829 if( IKabs(evalcond[0]) < 0.0000010000000000 )
07830 {
07831 bgotonextstatement=false;
07832 {
07833 IkReal j4eval[1];
07834 sj2=0;
07835 cj2=-1.0;
07836 j2=3.14159265358979;
07837 j4eval[0]=cj3;
07838 if( IKabs(j4eval[0]) < 0.0000010000000000 )
07839 {
07840 {
07841 IkReal j4eval[1];
07842 sj2=0;
07843 cj2=-1.0;
07844 j2=3.14159265358979;
07845 j4eval[0]=sj3;
07846 if( IKabs(j4eval[0]) < 0.0000010000000000 )
07847 {
07848 {
07849 IkReal evalcond[3];
07850 bool bgotonextstatement = true;
07851 do
07852 {
07853 IkReal x1131=(sj0*sj1);
07854 IkReal x1132=(cj0*sj1);
07855 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
07856 evalcond[1]=(((r01*x1131))+((r00*x1132))+((cj1*r02)));
07857 evalcond[2]=((0.23646957)+((py*x1131))+((cj1*pz))+((px*x1132)));
07858 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07859 {
07860 bgotonextstatement=false;
07861 {
07862 IkReal j4array[1], cj4array[1], sj4array[1];
07863 bool j4valid[1]={false};
07864 _nj4 = 1;
07865 IkReal x1133=((1.0)*cj1);
07866 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*r00*x1133))+((r02*sj1))+(((-1.0)*r01*sj0*x1133)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((((-1.0)*cj0*r00*x1133))+((r02*sj1))+(((-1.0)*r01*sj0*x1133))))-1) <= IKFAST_SINCOS_THRESH )
07867 continue;
07868 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((((-1.0)*cj0*r00*x1133))+((r02*sj1))+(((-1.0)*r01*sj0*x1133))));
07869 sj4array[0]=IKsin(j4array[0]);
07870 cj4array[0]=IKcos(j4array[0]);
07871 if( j4array[0] > IKPI )
07872 {
07873 j4array[0]-=IK2PI;
07874 }
07875 else if( j4array[0] < -IKPI )
07876 { j4array[0]+=IK2PI;
07877 }
07878 j4valid[0] = true;
07879 for(int ij4 = 0; ij4 < 1; ++ij4)
07880 {
07881 if( !j4valid[ij4] )
07882 {
07883 continue;
07884 }
07885 _ij4[0] = ij4; _ij4[1] = -1;
07886 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07887 {
07888 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07889 {
07890 j4valid[iij4]=false; _ij4[1] = iij4; break;
07891 }
07892 }
07893 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07894 {
07895 IkReal evalcond[4];
07896 IkReal x1134=IKsin(j4);
07897 IkReal x1135=IKcos(j4);
07898 IkReal x1136=((1.0)*cj1);
07899 IkReal x1137=((1.0)*sj0);
07900 evalcond[0]=((((-1.0)*x1134))+(((-1.0)*r00*x1137))+((cj0*r01)));
07901 evalcond[1]=((0.00025116)+(((-0.05525)*x1134))+((cj0*py))+(((-1.0)*px*x1137)));
07902 evalcond[2]=((((-1.0)*cj0*r00*x1136))+((r02*sj1))+(((-1.0)*x1135))+(((-1.0)*r01*sj0*x1136)));
07903 evalcond[3]=((0.0137)+(((-1.0)*py*sj0*x1136))+(((-0.05525)*x1135))+(((-1.0)*cj0*px*x1136))+((pz*sj1)));
07904 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
07905 {
07906 continue;
07907 }
07908 }
07909
07910 {
07911 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
07912 vinfos[0].jointtype = 1;
07913 vinfos[0].foffset = j0;
07914 vinfos[0].indices[0] = _ij0[0];
07915 vinfos[0].indices[1] = _ij0[1];
07916 vinfos[0].maxsolutions = _nj0;
07917 vinfos[1].jointtype = 1;
07918 vinfos[1].foffset = j1;
07919 vinfos[1].indices[0] = _ij1[0];
07920 vinfos[1].indices[1] = _ij1[1];
07921 vinfos[1].maxsolutions = _nj1;
07922 vinfos[2].jointtype = 1;
07923 vinfos[2].foffset = j2;
07924 vinfos[2].indices[0] = _ij2[0];
07925 vinfos[2].indices[1] = _ij2[1];
07926 vinfos[2].maxsolutions = _nj2;
07927 vinfos[3].jointtype = 1;
07928 vinfos[3].foffset = j3;
07929 vinfos[3].indices[0] = _ij3[0];
07930 vinfos[3].indices[1] = _ij3[1];
07931 vinfos[3].maxsolutions = _nj3;
07932 vinfos[4].jointtype = 1;
07933 vinfos[4].foffset = j4;
07934 vinfos[4].indices[0] = _ij4[0];
07935 vinfos[4].indices[1] = _ij4[1];
07936 vinfos[4].maxsolutions = _nj4;
07937 std::vector<int> vfree(0);
07938 solutions.AddSolution(vinfos,vfree);
07939 }
07940 }
07941 }
07942
07943 }
07944 } while(0);
07945 if( bgotonextstatement )
07946 {
07947 bool bgotonextstatement = true;
07948 do
07949 {
07950 IkReal x1138=(sj0*sj1);
07951 IkReal x1139=(cj0*sj1);
07952 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
07953 evalcond[1]=(((r01*x1138))+((r00*x1139))+((cj1*r02)));
07954 evalcond[2]=((-0.32108043)+((py*x1138))+((cj1*pz))+((px*x1139)));
07955 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
07956 {
07957 bgotonextstatement=false;
07958 {
07959 IkReal j4array[1], cj4array[1], sj4array[1];
07960 bool j4valid[1]={false};
07961 _nj4 = 1;
07962 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
07963 continue;
07964 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
07965 sj4array[0]=IKsin(j4array[0]);
07966 cj4array[0]=IKcos(j4array[0]);
07967 if( j4array[0] > IKPI )
07968 {
07969 j4array[0]-=IK2PI;
07970 }
07971 else if( j4array[0] < -IKPI )
07972 { j4array[0]+=IK2PI;
07973 }
07974 j4valid[0] = true;
07975 for(int ij4 = 0; ij4 < 1; ++ij4)
07976 {
07977 if( !j4valid[ij4] )
07978 {
07979 continue;
07980 }
07981 _ij4[0] = ij4; _ij4[1] = -1;
07982 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
07983 {
07984 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
07985 {
07986 j4valid[iij4]=false; _ij4[1] = iij4; break;
07987 }
07988 }
07989 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
07990 {
07991 IkReal evalcond[4];
07992 IkReal x1140=IKsin(j4);
07993 IkReal x1141=IKcos(j4);
07994 IkReal x1142=((1.0)*cj1);
07995 IkReal x1143=((1.0)*sj0);
07996 evalcond[0]=((((-1.0)*r00*x1143))+(((-1.0)*x1140))+((cj0*r01)));
07997 evalcond[1]=((0.00025116)+(((-1.0)*px*x1143))+((cj0*py))+(((-0.05525)*x1140)));
07998 evalcond[2]=(x1141+((r02*sj1))+(((-1.0)*cj0*r00*x1142))+(((-1.0)*r01*sj0*x1142)));
07999 evalcond[3]=((-0.0137)+(((-1.0)*py*sj0*x1142))+(((-1.0)*cj0*px*x1142))+(((0.05525)*x1141))+((pz*sj1)));
08000 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08001 {
08002 continue;
08003 }
08004 }
08005
08006 {
08007 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08008 vinfos[0].jointtype = 1;
08009 vinfos[0].foffset = j0;
08010 vinfos[0].indices[0] = _ij0[0];
08011 vinfos[0].indices[1] = _ij0[1];
08012 vinfos[0].maxsolutions = _nj0;
08013 vinfos[1].jointtype = 1;
08014 vinfos[1].foffset = j1;
08015 vinfos[1].indices[0] = _ij1[0];
08016 vinfos[1].indices[1] = _ij1[1];
08017 vinfos[1].maxsolutions = _nj1;
08018 vinfos[2].jointtype = 1;
08019 vinfos[2].foffset = j2;
08020 vinfos[2].indices[0] = _ij2[0];
08021 vinfos[2].indices[1] = _ij2[1];
08022 vinfos[2].maxsolutions = _nj2;
08023 vinfos[3].jointtype = 1;
08024 vinfos[3].foffset = j3;
08025 vinfos[3].indices[0] = _ij3[0];
08026 vinfos[3].indices[1] = _ij3[1];
08027 vinfos[3].maxsolutions = _nj3;
08028 vinfos[4].jointtype = 1;
08029 vinfos[4].foffset = j4;
08030 vinfos[4].indices[0] = _ij4[0];
08031 vinfos[4].indices[1] = _ij4[1];
08032 vinfos[4].maxsolutions = _nj4;
08033 std::vector<int> vfree(0);
08034 solutions.AddSolution(vinfos,vfree);
08035 }
08036 }
08037 }
08038
08039 }
08040 } while(0);
08041 if( bgotonextstatement )
08042 {
08043 bool bgotonextstatement = true;
08044 do
08045 {
08046 IkReal x1144=((1.0)*cj1);
08047 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
08048 evalcond[1]=(((r02*sj1))+(((-1.0)*cj0*r00*x1144))+(((-1.0)*r01*sj0*x1144)));
08049 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x1144))+(((-1.0)*cj0*px*x1144))+((pz*sj1)));
08050 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
08051 {
08052 bgotonextstatement=false;
08053 {
08054 IkReal j4array[1], cj4array[1], sj4array[1];
08055 bool j4valid[1]={false};
08056 _nj4 = 1;
08057 IkReal x1145=((1.0)*sj1);
08058 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*r00*x1145))+(((-1.0)*r01*sj0*x1145))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((((-1.0)*cj0*r00*x1145))+(((-1.0)*r01*sj0*x1145))+(((-1.0)*cj1*r02))))-1) <= IKFAST_SINCOS_THRESH )
08059 continue;
08060 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((((-1.0)*cj0*r00*x1145))+(((-1.0)*r01*sj0*x1145))+(((-1.0)*cj1*r02))));
08061 sj4array[0]=IKsin(j4array[0]);
08062 cj4array[0]=IKcos(j4array[0]);
08063 if( j4array[0] > IKPI )
08064 {
08065 j4array[0]-=IK2PI;
08066 }
08067 else if( j4array[0] < -IKPI )
08068 { j4array[0]+=IK2PI;
08069 }
08070 j4valid[0] = true;
08071 for(int ij4 = 0; ij4 < 1; ++ij4)
08072 {
08073 if( !j4valid[ij4] )
08074 {
08075 continue;
08076 }
08077 _ij4[0] = ij4; _ij4[1] = -1;
08078 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08079 {
08080 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08081 {
08082 j4valid[iij4]=false; _ij4[1] = iij4; break;
08083 }
08084 }
08085 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08086 {
08087 IkReal evalcond[4];
08088 IkReal x1146=IKsin(j4);
08089 IkReal x1147=IKcos(j4);
08090 IkReal x1148=(cj0*sj1);
08091 IkReal x1149=(sj0*sj1);
08092 IkReal x1150=((1.0)*sj0);
08093 evalcond[0]=((((-1.0)*r00*x1150))+(((-1.0)*x1146))+((cj0*r01)));
08094 evalcond[1]=((0.00025116)+(((-1.0)*px*x1150))+((cj0*py))+(((-0.05525)*x1146)));
08095 evalcond[2]=(x1147+((cj1*r02))+((r01*x1149))+((r00*x1148)));
08096 evalcond[3]=((-0.05600543)+((py*x1149))+((cj1*pz))+(((0.05525)*x1147))+((px*x1148)));
08097 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08098 {
08099 continue;
08100 }
08101 }
08102
08103 {
08104 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08105 vinfos[0].jointtype = 1;
08106 vinfos[0].foffset = j0;
08107 vinfos[0].indices[0] = _ij0[0];
08108 vinfos[0].indices[1] = _ij0[1];
08109 vinfos[0].maxsolutions = _nj0;
08110 vinfos[1].jointtype = 1;
08111 vinfos[1].foffset = j1;
08112 vinfos[1].indices[0] = _ij1[0];
08113 vinfos[1].indices[1] = _ij1[1];
08114 vinfos[1].maxsolutions = _nj1;
08115 vinfos[2].jointtype = 1;
08116 vinfos[2].foffset = j2;
08117 vinfos[2].indices[0] = _ij2[0];
08118 vinfos[2].indices[1] = _ij2[1];
08119 vinfos[2].maxsolutions = _nj2;
08120 vinfos[3].jointtype = 1;
08121 vinfos[3].foffset = j3;
08122 vinfos[3].indices[0] = _ij3[0];
08123 vinfos[3].indices[1] = _ij3[1];
08124 vinfos[3].maxsolutions = _nj3;
08125 vinfos[4].jointtype = 1;
08126 vinfos[4].foffset = j4;
08127 vinfos[4].indices[0] = _ij4[0];
08128 vinfos[4].indices[1] = _ij4[1];
08129 vinfos[4].maxsolutions = _nj4;
08130 std::vector<int> vfree(0);
08131 solutions.AddSolution(vinfos,vfree);
08132 }
08133 }
08134 }
08135
08136 }
08137 } while(0);
08138 if( bgotonextstatement )
08139 {
08140 bool bgotonextstatement = true;
08141 do
08142 {
08143 IkReal x1151=((1.0)*cj1);
08144 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
08145 evalcond[1]=((((-1.0)*cj0*r00*x1151))+((r02*sj1))+(((-1.0)*r01*sj0*x1151)));
08146 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1151))+(((-1.0)*cj0*px*x1151))+((pz*sj1)));
08147 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
08148 {
08149 bgotonextstatement=false;
08150 {
08151 IkReal j4array[1], cj4array[1], sj4array[1];
08152 bool j4valid[1]={false};
08153 _nj4 = 1;
08154 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))-1) <= IKFAST_SINCOS_THRESH )
08155 continue;
08156 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), (((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))));
08157 sj4array[0]=IKsin(j4array[0]);
08158 cj4array[0]=IKcos(j4array[0]);
08159 if( j4array[0] > IKPI )
08160 {
08161 j4array[0]-=IK2PI;
08162 }
08163 else if( j4array[0] < -IKPI )
08164 { j4array[0]+=IK2PI;
08165 }
08166 j4valid[0] = true;
08167 for(int ij4 = 0; ij4 < 1; ++ij4)
08168 {
08169 if( !j4valid[ij4] )
08170 {
08171 continue;
08172 }
08173 _ij4[0] = ij4; _ij4[1] = -1;
08174 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08175 {
08176 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08177 {
08178 j4valid[iij4]=false; _ij4[1] = iij4; break;
08179 }
08180 }
08181 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08182 {
08183 IkReal evalcond[4];
08184 IkReal x1152=IKsin(j4);
08185 IkReal x1153=IKcos(j4);
08186 IkReal x1154=(cj0*sj1);
08187 IkReal x1155=(sj0*sj1);
08188 IkReal x1156=((1.0)*sj0);
08189 evalcond[0]=((((-1.0)*r00*x1156))+(((-1.0)*x1152))+((cj0*r01)));
08190 evalcond[1]=((0.00025116)+(((-0.05525)*x1152))+(((-1.0)*px*x1156))+((cj0*py)));
08191 evalcond[2]=(((r00*x1154))+((cj1*r02))+(((-1.0)*x1153))+((r01*x1155)));
08192 evalcond[3]=((-0.02860543)+(((-0.05525)*x1153))+((cj1*pz))+((px*x1154))+((py*x1155)));
08193 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08194 {
08195 continue;
08196 }
08197 }
08198
08199 {
08200 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08201 vinfos[0].jointtype = 1;
08202 vinfos[0].foffset = j0;
08203 vinfos[0].indices[0] = _ij0[0];
08204 vinfos[0].indices[1] = _ij0[1];
08205 vinfos[0].maxsolutions = _nj0;
08206 vinfos[1].jointtype = 1;
08207 vinfos[1].foffset = j1;
08208 vinfos[1].indices[0] = _ij1[0];
08209 vinfos[1].indices[1] = _ij1[1];
08210 vinfos[1].maxsolutions = _nj1;
08211 vinfos[2].jointtype = 1;
08212 vinfos[2].foffset = j2;
08213 vinfos[2].indices[0] = _ij2[0];
08214 vinfos[2].indices[1] = _ij2[1];
08215 vinfos[2].maxsolutions = _nj2;
08216 vinfos[3].jointtype = 1;
08217 vinfos[3].foffset = j3;
08218 vinfos[3].indices[0] = _ij3[0];
08219 vinfos[3].indices[1] = _ij3[1];
08220 vinfos[3].maxsolutions = _nj3;
08221 vinfos[4].jointtype = 1;
08222 vinfos[4].foffset = j4;
08223 vinfos[4].indices[0] = _ij4[0];
08224 vinfos[4].indices[1] = _ij4[1];
08225 vinfos[4].maxsolutions = _nj4;
08226 std::vector<int> vfree(0);
08227 solutions.AddSolution(vinfos,vfree);
08228 }
08229 }
08230 }
08231
08232 }
08233 } while(0);
08234 if( bgotonextstatement )
08235 {
08236 bool bgotonextstatement = true;
08237 do
08238 {
08239 if( 1 )
08240 {
08241 bgotonextstatement=false;
08242 continue;
08243
08244 }
08245 } while(0);
08246 if( bgotonextstatement )
08247 {
08248 }
08249 }
08250 }
08251 }
08252 }
08253 }
08254
08255 } else
08256 {
08257 {
08258 IkReal j4array[1], cj4array[1], sj4array[1];
08259 bool j4valid[1]={false};
08260 _nj4 = 1;
08261 IkReal x1157=((1.0)*sj1);
08262 CheckValue<IkReal> x1158=IKPowWithIntegerCheck(sj3,-1);
08263 if(!x1158.valid){
08264 continue;
08265 }
08266 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1158.value)*(((((-1.0)*cj0*r00*x1157))+(((-1.0)*r01*sj0*x1157))+(((-1.0)*cj1*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((x1158.value)*(((((-1.0)*cj0*r00*x1157))+(((-1.0)*r01*sj0*x1157))+(((-1.0)*cj1*r02))))))-1) <= IKFAST_SINCOS_THRESH )
08267 continue;
08268 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((x1158.value)*(((((-1.0)*cj0*r00*x1157))+(((-1.0)*r01*sj0*x1157))+(((-1.0)*cj1*r02))))));
08269 sj4array[0]=IKsin(j4array[0]);
08270 cj4array[0]=IKcos(j4array[0]);
08271 if( j4array[0] > IKPI )
08272 {
08273 j4array[0]-=IK2PI;
08274 }
08275 else if( j4array[0] < -IKPI )
08276 { j4array[0]+=IK2PI;
08277 }
08278 j4valid[0] = true;
08279 for(int ij4 = 0; ij4 < 1; ++ij4)
08280 {
08281 if( !j4valid[ij4] )
08282 {
08283 continue;
08284 }
08285 _ij4[0] = ij4; _ij4[1] = -1;
08286 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08287 {
08288 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08289 {
08290 j4valid[iij4]=false; _ij4[1] = iij4; break;
08291 }
08292 }
08293 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08294 {
08295 IkReal evalcond[6];
08296 IkReal x1159=IKsin(j4);
08297 IkReal x1160=IKcos(j4);
08298 IkReal x1161=(cj0*px);
08299 IkReal x1162=(sj0*sj1);
08300 IkReal x1163=((1.0)*cj1);
08301 IkReal x1164=((1.0)*sj0);
08302 IkReal x1165=(cj0*r00);
08303 IkReal x1166=(cj3*x1160);
08304 IkReal x1167=(sj3*x1160);
08305 evalcond[0]=((((-1.0)*x1159))+(((-1.0)*r00*x1164))+((cj0*r01)));
08306 evalcond[1]=((0.00025116)+(((-0.05525)*x1159))+(((-1.0)*px*x1164))+((cj0*py)));
08307 evalcond[2]=(x1167+((sj1*x1165))+((r01*x1162))+((cj1*r02)));
08308 evalcond[3]=((((-1.0)*r01*sj0*x1163))+(((-1.0)*x1163*x1165))+((r02*sj1))+(((-1.0)*x1166)));
08309 evalcond[4]=((-0.04230543)+(((0.05525)*x1167))+((sj1*x1161))+(((0.278775)*cj3))+((cj1*pz))+(((-0.0137)*sj3))+((py*x1162)));
08310 evalcond[5]=((((0.0137)*cj3))+(((-0.05525)*x1166))+((pz*sj1))+(((-1.0)*x1161*x1163))+(((-1.0)*py*sj0*x1163))+(((0.278775)*sj3)));
08311 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
08312 {
08313 continue;
08314 }
08315 }
08316
08317 {
08318 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08319 vinfos[0].jointtype = 1;
08320 vinfos[0].foffset = j0;
08321 vinfos[0].indices[0] = _ij0[0];
08322 vinfos[0].indices[1] = _ij0[1];
08323 vinfos[0].maxsolutions = _nj0;
08324 vinfos[1].jointtype = 1;
08325 vinfos[1].foffset = j1;
08326 vinfos[1].indices[0] = _ij1[0];
08327 vinfos[1].indices[1] = _ij1[1];
08328 vinfos[1].maxsolutions = _nj1;
08329 vinfos[2].jointtype = 1;
08330 vinfos[2].foffset = j2;
08331 vinfos[2].indices[0] = _ij2[0];
08332 vinfos[2].indices[1] = _ij2[1];
08333 vinfos[2].maxsolutions = _nj2;
08334 vinfos[3].jointtype = 1;
08335 vinfos[3].foffset = j3;
08336 vinfos[3].indices[0] = _ij3[0];
08337 vinfos[3].indices[1] = _ij3[1];
08338 vinfos[3].maxsolutions = _nj3;
08339 vinfos[4].jointtype = 1;
08340 vinfos[4].foffset = j4;
08341 vinfos[4].indices[0] = _ij4[0];
08342 vinfos[4].indices[1] = _ij4[1];
08343 vinfos[4].maxsolutions = _nj4;
08344 std::vector<int> vfree(0);
08345 solutions.AddSolution(vinfos,vfree);
08346 }
08347 }
08348 }
08349
08350 }
08351
08352 }
08353
08354 } else
08355 {
08356 {
08357 IkReal j4array[1], cj4array[1], sj4array[1];
08358 bool j4valid[1]={false};
08359 _nj4 = 1;
08360 IkReal x1168=((1.0)*cj1);
08361 CheckValue<IkReal> x1169=IKPowWithIntegerCheck(cj3,-1);
08362 if(!x1169.valid){
08363 continue;
08364 }
08365 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1169.value)*(((((-1.0)*cj0*r00*x1168))+(((-1.0)*r01*sj0*x1168))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((x1169.value)*(((((-1.0)*cj0*r00*x1168))+(((-1.0)*r01*sj0*x1168))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
08366 continue;
08367 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((x1169.value)*(((((-1.0)*cj0*r00*x1168))+(((-1.0)*r01*sj0*x1168))+((r02*sj1))))));
08368 sj4array[0]=IKsin(j4array[0]);
08369 cj4array[0]=IKcos(j4array[0]);
08370 if( j4array[0] > IKPI )
08371 {
08372 j4array[0]-=IK2PI;
08373 }
08374 else if( j4array[0] < -IKPI )
08375 { j4array[0]+=IK2PI;
08376 }
08377 j4valid[0] = true;
08378 for(int ij4 = 0; ij4 < 1; ++ij4)
08379 {
08380 if( !j4valid[ij4] )
08381 {
08382 continue;
08383 }
08384 _ij4[0] = ij4; _ij4[1] = -1;
08385 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08386 {
08387 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08388 {
08389 j4valid[iij4]=false; _ij4[1] = iij4; break;
08390 }
08391 }
08392 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08393 {
08394 IkReal evalcond[6];
08395 IkReal x1170=IKsin(j4);
08396 IkReal x1171=IKcos(j4);
08397 IkReal x1172=(cj0*px);
08398 IkReal x1173=(sj0*sj1);
08399 IkReal x1174=((1.0)*cj1);
08400 IkReal x1175=((1.0)*sj0);
08401 IkReal x1176=(cj0*r00);
08402 IkReal x1177=(cj3*x1171);
08403 IkReal x1178=(sj3*x1171);
08404 evalcond[0]=((((-1.0)*r00*x1175))+((cj0*r01))+(((-1.0)*x1170)));
08405 evalcond[1]=((0.00025116)+(((-0.05525)*x1170))+(((-1.0)*px*x1175))+((cj0*py)));
08406 evalcond[2]=(x1178+((sj1*x1176))+((r01*x1173))+((cj1*r02)));
08407 evalcond[3]=((((-1.0)*r01*sj0*x1174))+((r02*sj1))+(((-1.0)*x1174*x1176))+(((-1.0)*x1177)));
08408 evalcond[4]=((-0.04230543)+(((0.05525)*x1178))+((sj1*x1172))+(((0.278775)*cj3))+((cj1*pz))+(((-0.0137)*sj3))+((py*x1173)));
08409 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x1172*x1174))+(((-0.05525)*x1177))+((pz*sj1))+(((0.278775)*sj3))+(((-1.0)*py*sj0*x1174)));
08410 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
08411 {
08412 continue;
08413 }
08414 }
08415
08416 {
08417 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08418 vinfos[0].jointtype = 1;
08419 vinfos[0].foffset = j0;
08420 vinfos[0].indices[0] = _ij0[0];
08421 vinfos[0].indices[1] = _ij0[1];
08422 vinfos[0].maxsolutions = _nj0;
08423 vinfos[1].jointtype = 1;
08424 vinfos[1].foffset = j1;
08425 vinfos[1].indices[0] = _ij1[0];
08426 vinfos[1].indices[1] = _ij1[1];
08427 vinfos[1].maxsolutions = _nj1;
08428 vinfos[2].jointtype = 1;
08429 vinfos[2].foffset = j2;
08430 vinfos[2].indices[0] = _ij2[0];
08431 vinfos[2].indices[1] = _ij2[1];
08432 vinfos[2].maxsolutions = _nj2;
08433 vinfos[3].jointtype = 1;
08434 vinfos[3].foffset = j3;
08435 vinfos[3].indices[0] = _ij3[0];
08436 vinfos[3].indices[1] = _ij3[1];
08437 vinfos[3].maxsolutions = _nj3;
08438 vinfos[4].jointtype = 1;
08439 vinfos[4].foffset = j4;
08440 vinfos[4].indices[0] = _ij4[0];
08441 vinfos[4].indices[1] = _ij4[1];
08442 vinfos[4].maxsolutions = _nj4;
08443 std::vector<int> vfree(0);
08444 solutions.AddSolution(vinfos,vfree);
08445 }
08446 }
08447 }
08448
08449 }
08450
08451 }
08452
08453 }
08454 } while(0);
08455 if( bgotonextstatement )
08456 {
08457 bool bgotonextstatement = true;
08458 do
08459 {
08460 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j2)))), 6.28318530717959)));
08461 if( IKabs(evalcond[0]) < 0.0000010000000000 )
08462 {
08463 bgotonextstatement=false;
08464 {
08465 IkReal j4eval[1];
08466 sj2=1.0;
08467 cj2=0;
08468 j2=1.5707963267949;
08469 j4eval[0]=sj3;
08470 if( IKabs(j4eval[0]) < 0.0000010000000000 )
08471 {
08472 {
08473 IkReal j4eval[1];
08474 sj2=1.0;
08475 cj2=0;
08476 j2=1.5707963267949;
08477 j4eval[0]=cj3;
08478 if( IKabs(j4eval[0]) < 0.0000010000000000 )
08479 {
08480 {
08481 IkReal evalcond[3];
08482 bool bgotonextstatement = true;
08483 do
08484 {
08485 IkReal x1179=((1.0)*cj1);
08486 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
08487 evalcond[1]=((((-1.0)*r01*sj0*x1179))+(((-1.0)*cj0*r00*x1179))+((r02*sj1)));
08488 evalcond[2]=((0.278775)+(((-1.0)*cj0*px*x1179))+((pz*sj1))+(((-1.0)*py*sj0*x1179)));
08489 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
08490 {
08491 bgotonextstatement=false;
08492 {
08493 IkReal j4array[1], cj4array[1], sj4array[1];
08494 bool j4valid[1]={false};
08495 _nj4 = 1;
08496 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
08497 continue;
08498 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), ((((-1.0)*r00*sj0))+((cj0*r01))));
08499 sj4array[0]=IKsin(j4array[0]);
08500 cj4array[0]=IKcos(j4array[0]);
08501 if( j4array[0] > IKPI )
08502 {
08503 j4array[0]-=IK2PI;
08504 }
08505 else if( j4array[0] < -IKPI )
08506 { j4array[0]+=IK2PI;
08507 }
08508 j4valid[0] = true;
08509 for(int ij4 = 0; ij4 < 1; ++ij4)
08510 {
08511 if( !j4valid[ij4] )
08512 {
08513 continue;
08514 }
08515 _ij4[0] = ij4; _ij4[1] = -1;
08516 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08517 {
08518 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08519 {
08520 j4valid[iij4]=false; _ij4[1] = iij4; break;
08521 }
08522 }
08523 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08524 {
08525 IkReal evalcond[4];
08526 IkReal x1180=IKcos(j4);
08527 IkReal x1181=IKsin(j4);
08528 IkReal x1182=(sj0*sj1);
08529 IkReal x1183=(cj0*sj1);
08530 IkReal x1184=((1.0)*sj0);
08531 evalcond[0]=((((-1.0)*x1180))+(((-1.0)*r00*x1184))+((cj0*r01)));
08532 evalcond[1]=((-0.21004884)+(((-0.05525)*x1180))+((cj0*py))+(((-1.0)*px*x1184)));
08533 evalcond[2]=(((r00*x1183))+((r01*x1182))+((cj1*r02))+(((-1.0)*x1181)));
08534 evalcond[3]=((-0.26630543)+(((-0.05525)*x1181))+((py*x1182))+((cj1*pz))+((px*x1183)));
08535 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08536 {
08537 continue;
08538 }
08539 }
08540
08541 {
08542 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08543 vinfos[0].jointtype = 1;
08544 vinfos[0].foffset = j0;
08545 vinfos[0].indices[0] = _ij0[0];
08546 vinfos[0].indices[1] = _ij0[1];
08547 vinfos[0].maxsolutions = _nj0;
08548 vinfos[1].jointtype = 1;
08549 vinfos[1].foffset = j1;
08550 vinfos[1].indices[0] = _ij1[0];
08551 vinfos[1].indices[1] = _ij1[1];
08552 vinfos[1].maxsolutions = _nj1;
08553 vinfos[2].jointtype = 1;
08554 vinfos[2].foffset = j2;
08555 vinfos[2].indices[0] = _ij2[0];
08556 vinfos[2].indices[1] = _ij2[1];
08557 vinfos[2].maxsolutions = _nj2;
08558 vinfos[3].jointtype = 1;
08559 vinfos[3].foffset = j3;
08560 vinfos[3].indices[0] = _ij3[0];
08561 vinfos[3].indices[1] = _ij3[1];
08562 vinfos[3].maxsolutions = _nj3;
08563 vinfos[4].jointtype = 1;
08564 vinfos[4].foffset = j4;
08565 vinfos[4].indices[0] = _ij4[0];
08566 vinfos[4].indices[1] = _ij4[1];
08567 vinfos[4].maxsolutions = _nj4;
08568 std::vector<int> vfree(0);
08569 solutions.AddSolution(vinfos,vfree);
08570 }
08571 }
08572 }
08573
08574 }
08575 } while(0);
08576 if( bgotonextstatement )
08577 {
08578 bool bgotonextstatement = true;
08579 do
08580 {
08581 IkReal x1185=((1.0)*cj1);
08582 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
08583 evalcond[1]=(((r02*sj1))+(((-1.0)*r01*sj0*x1185))+(((-1.0)*cj0*r00*x1185)));
08584 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1185))+((pz*sj1))+(((-1.0)*cj0*px*x1185)));
08585 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
08586 {
08587 bgotonextstatement=false;
08588 {
08589 IkReal j4array[1], cj4array[1], sj4array[1];
08590 bool j4valid[1]={false};
08591 _nj4 = 1;
08592 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
08593 continue;
08594 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), (((r00*sj0))+(((-1.0)*cj0*r01))));
08595 sj4array[0]=IKsin(j4array[0]);
08596 cj4array[0]=IKcos(j4array[0]);
08597 if( j4array[0] > IKPI )
08598 {
08599 j4array[0]-=IK2PI;
08600 }
08601 else if( j4array[0] < -IKPI )
08602 { j4array[0]+=IK2PI;
08603 }
08604 j4valid[0] = true;
08605 for(int ij4 = 0; ij4 < 1; ++ij4)
08606 {
08607 if( !j4valid[ij4] )
08608 {
08609 continue;
08610 }
08611 _ij4[0] = ij4; _ij4[1] = -1;
08612 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08613 {
08614 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08615 {
08616 j4valid[iij4]=false; _ij4[1] = iij4; break;
08617 }
08618 }
08619 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08620 {
08621 IkReal evalcond[4];
08622 IkReal x1186=IKcos(j4);
08623 IkReal x1187=IKsin(j4);
08624 IkReal x1188=(sj0*sj1);
08625 IkReal x1189=(cj0*sj1);
08626 IkReal x1190=((1.0)*sj0);
08627 evalcond[0]=((((-1.0)*r00*x1190))+x1186+((cj0*r01)));
08628 evalcond[1]=((-0.23744884)+(((0.05525)*x1186))+(((-1.0)*px*x1190))+((cj0*py)));
08629 evalcond[2]=(((r00*x1189))+((r01*x1188))+((cj1*r02))+(((-1.0)*x1187)));
08630 evalcond[3]=((-0.26630543)+(((-0.05525)*x1187))+((py*x1188))+((cj1*pz))+((px*x1189)));
08631 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08632 {
08633 continue;
08634 }
08635 }
08636
08637 {
08638 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08639 vinfos[0].jointtype = 1;
08640 vinfos[0].foffset = j0;
08641 vinfos[0].indices[0] = _ij0[0];
08642 vinfos[0].indices[1] = _ij0[1];
08643 vinfos[0].maxsolutions = _nj0;
08644 vinfos[1].jointtype = 1;
08645 vinfos[1].foffset = j1;
08646 vinfos[1].indices[0] = _ij1[0];
08647 vinfos[1].indices[1] = _ij1[1];
08648 vinfos[1].maxsolutions = _nj1;
08649 vinfos[2].jointtype = 1;
08650 vinfos[2].foffset = j2;
08651 vinfos[2].indices[0] = _ij2[0];
08652 vinfos[2].indices[1] = _ij2[1];
08653 vinfos[2].maxsolutions = _nj2;
08654 vinfos[3].jointtype = 1;
08655 vinfos[3].foffset = j3;
08656 vinfos[3].indices[0] = _ij3[0];
08657 vinfos[3].indices[1] = _ij3[1];
08658 vinfos[3].maxsolutions = _nj3;
08659 vinfos[4].jointtype = 1;
08660 vinfos[4].foffset = j4;
08661 vinfos[4].indices[0] = _ij4[0];
08662 vinfos[4].indices[1] = _ij4[1];
08663 vinfos[4].maxsolutions = _nj4;
08664 std::vector<int> vfree(0);
08665 solutions.AddSolution(vinfos,vfree);
08666 }
08667 }
08668 }
08669
08670 }
08671 } while(0);
08672 if( bgotonextstatement )
08673 {
08674 bool bgotonextstatement = true;
08675 do
08676 {
08677 IkReal x1191=((1.0)*sj0);
08678 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
08679 evalcond[1]=((((-1.0)*r00*x1191))+((cj0*r01)));
08680 evalcond[2]=((-0.50252384)+(((-1.0)*px*x1191))+((cj0*py)));
08681 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
08682 {
08683 bgotonextstatement=false;
08684 {
08685 IkReal j4array[1], cj4array[1], sj4array[1];
08686 bool j4valid[1]={false};
08687 _nj4 = 1;
08688 IkReal x1192=((1.0)*cj1);
08689 IkReal x1193=(cj0*r00);
08690 IkReal x1194=(r01*sj0);
08691 if( IKabs((((cj1*r02))+((sj1*x1194))+((sj1*x1193)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*x1192*x1193))+(((-1.0)*x1192*x1194)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x1194))+((sj1*x1193))))+IKsqr((((r02*sj1))+(((-1.0)*x1192*x1193))+(((-1.0)*x1192*x1194))))-1) <= IKFAST_SINCOS_THRESH )
08692 continue;
08693 j4array[0]=IKatan2((((cj1*r02))+((sj1*x1194))+((sj1*x1193))), (((r02*sj1))+(((-1.0)*x1192*x1193))+(((-1.0)*x1192*x1194))));
08694 sj4array[0]=IKsin(j4array[0]);
08695 cj4array[0]=IKcos(j4array[0]);
08696 if( j4array[0] > IKPI )
08697 {
08698 j4array[0]-=IK2PI;
08699 }
08700 else if( j4array[0] < -IKPI )
08701 { j4array[0]+=IK2PI;
08702 }
08703 j4valid[0] = true;
08704 for(int ij4 = 0; ij4 < 1; ++ij4)
08705 {
08706 if( !j4valid[ij4] )
08707 {
08708 continue;
08709 }
08710 _ij4[0] = ij4; _ij4[1] = -1;
08711 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08712 {
08713 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08714 {
08715 j4valid[iij4]=false; _ij4[1] = iij4; break;
08716 }
08717 }
08718 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08719 {
08720 IkReal evalcond[4];
08721 IkReal x1195=IKsin(j4);
08722 IkReal x1196=IKcos(j4);
08723 IkReal x1197=(sj0*sj1);
08724 IkReal x1198=(cj0*sj1);
08725 IkReal x1199=((1.0)*cj0*cj1);
08726 IkReal x1200=((1.0)*cj1*sj0);
08727 evalcond[0]=(((r01*x1197))+((r00*x1198))+((cj1*r02))+(((-1.0)*x1195)));
08728 evalcond[1]=((-0.26630543)+((py*x1197))+(((-0.05525)*x1195))+((cj1*pz))+((px*x1198)));
08729 evalcond[2]=((((-1.0)*r00*x1199))+(((-1.0)*r01*x1200))+((r02*sj1))+(((-1.0)*x1196)));
08730 evalcond[3]=((0.0137)+(((-0.05525)*x1196))+(((-1.0)*px*x1199))+((pz*sj1))+(((-1.0)*py*x1200)));
08731 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08732 {
08733 continue;
08734 }
08735 }
08736
08737 {
08738 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08739 vinfos[0].jointtype = 1;
08740 vinfos[0].foffset = j0;
08741 vinfos[0].indices[0] = _ij0[0];
08742 vinfos[0].indices[1] = _ij0[1];
08743 vinfos[0].maxsolutions = _nj0;
08744 vinfos[1].jointtype = 1;
08745 vinfos[1].foffset = j1;
08746 vinfos[1].indices[0] = _ij1[0];
08747 vinfos[1].indices[1] = _ij1[1];
08748 vinfos[1].maxsolutions = _nj1;
08749 vinfos[2].jointtype = 1;
08750 vinfos[2].foffset = j2;
08751 vinfos[2].indices[0] = _ij2[0];
08752 vinfos[2].indices[1] = _ij2[1];
08753 vinfos[2].maxsolutions = _nj2;
08754 vinfos[3].jointtype = 1;
08755 vinfos[3].foffset = j3;
08756 vinfos[3].indices[0] = _ij3[0];
08757 vinfos[3].indices[1] = _ij3[1];
08758 vinfos[3].maxsolutions = _nj3;
08759 vinfos[4].jointtype = 1;
08760 vinfos[4].foffset = j4;
08761 vinfos[4].indices[0] = _ij4[0];
08762 vinfos[4].indices[1] = _ij4[1];
08763 vinfos[4].maxsolutions = _nj4;
08764 std::vector<int> vfree(0);
08765 solutions.AddSolution(vinfos,vfree);
08766 }
08767 }
08768 }
08769
08770 }
08771 } while(0);
08772 if( bgotonextstatement )
08773 {
08774 bool bgotonextstatement = true;
08775 do
08776 {
08777 IkReal x1201=((1.0)*sj0);
08778 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
08779 evalcond[1]=((((-1.0)*r00*x1201))+((cj0*r01)));
08780 evalcond[2]=((0.05502616)+(((-1.0)*px*x1201))+((cj0*py)));
08781 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
08782 {
08783 bgotonextstatement=false;
08784 {
08785 IkReal j4array[1], cj4array[1], sj4array[1];
08786 bool j4valid[1]={false};
08787 _nj4 = 1;
08788 IkReal x1202=(r01*sj0);
08789 IkReal x1203=(cj0*r00);
08790 if( IKabs((((cj1*r02))+((sj1*x1202))+((sj1*x1203)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*x1203))+((cj1*x1202))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x1202))+((sj1*x1203))))+IKsqr((((cj1*x1203))+((cj1*x1202))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
08791 continue;
08792 j4array[0]=IKatan2((((cj1*r02))+((sj1*x1202))+((sj1*x1203))), (((cj1*x1203))+((cj1*x1202))+(((-1.0)*r02*sj1))));
08793 sj4array[0]=IKsin(j4array[0]);
08794 cj4array[0]=IKcos(j4array[0]);
08795 if( j4array[0] > IKPI )
08796 {
08797 j4array[0]-=IK2PI;
08798 }
08799 else if( j4array[0] < -IKPI )
08800 { j4array[0]+=IK2PI;
08801 }
08802 j4valid[0] = true;
08803 for(int ij4 = 0; ij4 < 1; ++ij4)
08804 {
08805 if( !j4valid[ij4] )
08806 {
08807 continue;
08808 }
08809 _ij4[0] = ij4; _ij4[1] = -1;
08810 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08811 {
08812 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08813 {
08814 j4valid[iij4]=false; _ij4[1] = iij4; break;
08815 }
08816 }
08817 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08818 {
08819 IkReal evalcond[4];
08820 IkReal x1204=IKsin(j4);
08821 IkReal x1205=IKcos(j4);
08822 IkReal x1206=(cj0*r00);
08823 IkReal x1207=(r01*sj0);
08824 IkReal x1208=((1.0)*cj1);
08825 IkReal x1209=(py*sj0);
08826 IkReal x1210=(cj0*px);
08827 evalcond[0]=(x1205+((r02*sj1))+(((-1.0)*x1206*x1208))+(((-1.0)*x1207*x1208)));
08828 evalcond[1]=(((cj1*r02))+((sj1*x1206))+((sj1*x1207))+(((-1.0)*x1204)));
08829 evalcond[2]=((-0.26630543)+((cj1*pz))+((sj1*x1209))+((sj1*x1210))+(((-0.05525)*x1204)));
08830 evalcond[3]=((-0.0137)+(((-1.0)*x1208*x1210))+((pz*sj1))+(((0.05525)*x1205))+(((-1.0)*x1208*x1209)));
08831 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
08832 {
08833 continue;
08834 }
08835 }
08836
08837 {
08838 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08839 vinfos[0].jointtype = 1;
08840 vinfos[0].foffset = j0;
08841 vinfos[0].indices[0] = _ij0[0];
08842 vinfos[0].indices[1] = _ij0[1];
08843 vinfos[0].maxsolutions = _nj0;
08844 vinfos[1].jointtype = 1;
08845 vinfos[1].foffset = j1;
08846 vinfos[1].indices[0] = _ij1[0];
08847 vinfos[1].indices[1] = _ij1[1];
08848 vinfos[1].maxsolutions = _nj1;
08849 vinfos[2].jointtype = 1;
08850 vinfos[2].foffset = j2;
08851 vinfos[2].indices[0] = _ij2[0];
08852 vinfos[2].indices[1] = _ij2[1];
08853 vinfos[2].maxsolutions = _nj2;
08854 vinfos[3].jointtype = 1;
08855 vinfos[3].foffset = j3;
08856 vinfos[3].indices[0] = _ij3[0];
08857 vinfos[3].indices[1] = _ij3[1];
08858 vinfos[3].maxsolutions = _nj3;
08859 vinfos[4].jointtype = 1;
08860 vinfos[4].foffset = j4;
08861 vinfos[4].indices[0] = _ij4[0];
08862 vinfos[4].indices[1] = _ij4[1];
08863 vinfos[4].maxsolutions = _nj4;
08864 std::vector<int> vfree(0);
08865 solutions.AddSolution(vinfos,vfree);
08866 }
08867 }
08868 }
08869
08870 }
08871 } while(0);
08872 if( bgotonextstatement )
08873 {
08874 bool bgotonextstatement = true;
08875 do
08876 {
08877 if( 1 )
08878 {
08879 bgotonextstatement=false;
08880 continue;
08881
08882 }
08883 } while(0);
08884 if( bgotonextstatement )
08885 {
08886 }
08887 }
08888 }
08889 }
08890 }
08891 }
08892
08893 } else
08894 {
08895 {
08896 IkReal j4array[1], cj4array[1], sj4array[1];
08897 bool j4valid[1]={false};
08898 _nj4 = 1;
08899 IkReal x1211=((1.0)*cj1);
08900 IkReal x1212=(cj0*r00);
08901 IkReal x1213=(r01*sj0);
08902 CheckValue<IkReal> x1214=IKPowWithIntegerCheck(cj3,-1);
08903 if(!x1214.valid){
08904 continue;
08905 }
08906 if( IKabs((((cj1*r02))+((sj1*x1213))+((sj1*x1212)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1214.value)*((((r02*sj1))+(((-1.0)*x1211*x1213))+(((-1.0)*x1211*x1212)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x1213))+((sj1*x1212))))+IKsqr(((x1214.value)*((((r02*sj1))+(((-1.0)*x1211*x1213))+(((-1.0)*x1211*x1212))))))-1) <= IKFAST_SINCOS_THRESH )
08907 continue;
08908 j4array[0]=IKatan2((((cj1*r02))+((sj1*x1213))+((sj1*x1212))), ((x1214.value)*((((r02*sj1))+(((-1.0)*x1211*x1213))+(((-1.0)*x1211*x1212))))));
08909 sj4array[0]=IKsin(j4array[0]);
08910 cj4array[0]=IKcos(j4array[0]);
08911 if( j4array[0] > IKPI )
08912 {
08913 j4array[0]-=IK2PI;
08914 }
08915 else if( j4array[0] < -IKPI )
08916 { j4array[0]+=IK2PI;
08917 }
08918 j4valid[0] = true;
08919 for(int ij4 = 0; ij4 < 1; ++ij4)
08920 {
08921 if( !j4valid[ij4] )
08922 {
08923 continue;
08924 }
08925 _ij4[0] = ij4; _ij4[1] = -1;
08926 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
08927 {
08928 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
08929 {
08930 j4valid[iij4]=false; _ij4[1] = iij4; break;
08931 }
08932 }
08933 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
08934 {
08935 IkReal evalcond[6];
08936 IkReal x1215=IKsin(j4);
08937 IkReal x1216=IKcos(j4);
08938 IkReal x1217=(cj0*px);
08939 IkReal x1218=(sj0*sj1);
08940 IkReal x1219=((1.0)*cj1);
08941 IkReal x1220=((1.0)*sj0);
08942 IkReal x1221=(cj0*r00);
08943 IkReal x1222=((1.0)*x1216);
08944 IkReal x1223=((0.05525)*x1216);
08945 evalcond[0]=((((-1.0)*r00*x1220))+(((-1.0)*sj3*x1222))+((cj0*r01)));
08946 evalcond[1]=(((sj1*x1221))+((cj1*r02))+((r01*x1218))+(((-1.0)*x1215)));
08947 evalcond[2]=((-0.26630543)+((cj1*pz))+(((-0.05525)*x1215))+((sj1*x1217))+((py*x1218)));
08948 evalcond[3]=(((r02*sj1))+(((-1.0)*x1219*x1221))+(((-1.0)*r01*sj0*x1219))+(((-1.0)*cj3*x1222)));
08949 evalcond[4]=((-0.22374884)+(((-1.0)*px*x1220))+(((-1.0)*sj3*x1223))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((cj0*py)));
08950 evalcond[5]=((((-1.0)*py*sj0*x1219))+(((0.0137)*cj3))+(((-1.0)*x1217*x1219))+((pz*sj1))+(((0.278775)*sj3))+(((-1.0)*cj3*x1223)));
08951 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
08952 {
08953 continue;
08954 }
08955 }
08956
08957 {
08958 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
08959 vinfos[0].jointtype = 1;
08960 vinfos[0].foffset = j0;
08961 vinfos[0].indices[0] = _ij0[0];
08962 vinfos[0].indices[1] = _ij0[1];
08963 vinfos[0].maxsolutions = _nj0;
08964 vinfos[1].jointtype = 1;
08965 vinfos[1].foffset = j1;
08966 vinfos[1].indices[0] = _ij1[0];
08967 vinfos[1].indices[1] = _ij1[1];
08968 vinfos[1].maxsolutions = _nj1;
08969 vinfos[2].jointtype = 1;
08970 vinfos[2].foffset = j2;
08971 vinfos[2].indices[0] = _ij2[0];
08972 vinfos[2].indices[1] = _ij2[1];
08973 vinfos[2].maxsolutions = _nj2;
08974 vinfos[3].jointtype = 1;
08975 vinfos[3].foffset = j3;
08976 vinfos[3].indices[0] = _ij3[0];
08977 vinfos[3].indices[1] = _ij3[1];
08978 vinfos[3].maxsolutions = _nj3;
08979 vinfos[4].jointtype = 1;
08980 vinfos[4].foffset = j4;
08981 vinfos[4].indices[0] = _ij4[0];
08982 vinfos[4].indices[1] = _ij4[1];
08983 vinfos[4].maxsolutions = _nj4;
08984 std::vector<int> vfree(0);
08985 solutions.AddSolution(vinfos,vfree);
08986 }
08987 }
08988 }
08989
08990 }
08991
08992 }
08993
08994 } else
08995 {
08996 {
08997 IkReal j4array[1], cj4array[1], sj4array[1];
08998 bool j4valid[1]={false};
08999 _nj4 = 1;
09000 CheckValue<IkReal> x1224=IKPowWithIntegerCheck(sj3,-1);
09001 if(!x1224.valid){
09002 continue;
09003 }
09004 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1224.value)*(((((-1.0)*r00*sj0))+((cj0*r01)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr(((x1224.value)*(((((-1.0)*r00*sj0))+((cj0*r01))))))-1) <= IKFAST_SINCOS_THRESH )
09005 continue;
09006 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), ((x1224.value)*(((((-1.0)*r00*sj0))+((cj0*r01))))));
09007 sj4array[0]=IKsin(j4array[0]);
09008 cj4array[0]=IKcos(j4array[0]);
09009 if( j4array[0] > IKPI )
09010 {
09011 j4array[0]-=IK2PI;
09012 }
09013 else if( j4array[0] < -IKPI )
09014 { j4array[0]+=IK2PI;
09015 }
09016 j4valid[0] = true;
09017 for(int ij4 = 0; ij4 < 1; ++ij4)
09018 {
09019 if( !j4valid[ij4] )
09020 {
09021 continue;
09022 }
09023 _ij4[0] = ij4; _ij4[1] = -1;
09024 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09025 {
09026 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09027 {
09028 j4valid[iij4]=false; _ij4[1] = iij4; break;
09029 }
09030 }
09031 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09032 {
09033 IkReal evalcond[6];
09034 IkReal x1225=IKsin(j4);
09035 IkReal x1226=IKcos(j4);
09036 IkReal x1227=(cj0*px);
09037 IkReal x1228=(sj0*sj1);
09038 IkReal x1229=((1.0)*cj1);
09039 IkReal x1230=((1.0)*sj0);
09040 IkReal x1231=(cj0*r00);
09041 IkReal x1232=((1.0)*x1226);
09042 IkReal x1233=((0.05525)*x1226);
09043 evalcond[0]=((((-1.0)*r00*x1230))+(((-1.0)*sj3*x1232))+((cj0*r01)));
09044 evalcond[1]=(((sj1*x1231))+(((-1.0)*x1225))+((r01*x1228))+((cj1*r02)));
09045 evalcond[2]=((-0.26630543)+((sj1*x1227))+((py*x1228))+(((-0.05525)*x1225))+((cj1*pz)));
09046 evalcond[3]=((((-1.0)*r01*sj0*x1229))+((r02*sj1))+(((-1.0)*x1229*x1231))+(((-1.0)*cj3*x1232)));
09047 evalcond[4]=((-0.22374884)+(((-1.0)*px*x1230))+(((-1.0)*sj3*x1233))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((cj0*py)));
09048 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x1229))+(((-1.0)*x1227*x1229))+((pz*sj1))+(((-1.0)*cj3*x1233))+(((0.278775)*sj3)));
09049 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
09050 {
09051 continue;
09052 }
09053 }
09054
09055 {
09056 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09057 vinfos[0].jointtype = 1;
09058 vinfos[0].foffset = j0;
09059 vinfos[0].indices[0] = _ij0[0];
09060 vinfos[0].indices[1] = _ij0[1];
09061 vinfos[0].maxsolutions = _nj0;
09062 vinfos[1].jointtype = 1;
09063 vinfos[1].foffset = j1;
09064 vinfos[1].indices[0] = _ij1[0];
09065 vinfos[1].indices[1] = _ij1[1];
09066 vinfos[1].maxsolutions = _nj1;
09067 vinfos[2].jointtype = 1;
09068 vinfos[2].foffset = j2;
09069 vinfos[2].indices[0] = _ij2[0];
09070 vinfos[2].indices[1] = _ij2[1];
09071 vinfos[2].maxsolutions = _nj2;
09072 vinfos[3].jointtype = 1;
09073 vinfos[3].foffset = j3;
09074 vinfos[3].indices[0] = _ij3[0];
09075 vinfos[3].indices[1] = _ij3[1];
09076 vinfos[3].maxsolutions = _nj3;
09077 vinfos[4].jointtype = 1;
09078 vinfos[4].foffset = j4;
09079 vinfos[4].indices[0] = _ij4[0];
09080 vinfos[4].indices[1] = _ij4[1];
09081 vinfos[4].maxsolutions = _nj4;
09082 std::vector<int> vfree(0);
09083 solutions.AddSolution(vinfos,vfree);
09084 }
09085 }
09086 }
09087
09088 }
09089
09090 }
09091
09092 }
09093 } while(0);
09094 if( bgotonextstatement )
09095 {
09096 bool bgotonextstatement = true;
09097 do
09098 {
09099 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j2)))), 6.28318530717959)));
09100 if( IKabs(evalcond[0]) < 0.0000010000000000 )
09101 {
09102 bgotonextstatement=false;
09103 {
09104 IkReal j4eval[1];
09105 sj2=-1.0;
09106 cj2=0;
09107 j2=-1.5707963267949;
09108 j4eval[0]=sj3;
09109 if( IKabs(j4eval[0]) < 0.0000010000000000 )
09110 {
09111 {
09112 IkReal j4eval[1];
09113 sj2=-1.0;
09114 cj2=0;
09115 j2=-1.5707963267949;
09116 j4eval[0]=cj3;
09117 if( IKabs(j4eval[0]) < 0.0000010000000000 )
09118 {
09119 {
09120 IkReal evalcond[3];
09121 bool bgotonextstatement = true;
09122 do
09123 {
09124 IkReal x1234=((1.0)*cj1);
09125 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
09126 evalcond[1]=((((-1.0)*cj0*r00*x1234))+(((-1.0)*r01*sj0*x1234))+((r02*sj1)));
09127 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x1234))+((pz*sj1))+(((-1.0)*cj0*px*x1234)));
09128 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
09129 {
09130 bgotonextstatement=false;
09131 {
09132 IkReal j4array[1], cj4array[1], sj4array[1];
09133 bool j4valid[1]={false};
09134 _nj4 = 1;
09135 IkReal x1235=((1.0)*sj1);
09136 if( IKabs(((((-1.0)*cj0*r00*x1235))+(((-1.0)*r01*sj0*x1235))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*cj0*r00*x1235))+(((-1.0)*r01*sj0*x1235))+(((-1.0)*cj1*r02))))+IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
09137 continue;
09138 j4array[0]=IKatan2(((((-1.0)*cj0*r00*x1235))+(((-1.0)*r01*sj0*x1235))+(((-1.0)*cj1*r02))), (((r00*sj0))+(((-1.0)*cj0*r01))));
09139 sj4array[0]=IKsin(j4array[0]);
09140 cj4array[0]=IKcos(j4array[0]);
09141 if( j4array[0] > IKPI )
09142 {
09143 j4array[0]-=IK2PI;
09144 }
09145 else if( j4array[0] < -IKPI )
09146 { j4array[0]+=IK2PI;
09147 }
09148 j4valid[0] = true;
09149 for(int ij4 = 0; ij4 < 1; ++ij4)
09150 {
09151 if( !j4valid[ij4] )
09152 {
09153 continue;
09154 }
09155 _ij4[0] = ij4; _ij4[1] = -1;
09156 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09157 {
09158 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09159 {
09160 j4valid[iij4]=false; _ij4[1] = iij4; break;
09161 }
09162 }
09163 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09164 {
09165 IkReal evalcond[4];
09166 IkReal x1236=IKcos(j4);
09167 IkReal x1237=IKsin(j4);
09168 IkReal x1238=(sj0*sj1);
09169 IkReal x1239=(cj0*sj1);
09170 IkReal x1240=((1.0)*sj0);
09171 evalcond[0]=(x1236+(((-1.0)*r00*x1240))+((cj0*r01)));
09172 evalcond[1]=((0.21055116)+(((-1.0)*px*x1240))+(((0.05525)*x1236))+((cj0*py)));
09173 evalcond[2]=(x1237+((r00*x1239))+((r01*x1238))+((cj1*r02)));
09174 evalcond[3]=((-0.26630543)+((py*x1238))+(((0.05525)*x1237))+((cj1*pz))+((px*x1239)));
09175 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
09176 {
09177 continue;
09178 }
09179 }
09180
09181 {
09182 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09183 vinfos[0].jointtype = 1;
09184 vinfos[0].foffset = j0;
09185 vinfos[0].indices[0] = _ij0[0];
09186 vinfos[0].indices[1] = _ij0[1];
09187 vinfos[0].maxsolutions = _nj0;
09188 vinfos[1].jointtype = 1;
09189 vinfos[1].foffset = j1;
09190 vinfos[1].indices[0] = _ij1[0];
09191 vinfos[1].indices[1] = _ij1[1];
09192 vinfos[1].maxsolutions = _nj1;
09193 vinfos[2].jointtype = 1;
09194 vinfos[2].foffset = j2;
09195 vinfos[2].indices[0] = _ij2[0];
09196 vinfos[2].indices[1] = _ij2[1];
09197 vinfos[2].maxsolutions = _nj2;
09198 vinfos[3].jointtype = 1;
09199 vinfos[3].foffset = j3;
09200 vinfos[3].indices[0] = _ij3[0];
09201 vinfos[3].indices[1] = _ij3[1];
09202 vinfos[3].maxsolutions = _nj3;
09203 vinfos[4].jointtype = 1;
09204 vinfos[4].foffset = j4;
09205 vinfos[4].indices[0] = _ij4[0];
09206 vinfos[4].indices[1] = _ij4[1];
09207 vinfos[4].maxsolutions = _nj4;
09208 std::vector<int> vfree(0);
09209 solutions.AddSolution(vinfos,vfree);
09210 }
09211 }
09212 }
09213
09214 }
09215 } while(0);
09216 if( bgotonextstatement )
09217 {
09218 bool bgotonextstatement = true;
09219 do
09220 {
09221 IkReal x1241=((1.0)*cj1);
09222 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
09223 evalcond[1]=((((-1.0)*r01*sj0*x1241))+((r02*sj1))+(((-1.0)*cj0*r00*x1241)));
09224 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1241))+(((-1.0)*cj0*px*x1241))+((pz*sj1)));
09225 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
09226 {
09227 bgotonextstatement=false;
09228 {
09229 IkReal j4array[1], cj4array[1], sj4array[1];
09230 bool j4valid[1]={false};
09231 _nj4 = 1;
09232 IkReal x1242=((1.0)*sj1);
09233 if( IKabs(((((-1.0)*r01*sj0*x1242))+(((-1.0)*cj1*r02))+(((-1.0)*cj0*r00*x1242)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r01*sj0*x1242))+(((-1.0)*cj1*r02))+(((-1.0)*cj0*r00*x1242))))+IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
09234 continue;
09235 j4array[0]=IKatan2(((((-1.0)*r01*sj0*x1242))+(((-1.0)*cj1*r02))+(((-1.0)*cj0*r00*x1242))), ((((-1.0)*r00*sj0))+((cj0*r01))));
09236 sj4array[0]=IKsin(j4array[0]);
09237 cj4array[0]=IKcos(j4array[0]);
09238 if( j4array[0] > IKPI )
09239 {
09240 j4array[0]-=IK2PI;
09241 }
09242 else if( j4array[0] < -IKPI )
09243 { j4array[0]+=IK2PI;
09244 }
09245 j4valid[0] = true;
09246 for(int ij4 = 0; ij4 < 1; ++ij4)
09247 {
09248 if( !j4valid[ij4] )
09249 {
09250 continue;
09251 }
09252 _ij4[0] = ij4; _ij4[1] = -1;
09253 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09254 {
09255 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09256 {
09257 j4valid[iij4]=false; _ij4[1] = iij4; break;
09258 }
09259 }
09260 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09261 {
09262 IkReal evalcond[4];
09263 IkReal x1243=IKcos(j4);
09264 IkReal x1244=IKsin(j4);
09265 IkReal x1245=(sj0*sj1);
09266 IkReal x1246=(cj0*sj1);
09267 IkReal x1247=((1.0)*sj0);
09268 evalcond[0]=((((-1.0)*x1243))+(((-1.0)*r00*x1247))+((cj0*r01)));
09269 evalcond[1]=((0.23795116)+(((-1.0)*px*x1247))+(((-0.05525)*x1243))+((cj0*py)));
09270 evalcond[2]=(x1244+((cj1*r02))+((r01*x1245))+((r00*x1246)));
09271 evalcond[3]=((-0.26630543)+(((0.05525)*x1244))+((py*x1245))+((cj1*pz))+((px*x1246)));
09272 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
09273 {
09274 continue;
09275 }
09276 }
09277
09278 {
09279 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09280 vinfos[0].jointtype = 1;
09281 vinfos[0].foffset = j0;
09282 vinfos[0].indices[0] = _ij0[0];
09283 vinfos[0].indices[1] = _ij0[1];
09284 vinfos[0].maxsolutions = _nj0;
09285 vinfos[1].jointtype = 1;
09286 vinfos[1].foffset = j1;
09287 vinfos[1].indices[0] = _ij1[0];
09288 vinfos[1].indices[1] = _ij1[1];
09289 vinfos[1].maxsolutions = _nj1;
09290 vinfos[2].jointtype = 1;
09291 vinfos[2].foffset = j2;
09292 vinfos[2].indices[0] = _ij2[0];
09293 vinfos[2].indices[1] = _ij2[1];
09294 vinfos[2].maxsolutions = _nj2;
09295 vinfos[3].jointtype = 1;
09296 vinfos[3].foffset = j3;
09297 vinfos[3].indices[0] = _ij3[0];
09298 vinfos[3].indices[1] = _ij3[1];
09299 vinfos[3].maxsolutions = _nj3;
09300 vinfos[4].jointtype = 1;
09301 vinfos[4].foffset = j4;
09302 vinfos[4].indices[0] = _ij4[0];
09303 vinfos[4].indices[1] = _ij4[1];
09304 vinfos[4].maxsolutions = _nj4;
09305 std::vector<int> vfree(0);
09306 solutions.AddSolution(vinfos,vfree);
09307 }
09308 }
09309 }
09310
09311 }
09312 } while(0);
09313 if( bgotonextstatement )
09314 {
09315 bool bgotonextstatement = true;
09316 do
09317 {
09318 IkReal x1248=((1.0)*sj0);
09319 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
09320 evalcond[1]=((((-1.0)*r00*x1248))+((cj0*r01)));
09321 evalcond[2]=((0.50302616)+(((-1.0)*px*x1248))+((cj0*py)));
09322 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
09323 {
09324 bgotonextstatement=false;
09325 {
09326 IkReal j4array[1], cj4array[1], sj4array[1];
09327 bool j4valid[1]={false};
09328 _nj4 = 1;
09329 IkReal x1249=((1.0)*cj1);
09330 IkReal x1250=(r01*sj0);
09331 IkReal x1251=((1.0)*sj1);
09332 IkReal x1252=(cj0*r00);
09333 if( IKabs(((((-1.0)*r02*x1249))+(((-1.0)*x1251*x1252))+(((-1.0)*x1250*x1251)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*x1249*x1250))+(((-1.0)*x1249*x1252))+((r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r02*x1249))+(((-1.0)*x1251*x1252))+(((-1.0)*x1250*x1251))))+IKsqr(((((-1.0)*x1249*x1250))+(((-1.0)*x1249*x1252))+((r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
09334 continue;
09335 j4array[0]=IKatan2(((((-1.0)*r02*x1249))+(((-1.0)*x1251*x1252))+(((-1.0)*x1250*x1251))), ((((-1.0)*x1249*x1250))+(((-1.0)*x1249*x1252))+((r02*sj1))));
09336 sj4array[0]=IKsin(j4array[0]);
09337 cj4array[0]=IKcos(j4array[0]);
09338 if( j4array[0] > IKPI )
09339 {
09340 j4array[0]-=IK2PI;
09341 }
09342 else if( j4array[0] < -IKPI )
09343 { j4array[0]+=IK2PI;
09344 }
09345 j4valid[0] = true;
09346 for(int ij4 = 0; ij4 < 1; ++ij4)
09347 {
09348 if( !j4valid[ij4] )
09349 {
09350 continue;
09351 }
09352 _ij4[0] = ij4; _ij4[1] = -1;
09353 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09354 {
09355 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09356 {
09357 j4valid[iij4]=false; _ij4[1] = iij4; break;
09358 }
09359 }
09360 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09361 {
09362 IkReal evalcond[4];
09363 IkReal x1253=IKsin(j4);
09364 IkReal x1254=IKcos(j4);
09365 IkReal x1255=(r01*sj0);
09366 IkReal x1256=(cj0*sj1);
09367 IkReal x1257=((1.0)*cj1);
09368 IkReal x1258=(py*sj0);
09369 evalcond[0]=(x1253+((sj1*x1255))+((cj1*r02))+((r00*x1256)));
09370 evalcond[1]=((-0.26630543)+((sj1*x1258))+((cj1*pz))+(((0.05525)*x1253))+((px*x1256)));
09371 evalcond[2]=((((-1.0)*x1255*x1257))+((r02*sj1))+(((-1.0)*cj0*r00*x1257))+(((-1.0)*x1254)));
09372 evalcond[3]=((0.0137)+(((-0.05525)*x1254))+(((-1.0)*x1257*x1258))+(((-1.0)*cj0*px*x1257))+((pz*sj1)));
09373 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
09374 {
09375 continue;
09376 }
09377 }
09378
09379 {
09380 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09381 vinfos[0].jointtype = 1;
09382 vinfos[0].foffset = j0;
09383 vinfos[0].indices[0] = _ij0[0];
09384 vinfos[0].indices[1] = _ij0[1];
09385 vinfos[0].maxsolutions = _nj0;
09386 vinfos[1].jointtype = 1;
09387 vinfos[1].foffset = j1;
09388 vinfos[1].indices[0] = _ij1[0];
09389 vinfos[1].indices[1] = _ij1[1];
09390 vinfos[1].maxsolutions = _nj1;
09391 vinfos[2].jointtype = 1;
09392 vinfos[2].foffset = j2;
09393 vinfos[2].indices[0] = _ij2[0];
09394 vinfos[2].indices[1] = _ij2[1];
09395 vinfos[2].maxsolutions = _nj2;
09396 vinfos[3].jointtype = 1;
09397 vinfos[3].foffset = j3;
09398 vinfos[3].indices[0] = _ij3[0];
09399 vinfos[3].indices[1] = _ij3[1];
09400 vinfos[3].maxsolutions = _nj3;
09401 vinfos[4].jointtype = 1;
09402 vinfos[4].foffset = j4;
09403 vinfos[4].indices[0] = _ij4[0];
09404 vinfos[4].indices[1] = _ij4[1];
09405 vinfos[4].maxsolutions = _nj4;
09406 std::vector<int> vfree(0);
09407 solutions.AddSolution(vinfos,vfree);
09408 }
09409 }
09410 }
09411
09412 }
09413 } while(0);
09414 if( bgotonextstatement )
09415 {
09416 bool bgotonextstatement = true;
09417 do
09418 {
09419 IkReal x1259=((1.0)*sj0);
09420 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
09421 evalcond[1]=((((-1.0)*r00*x1259))+((cj0*r01)));
09422 evalcond[2]=((-0.05452384)+(((-1.0)*px*x1259))+((cj0*py)));
09423 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
09424 {
09425 bgotonextstatement=false;
09426 {
09427 IkReal j4array[1], cj4array[1], sj4array[1];
09428 bool j4valid[1]={false};
09429 _nj4 = 1;
09430 IkReal x1260=((1.0)*r02);
09431 IkReal x1261=((1.0)*sj1);
09432 IkReal x1262=(cj0*r00);
09433 IkReal x1263=(r01*sj0);
09434 if( IKabs(((((-1.0)*x1261*x1263))+(((-1.0)*x1261*x1262))+(((-1.0)*cj1*x1260)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*sj1*x1260))+((cj1*x1263))+((cj1*x1262)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*x1261*x1263))+(((-1.0)*x1261*x1262))+(((-1.0)*cj1*x1260))))+IKsqr(((((-1.0)*sj1*x1260))+((cj1*x1263))+((cj1*x1262))))-1) <= IKFAST_SINCOS_THRESH )
09435 continue;
09436 j4array[0]=IKatan2(((((-1.0)*x1261*x1263))+(((-1.0)*x1261*x1262))+(((-1.0)*cj1*x1260))), ((((-1.0)*sj1*x1260))+((cj1*x1263))+((cj1*x1262))));
09437 sj4array[0]=IKsin(j4array[0]);
09438 cj4array[0]=IKcos(j4array[0]);
09439 if( j4array[0] > IKPI )
09440 {
09441 j4array[0]-=IK2PI;
09442 }
09443 else if( j4array[0] < -IKPI )
09444 { j4array[0]+=IK2PI;
09445 }
09446 j4valid[0] = true;
09447 for(int ij4 = 0; ij4 < 1; ++ij4)
09448 {
09449 if( !j4valid[ij4] )
09450 {
09451 continue;
09452 }
09453 _ij4[0] = ij4; _ij4[1] = -1;
09454 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09455 {
09456 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09457 {
09458 j4valid[iij4]=false; _ij4[1] = iij4; break;
09459 }
09460 }
09461 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09462 {
09463 IkReal evalcond[4];
09464 IkReal x1264=IKsin(j4);
09465 IkReal x1265=IKcos(j4);
09466 IkReal x1266=((1.0)*cj1);
09467 IkReal x1267=(cj0*r00);
09468 IkReal x1268=(r01*sj0);
09469 IkReal x1269=(py*sj0);
09470 IkReal x1270=(cj0*px);
09471 evalcond[0]=(x1264+((sj1*x1268))+((sj1*x1267))+((cj1*r02)));
09472 evalcond[1]=(x1265+(((-1.0)*x1266*x1268))+(((-1.0)*x1266*x1267))+((r02*sj1)));
09473 evalcond[2]=((-0.26630543)+((sj1*x1270))+((sj1*x1269))+((cj1*pz))+(((0.05525)*x1264)));
09474 evalcond[3]=((-0.0137)+(((-1.0)*x1266*x1270))+(((-1.0)*x1266*x1269))+(((0.05525)*x1265))+((pz*sj1)));
09475 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
09476 {
09477 continue;
09478 }
09479 }
09480
09481 {
09482 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09483 vinfos[0].jointtype = 1;
09484 vinfos[0].foffset = j0;
09485 vinfos[0].indices[0] = _ij0[0];
09486 vinfos[0].indices[1] = _ij0[1];
09487 vinfos[0].maxsolutions = _nj0;
09488 vinfos[1].jointtype = 1;
09489 vinfos[1].foffset = j1;
09490 vinfos[1].indices[0] = _ij1[0];
09491 vinfos[1].indices[1] = _ij1[1];
09492 vinfos[1].maxsolutions = _nj1;
09493 vinfos[2].jointtype = 1;
09494 vinfos[2].foffset = j2;
09495 vinfos[2].indices[0] = _ij2[0];
09496 vinfos[2].indices[1] = _ij2[1];
09497 vinfos[2].maxsolutions = _nj2;
09498 vinfos[3].jointtype = 1;
09499 vinfos[3].foffset = j3;
09500 vinfos[3].indices[0] = _ij3[0];
09501 vinfos[3].indices[1] = _ij3[1];
09502 vinfos[3].maxsolutions = _nj3;
09503 vinfos[4].jointtype = 1;
09504 vinfos[4].foffset = j4;
09505 vinfos[4].indices[0] = _ij4[0];
09506 vinfos[4].indices[1] = _ij4[1];
09507 vinfos[4].maxsolutions = _nj4;
09508 std::vector<int> vfree(0);
09509 solutions.AddSolution(vinfos,vfree);
09510 }
09511 }
09512 }
09513
09514 }
09515 } while(0);
09516 if( bgotonextstatement )
09517 {
09518 bool bgotonextstatement = true;
09519 do
09520 {
09521 if( 1 )
09522 {
09523 bgotonextstatement=false;
09524 continue;
09525
09526 }
09527 } while(0);
09528 if( bgotonextstatement )
09529 {
09530 }
09531 }
09532 }
09533 }
09534 }
09535 }
09536
09537 } else
09538 {
09539 {
09540 IkReal j4array[1], cj4array[1], sj4array[1];
09541 bool j4valid[1]={false};
09542 _nj4 = 1;
09543 IkReal x1271=((1.0)*cj1);
09544 IkReal x1272=(r01*sj0);
09545 IkReal x1273=((1.0)*sj1);
09546 IkReal x1274=(cj0*r00);
09547 CheckValue<IkReal> x1275=IKPowWithIntegerCheck(cj3,-1);
09548 if(!x1275.valid){
09549 continue;
09550 }
09551 if( IKabs(((((-1.0)*x1272*x1273))+(((-1.0)*x1273*x1274))+(((-1.0)*r02*x1271)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1275.value)*(((((-1.0)*x1271*x1274))+(((-1.0)*x1271*x1272))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*x1272*x1273))+(((-1.0)*x1273*x1274))+(((-1.0)*r02*x1271))))+IKsqr(((x1275.value)*(((((-1.0)*x1271*x1274))+(((-1.0)*x1271*x1272))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
09552 continue;
09553 j4array[0]=IKatan2(((((-1.0)*x1272*x1273))+(((-1.0)*x1273*x1274))+(((-1.0)*r02*x1271))), ((x1275.value)*(((((-1.0)*x1271*x1274))+(((-1.0)*x1271*x1272))+((r02*sj1))))));
09554 sj4array[0]=IKsin(j4array[0]);
09555 cj4array[0]=IKcos(j4array[0]);
09556 if( j4array[0] > IKPI )
09557 {
09558 j4array[0]-=IK2PI;
09559 }
09560 else if( j4array[0] < -IKPI )
09561 { j4array[0]+=IK2PI;
09562 }
09563 j4valid[0] = true;
09564 for(int ij4 = 0; ij4 < 1; ++ij4)
09565 {
09566 if( !j4valid[ij4] )
09567 {
09568 continue;
09569 }
09570 _ij4[0] = ij4; _ij4[1] = -1;
09571 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09572 {
09573 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09574 {
09575 j4valid[iij4]=false; _ij4[1] = iij4; break;
09576 }
09577 }
09578 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09579 {
09580 IkReal evalcond[6];
09581 IkReal x1276=IKsin(j4);
09582 IkReal x1277=IKcos(j4);
09583 IkReal x1278=(cj0*px);
09584 IkReal x1279=(sj0*sj1);
09585 IkReal x1280=((1.0)*cj1);
09586 IkReal x1281=((1.0)*sj0);
09587 IkReal x1282=(cj0*r00);
09588 IkReal x1283=(cj3*x1277);
09589 IkReal x1284=(sj3*x1277);
09590 evalcond[0]=(x1284+(((-1.0)*r00*x1281))+((cj0*r01)));
09591 evalcond[1]=(x1276+((cj1*r02))+((sj1*x1282))+((r01*x1279)));
09592 evalcond[2]=((-0.26630543)+((py*x1279))+((sj1*x1278))+((cj1*pz))+(((0.05525)*x1276)));
09593 evalcond[3]=((((-1.0)*x1283))+((r02*sj1))+(((-1.0)*r01*sj0*x1280))+(((-1.0)*x1280*x1282)));
09594 evalcond[4]=((0.22425116)+(((0.05525)*x1284))+(((-1.0)*px*x1281))+(((0.278775)*cj3))+(((-0.0137)*sj3))+((cj0*py)));
09595 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x1280))+(((-1.0)*x1278*x1280))+(((-0.05525)*x1283))+((pz*sj1))+(((0.278775)*sj3)));
09596 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
09597 {
09598 continue;
09599 }
09600 }
09601
09602 {
09603 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09604 vinfos[0].jointtype = 1;
09605 vinfos[0].foffset = j0;
09606 vinfos[0].indices[0] = _ij0[0];
09607 vinfos[0].indices[1] = _ij0[1];
09608 vinfos[0].maxsolutions = _nj0;
09609 vinfos[1].jointtype = 1;
09610 vinfos[1].foffset = j1;
09611 vinfos[1].indices[0] = _ij1[0];
09612 vinfos[1].indices[1] = _ij1[1];
09613 vinfos[1].maxsolutions = _nj1;
09614 vinfos[2].jointtype = 1;
09615 vinfos[2].foffset = j2;
09616 vinfos[2].indices[0] = _ij2[0];
09617 vinfos[2].indices[1] = _ij2[1];
09618 vinfos[2].maxsolutions = _nj2;
09619 vinfos[3].jointtype = 1;
09620 vinfos[3].foffset = j3;
09621 vinfos[3].indices[0] = _ij3[0];
09622 vinfos[3].indices[1] = _ij3[1];
09623 vinfos[3].maxsolutions = _nj3;
09624 vinfos[4].jointtype = 1;
09625 vinfos[4].foffset = j4;
09626 vinfos[4].indices[0] = _ij4[0];
09627 vinfos[4].indices[1] = _ij4[1];
09628 vinfos[4].maxsolutions = _nj4;
09629 std::vector<int> vfree(0);
09630 solutions.AddSolution(vinfos,vfree);
09631 }
09632 }
09633 }
09634
09635 }
09636
09637 }
09638
09639 } else
09640 {
09641 {
09642 IkReal j4array[1], cj4array[1], sj4array[1];
09643 bool j4valid[1]={false};
09644 _nj4 = 1;
09645 IkReal x1285=((1.0)*cj0);
09646 CheckValue<IkReal> x1286=IKPowWithIntegerCheck(sj3,-1);
09647 if(!x1286.valid){
09648 continue;
09649 }
09650 if( IKabs(((((-1.0)*r00*sj1*x1285))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1286.value)*((((r00*sj0))+(((-1.0)*r01*x1285)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj1*x1285))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02))))+IKsqr(((x1286.value)*((((r00*sj0))+(((-1.0)*r01*x1285))))))-1) <= IKFAST_SINCOS_THRESH )
09651 continue;
09652 j4array[0]=IKatan2(((((-1.0)*r00*sj1*x1285))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02))), ((x1286.value)*((((r00*sj0))+(((-1.0)*r01*x1285))))));
09653 sj4array[0]=IKsin(j4array[0]);
09654 cj4array[0]=IKcos(j4array[0]);
09655 if( j4array[0] > IKPI )
09656 {
09657 j4array[0]-=IK2PI;
09658 }
09659 else if( j4array[0] < -IKPI )
09660 { j4array[0]+=IK2PI;
09661 }
09662 j4valid[0] = true;
09663 for(int ij4 = 0; ij4 < 1; ++ij4)
09664 {
09665 if( !j4valid[ij4] )
09666 {
09667 continue;
09668 }
09669 _ij4[0] = ij4; _ij4[1] = -1;
09670 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09671 {
09672 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09673 {
09674 j4valid[iij4]=false; _ij4[1] = iij4; break;
09675 }
09676 }
09677 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09678 {
09679 IkReal evalcond[6];
09680 IkReal x1287=IKsin(j4);
09681 IkReal x1288=IKcos(j4);
09682 IkReal x1289=(cj0*px);
09683 IkReal x1290=(sj0*sj1);
09684 IkReal x1291=((1.0)*cj1);
09685 IkReal x1292=((1.0)*sj0);
09686 IkReal x1293=(cj0*r00);
09687 IkReal x1294=(cj3*x1288);
09688 IkReal x1295=(sj3*x1288);
09689 evalcond[0]=(x1295+(((-1.0)*r00*x1292))+((cj0*r01)));
09690 evalcond[1]=(x1287+((sj1*x1293))+((cj1*r02))+((r01*x1290)));
09691 evalcond[2]=((-0.26630543)+(((0.05525)*x1287))+((py*x1290))+((cj1*pz))+((sj1*x1289)));
09692 evalcond[3]=((((-1.0)*r01*sj0*x1291))+((r02*sj1))+(((-1.0)*x1294))+(((-1.0)*x1291*x1293)));
09693 evalcond[4]=((0.22425116)+(((0.278775)*cj3))+(((-0.0137)*sj3))+(((0.05525)*x1295))+(((-1.0)*px*x1292))+((cj0*py)));
09694 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x1289*x1291))+(((-0.05525)*x1294))+(((-1.0)*py*sj0*x1291))+((pz*sj1))+(((0.278775)*sj3)));
09695 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
09696 {
09697 continue;
09698 }
09699 }
09700
09701 {
09702 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09703 vinfos[0].jointtype = 1;
09704 vinfos[0].foffset = j0;
09705 vinfos[0].indices[0] = _ij0[0];
09706 vinfos[0].indices[1] = _ij0[1];
09707 vinfos[0].maxsolutions = _nj0;
09708 vinfos[1].jointtype = 1;
09709 vinfos[1].foffset = j1;
09710 vinfos[1].indices[0] = _ij1[0];
09711 vinfos[1].indices[1] = _ij1[1];
09712 vinfos[1].maxsolutions = _nj1;
09713 vinfos[2].jointtype = 1;
09714 vinfos[2].foffset = j2;
09715 vinfos[2].indices[0] = _ij2[0];
09716 vinfos[2].indices[1] = _ij2[1];
09717 vinfos[2].maxsolutions = _nj2;
09718 vinfos[3].jointtype = 1;
09719 vinfos[3].foffset = j3;
09720 vinfos[3].indices[0] = _ij3[0];
09721 vinfos[3].indices[1] = _ij3[1];
09722 vinfos[3].maxsolutions = _nj3;
09723 vinfos[4].jointtype = 1;
09724 vinfos[4].foffset = j4;
09725 vinfos[4].indices[0] = _ij4[0];
09726 vinfos[4].indices[1] = _ij4[1];
09727 vinfos[4].maxsolutions = _nj4;
09728 std::vector<int> vfree(0);
09729 solutions.AddSolution(vinfos,vfree);
09730 }
09731 }
09732 }
09733
09734 }
09735
09736 }
09737
09738 }
09739 } while(0);
09740 if( bgotonextstatement )
09741 {
09742 bool bgotonextstatement = true;
09743 do
09744 {
09745 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
09746 if( IKabs(evalcond[0]) < 0.0000010000000000 )
09747 {
09748 bgotonextstatement=false;
09749 {
09750 IkReal j4eval[1];
09751 sj3=0;
09752 cj3=1.0;
09753 j3=0;
09754 j4eval[0]=cj2;
09755 if( IKabs(j4eval[0]) < 0.0000010000000000 )
09756 {
09757 {
09758 IkReal j4eval[1];
09759 sj3=0;
09760 cj3=1.0;
09761 j3=0;
09762 j4eval[0]=sj2;
09763 if( IKabs(j4eval[0]) < 0.0000010000000000 )
09764 {
09765 continue;
09766
09767 } else
09768 {
09769 {
09770 IkReal j4array[1], cj4array[1], sj4array[1];
09771 bool j4valid[1]={false};
09772 _nj4 = 1;
09773 IkReal x1296=((1.0)*cj1);
09774 IkReal x1297=(cj0*r00);
09775 IkReal x1298=(r01*sj0);
09776 CheckValue<IkReal> x1299=IKPowWithIntegerCheck(sj2,-1);
09777 if(!x1299.valid){
09778 continue;
09779 }
09780 if( IKabs(((x1299.value)*((((sj1*x1297))+((sj1*x1298))+((cj1*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*x1296*x1298))+(((-1.0)*x1296*x1297)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1299.value)*((((sj1*x1297))+((sj1*x1298))+((cj1*r02))))))+IKsqr((((r02*sj1))+(((-1.0)*x1296*x1298))+(((-1.0)*x1296*x1297))))-1) <= IKFAST_SINCOS_THRESH )
09781 continue;
09782 j4array[0]=IKatan2(((x1299.value)*((((sj1*x1297))+((sj1*x1298))+((cj1*r02))))), (((r02*sj1))+(((-1.0)*x1296*x1298))+(((-1.0)*x1296*x1297))));
09783 sj4array[0]=IKsin(j4array[0]);
09784 cj4array[0]=IKcos(j4array[0]);
09785 if( j4array[0] > IKPI )
09786 {
09787 j4array[0]-=IK2PI;
09788 }
09789 else if( j4array[0] < -IKPI )
09790 { j4array[0]+=IK2PI;
09791 }
09792 j4valid[0] = true;
09793 for(int ij4 = 0; ij4 < 1; ++ij4)
09794 {
09795 if( !j4valid[ij4] )
09796 {
09797 continue;
09798 }
09799 _ij4[0] = ij4; _ij4[1] = -1;
09800 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09801 {
09802 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09803 {
09804 j4valid[iij4]=false; _ij4[1] = iij4; break;
09805 }
09806 }
09807 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09808 {
09809 IkReal evalcond[6];
09810 IkReal x1300=IKsin(j4);
09811 IkReal x1301=IKcos(j4);
09812 IkReal x1302=(cj0*px);
09813 IkReal x1303=(sj0*sj1);
09814 IkReal x1304=((1.0)*sj0);
09815 IkReal x1305=((1.0)*cj1);
09816 IkReal x1306=(cj0*r00);
09817 IkReal x1307=(sj2*x1300);
09818 IkReal x1308=(cj2*x1300);
09819 evalcond[0]=(x1308+(((-1.0)*r00*x1304))+((cj0*r01)));
09820 evalcond[1]=((((-1.0)*x1307))+((cj1*r02))+((sj1*x1306))+((r01*x1303)));
09821 evalcond[2]=((0.00025116)+(((-1.0)*px*x1304))+(((-0.502775)*sj2))+((cj0*py))+(((0.05525)*x1308)));
09822 evalcond[3]=((((-1.0)*x1301))+((r02*sj1))+(((-1.0)*cj1*r01*x1304))+(((-1.0)*x1305*x1306)));
09823 evalcond[4]=((0.0137)+(((-1.0)*cj1*py*x1304))+(((-0.05525)*x1301))+((pz*sj1))+(((-1.0)*x1302*x1305)));
09824 evalcond[5]=((-0.26630543)+((py*x1303))+((cj1*pz))+(((-0.05525)*x1307))+(((-0.502775)*cj2))+((sj1*x1302)));
09825 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
09826 {
09827 continue;
09828 }
09829 }
09830
09831 {
09832 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09833 vinfos[0].jointtype = 1;
09834 vinfos[0].foffset = j0;
09835 vinfos[0].indices[0] = _ij0[0];
09836 vinfos[0].indices[1] = _ij0[1];
09837 vinfos[0].maxsolutions = _nj0;
09838 vinfos[1].jointtype = 1;
09839 vinfos[1].foffset = j1;
09840 vinfos[1].indices[0] = _ij1[0];
09841 vinfos[1].indices[1] = _ij1[1];
09842 vinfos[1].maxsolutions = _nj1;
09843 vinfos[2].jointtype = 1;
09844 vinfos[2].foffset = j2;
09845 vinfos[2].indices[0] = _ij2[0];
09846 vinfos[2].indices[1] = _ij2[1];
09847 vinfos[2].maxsolutions = _nj2;
09848 vinfos[3].jointtype = 1;
09849 vinfos[3].foffset = j3;
09850 vinfos[3].indices[0] = _ij3[0];
09851 vinfos[3].indices[1] = _ij3[1];
09852 vinfos[3].maxsolutions = _nj3;
09853 vinfos[4].jointtype = 1;
09854 vinfos[4].foffset = j4;
09855 vinfos[4].indices[0] = _ij4[0];
09856 vinfos[4].indices[1] = _ij4[1];
09857 vinfos[4].maxsolutions = _nj4;
09858 std::vector<int> vfree(0);
09859 solutions.AddSolution(vinfos,vfree);
09860 }
09861 }
09862 }
09863
09864 }
09865
09866 }
09867
09868 } else
09869 {
09870 {
09871 IkReal j4array[1], cj4array[1], sj4array[1];
09872 bool j4valid[1]={false};
09873 _nj4 = 1;
09874 IkReal x1309=((1.0)*r01);
09875 CheckValue<IkReal> x1310=IKPowWithIntegerCheck(cj2,-1);
09876 if(!x1310.valid){
09877 continue;
09878 }
09879 if( IKabs(((x1310.value)*((((r00*sj0))+(((-1.0)*cj0*x1309)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj1*sj0*x1309))+(((-1.0)*cj0*cj1*r00))+((r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1310.value)*((((r00*sj0))+(((-1.0)*cj0*x1309))))))+IKsqr(((((-1.0)*cj1*sj0*x1309))+(((-1.0)*cj0*cj1*r00))+((r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
09880 continue;
09881 j4array[0]=IKatan2(((x1310.value)*((((r00*sj0))+(((-1.0)*cj0*x1309))))), ((((-1.0)*cj1*sj0*x1309))+(((-1.0)*cj0*cj1*r00))+((r02*sj1))));
09882 sj4array[0]=IKsin(j4array[0]);
09883 cj4array[0]=IKcos(j4array[0]);
09884 if( j4array[0] > IKPI )
09885 {
09886 j4array[0]-=IK2PI;
09887 }
09888 else if( j4array[0] < -IKPI )
09889 { j4array[0]+=IK2PI;
09890 }
09891 j4valid[0] = true;
09892 for(int ij4 = 0; ij4 < 1; ++ij4)
09893 {
09894 if( !j4valid[ij4] )
09895 {
09896 continue;
09897 }
09898 _ij4[0] = ij4; _ij4[1] = -1;
09899 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
09900 {
09901 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
09902 {
09903 j4valid[iij4]=false; _ij4[1] = iij4; break;
09904 }
09905 }
09906 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
09907 {
09908 IkReal evalcond[6];
09909 IkReal x1311=IKsin(j4);
09910 IkReal x1312=IKcos(j4);
09911 IkReal x1313=(cj0*px);
09912 IkReal x1314=(sj0*sj1);
09913 IkReal x1315=((1.0)*sj0);
09914 IkReal x1316=((1.0)*cj1);
09915 IkReal x1317=(cj0*r00);
09916 IkReal x1318=(sj2*x1311);
09917 IkReal x1319=(cj2*x1311);
09918 evalcond[0]=(x1319+(((-1.0)*r00*x1315))+((cj0*r01)));
09919 evalcond[1]=(((r01*x1314))+(((-1.0)*x1318))+((cj1*r02))+((sj1*x1317)));
09920 evalcond[2]=((0.00025116)+(((-0.502775)*sj2))+(((0.05525)*x1319))+((cj0*py))+(((-1.0)*px*x1315)));
09921 evalcond[3]=((((-1.0)*x1312))+((r02*sj1))+(((-1.0)*cj1*r01*x1315))+(((-1.0)*x1316*x1317)));
09922 evalcond[4]=((0.0137)+(((-1.0)*x1313*x1316))+(((-0.05525)*x1312))+((pz*sj1))+(((-1.0)*cj1*py*x1315)));
09923 evalcond[5]=((-0.26630543)+((py*x1314))+((cj1*pz))+(((-0.05525)*x1318))+(((-0.502775)*cj2))+((sj1*x1313)));
09924 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
09925 {
09926 continue;
09927 }
09928 }
09929
09930 {
09931 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
09932 vinfos[0].jointtype = 1;
09933 vinfos[0].foffset = j0;
09934 vinfos[0].indices[0] = _ij0[0];
09935 vinfos[0].indices[1] = _ij0[1];
09936 vinfos[0].maxsolutions = _nj0;
09937 vinfos[1].jointtype = 1;
09938 vinfos[1].foffset = j1;
09939 vinfos[1].indices[0] = _ij1[0];
09940 vinfos[1].indices[1] = _ij1[1];
09941 vinfos[1].maxsolutions = _nj1;
09942 vinfos[2].jointtype = 1;
09943 vinfos[2].foffset = j2;
09944 vinfos[2].indices[0] = _ij2[0];
09945 vinfos[2].indices[1] = _ij2[1];
09946 vinfos[2].maxsolutions = _nj2;
09947 vinfos[3].jointtype = 1;
09948 vinfos[3].foffset = j3;
09949 vinfos[3].indices[0] = _ij3[0];
09950 vinfos[3].indices[1] = _ij3[1];
09951 vinfos[3].maxsolutions = _nj3;
09952 vinfos[4].jointtype = 1;
09953 vinfos[4].foffset = j4;
09954 vinfos[4].indices[0] = _ij4[0];
09955 vinfos[4].indices[1] = _ij4[1];
09956 vinfos[4].maxsolutions = _nj4;
09957 std::vector<int> vfree(0);
09958 solutions.AddSolution(vinfos,vfree);
09959 }
09960 }
09961 }
09962
09963 }
09964
09965 }
09966
09967 }
09968 } while(0);
09969 if( bgotonextstatement )
09970 {
09971 bool bgotonextstatement = true;
09972 do
09973 {
09974 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
09975 if( IKabs(evalcond[0]) < 0.0000010000000000 )
09976 {
09977 bgotonextstatement=false;
09978 {
09979 IkReal j4eval[1];
09980 sj3=0;
09981 cj3=-1.0;
09982 j3=3.14159265358979;
09983 j4eval[0]=cj2;
09984 if( IKabs(j4eval[0]) < 0.0000010000000000 )
09985 {
09986 {
09987 IkReal j4eval[1];
09988 sj3=0;
09989 cj3=-1.0;
09990 j3=3.14159265358979;
09991 j4eval[0]=sj2;
09992 if( IKabs(j4eval[0]) < 0.0000010000000000 )
09993 {
09994 continue;
09995
09996 } else
09997 {
09998 {
09999 IkReal j4array[1], cj4array[1], sj4array[1];
10000 bool j4valid[1]={false};
10001 _nj4 = 1;
10002 IkReal x1320=(r01*sj0);
10003 IkReal x1321=(cj0*r00);
10004 CheckValue<IkReal> x1322=IKPowWithIntegerCheck(sj2,-1);
10005 if(!x1322.valid){
10006 continue;
10007 }
10008 if( IKabs(((x1322.value)*((((cj1*r02))+((sj1*x1321))+((sj1*x1320)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r02*sj1))+((cj1*x1321))+((cj1*x1320)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1322.value)*((((cj1*r02))+((sj1*x1321))+((sj1*x1320))))))+IKsqr(((((-1.0)*r02*sj1))+((cj1*x1321))+((cj1*x1320))))-1) <= IKFAST_SINCOS_THRESH )
10009 continue;
10010 j4array[0]=IKatan2(((x1322.value)*((((cj1*r02))+((sj1*x1321))+((sj1*x1320))))), ((((-1.0)*r02*sj1))+((cj1*x1321))+((cj1*x1320))));
10011 sj4array[0]=IKsin(j4array[0]);
10012 cj4array[0]=IKcos(j4array[0]);
10013 if( j4array[0] > IKPI )
10014 {
10015 j4array[0]-=IK2PI;
10016 }
10017 else if( j4array[0] < -IKPI )
10018 { j4array[0]+=IK2PI;
10019 }
10020 j4valid[0] = true;
10021 for(int ij4 = 0; ij4 < 1; ++ij4)
10022 {
10023 if( !j4valid[ij4] )
10024 {
10025 continue;
10026 }
10027 _ij4[0] = ij4; _ij4[1] = -1;
10028 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10029 {
10030 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10031 {
10032 j4valid[iij4]=false; _ij4[1] = iij4; break;
10033 }
10034 }
10035 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10036 {
10037 IkReal evalcond[6];
10038 IkReal x1323=IKsin(j4);
10039 IkReal x1324=IKcos(j4);
10040 IkReal x1325=(cj0*px);
10041 IkReal x1326=(sj0*sj1);
10042 IkReal x1327=((1.0)*sj0);
10043 IkReal x1328=((1.0)*cj1);
10044 IkReal x1329=(cj0*r00);
10045 IkReal x1330=(sj2*x1323);
10046 IkReal x1331=(cj2*x1323);
10047 evalcond[0]=(x1331+(((-1.0)*r00*x1327))+((cj0*r01)));
10048 evalcond[1]=(x1324+(((-1.0)*x1328*x1329))+((r02*sj1))+(((-1.0)*cj1*r01*x1327)));
10049 evalcond[2]=(((r01*x1326))+(((-1.0)*x1330))+((cj1*r02))+((sj1*x1329)));
10050 evalcond[3]=((0.00025116)+(((0.05525)*x1331))+((cj0*py))+(((0.054775)*sj2))+(((-1.0)*px*x1327)));
10051 evalcond[4]=((-0.0137)+(((-1.0)*cj1*py*x1327))+(((-1.0)*x1325*x1328))+((pz*sj1))+(((0.05525)*x1324)));
10052 evalcond[5]=((-0.26630543)+((py*x1326))+((cj1*pz))+(((-0.05525)*x1330))+(((0.054775)*cj2))+((sj1*x1325)));
10053 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
10054 {
10055 continue;
10056 }
10057 }
10058
10059 {
10060 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10061 vinfos[0].jointtype = 1;
10062 vinfos[0].foffset = j0;
10063 vinfos[0].indices[0] = _ij0[0];
10064 vinfos[0].indices[1] = _ij0[1];
10065 vinfos[0].maxsolutions = _nj0;
10066 vinfos[1].jointtype = 1;
10067 vinfos[1].foffset = j1;
10068 vinfos[1].indices[0] = _ij1[0];
10069 vinfos[1].indices[1] = _ij1[1];
10070 vinfos[1].maxsolutions = _nj1;
10071 vinfos[2].jointtype = 1;
10072 vinfos[2].foffset = j2;
10073 vinfos[2].indices[0] = _ij2[0];
10074 vinfos[2].indices[1] = _ij2[1];
10075 vinfos[2].maxsolutions = _nj2;
10076 vinfos[3].jointtype = 1;
10077 vinfos[3].foffset = j3;
10078 vinfos[3].indices[0] = _ij3[0];
10079 vinfos[3].indices[1] = _ij3[1];
10080 vinfos[3].maxsolutions = _nj3;
10081 vinfos[4].jointtype = 1;
10082 vinfos[4].foffset = j4;
10083 vinfos[4].indices[0] = _ij4[0];
10084 vinfos[4].indices[1] = _ij4[1];
10085 vinfos[4].maxsolutions = _nj4;
10086 std::vector<int> vfree(0);
10087 solutions.AddSolution(vinfos,vfree);
10088 }
10089 }
10090 }
10091
10092 }
10093
10094 }
10095
10096 } else
10097 {
10098 {
10099 IkReal j4array[1], cj4array[1], sj4array[1];
10100 bool j4valid[1]={false};
10101 _nj4 = 1;
10102 CheckValue<IkReal> x1332=IKPowWithIntegerCheck(cj2,-1);
10103 if(!x1332.valid){
10104 continue;
10105 }
10106 if( IKabs(((x1332.value)*((((r00*sj0))+(((-1.0)*cj0*r01)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1332.value)*((((r00*sj0))+(((-1.0)*cj0*r01))))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
10107 continue;
10108 j4array[0]=IKatan2(((x1332.value)*((((r00*sj0))+(((-1.0)*cj0*r01))))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
10109 sj4array[0]=IKsin(j4array[0]);
10110 cj4array[0]=IKcos(j4array[0]);
10111 if( j4array[0] > IKPI )
10112 {
10113 j4array[0]-=IK2PI;
10114 }
10115 else if( j4array[0] < -IKPI )
10116 { j4array[0]+=IK2PI;
10117 }
10118 j4valid[0] = true;
10119 for(int ij4 = 0; ij4 < 1; ++ij4)
10120 {
10121 if( !j4valid[ij4] )
10122 {
10123 continue;
10124 }
10125 _ij4[0] = ij4; _ij4[1] = -1;
10126 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10127 {
10128 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10129 {
10130 j4valid[iij4]=false; _ij4[1] = iij4; break;
10131 }
10132 }
10133 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10134 {
10135 IkReal evalcond[6];
10136 IkReal x1333=IKsin(j4);
10137 IkReal x1334=IKcos(j4);
10138 IkReal x1335=(cj0*px);
10139 IkReal x1336=(sj0*sj1);
10140 IkReal x1337=((1.0)*sj0);
10141 IkReal x1338=((1.0)*cj1);
10142 IkReal x1339=(cj0*r00);
10143 IkReal x1340=(sj2*x1333);
10144 IkReal x1341=(cj2*x1333);
10145 evalcond[0]=(x1341+(((-1.0)*r00*x1337))+((cj0*r01)));
10146 evalcond[1]=(x1334+(((-1.0)*cj1*r01*x1337))+((r02*sj1))+(((-1.0)*x1338*x1339)));
10147 evalcond[2]=(((cj1*r02))+((r01*x1336))+((sj1*x1339))+(((-1.0)*x1340)));
10148 evalcond[3]=((0.00025116)+(((0.05525)*x1341))+(((-1.0)*px*x1337))+((cj0*py))+(((0.054775)*sj2)));
10149 evalcond[4]=((-0.0137)+(((-1.0)*x1335*x1338))+(((0.05525)*x1334))+((pz*sj1))+(((-1.0)*cj1*py*x1337)));
10150 evalcond[5]=((-0.26630543)+(((-0.05525)*x1340))+((py*x1336))+((cj1*pz))+((sj1*x1335))+(((0.054775)*cj2)));
10151 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
10152 {
10153 continue;
10154 }
10155 }
10156
10157 {
10158 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10159 vinfos[0].jointtype = 1;
10160 vinfos[0].foffset = j0;
10161 vinfos[0].indices[0] = _ij0[0];
10162 vinfos[0].indices[1] = _ij0[1];
10163 vinfos[0].maxsolutions = _nj0;
10164 vinfos[1].jointtype = 1;
10165 vinfos[1].foffset = j1;
10166 vinfos[1].indices[0] = _ij1[0];
10167 vinfos[1].indices[1] = _ij1[1];
10168 vinfos[1].maxsolutions = _nj1;
10169 vinfos[2].jointtype = 1;
10170 vinfos[2].foffset = j2;
10171 vinfos[2].indices[0] = _ij2[0];
10172 vinfos[2].indices[1] = _ij2[1];
10173 vinfos[2].maxsolutions = _nj2;
10174 vinfos[3].jointtype = 1;
10175 vinfos[3].foffset = j3;
10176 vinfos[3].indices[0] = _ij3[0];
10177 vinfos[3].indices[1] = _ij3[1];
10178 vinfos[3].maxsolutions = _nj3;
10179 vinfos[4].jointtype = 1;
10180 vinfos[4].foffset = j4;
10181 vinfos[4].indices[0] = _ij4[0];
10182 vinfos[4].indices[1] = _ij4[1];
10183 vinfos[4].maxsolutions = _nj4;
10184 std::vector<int> vfree(0);
10185 solutions.AddSolution(vinfos,vfree);
10186 }
10187 }
10188 }
10189
10190 }
10191
10192 }
10193
10194 }
10195 } while(0);
10196 if( bgotonextstatement )
10197 {
10198 bool bgotonextstatement = true;
10199 do
10200 {
10201 if( 1 )
10202 {
10203 bgotonextstatement=false;
10204 continue;
10205
10206 }
10207 } while(0);
10208 if( bgotonextstatement )
10209 {
10210 }
10211 }
10212 }
10213 }
10214 }
10215 }
10216 }
10217 }
10218 }
10219 }
10220
10221 } else
10222 {
10223 {
10224 IkReal j4array[1], cj4array[1], sj4array[1];
10225 bool j4valid[1]={false};
10226 _nj4 = 1;
10227 CheckValue<IkReal> x1349=IKPowWithIntegerCheck(cj3,-1);
10228 if(!x1349.valid){
10229 continue;
10230 }
10231 IkReal x1342=x1349.value;
10232 IkReal x1343=(r02*sj1);
10233 IkReal x1344=(r01*sj0);
10234 IkReal x1345=((1.0)*cj1);
10235 IkReal x1346=(cj3*sj1);
10236 IkReal x1347=(cj0*r00);
10237 IkReal x1348=(cj1*cj2*sj3);
10238 CheckValue<IkReal> x1350=IKPowWithIntegerCheck(sj2,-1);
10239 if(!x1350.valid){
10240 continue;
10241 }
10242 if( IKabs((x1342*(x1350.value)*((((x1344*x1346))+((x1344*x1348))+((x1346*x1347))+((x1347*x1348))+(((-1.0)*cj2*sj3*x1343))+((cj1*cj3*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x1342*((x1343+(((-1.0)*x1344*x1345))+(((-1.0)*x1345*x1347)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x1342*(x1350.value)*((((x1344*x1346))+((x1344*x1348))+((x1346*x1347))+((x1347*x1348))+(((-1.0)*cj2*sj3*x1343))+((cj1*cj3*r02))))))+IKsqr((x1342*((x1343+(((-1.0)*x1344*x1345))+(((-1.0)*x1345*x1347))))))-1) <= IKFAST_SINCOS_THRESH )
10243 continue;
10244 j4array[0]=IKatan2((x1342*(x1350.value)*((((x1344*x1346))+((x1344*x1348))+((x1346*x1347))+((x1347*x1348))+(((-1.0)*cj2*sj3*x1343))+((cj1*cj3*r02))))), (x1342*((x1343+(((-1.0)*x1344*x1345))+(((-1.0)*x1345*x1347))))));
10245 sj4array[0]=IKsin(j4array[0]);
10246 cj4array[0]=IKcos(j4array[0]);
10247 if( j4array[0] > IKPI )
10248 {
10249 j4array[0]-=IK2PI;
10250 }
10251 else if( j4array[0] < -IKPI )
10252 { j4array[0]+=IK2PI;
10253 }
10254 j4valid[0] = true;
10255 for(int ij4 = 0; ij4 < 1; ++ij4)
10256 {
10257 if( !j4valid[ij4] )
10258 {
10259 continue;
10260 }
10261 _ij4[0] = ij4; _ij4[1] = -1;
10262 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10263 {
10264 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10265 {
10266 j4valid[iij4]=false; _ij4[1] = iij4; break;
10267 }
10268 }
10269 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10270 {
10271 IkReal evalcond[6];
10272 IkReal x1351=IKcos(j4);
10273 IkReal x1352=IKsin(j4);
10274 IkReal x1353=(cj0*px);
10275 IkReal x1354=(sj0*sj1);
10276 IkReal x1355=((0.0137)*sj3);
10277 IkReal x1356=((0.278775)*cj3);
10278 IkReal x1357=((1.0)*sj0);
10279 IkReal x1358=((1.0)*cj1);
10280 IkReal x1359=(cj0*r00);
10281 IkReal x1360=(sj2*x1352);
10282 IkReal x1361=((1.0)*x1351);
10283 IkReal x1362=(cj2*x1352);
10284 IkReal x1363=((0.05525)*sj3*x1351);
10285 evalcond[0]=(x1362+(((-1.0)*r00*x1357))+(((-1.0)*sj2*sj3*x1361))+((cj0*r01)));
10286 evalcond[1]=((((-1.0)*cj3*x1361))+((r02*sj1))+(((-1.0)*x1358*x1359))+(((-1.0)*cj1*r01*x1357)));
10287 evalcond[2]=((((-1.0)*x1360))+((sj1*x1359))+((cj1*r02))+(((-1.0)*cj2*sj3*x1361))+((r01*x1354)));
10288 evalcond[3]=((((0.0137)*cj3))+(((-1.0)*cj1*py*x1357))+((pz*sj1))+(((-0.05525)*cj3*x1351))+(((-1.0)*x1353*x1358))+(((0.278775)*sj3)));
10289 evalcond[4]=((0.00025116)+(((0.05525)*x1362))+(((-1.0)*sj2*x1356))+(((-1.0)*sj2*x1363))+(((-0.224)*sj2))+(((-1.0)*px*x1357))+((sj2*x1355))+((cj0*py)));
10290 evalcond[5]=((-0.26630543)+((sj1*x1353))+(((-1.0)*cj2*x1363))+(((-1.0)*cj2*x1356))+((cj1*pz))+(((-0.05525)*x1360))+(((-0.224)*cj2))+((cj2*x1355))+((py*x1354)));
10291 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
10292 {
10293 continue;
10294 }
10295 }
10296
10297 {
10298 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10299 vinfos[0].jointtype = 1;
10300 vinfos[0].foffset = j0;
10301 vinfos[0].indices[0] = _ij0[0];
10302 vinfos[0].indices[1] = _ij0[1];
10303 vinfos[0].maxsolutions = _nj0;
10304 vinfos[1].jointtype = 1;
10305 vinfos[1].foffset = j1;
10306 vinfos[1].indices[0] = _ij1[0];
10307 vinfos[1].indices[1] = _ij1[1];
10308 vinfos[1].maxsolutions = _nj1;
10309 vinfos[2].jointtype = 1;
10310 vinfos[2].foffset = j2;
10311 vinfos[2].indices[0] = _ij2[0];
10312 vinfos[2].indices[1] = _ij2[1];
10313 vinfos[2].maxsolutions = _nj2;
10314 vinfos[3].jointtype = 1;
10315 vinfos[3].foffset = j3;
10316 vinfos[3].indices[0] = _ij3[0];
10317 vinfos[3].indices[1] = _ij3[1];
10318 vinfos[3].maxsolutions = _nj3;
10319 vinfos[4].jointtype = 1;
10320 vinfos[4].foffset = j4;
10321 vinfos[4].indices[0] = _ij4[0];
10322 vinfos[4].indices[1] = _ij4[1];
10323 vinfos[4].maxsolutions = _nj4;
10324 std::vector<int> vfree(0);
10325 solutions.AddSolution(vinfos,vfree);
10326 }
10327 }
10328 }
10329
10330 }
10331
10332 }
10333
10334 } else
10335 {
10336 {
10337 IkReal j4array[1], cj4array[1], sj4array[1];
10338 bool j4valid[1]={false};
10339 _nj4 = 1;
10340 CheckValue<IkReal> x1370=IKPowWithIntegerCheck(cj3,-1);
10341 if(!x1370.valid){
10342 continue;
10343 }
10344 IkReal x1364=x1370.value;
10345 IkReal x1365=((1.0)*cj1);
10346 IkReal x1366=(cj0*r00);
10347 IkReal x1367=(r02*sj1);
10348 IkReal x1368=(sj2*sj3);
10349 IkReal x1369=(r01*sj0);
10350 CheckValue<IkReal> x1371=IKPowWithIntegerCheck(cj2,-1);
10351 if(!x1371.valid){
10352 continue;
10353 }
10354 if( IKabs((x1364*(x1371.value)*(((((-1.0)*cj0*cj3*r01))+((x1367*x1368))+(((-1.0)*x1365*x1368*x1369))+(((-1.0)*x1365*x1366*x1368))+((cj3*r00*sj0)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x1364*((x1367+(((-1.0)*x1365*x1366))+(((-1.0)*x1365*x1369)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x1364*(x1371.value)*(((((-1.0)*cj0*cj3*r01))+((x1367*x1368))+(((-1.0)*x1365*x1368*x1369))+(((-1.0)*x1365*x1366*x1368))+((cj3*r00*sj0))))))+IKsqr((x1364*((x1367+(((-1.0)*x1365*x1366))+(((-1.0)*x1365*x1369))))))-1) <= IKFAST_SINCOS_THRESH )
10355 continue;
10356 j4array[0]=IKatan2((x1364*(x1371.value)*(((((-1.0)*cj0*cj3*r01))+((x1367*x1368))+(((-1.0)*x1365*x1368*x1369))+(((-1.0)*x1365*x1366*x1368))+((cj3*r00*sj0))))), (x1364*((x1367+(((-1.0)*x1365*x1366))+(((-1.0)*x1365*x1369))))));
10357 sj4array[0]=IKsin(j4array[0]);
10358 cj4array[0]=IKcos(j4array[0]);
10359 if( j4array[0] > IKPI )
10360 {
10361 j4array[0]-=IK2PI;
10362 }
10363 else if( j4array[0] < -IKPI )
10364 { j4array[0]+=IK2PI;
10365 }
10366 j4valid[0] = true;
10367 for(int ij4 = 0; ij4 < 1; ++ij4)
10368 {
10369 if( !j4valid[ij4] )
10370 {
10371 continue;
10372 }
10373 _ij4[0] = ij4; _ij4[1] = -1;
10374 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10375 {
10376 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10377 {
10378 j4valid[iij4]=false; _ij4[1] = iij4; break;
10379 }
10380 }
10381 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10382 {
10383 IkReal evalcond[6];
10384 IkReal x1372=IKcos(j4);
10385 IkReal x1373=IKsin(j4);
10386 IkReal x1374=(cj0*px);
10387 IkReal x1375=(sj0*sj1);
10388 IkReal x1376=((0.0137)*sj3);
10389 IkReal x1377=((0.278775)*cj3);
10390 IkReal x1378=((1.0)*sj0);
10391 IkReal x1379=((1.0)*cj1);
10392 IkReal x1380=(cj0*r00);
10393 IkReal x1381=(sj2*x1373);
10394 IkReal x1382=((1.0)*x1372);
10395 IkReal x1383=(cj2*x1373);
10396 IkReal x1384=((0.05525)*sj3*x1372);
10397 evalcond[0]=(x1383+(((-1.0)*r00*x1378))+(((-1.0)*sj2*sj3*x1382))+((cj0*r01)));
10398 evalcond[1]=((((-1.0)*cj1*r01*x1378))+((r02*sj1))+(((-1.0)*cj3*x1382))+(((-1.0)*x1379*x1380)));
10399 evalcond[2]=(((cj1*r02))+((sj1*x1380))+(((-1.0)*cj2*sj3*x1382))+(((-1.0)*x1381))+((r01*x1375)));
10400 evalcond[3]=((((0.0137)*cj3))+(((-1.0)*cj1*py*x1378))+(((-0.05525)*cj3*x1372))+(((-1.0)*x1374*x1379))+((pz*sj1))+(((0.278775)*sj3)));
10401 evalcond[4]=((0.00025116)+(((0.05525)*x1383))+(((-1.0)*px*x1378))+((sj2*x1376))+(((-0.224)*sj2))+(((-1.0)*sj2*x1377))+((cj0*py))+(((-1.0)*sj2*x1384)));
10402 evalcond[5]=((-0.26630543)+(((-0.05525)*x1381))+(((-1.0)*cj2*x1377))+((py*x1375))+((cj1*pz))+(((-0.224)*cj2))+((cj2*x1376))+(((-1.0)*cj2*x1384))+((sj1*x1374)));
10403 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
10404 {
10405 continue;
10406 }
10407 }
10408
10409 {
10410 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10411 vinfos[0].jointtype = 1;
10412 vinfos[0].foffset = j0;
10413 vinfos[0].indices[0] = _ij0[0];
10414 vinfos[0].indices[1] = _ij0[1];
10415 vinfos[0].maxsolutions = _nj0;
10416 vinfos[1].jointtype = 1;
10417 vinfos[1].foffset = j1;
10418 vinfos[1].indices[0] = _ij1[0];
10419 vinfos[1].indices[1] = _ij1[1];
10420 vinfos[1].maxsolutions = _nj1;
10421 vinfos[2].jointtype = 1;
10422 vinfos[2].foffset = j2;
10423 vinfos[2].indices[0] = _ij2[0];
10424 vinfos[2].indices[1] = _ij2[1];
10425 vinfos[2].maxsolutions = _nj2;
10426 vinfos[3].jointtype = 1;
10427 vinfos[3].foffset = j3;
10428 vinfos[3].indices[0] = _ij3[0];
10429 vinfos[3].indices[1] = _ij3[1];
10430 vinfos[3].maxsolutions = _nj3;
10431 vinfos[4].jointtype = 1;
10432 vinfos[4].foffset = j4;
10433 vinfos[4].indices[0] = _ij4[0];
10434 vinfos[4].indices[1] = _ij4[1];
10435 vinfos[4].maxsolutions = _nj4;
10436 std::vector<int> vfree(0);
10437 solutions.AddSolution(vinfos,vfree);
10438 }
10439 }
10440 }
10441
10442 }
10443
10444 }
10445
10446 } else
10447 {
10448 {
10449 IkReal j4array[1], cj4array[1], sj4array[1];
10450 bool j4valid[1]={false};
10451 _nj4 = 1;
10452 IkReal x1385=(r01*sj2);
10453 IkReal x1386=(sj0*sj1);
10454 IkReal x1387=(cj2*r01);
10455 IkReal x1388=(r00*sj0);
10456 IkReal x1389=(cj1*r02);
10457 IkReal x1390=(cj0*r00*sj1);
10458 CheckValue<IkReal> x1391=IKPowWithIntegerCheck(sj3,-1);
10459 if(!x1391.valid){
10460 continue;
10461 }
10462 if( IKabs((((cj2*x1388))+(((-1.0)*cj0*x1387))+((sj2*x1390))+((sj2*x1389))+((x1385*x1386)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1391.value)*(((((-1.0)*sj2*x1388))+((cj2*x1390))+((cj2*x1389))+((cj0*x1385))+((x1386*x1387)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj2*x1388))+(((-1.0)*cj0*x1387))+((sj2*x1390))+((sj2*x1389))+((x1385*x1386))))+IKsqr(((x1391.value)*(((((-1.0)*sj2*x1388))+((cj2*x1390))+((cj2*x1389))+((cj0*x1385))+((x1386*x1387))))))-1) <= IKFAST_SINCOS_THRESH )
10463 continue;
10464 j4array[0]=IKatan2((((cj2*x1388))+(((-1.0)*cj0*x1387))+((sj2*x1390))+((sj2*x1389))+((x1385*x1386))), ((x1391.value)*(((((-1.0)*sj2*x1388))+((cj2*x1390))+((cj2*x1389))+((cj0*x1385))+((x1386*x1387))))));
10465 sj4array[0]=IKsin(j4array[0]);
10466 cj4array[0]=IKcos(j4array[0]);
10467 if( j4array[0] > IKPI )
10468 {
10469 j4array[0]-=IK2PI;
10470 }
10471 else if( j4array[0] < -IKPI )
10472 { j4array[0]+=IK2PI;
10473 }
10474 j4valid[0] = true;
10475 for(int ij4 = 0; ij4 < 1; ++ij4)
10476 {
10477 if( !j4valid[ij4] )
10478 {
10479 continue;
10480 }
10481 _ij4[0] = ij4; _ij4[1] = -1;
10482 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10483 {
10484 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10485 {
10486 j4valid[iij4]=false; _ij4[1] = iij4; break;
10487 }
10488 }
10489 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10490 {
10491 IkReal evalcond[6];
10492 IkReal x1392=IKcos(j4);
10493 IkReal x1393=IKsin(j4);
10494 IkReal x1394=(cj0*px);
10495 IkReal x1395=(sj0*sj1);
10496 IkReal x1396=((0.0137)*sj3);
10497 IkReal x1397=((0.278775)*cj3);
10498 IkReal x1398=((1.0)*sj0);
10499 IkReal x1399=((1.0)*cj1);
10500 IkReal x1400=(cj0*r00);
10501 IkReal x1401=(sj2*x1393);
10502 IkReal x1402=((1.0)*x1392);
10503 IkReal x1403=(cj2*x1393);
10504 IkReal x1404=((0.05525)*sj3*x1392);
10505 evalcond[0]=((((-1.0)*r00*x1398))+x1403+((cj0*r01))+(((-1.0)*sj2*sj3*x1402)));
10506 evalcond[1]=((((-1.0)*cj1*r01*x1398))+(((-1.0)*x1399*x1400))+(((-1.0)*cj3*x1402))+((r02*sj1)));
10507 evalcond[2]=((((-1.0)*x1401))+((cj1*r02))+((sj1*x1400))+((r01*x1395))+(((-1.0)*cj2*sj3*x1402)));
10508 evalcond[3]=((((0.0137)*cj3))+(((-1.0)*cj1*py*x1398))+(((-1.0)*x1394*x1399))+(((-0.05525)*cj3*x1392))+((pz*sj1))+(((0.278775)*sj3)));
10509 evalcond[4]=((0.00025116)+(((-0.224)*sj2))+((sj2*x1396))+(((-1.0)*px*x1398))+((cj0*py))+(((0.05525)*x1403))+(((-1.0)*sj2*x1397))+(((-1.0)*sj2*x1404)));
10510 evalcond[5]=((-0.26630543)+((cj2*x1396))+(((-1.0)*cj2*x1404))+(((-0.05525)*x1401))+((py*x1395))+((cj1*pz))+((sj1*x1394))+(((-1.0)*cj2*x1397))+(((-0.224)*cj2)));
10511 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
10512 {
10513 continue;
10514 }
10515 }
10516
10517 {
10518 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10519 vinfos[0].jointtype = 1;
10520 vinfos[0].foffset = j0;
10521 vinfos[0].indices[0] = _ij0[0];
10522 vinfos[0].indices[1] = _ij0[1];
10523 vinfos[0].maxsolutions = _nj0;
10524 vinfos[1].jointtype = 1;
10525 vinfos[1].foffset = j1;
10526 vinfos[1].indices[0] = _ij1[0];
10527 vinfos[1].indices[1] = _ij1[1];
10528 vinfos[1].maxsolutions = _nj1;
10529 vinfos[2].jointtype = 1;
10530 vinfos[2].foffset = j2;
10531 vinfos[2].indices[0] = _ij2[0];
10532 vinfos[2].indices[1] = _ij2[1];
10533 vinfos[2].maxsolutions = _nj2;
10534 vinfos[3].jointtype = 1;
10535 vinfos[3].foffset = j3;
10536 vinfos[3].indices[0] = _ij3[0];
10537 vinfos[3].indices[1] = _ij3[1];
10538 vinfos[3].maxsolutions = _nj3;
10539 vinfos[4].jointtype = 1;
10540 vinfos[4].foffset = j4;
10541 vinfos[4].indices[0] = _ij4[0];
10542 vinfos[4].indices[1] = _ij4[1];
10543 vinfos[4].maxsolutions = _nj4;
10544 std::vector<int> vfree(0);
10545 solutions.AddSolution(vinfos,vfree);
10546 }
10547 }
10548 }
10549
10550 }
10551
10552 }
10553 }
10554 }
10555
10556 }
10557
10558 }
10559
10560 } else
10561 {
10562 {
10563 IkReal j3array[1], cj3array[1], sj3array[1];
10564 bool j3valid[1]={false};
10565 _nj3 = 1;
10566 IkReal x1405=sj2*sj2;
10567 IkReal x1406=(sj0*sj2);
10568 IkReal x1407=((0.05525)*cj1);
10569 IkReal x1408=((1.0)*cj1);
10570 IkReal x1409=(cj0*py*sj2);
10571 IkReal x1410=(cj0*r01*sj2);
10572 IkReal x1411=(((cj0*r00*x1407))+(((-0.05525)*r02*sj1))+(((-1.0)*cj0*px*x1408))+((r01*sj0*x1407))+(((-1.0)*py*sj0*x1408))+((pz*sj1)));
10573 IkReal x1412=(x1405*x1411);
10574 CheckValue<IkReal> x1413 = IKatan2WithCheck(IkReal(((((-30.277)*x1410))+(((11151.0)*x1412))+(((-548.0)*px*x1406))+(((548.0)*x1409))+(((30.277)*r00*x1406))+(((-122.752)*x1405))+(((0.13763568)*sj2)))),((((2497.824)*x1405))+(((616.09275)*x1410))+(((11151.0)*px*x1406))+(((548.0)*x1412))+(((-616.09275)*r00*x1406))+(((-11151.0)*x1409))+(((-2.80068516)*sj2))),IKFAST_ATAN2_MAGTHRESH);
10575 if(!x1413.valid){
10576 continue;
10577 }
10578 CheckValue<IkReal> x1414=IKPowWithIntegerCheck(IKsign(x1405),-1);
10579 if(!x1414.valid){
10580 continue;
10581 }
10582 j3array[0]=((-1.5707963267949)+(x1413.value)+(((-1.5707963267949)*(x1414.value))));
10583 sj3array[0]=IKsin(j3array[0]);
10584 cj3array[0]=IKcos(j3array[0]);
10585 if( j3array[0] > IKPI )
10586 {
10587 j3array[0]-=IK2PI;
10588 }
10589 else if( j3array[0] < -IKPI )
10590 { j3array[0]+=IK2PI;
10591 }
10592 j3valid[0] = true;
10593 for(int ij3 = 0; ij3 < 1; ++ij3)
10594 {
10595 if( !j3valid[ij3] )
10596 {
10597 continue;
10598 }
10599 _ij3[0] = ij3; _ij3[1] = -1;
10600 for(int iij3 = ij3+1; iij3 < 1; ++iij3)
10601 {
10602 if( j3valid[iij3] && IKabs(cj3array[ij3]-cj3array[iij3]) < IKFAST_SOLUTION_THRESH && IKabs(sj3array[ij3]-sj3array[iij3]) < IKFAST_SOLUTION_THRESH )
10603 {
10604 j3valid[iij3]=false; _ij3[1] = iij3; break;
10605 }
10606 }
10607 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
10608 {
10609 IkReal evalcond[3];
10610 IkReal x1415=sj2*sj2;
10611 IkReal x1416=IKsin(j3);
10612 IkReal x1417=IKcos(j3);
10613 IkReal x1418=cj2*cj2;
10614 IkReal x1419=((0.05525)*r00);
10615 IkReal x1420=(cj0*sj2);
10616 IkReal x1421=(py*sj0);
10617 IkReal x1422=(cj2*sj1);
10618 IkReal x1423=((0.05525)*r02);
10619 IkReal x1424=(cj1*cj2);
10620 IkReal x1425=(sj0*sj2);
10621 IkReal x1426=(cj0*cj1);
10622 IkReal x1427=((1.0)*px);
10623 IkReal x1428=(cj0*x1422);
10624 IkReal x1429=((0.0137)*x1416);
10625 IkReal x1430=((0.278775)*x1417);
10626 IkReal x1431=((0.05525)*r01*sj0);
10627 evalcond[0]=(((x1415*x1429))+(((-1.0)*x1425*x1427))+(((-0.224)*x1415))+(((-0.05525)*r01*x1420))+(((-1.0)*x1415*x1430))+((x1419*x1425))+((py*x1420))+(((0.00025116)*sj2)));
10628 evalcond[1]=((((-1.0)*x1426*x1427))+(((0.278775)*x1416))+(((-1.0)*sj1*x1423))+((x1419*x1426))+(((-1.0)*cj1*x1421))+((pz*sj1))+(((0.0137)*x1417))+((cj1*x1431)));
10629 evalcond[2]=((((-1.0)*x1422*x1431))+(((-1.0)*x1423*x1424))+(((-0.26630543)*cj2))+(((-0.224)*x1418))+(((-1.0)*x1419*x1428))+((x1418*x1429))+((px*x1428))+(((-1.0)*x1418*x1430))+((pz*x1424))+((x1421*x1422)));
10630 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH )
10631 {
10632 continue;
10633 }
10634 }
10635
10636 {
10637 IkReal j4eval[1];
10638 j4eval[0]=sj3;
10639 if( IKabs(j4eval[0]) < 0.0000010000000000 )
10640 {
10641 {
10642 IkReal j4eval[2];
10643 j4eval[0]=cj2;
10644 j4eval[1]=cj3;
10645 if( IKabs(j4eval[0]) < 0.0000010000000000 || IKabs(j4eval[1]) < 0.0000010000000000 )
10646 {
10647 {
10648 IkReal j4eval[2];
10649 j4eval[0]=cj3;
10650 j4eval[1]=sj2;
10651 if( IKabs(j4eval[0]) < 0.0000010000000000 || IKabs(j4eval[1]) < 0.0000010000000000 )
10652 {
10653 {
10654 IkReal evalcond[3];
10655 bool bgotonextstatement = true;
10656 do
10657 {
10658 IkReal x1432=((1.0)*cj1);
10659 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
10660 evalcond[1]=((((-1.0)*r01*sj0*x1432))+(((-1.0)*cj0*r00*x1432))+((r02*sj1)));
10661 evalcond[2]=((0.278775)+(((-1.0)*cj0*px*x1432))+((pz*sj1))+(((-1.0)*py*sj0*x1432)));
10662 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
10663 {
10664 bgotonextstatement=false;
10665 {
10666 IkReal j4array[1], cj4array[1], sj4array[1];
10667 bool j4valid[1]={false};
10668 _nj4 = 1;
10669 IkReal x1433=(r01*sj2);
10670 IkReal x1434=(sj0*sj1);
10671 IkReal x1435=(cj2*r01);
10672 IkReal x1436=(r00*sj0);
10673 IkReal x1437=(cj1*r02);
10674 IkReal x1438=(cj0*r00*sj1);
10675 if( IKabs((((x1433*x1434))+((sj2*x1437))+((sj2*x1438))+(((-1.0)*cj0*x1435))+((cj2*x1436)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*sj2*x1436))+((x1434*x1435))+((cj0*x1433))+((cj2*x1437))+((cj2*x1438)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((x1433*x1434))+((sj2*x1437))+((sj2*x1438))+(((-1.0)*cj0*x1435))+((cj2*x1436))))+IKsqr(((((-1.0)*sj2*x1436))+((x1434*x1435))+((cj0*x1433))+((cj2*x1437))+((cj2*x1438))))-1) <= IKFAST_SINCOS_THRESH )
10676 continue;
10677 j4array[0]=IKatan2((((x1433*x1434))+((sj2*x1437))+((sj2*x1438))+(((-1.0)*cj0*x1435))+((cj2*x1436))), ((((-1.0)*sj2*x1436))+((x1434*x1435))+((cj0*x1433))+((cj2*x1437))+((cj2*x1438))));
10678 sj4array[0]=IKsin(j4array[0]);
10679 cj4array[0]=IKcos(j4array[0]);
10680 if( j4array[0] > IKPI )
10681 {
10682 j4array[0]-=IK2PI;
10683 }
10684 else if( j4array[0] < -IKPI )
10685 { j4array[0]+=IK2PI;
10686 }
10687 j4valid[0] = true;
10688 for(int ij4 = 0; ij4 < 1; ++ij4)
10689 {
10690 if( !j4valid[ij4] )
10691 {
10692 continue;
10693 }
10694 _ij4[0] = ij4; _ij4[1] = -1;
10695 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10696 {
10697 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10698 {
10699 j4valid[iij4]=false; _ij4[1] = iij4; break;
10700 }
10701 }
10702 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10703 {
10704 IkReal evalcond[4];
10705 IkReal x1439=IKcos(j4);
10706 IkReal x1440=IKsin(j4);
10707 IkReal x1441=((1.0)*sj2);
10708 IkReal x1442=(sj0*sj1);
10709 IkReal x1443=(cj0*sj1);
10710 IkReal x1444=((1.0)*sj0);
10711 IkReal x1445=((0.05525)*x1439);
10712 IkReal x1446=(cj2*x1440);
10713 evalcond[0]=((((-1.0)*r00*x1444))+(((-1.0)*x1439*x1441))+x1446+((cj0*r01)));
10714 evalcond[1]=(((cj1*r02))+(((-1.0)*cj2*x1439))+((r00*x1443))+((r01*x1442))+(((-1.0)*x1440*x1441)));
10715 evalcond[2]=((0.00025116)+(((-1.0)*sj2*x1445))+(((-1.0)*px*x1444))+(((0.05525)*x1446))+(((-0.2103)*sj2))+((cj0*py)));
10716 evalcond[3]=((-0.26630543)+(((-1.0)*cj2*x1445))+(((-0.2103)*cj2))+((cj1*pz))+((py*x1442))+((px*x1443))+(((-0.05525)*sj2*x1440)));
10717 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
10718 {
10719 continue;
10720 }
10721 }
10722
10723 {
10724 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10725 vinfos[0].jointtype = 1;
10726 vinfos[0].foffset = j0;
10727 vinfos[0].indices[0] = _ij0[0];
10728 vinfos[0].indices[1] = _ij0[1];
10729 vinfos[0].maxsolutions = _nj0;
10730 vinfos[1].jointtype = 1;
10731 vinfos[1].foffset = j1;
10732 vinfos[1].indices[0] = _ij1[0];
10733 vinfos[1].indices[1] = _ij1[1];
10734 vinfos[1].maxsolutions = _nj1;
10735 vinfos[2].jointtype = 1;
10736 vinfos[2].foffset = j2;
10737 vinfos[2].indices[0] = _ij2[0];
10738 vinfos[2].indices[1] = _ij2[1];
10739 vinfos[2].maxsolutions = _nj2;
10740 vinfos[3].jointtype = 1;
10741 vinfos[3].foffset = j3;
10742 vinfos[3].indices[0] = _ij3[0];
10743 vinfos[3].indices[1] = _ij3[1];
10744 vinfos[3].maxsolutions = _nj3;
10745 vinfos[4].jointtype = 1;
10746 vinfos[4].foffset = j4;
10747 vinfos[4].indices[0] = _ij4[0];
10748 vinfos[4].indices[1] = _ij4[1];
10749 vinfos[4].maxsolutions = _nj4;
10750 std::vector<int> vfree(0);
10751 solutions.AddSolution(vinfos,vfree);
10752 }
10753 }
10754 }
10755
10756 }
10757 } while(0);
10758 if( bgotonextstatement )
10759 {
10760 bool bgotonextstatement = true;
10761 do
10762 {
10763 IkReal x1447=((1.0)*cj1);
10764 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
10765 evalcond[1]=(((r02*sj1))+(((-1.0)*r01*sj0*x1447))+(((-1.0)*cj0*r00*x1447)));
10766 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1447))+((pz*sj1))+(((-1.0)*cj0*px*x1447)));
10767 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
10768 {
10769 bgotonextstatement=false;
10770 {
10771 IkReal j4array[1], cj4array[1], sj4array[1];
10772 bool j4valid[1]={false};
10773 _nj4 = 1;
10774 IkReal x1448=((1.0)*cj2);
10775 IkReal x1449=(r00*sj0);
10776 IkReal x1450=(cj1*r02);
10777 IkReal x1451=(cj0*sj2);
10778 IkReal x1452=(r00*sj1);
10779 IkReal x1453=(r01*sj0*sj1);
10780 if( IKabs(((((-1.0)*cj0*r01*x1448))+((sj2*x1450))+((sj2*x1453))+((cj2*x1449))+((x1451*x1452)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*x1448*x1452))+(((-1.0)*x1448*x1450))+(((-1.0)*x1448*x1453))+(((-1.0)*r01*x1451))+((sj2*x1449)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*cj0*r01*x1448))+((sj2*x1450))+((sj2*x1453))+((cj2*x1449))+((x1451*x1452))))+IKsqr(((((-1.0)*cj0*x1448*x1452))+(((-1.0)*x1448*x1450))+(((-1.0)*x1448*x1453))+(((-1.0)*r01*x1451))+((sj2*x1449))))-1) <= IKFAST_SINCOS_THRESH )
10781 continue;
10782 j4array[0]=IKatan2(((((-1.0)*cj0*r01*x1448))+((sj2*x1450))+((sj2*x1453))+((cj2*x1449))+((x1451*x1452))), ((((-1.0)*cj0*x1448*x1452))+(((-1.0)*x1448*x1450))+(((-1.0)*x1448*x1453))+(((-1.0)*r01*x1451))+((sj2*x1449))));
10783 sj4array[0]=IKsin(j4array[0]);
10784 cj4array[0]=IKcos(j4array[0]);
10785 if( j4array[0] > IKPI )
10786 {
10787 j4array[0]-=IK2PI;
10788 }
10789 else if( j4array[0] < -IKPI )
10790 { j4array[0]+=IK2PI;
10791 }
10792 j4valid[0] = true;
10793 for(int ij4 = 0; ij4 < 1; ++ij4)
10794 {
10795 if( !j4valid[ij4] )
10796 {
10797 continue;
10798 }
10799 _ij4[0] = ij4; _ij4[1] = -1;
10800 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10801 {
10802 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10803 {
10804 j4valid[iij4]=false; _ij4[1] = iij4; break;
10805 }
10806 }
10807 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10808 {
10809 IkReal evalcond[4];
10810 IkReal x1454=IKcos(j4);
10811 IkReal x1455=IKsin(j4);
10812 IkReal x1456=(sj0*sj1);
10813 IkReal x1457=(cj0*sj1);
10814 IkReal x1458=((1.0)*sj0);
10815 IkReal x1459=(sj2*x1455);
10816 IkReal x1460=((0.05525)*x1454);
10817 IkReal x1461=(cj2*x1455);
10818 evalcond[0]=(((sj2*x1454))+(((-1.0)*r00*x1458))+x1461+((cj0*r01)));
10819 evalcond[1]=((((-1.0)*x1459))+((cj1*r02))+((r01*x1456))+((cj2*x1454))+((r00*x1457)));
10820 evalcond[2]=((0.00025116)+(((0.05525)*x1461))+((sj2*x1460))+(((-1.0)*px*x1458))+((cj0*py))+(((-0.2377)*sj2)));
10821 evalcond[3]=((-0.26630543)+((cj2*x1460))+((py*x1456))+((px*x1457))+((cj1*pz))+(((-0.05525)*x1459))+(((-0.2377)*cj2)));
10822 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
10823 {
10824 continue;
10825 }
10826 }
10827
10828 {
10829 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10830 vinfos[0].jointtype = 1;
10831 vinfos[0].foffset = j0;
10832 vinfos[0].indices[0] = _ij0[0];
10833 vinfos[0].indices[1] = _ij0[1];
10834 vinfos[0].maxsolutions = _nj0;
10835 vinfos[1].jointtype = 1;
10836 vinfos[1].foffset = j1;
10837 vinfos[1].indices[0] = _ij1[0];
10838 vinfos[1].indices[1] = _ij1[1];
10839 vinfos[1].maxsolutions = _nj1;
10840 vinfos[2].jointtype = 1;
10841 vinfos[2].foffset = j2;
10842 vinfos[2].indices[0] = _ij2[0];
10843 vinfos[2].indices[1] = _ij2[1];
10844 vinfos[2].maxsolutions = _nj2;
10845 vinfos[3].jointtype = 1;
10846 vinfos[3].foffset = j3;
10847 vinfos[3].indices[0] = _ij3[0];
10848 vinfos[3].indices[1] = _ij3[1];
10849 vinfos[3].maxsolutions = _nj3;
10850 vinfos[4].jointtype = 1;
10851 vinfos[4].foffset = j4;
10852 vinfos[4].indices[0] = _ij4[0];
10853 vinfos[4].indices[1] = _ij4[1];
10854 vinfos[4].maxsolutions = _nj4;
10855 std::vector<int> vfree(0);
10856 solutions.AddSolution(vinfos,vfree);
10857 }
10858 }
10859 }
10860
10861 }
10862 } while(0);
10863 if( bgotonextstatement )
10864 {
10865 bool bgotonextstatement = true;
10866 do
10867 {
10868 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j2))), 6.28318530717959)));
10869 if( IKabs(evalcond[0]) < 0.0000010000000000 )
10870 {
10871 bgotonextstatement=false;
10872 {
10873 IkReal j4eval[1];
10874 sj2=0;
10875 cj2=1.0;
10876 j2=0;
10877 j4eval[0]=sj3;
10878 if( IKabs(j4eval[0]) < 0.0000010000000000 )
10879 {
10880 {
10881 IkReal j4eval[1];
10882 sj2=0;
10883 cj2=1.0;
10884 j2=0;
10885 j4eval[0]=cj3;
10886 if( IKabs(j4eval[0]) < 0.0000010000000000 )
10887 {
10888 {
10889 IkReal evalcond[3];
10890 bool bgotonextstatement = true;
10891 do
10892 {
10893 IkReal x1462=((1.0)*cj1);
10894 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
10895 evalcond[1]=((((-1.0)*r01*sj0*x1462))+(((-1.0)*cj0*r00*x1462))+((r02*sj1)));
10896 evalcond[2]=((0.278775)+(((-1.0)*cj0*px*x1462))+((pz*sj1))+(((-1.0)*py*sj0*x1462)));
10897 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
10898 {
10899 bgotonextstatement=false;
10900 {
10901 IkReal j4array[1], cj4array[1], sj4array[1];
10902 bool j4valid[1]={false};
10903 _nj4 = 1;
10904 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))-1) <= IKFAST_SINCOS_THRESH )
10905 continue;
10906 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), (((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))));
10907 sj4array[0]=IKsin(j4array[0]);
10908 cj4array[0]=IKcos(j4array[0]);
10909 if( j4array[0] > IKPI )
10910 {
10911 j4array[0]-=IK2PI;
10912 }
10913 else if( j4array[0] < -IKPI )
10914 { j4array[0]+=IK2PI;
10915 }
10916 j4valid[0] = true;
10917 for(int ij4 = 0; ij4 < 1; ++ij4)
10918 {
10919 if( !j4valid[ij4] )
10920 {
10921 continue;
10922 }
10923 _ij4[0] = ij4; _ij4[1] = -1;
10924 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
10925 {
10926 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
10927 {
10928 j4valid[iij4]=false; _ij4[1] = iij4; break;
10929 }
10930 }
10931 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
10932 {
10933 IkReal evalcond[4];
10934 IkReal x1463=IKsin(j4);
10935 IkReal x1464=IKcos(j4);
10936 IkReal x1465=(sj0*sj1);
10937 IkReal x1466=(cj0*sj1);
10938 IkReal x1467=((1.0)*sj0);
10939 evalcond[0]=((((-1.0)*r00*x1467))+x1463+((cj0*r01)));
10940 evalcond[1]=((0.00025116)+(((0.05525)*x1463))+(((-1.0)*px*x1467))+((cj0*py)));
10941 evalcond[2]=(((r01*x1465))+((cj1*r02))+((r00*x1466))+(((-1.0)*x1464)));
10942 evalcond[3]=((-0.47660543)+((py*x1465))+(((-0.05525)*x1464))+((cj1*pz))+((px*x1466)));
10943 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
10944 {
10945 continue;
10946 }
10947 }
10948
10949 {
10950 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
10951 vinfos[0].jointtype = 1;
10952 vinfos[0].foffset = j0;
10953 vinfos[0].indices[0] = _ij0[0];
10954 vinfos[0].indices[1] = _ij0[1];
10955 vinfos[0].maxsolutions = _nj0;
10956 vinfos[1].jointtype = 1;
10957 vinfos[1].foffset = j1;
10958 vinfos[1].indices[0] = _ij1[0];
10959 vinfos[1].indices[1] = _ij1[1];
10960 vinfos[1].maxsolutions = _nj1;
10961 vinfos[2].jointtype = 1;
10962 vinfos[2].foffset = j2;
10963 vinfos[2].indices[0] = _ij2[0];
10964 vinfos[2].indices[1] = _ij2[1];
10965 vinfos[2].maxsolutions = _nj2;
10966 vinfos[3].jointtype = 1;
10967 vinfos[3].foffset = j3;
10968 vinfos[3].indices[0] = _ij3[0];
10969 vinfos[3].indices[1] = _ij3[1];
10970 vinfos[3].maxsolutions = _nj3;
10971 vinfos[4].jointtype = 1;
10972 vinfos[4].foffset = j4;
10973 vinfos[4].indices[0] = _ij4[0];
10974 vinfos[4].indices[1] = _ij4[1];
10975 vinfos[4].maxsolutions = _nj4;
10976 std::vector<int> vfree(0);
10977 solutions.AddSolution(vinfos,vfree);
10978 }
10979 }
10980 }
10981
10982 }
10983 } while(0);
10984 if( bgotonextstatement )
10985 {
10986 bool bgotonextstatement = true;
10987 do
10988 {
10989 IkReal x1468=((1.0)*cj1);
10990 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
10991 evalcond[1]=((((-1.0)*r01*sj0*x1468))+(((-1.0)*cj0*r00*x1468))+((r02*sj1)));
10992 evalcond[2]=((-0.278775)+(((-1.0)*cj0*px*x1468))+((pz*sj1))+(((-1.0)*py*sj0*x1468)));
10993 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
10994 {
10995 bgotonextstatement=false;
10996 {
10997 IkReal j4array[1], cj4array[1], sj4array[1];
10998 bool j4valid[1]={false};
10999 _nj4 = 1;
11000 IkReal x1469=((1.0)*sj1);
11001 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r01*sj0*x1469))+(((-1.0)*cj0*r00*x1469))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr(((((-1.0)*r01*sj0*x1469))+(((-1.0)*cj0*r00*x1469))+(((-1.0)*cj1*r02))))-1) <= IKFAST_SINCOS_THRESH )
11002 continue;
11003 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), ((((-1.0)*r01*sj0*x1469))+(((-1.0)*cj0*r00*x1469))+(((-1.0)*cj1*r02))));
11004 sj4array[0]=IKsin(j4array[0]);
11005 cj4array[0]=IKcos(j4array[0]);
11006 if( j4array[0] > IKPI )
11007 {
11008 j4array[0]-=IK2PI;
11009 }
11010 else if( j4array[0] < -IKPI )
11011 { j4array[0]+=IK2PI;
11012 }
11013 j4valid[0] = true;
11014 for(int ij4 = 0; ij4 < 1; ++ij4)
11015 {
11016 if( !j4valid[ij4] )
11017 {
11018 continue;
11019 }
11020 _ij4[0] = ij4; _ij4[1] = -1;
11021 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11022 {
11023 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11024 {
11025 j4valid[iij4]=false; _ij4[1] = iij4; break;
11026 }
11027 }
11028 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11029 {
11030 IkReal evalcond[4];
11031 IkReal x1470=IKsin(j4);
11032 IkReal x1471=IKcos(j4);
11033 IkReal x1472=(sj0*sj1);
11034 IkReal x1473=(cj0*sj1);
11035 IkReal x1474=((1.0)*sj0);
11036 evalcond[0]=((((-1.0)*r00*x1474))+x1470+((cj0*r01)));
11037 evalcond[1]=((0.00025116)+(((-1.0)*px*x1474))+(((0.05525)*x1470))+((cj0*py)));
11038 evalcond[2]=(((cj1*r02))+x1471+((r01*x1472))+((r00*x1473)));
11039 evalcond[3]=((-0.50400543)+((cj1*pz))+(((0.05525)*x1471))+((py*x1472))+((px*x1473)));
11040 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11041 {
11042 continue;
11043 }
11044 }
11045
11046 {
11047 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11048 vinfos[0].jointtype = 1;
11049 vinfos[0].foffset = j0;
11050 vinfos[0].indices[0] = _ij0[0];
11051 vinfos[0].indices[1] = _ij0[1];
11052 vinfos[0].maxsolutions = _nj0;
11053 vinfos[1].jointtype = 1;
11054 vinfos[1].foffset = j1;
11055 vinfos[1].indices[0] = _ij1[0];
11056 vinfos[1].indices[1] = _ij1[1];
11057 vinfos[1].maxsolutions = _nj1;
11058 vinfos[2].jointtype = 1;
11059 vinfos[2].foffset = j2;
11060 vinfos[2].indices[0] = _ij2[0];
11061 vinfos[2].indices[1] = _ij2[1];
11062 vinfos[2].maxsolutions = _nj2;
11063 vinfos[3].jointtype = 1;
11064 vinfos[3].foffset = j3;
11065 vinfos[3].indices[0] = _ij3[0];
11066 vinfos[3].indices[1] = _ij3[1];
11067 vinfos[3].maxsolutions = _nj3;
11068 vinfos[4].jointtype = 1;
11069 vinfos[4].foffset = j4;
11070 vinfos[4].indices[0] = _ij4[0];
11071 vinfos[4].indices[1] = _ij4[1];
11072 vinfos[4].maxsolutions = _nj4;
11073 std::vector<int> vfree(0);
11074 solutions.AddSolution(vinfos,vfree);
11075 }
11076 }
11077 }
11078
11079 }
11080 } while(0);
11081 if( bgotonextstatement )
11082 {
11083 bool bgotonextstatement = true;
11084 do
11085 {
11086 IkReal x1475=(sj0*sj1);
11087 IkReal x1476=(cj0*sj1);
11088 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
11089 evalcond[1]=(((cj1*r02))+((r01*x1475))+((r00*x1476)));
11090 evalcond[2]=((-0.76908043)+((cj1*pz))+((py*x1475))+((px*x1476)));
11091 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
11092 {
11093 bgotonextstatement=false;
11094 {
11095 IkReal j4array[1], cj4array[1], sj4array[1];
11096 bool j4valid[1]={false};
11097 _nj4 = 1;
11098 IkReal x1477=((1.0)*cj0);
11099 if( IKabs((((r00*sj0))+(((-1.0)*r01*x1477)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*cj1*r00*x1477))+(((-1.0)*cj1*r01*sj0)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*r01*x1477))))+IKsqr((((r02*sj1))+(((-1.0)*cj1*r00*x1477))+(((-1.0)*cj1*r01*sj0))))-1) <= IKFAST_SINCOS_THRESH )
11100 continue;
11101 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*r01*x1477))), (((r02*sj1))+(((-1.0)*cj1*r00*x1477))+(((-1.0)*cj1*r01*sj0))));
11102 sj4array[0]=IKsin(j4array[0]);
11103 cj4array[0]=IKcos(j4array[0]);
11104 if( j4array[0] > IKPI )
11105 {
11106 j4array[0]-=IK2PI;
11107 }
11108 else if( j4array[0] < -IKPI )
11109 { j4array[0]+=IK2PI;
11110 }
11111 j4valid[0] = true;
11112 for(int ij4 = 0; ij4 < 1; ++ij4)
11113 {
11114 if( !j4valid[ij4] )
11115 {
11116 continue;
11117 }
11118 _ij4[0] = ij4; _ij4[1] = -1;
11119 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11120 {
11121 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11122 {
11123 j4valid[iij4]=false; _ij4[1] = iij4; break;
11124 }
11125 }
11126 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11127 {
11128 IkReal evalcond[4];
11129 IkReal x1478=IKsin(j4);
11130 IkReal x1479=IKcos(j4);
11131 IkReal x1480=((1.0)*cj1);
11132 IkReal x1481=((1.0)*sj0);
11133 evalcond[0]=((((-1.0)*r00*x1481))+x1478+((cj0*r01)));
11134 evalcond[1]=((0.00025116)+(((-1.0)*px*x1481))+(((0.05525)*x1478))+((cj0*py)));
11135 evalcond[2]=((((-1.0)*r01*sj0*x1480))+(((-1.0)*x1479))+((r02*sj1))+(((-1.0)*cj0*r00*x1480)));
11136 evalcond[3]=((0.0137)+(((-1.0)*cj0*px*x1480))+(((-1.0)*py*sj0*x1480))+(((-0.05525)*x1479))+((pz*sj1)));
11137 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11138 {
11139 continue;
11140 }
11141 }
11142
11143 {
11144 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11145 vinfos[0].jointtype = 1;
11146 vinfos[0].foffset = j0;
11147 vinfos[0].indices[0] = _ij0[0];
11148 vinfos[0].indices[1] = _ij0[1];
11149 vinfos[0].maxsolutions = _nj0;
11150 vinfos[1].jointtype = 1;
11151 vinfos[1].foffset = j1;
11152 vinfos[1].indices[0] = _ij1[0];
11153 vinfos[1].indices[1] = _ij1[1];
11154 vinfos[1].maxsolutions = _nj1;
11155 vinfos[2].jointtype = 1;
11156 vinfos[2].foffset = j2;
11157 vinfos[2].indices[0] = _ij2[0];
11158 vinfos[2].indices[1] = _ij2[1];
11159 vinfos[2].maxsolutions = _nj2;
11160 vinfos[3].jointtype = 1;
11161 vinfos[3].foffset = j3;
11162 vinfos[3].indices[0] = _ij3[0];
11163 vinfos[3].indices[1] = _ij3[1];
11164 vinfos[3].maxsolutions = _nj3;
11165 vinfos[4].jointtype = 1;
11166 vinfos[4].foffset = j4;
11167 vinfos[4].indices[0] = _ij4[0];
11168 vinfos[4].indices[1] = _ij4[1];
11169 vinfos[4].maxsolutions = _nj4;
11170 std::vector<int> vfree(0);
11171 solutions.AddSolution(vinfos,vfree);
11172 }
11173 }
11174 }
11175
11176 }
11177 } while(0);
11178 if( bgotonextstatement )
11179 {
11180 bool bgotonextstatement = true;
11181 do
11182 {
11183 IkReal x1482=(sj0*sj1);
11184 IkReal x1483=(cj0*sj1);
11185 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
11186 evalcond[1]=(((r01*x1482))+((r00*x1483))+((cj1*r02)));
11187 evalcond[2]=((-0.21153043)+((py*x1482))+((cj1*pz))+((px*x1483)));
11188 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
11189 {
11190 bgotonextstatement=false;
11191 {
11192 IkReal j4array[1], cj4array[1], sj4array[1];
11193 bool j4valid[1]={false};
11194 _nj4 = 1;
11195 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
11196 continue;
11197 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
11198 sj4array[0]=IKsin(j4array[0]);
11199 cj4array[0]=IKcos(j4array[0]);
11200 if( j4array[0] > IKPI )
11201 {
11202 j4array[0]-=IK2PI;
11203 }
11204 else if( j4array[0] < -IKPI )
11205 { j4array[0]+=IK2PI;
11206 }
11207 j4valid[0] = true;
11208 for(int ij4 = 0; ij4 < 1; ++ij4)
11209 {
11210 if( !j4valid[ij4] )
11211 {
11212 continue;
11213 }
11214 _ij4[0] = ij4; _ij4[1] = -1;
11215 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11216 {
11217 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11218 {
11219 j4valid[iij4]=false; _ij4[1] = iij4; break;
11220 }
11221 }
11222 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11223 {
11224 IkReal evalcond[4];
11225 IkReal x1484=IKsin(j4);
11226 IkReal x1485=IKcos(j4);
11227 IkReal x1486=((1.0)*cj1);
11228 IkReal x1487=((1.0)*sj0);
11229 evalcond[0]=((((-1.0)*r00*x1487))+x1484+((cj0*r01)));
11230 evalcond[1]=((0.00025116)+(((0.05525)*x1484))+(((-1.0)*px*x1487))+((cj0*py)));
11231 evalcond[2]=((((-1.0)*r01*sj0*x1486))+((r02*sj1))+x1485+(((-1.0)*cj0*r00*x1486)));
11232 evalcond[3]=((-0.0137)+(((0.05525)*x1485))+(((-1.0)*cj0*px*x1486))+(((-1.0)*py*sj0*x1486))+((pz*sj1)));
11233 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11234 {
11235 continue;
11236 }
11237 }
11238
11239 {
11240 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11241 vinfos[0].jointtype = 1;
11242 vinfos[0].foffset = j0;
11243 vinfos[0].indices[0] = _ij0[0];
11244 vinfos[0].indices[1] = _ij0[1];
11245 vinfos[0].maxsolutions = _nj0;
11246 vinfos[1].jointtype = 1;
11247 vinfos[1].foffset = j1;
11248 vinfos[1].indices[0] = _ij1[0];
11249 vinfos[1].indices[1] = _ij1[1];
11250 vinfos[1].maxsolutions = _nj1;
11251 vinfos[2].jointtype = 1;
11252 vinfos[2].foffset = j2;
11253 vinfos[2].indices[0] = _ij2[0];
11254 vinfos[2].indices[1] = _ij2[1];
11255 vinfos[2].maxsolutions = _nj2;
11256 vinfos[3].jointtype = 1;
11257 vinfos[3].foffset = j3;
11258 vinfos[3].indices[0] = _ij3[0];
11259 vinfos[3].indices[1] = _ij3[1];
11260 vinfos[3].maxsolutions = _nj3;
11261 vinfos[4].jointtype = 1;
11262 vinfos[4].foffset = j4;
11263 vinfos[4].indices[0] = _ij4[0];
11264 vinfos[4].indices[1] = _ij4[1];
11265 vinfos[4].maxsolutions = _nj4;
11266 std::vector<int> vfree(0);
11267 solutions.AddSolution(vinfos,vfree);
11268 }
11269 }
11270 }
11271
11272 }
11273 } while(0);
11274 if( bgotonextstatement )
11275 {
11276 bool bgotonextstatement = true;
11277 do
11278 {
11279 if( 1 )
11280 {
11281 bgotonextstatement=false;
11282 continue;
11283
11284 }
11285 } while(0);
11286 if( bgotonextstatement )
11287 {
11288 }
11289 }
11290 }
11291 }
11292 }
11293 }
11294
11295 } else
11296 {
11297 {
11298 IkReal j4array[1], cj4array[1], sj4array[1];
11299 bool j4valid[1]={false};
11300 _nj4 = 1;
11301 IkReal x1488=((1.0)*r01);
11302 CheckValue<IkReal> x1489=IKPowWithIntegerCheck(cj3,-1);
11303 if(!x1489.valid){
11304 continue;
11305 }
11306 if( IKabs((((r00*sj0))+(((-1.0)*cj0*x1488)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1489.value)*(((((-1.0)*cj1*sj0*x1488))+(((-1.0)*cj0*cj1*r00))+((r02*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*x1488))))+IKsqr(((x1489.value)*(((((-1.0)*cj1*sj0*x1488))+(((-1.0)*cj0*cj1*r00))+((r02*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
11307 continue;
11308 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*x1488))), ((x1489.value)*(((((-1.0)*cj1*sj0*x1488))+(((-1.0)*cj0*cj1*r00))+((r02*sj1))))));
11309 sj4array[0]=IKsin(j4array[0]);
11310 cj4array[0]=IKcos(j4array[0]);
11311 if( j4array[0] > IKPI )
11312 {
11313 j4array[0]-=IK2PI;
11314 }
11315 else if( j4array[0] < -IKPI )
11316 { j4array[0]+=IK2PI;
11317 }
11318 j4valid[0] = true;
11319 for(int ij4 = 0; ij4 < 1; ++ij4)
11320 {
11321 if( !j4valid[ij4] )
11322 {
11323 continue;
11324 }
11325 _ij4[0] = ij4; _ij4[1] = -1;
11326 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11327 {
11328 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11329 {
11330 j4valid[iij4]=false; _ij4[1] = iij4; break;
11331 }
11332 }
11333 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11334 {
11335 IkReal evalcond[6];
11336 IkReal x1490=IKsin(j4);
11337 IkReal x1491=IKcos(j4);
11338 IkReal x1492=(cj0*px);
11339 IkReal x1493=(sj0*sj1);
11340 IkReal x1494=((1.0)*cj1);
11341 IkReal x1495=((1.0)*sj0);
11342 IkReal x1496=(cj0*r00);
11343 IkReal x1497=((1.0)*x1491);
11344 IkReal x1498=((0.05525)*x1491);
11345 evalcond[0]=((((-1.0)*r00*x1495))+x1490+((cj0*r01)));
11346 evalcond[1]=((0.00025116)+(((0.05525)*x1490))+(((-1.0)*px*x1495))+((cj0*py)));
11347 evalcond[2]=(((sj1*x1496))+((r01*x1493))+((cj1*r02))+(((-1.0)*sj3*x1497)));
11348 evalcond[3]=((((-1.0)*cj3*x1497))+(((-1.0)*x1494*x1496))+(((-1.0)*r01*sj0*x1494))+((r02*sj1)));
11349 evalcond[4]=((-0.49030543)+((sj1*x1492))+((py*x1493))+((cj1*pz))+(((-1.0)*sj3*x1498))+(((-0.278775)*cj3))+(((0.0137)*sj3)));
11350 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*cj3*x1498))+(((-1.0)*x1492*x1494))+(((-1.0)*py*sj0*x1494))+((pz*sj1))+(((0.278775)*sj3)));
11351 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
11352 {
11353 continue;
11354 }
11355 }
11356
11357 {
11358 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11359 vinfos[0].jointtype = 1;
11360 vinfos[0].foffset = j0;
11361 vinfos[0].indices[0] = _ij0[0];
11362 vinfos[0].indices[1] = _ij0[1];
11363 vinfos[0].maxsolutions = _nj0;
11364 vinfos[1].jointtype = 1;
11365 vinfos[1].foffset = j1;
11366 vinfos[1].indices[0] = _ij1[0];
11367 vinfos[1].indices[1] = _ij1[1];
11368 vinfos[1].maxsolutions = _nj1;
11369 vinfos[2].jointtype = 1;
11370 vinfos[2].foffset = j2;
11371 vinfos[2].indices[0] = _ij2[0];
11372 vinfos[2].indices[1] = _ij2[1];
11373 vinfos[2].maxsolutions = _nj2;
11374 vinfos[3].jointtype = 1;
11375 vinfos[3].foffset = j3;
11376 vinfos[3].indices[0] = _ij3[0];
11377 vinfos[3].indices[1] = _ij3[1];
11378 vinfos[3].maxsolutions = _nj3;
11379 vinfos[4].jointtype = 1;
11380 vinfos[4].foffset = j4;
11381 vinfos[4].indices[0] = _ij4[0];
11382 vinfos[4].indices[1] = _ij4[1];
11383 vinfos[4].maxsolutions = _nj4;
11384 std::vector<int> vfree(0);
11385 solutions.AddSolution(vinfos,vfree);
11386 }
11387 }
11388 }
11389
11390 }
11391
11392 }
11393
11394 } else
11395 {
11396 {
11397 IkReal j4array[1], cj4array[1], sj4array[1];
11398 bool j4valid[1]={false};
11399 _nj4 = 1;
11400 CheckValue<IkReal> x1499=IKPowWithIntegerCheck(sj3,-1);
11401 if(!x1499.valid){
11402 continue;
11403 }
11404 if( IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1499.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))+IKsqr(((x1499.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))))-1) <= IKFAST_SINCOS_THRESH )
11405 continue;
11406 j4array[0]=IKatan2((((r00*sj0))+(((-1.0)*cj0*r01))), ((x1499.value)*((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))));
11407 sj4array[0]=IKsin(j4array[0]);
11408 cj4array[0]=IKcos(j4array[0]);
11409 if( j4array[0] > IKPI )
11410 {
11411 j4array[0]-=IK2PI;
11412 }
11413 else if( j4array[0] < -IKPI )
11414 { j4array[0]+=IK2PI;
11415 }
11416 j4valid[0] = true;
11417 for(int ij4 = 0; ij4 < 1; ++ij4)
11418 {
11419 if( !j4valid[ij4] )
11420 {
11421 continue;
11422 }
11423 _ij4[0] = ij4; _ij4[1] = -1;
11424 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11425 {
11426 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11427 {
11428 j4valid[iij4]=false; _ij4[1] = iij4; break;
11429 }
11430 }
11431 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11432 {
11433 IkReal evalcond[6];
11434 IkReal x1500=IKsin(j4);
11435 IkReal x1501=IKcos(j4);
11436 IkReal x1502=(cj0*px);
11437 IkReal x1503=(sj0*sj1);
11438 IkReal x1504=((1.0)*cj1);
11439 IkReal x1505=((1.0)*sj0);
11440 IkReal x1506=(cj0*r00);
11441 IkReal x1507=((1.0)*x1501);
11442 IkReal x1508=((0.05525)*x1501);
11443 evalcond[0]=((((-1.0)*r00*x1505))+x1500+((cj0*r01)));
11444 evalcond[1]=((0.00025116)+(((-1.0)*px*x1505))+(((0.05525)*x1500))+((cj0*py)));
11445 evalcond[2]=((((-1.0)*sj3*x1507))+((cj1*r02))+((r01*x1503))+((sj1*x1506)));
11446 evalcond[3]=((((-1.0)*r01*sj0*x1504))+(((-1.0)*x1504*x1506))+((r02*sj1))+(((-1.0)*cj3*x1507)));
11447 evalcond[4]=((-0.49030543)+(((-1.0)*sj3*x1508))+((cj1*pz))+((sj1*x1502))+((py*x1503))+(((-0.278775)*cj3))+(((0.0137)*sj3)));
11448 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x1504))+(((-1.0)*cj3*x1508))+((pz*sj1))+(((-1.0)*x1502*x1504))+(((0.278775)*sj3)));
11449 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
11450 {
11451 continue;
11452 }
11453 }
11454
11455 {
11456 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11457 vinfos[0].jointtype = 1;
11458 vinfos[0].foffset = j0;
11459 vinfos[0].indices[0] = _ij0[0];
11460 vinfos[0].indices[1] = _ij0[1];
11461 vinfos[0].maxsolutions = _nj0;
11462 vinfos[1].jointtype = 1;
11463 vinfos[1].foffset = j1;
11464 vinfos[1].indices[0] = _ij1[0];
11465 vinfos[1].indices[1] = _ij1[1];
11466 vinfos[1].maxsolutions = _nj1;
11467 vinfos[2].jointtype = 1;
11468 vinfos[2].foffset = j2;
11469 vinfos[2].indices[0] = _ij2[0];
11470 vinfos[2].indices[1] = _ij2[1];
11471 vinfos[2].maxsolutions = _nj2;
11472 vinfos[3].jointtype = 1;
11473 vinfos[3].foffset = j3;
11474 vinfos[3].indices[0] = _ij3[0];
11475 vinfos[3].indices[1] = _ij3[1];
11476 vinfos[3].maxsolutions = _nj3;
11477 vinfos[4].jointtype = 1;
11478 vinfos[4].foffset = j4;
11479 vinfos[4].indices[0] = _ij4[0];
11480 vinfos[4].indices[1] = _ij4[1];
11481 vinfos[4].maxsolutions = _nj4;
11482 std::vector<int> vfree(0);
11483 solutions.AddSolution(vinfos,vfree);
11484 }
11485 }
11486 }
11487
11488 }
11489
11490 }
11491
11492 }
11493 } while(0);
11494 if( bgotonextstatement )
11495 {
11496 bool bgotonextstatement = true;
11497 do
11498 {
11499 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j2)))), 6.28318530717959)));
11500 if( IKabs(evalcond[0]) < 0.0000010000000000 )
11501 {
11502 bgotonextstatement=false;
11503 {
11504 IkReal j4eval[1];
11505 sj2=0;
11506 cj2=-1.0;
11507 j2=3.14159265358979;
11508 j4eval[0]=cj3;
11509 if( IKabs(j4eval[0]) < 0.0000010000000000 )
11510 {
11511 {
11512 IkReal j4eval[1];
11513 sj2=0;
11514 cj2=-1.0;
11515 j2=3.14159265358979;
11516 j4eval[0]=sj3;
11517 if( IKabs(j4eval[0]) < 0.0000010000000000 )
11518 {
11519 {
11520 IkReal evalcond[3];
11521 bool bgotonextstatement = true;
11522 do
11523 {
11524 IkReal x1509=(sj0*sj1);
11525 IkReal x1510=(cj0*sj1);
11526 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
11527 evalcond[1]=(((cj1*r02))+((r01*x1509))+((r00*x1510)));
11528 evalcond[2]=((0.23646957)+((cj1*pz))+((py*x1509))+((px*x1510)));
11529 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
11530 {
11531 bgotonextstatement=false;
11532 {
11533 IkReal j4array[1], cj4array[1], sj4array[1];
11534 bool j4valid[1]={false};
11535 _nj4 = 1;
11536 IkReal x1511=((1.0)*cj1);
11537 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r01*sj0*x1511))+((r02*sj1))+(((-1.0)*cj0*r00*x1511)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((((-1.0)*r01*sj0*x1511))+((r02*sj1))+(((-1.0)*cj0*r00*x1511))))-1) <= IKFAST_SINCOS_THRESH )
11538 continue;
11539 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((((-1.0)*r01*sj0*x1511))+((r02*sj1))+(((-1.0)*cj0*r00*x1511))));
11540 sj4array[0]=IKsin(j4array[0]);
11541 cj4array[0]=IKcos(j4array[0]);
11542 if( j4array[0] > IKPI )
11543 {
11544 j4array[0]-=IK2PI;
11545 }
11546 else if( j4array[0] < -IKPI )
11547 { j4array[0]+=IK2PI;
11548 }
11549 j4valid[0] = true;
11550 for(int ij4 = 0; ij4 < 1; ++ij4)
11551 {
11552 if( !j4valid[ij4] )
11553 {
11554 continue;
11555 }
11556 _ij4[0] = ij4; _ij4[1] = -1;
11557 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11558 {
11559 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11560 {
11561 j4valid[iij4]=false; _ij4[1] = iij4; break;
11562 }
11563 }
11564 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11565 {
11566 IkReal evalcond[4];
11567 IkReal x1512=IKsin(j4);
11568 IkReal x1513=IKcos(j4);
11569 IkReal x1514=((1.0)*cj1);
11570 IkReal x1515=((1.0)*sj0);
11571 evalcond[0]=((((-1.0)*x1512))+(((-1.0)*r00*x1515))+((cj0*r01)));
11572 evalcond[1]=((0.00025116)+(((-1.0)*px*x1515))+((cj0*py))+(((-0.05525)*x1512)));
11573 evalcond[2]=((((-1.0)*r01*sj0*x1514))+(((-1.0)*x1513))+((r02*sj1))+(((-1.0)*cj0*r00*x1514)));
11574 evalcond[3]=((0.0137)+(((-1.0)*py*sj0*x1514))+(((-1.0)*cj0*px*x1514))+((pz*sj1))+(((-0.05525)*x1513)));
11575 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11576 {
11577 continue;
11578 }
11579 }
11580
11581 {
11582 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11583 vinfos[0].jointtype = 1;
11584 vinfos[0].foffset = j0;
11585 vinfos[0].indices[0] = _ij0[0];
11586 vinfos[0].indices[1] = _ij0[1];
11587 vinfos[0].maxsolutions = _nj0;
11588 vinfos[1].jointtype = 1;
11589 vinfos[1].foffset = j1;
11590 vinfos[1].indices[0] = _ij1[0];
11591 vinfos[1].indices[1] = _ij1[1];
11592 vinfos[1].maxsolutions = _nj1;
11593 vinfos[2].jointtype = 1;
11594 vinfos[2].foffset = j2;
11595 vinfos[2].indices[0] = _ij2[0];
11596 vinfos[2].indices[1] = _ij2[1];
11597 vinfos[2].maxsolutions = _nj2;
11598 vinfos[3].jointtype = 1;
11599 vinfos[3].foffset = j3;
11600 vinfos[3].indices[0] = _ij3[0];
11601 vinfos[3].indices[1] = _ij3[1];
11602 vinfos[3].maxsolutions = _nj3;
11603 vinfos[4].jointtype = 1;
11604 vinfos[4].foffset = j4;
11605 vinfos[4].indices[0] = _ij4[0];
11606 vinfos[4].indices[1] = _ij4[1];
11607 vinfos[4].maxsolutions = _nj4;
11608 std::vector<int> vfree(0);
11609 solutions.AddSolution(vinfos,vfree);
11610 }
11611 }
11612 }
11613
11614 }
11615 } while(0);
11616 if( bgotonextstatement )
11617 {
11618 bool bgotonextstatement = true;
11619 do
11620 {
11621 IkReal x1516=(sj0*sj1);
11622 IkReal x1517=(cj0*sj1);
11623 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
11624 evalcond[1]=(((cj1*r02))+((r01*x1516))+((r00*x1517)));
11625 evalcond[2]=((-0.32108043)+((cj1*pz))+((py*x1516))+((px*x1517)));
11626 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
11627 {
11628 bgotonextstatement=false;
11629 {
11630 IkReal j4array[1], cj4array[1], sj4array[1];
11631 bool j4valid[1]={false};
11632 _nj4 = 1;
11633 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
11634 continue;
11635 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
11636 sj4array[0]=IKsin(j4array[0]);
11637 cj4array[0]=IKcos(j4array[0]);
11638 if( j4array[0] > IKPI )
11639 {
11640 j4array[0]-=IK2PI;
11641 }
11642 else if( j4array[0] < -IKPI )
11643 { j4array[0]+=IK2PI;
11644 }
11645 j4valid[0] = true;
11646 for(int ij4 = 0; ij4 < 1; ++ij4)
11647 {
11648 if( !j4valid[ij4] )
11649 {
11650 continue;
11651 }
11652 _ij4[0] = ij4; _ij4[1] = -1;
11653 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11654 {
11655 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11656 {
11657 j4valid[iij4]=false; _ij4[1] = iij4; break;
11658 }
11659 }
11660 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11661 {
11662 IkReal evalcond[4];
11663 IkReal x1518=IKsin(j4);
11664 IkReal x1519=IKcos(j4);
11665 IkReal x1520=((1.0)*cj1);
11666 IkReal x1521=((1.0)*sj0);
11667 evalcond[0]=((((-1.0)*r00*x1521))+(((-1.0)*x1518))+((cj0*r01)));
11668 evalcond[1]=((0.00025116)+(((-1.0)*px*x1521))+((cj0*py))+(((-0.05525)*x1518)));
11669 evalcond[2]=((((-1.0)*r01*sj0*x1520))+((r02*sj1))+x1519+(((-1.0)*cj0*r00*x1520)));
11670 evalcond[3]=((-0.0137)+(((-1.0)*py*sj0*x1520))+(((-1.0)*cj0*px*x1520))+(((0.05525)*x1519))+((pz*sj1)));
11671 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11672 {
11673 continue;
11674 }
11675 }
11676
11677 {
11678 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11679 vinfos[0].jointtype = 1;
11680 vinfos[0].foffset = j0;
11681 vinfos[0].indices[0] = _ij0[0];
11682 vinfos[0].indices[1] = _ij0[1];
11683 vinfos[0].maxsolutions = _nj0;
11684 vinfos[1].jointtype = 1;
11685 vinfos[1].foffset = j1;
11686 vinfos[1].indices[0] = _ij1[0];
11687 vinfos[1].indices[1] = _ij1[1];
11688 vinfos[1].maxsolutions = _nj1;
11689 vinfos[2].jointtype = 1;
11690 vinfos[2].foffset = j2;
11691 vinfos[2].indices[0] = _ij2[0];
11692 vinfos[2].indices[1] = _ij2[1];
11693 vinfos[2].maxsolutions = _nj2;
11694 vinfos[3].jointtype = 1;
11695 vinfos[3].foffset = j3;
11696 vinfos[3].indices[0] = _ij3[0];
11697 vinfos[3].indices[1] = _ij3[1];
11698 vinfos[3].maxsolutions = _nj3;
11699 vinfos[4].jointtype = 1;
11700 vinfos[4].foffset = j4;
11701 vinfos[4].indices[0] = _ij4[0];
11702 vinfos[4].indices[1] = _ij4[1];
11703 vinfos[4].maxsolutions = _nj4;
11704 std::vector<int> vfree(0);
11705 solutions.AddSolution(vinfos,vfree);
11706 }
11707 }
11708 }
11709
11710 }
11711 } while(0);
11712 if( bgotonextstatement )
11713 {
11714 bool bgotonextstatement = true;
11715 do
11716 {
11717 IkReal x1522=((1.0)*cj1);
11718 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
11719 evalcond[1]=((((-1.0)*r01*sj0*x1522))+((r02*sj1))+(((-1.0)*cj0*r00*x1522)));
11720 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x1522))+(((-1.0)*cj0*px*x1522))+((pz*sj1)));
11721 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
11722 {
11723 bgotonextstatement=false;
11724 {
11725 IkReal j4array[1], cj4array[1], sj4array[1];
11726 bool j4valid[1]={false};
11727 _nj4 = 1;
11728 IkReal x1523=((1.0)*sj1);
11729 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r01*sj0*x1523))+(((-1.0)*cj1*r02))+(((-1.0)*cj0*r00*x1523)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((((-1.0)*r01*sj0*x1523))+(((-1.0)*cj1*r02))+(((-1.0)*cj0*r00*x1523))))-1) <= IKFAST_SINCOS_THRESH )
11730 continue;
11731 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((((-1.0)*r01*sj0*x1523))+(((-1.0)*cj1*r02))+(((-1.0)*cj0*r00*x1523))));
11732 sj4array[0]=IKsin(j4array[0]);
11733 cj4array[0]=IKcos(j4array[0]);
11734 if( j4array[0] > IKPI )
11735 {
11736 j4array[0]-=IK2PI;
11737 }
11738 else if( j4array[0] < -IKPI )
11739 { j4array[0]+=IK2PI;
11740 }
11741 j4valid[0] = true;
11742 for(int ij4 = 0; ij4 < 1; ++ij4)
11743 {
11744 if( !j4valid[ij4] )
11745 {
11746 continue;
11747 }
11748 _ij4[0] = ij4; _ij4[1] = -1;
11749 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11750 {
11751 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11752 {
11753 j4valid[iij4]=false; _ij4[1] = iij4; break;
11754 }
11755 }
11756 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11757 {
11758 IkReal evalcond[4];
11759 IkReal x1524=IKsin(j4);
11760 IkReal x1525=IKcos(j4);
11761 IkReal x1526=(cj0*sj1);
11762 IkReal x1527=(sj0*sj1);
11763 IkReal x1528=((1.0)*sj0);
11764 evalcond[0]=((((-1.0)*r00*x1528))+(((-1.0)*x1524))+((cj0*r01)));
11765 evalcond[1]=((0.00025116)+(((-0.05525)*x1524))+(((-1.0)*px*x1528))+((cj0*py)));
11766 evalcond[2]=(((r00*x1526))+((cj1*r02))+((r01*x1527))+x1525);
11767 evalcond[3]=((-0.05600543)+((cj1*pz))+((px*x1526))+(((0.05525)*x1525))+((py*x1527)));
11768 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11769 {
11770 continue;
11771 }
11772 }
11773
11774 {
11775 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11776 vinfos[0].jointtype = 1;
11777 vinfos[0].foffset = j0;
11778 vinfos[0].indices[0] = _ij0[0];
11779 vinfos[0].indices[1] = _ij0[1];
11780 vinfos[0].maxsolutions = _nj0;
11781 vinfos[1].jointtype = 1;
11782 vinfos[1].foffset = j1;
11783 vinfos[1].indices[0] = _ij1[0];
11784 vinfos[1].indices[1] = _ij1[1];
11785 vinfos[1].maxsolutions = _nj1;
11786 vinfos[2].jointtype = 1;
11787 vinfos[2].foffset = j2;
11788 vinfos[2].indices[0] = _ij2[0];
11789 vinfos[2].indices[1] = _ij2[1];
11790 vinfos[2].maxsolutions = _nj2;
11791 vinfos[3].jointtype = 1;
11792 vinfos[3].foffset = j3;
11793 vinfos[3].indices[0] = _ij3[0];
11794 vinfos[3].indices[1] = _ij3[1];
11795 vinfos[3].maxsolutions = _nj3;
11796 vinfos[4].jointtype = 1;
11797 vinfos[4].foffset = j4;
11798 vinfos[4].indices[0] = _ij4[0];
11799 vinfos[4].indices[1] = _ij4[1];
11800 vinfos[4].maxsolutions = _nj4;
11801 std::vector<int> vfree(0);
11802 solutions.AddSolution(vinfos,vfree);
11803 }
11804 }
11805 }
11806
11807 }
11808 } while(0);
11809 if( bgotonextstatement )
11810 {
11811 bool bgotonextstatement = true;
11812 do
11813 {
11814 IkReal x1529=((1.0)*cj1);
11815 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
11816 evalcond[1]=((((-1.0)*r01*sj0*x1529))+((r02*sj1))+(((-1.0)*cj0*r00*x1529)));
11817 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1529))+(((-1.0)*cj0*px*x1529))+((pz*sj1)));
11818 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
11819 {
11820 bgotonextstatement=false;
11821 {
11822 IkReal j4array[1], cj4array[1], sj4array[1];
11823 bool j4valid[1]={false};
11824 _nj4 = 1;
11825 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))-1) <= IKFAST_SINCOS_THRESH )
11826 continue;
11827 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), (((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))));
11828 sj4array[0]=IKsin(j4array[0]);
11829 cj4array[0]=IKcos(j4array[0]);
11830 if( j4array[0] > IKPI )
11831 {
11832 j4array[0]-=IK2PI;
11833 }
11834 else if( j4array[0] < -IKPI )
11835 { j4array[0]+=IK2PI;
11836 }
11837 j4valid[0] = true;
11838 for(int ij4 = 0; ij4 < 1; ++ij4)
11839 {
11840 if( !j4valid[ij4] )
11841 {
11842 continue;
11843 }
11844 _ij4[0] = ij4; _ij4[1] = -1;
11845 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11846 {
11847 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11848 {
11849 j4valid[iij4]=false; _ij4[1] = iij4; break;
11850 }
11851 }
11852 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11853 {
11854 IkReal evalcond[4];
11855 IkReal x1530=IKsin(j4);
11856 IkReal x1531=IKcos(j4);
11857 IkReal x1532=(cj0*sj1);
11858 IkReal x1533=(sj0*sj1);
11859 IkReal x1534=((1.0)*sj0);
11860 evalcond[0]=((((-1.0)*x1530))+(((-1.0)*r00*x1534))+((cj0*r01)));
11861 evalcond[1]=((0.00025116)+(((-1.0)*px*x1534))+(((-0.05525)*x1530))+((cj0*py)));
11862 evalcond[2]=((((-1.0)*x1531))+((r01*x1533))+((cj1*r02))+((r00*x1532)));
11863 evalcond[3]=((-0.02860543)+((cj1*pz))+((px*x1532))+(((-0.05525)*x1531))+((py*x1533)));
11864 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
11865 {
11866 continue;
11867 }
11868 }
11869
11870 {
11871 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11872 vinfos[0].jointtype = 1;
11873 vinfos[0].foffset = j0;
11874 vinfos[0].indices[0] = _ij0[0];
11875 vinfos[0].indices[1] = _ij0[1];
11876 vinfos[0].maxsolutions = _nj0;
11877 vinfos[1].jointtype = 1;
11878 vinfos[1].foffset = j1;
11879 vinfos[1].indices[0] = _ij1[0];
11880 vinfos[1].indices[1] = _ij1[1];
11881 vinfos[1].maxsolutions = _nj1;
11882 vinfos[2].jointtype = 1;
11883 vinfos[2].foffset = j2;
11884 vinfos[2].indices[0] = _ij2[0];
11885 vinfos[2].indices[1] = _ij2[1];
11886 vinfos[2].maxsolutions = _nj2;
11887 vinfos[3].jointtype = 1;
11888 vinfos[3].foffset = j3;
11889 vinfos[3].indices[0] = _ij3[0];
11890 vinfos[3].indices[1] = _ij3[1];
11891 vinfos[3].maxsolutions = _nj3;
11892 vinfos[4].jointtype = 1;
11893 vinfos[4].foffset = j4;
11894 vinfos[4].indices[0] = _ij4[0];
11895 vinfos[4].indices[1] = _ij4[1];
11896 vinfos[4].maxsolutions = _nj4;
11897 std::vector<int> vfree(0);
11898 solutions.AddSolution(vinfos,vfree);
11899 }
11900 }
11901 }
11902
11903 }
11904 } while(0);
11905 if( bgotonextstatement )
11906 {
11907 bool bgotonextstatement = true;
11908 do
11909 {
11910 if( 1 )
11911 {
11912 bgotonextstatement=false;
11913 continue;
11914
11915 }
11916 } while(0);
11917 if( bgotonextstatement )
11918 {
11919 }
11920 }
11921 }
11922 }
11923 }
11924 }
11925
11926 } else
11927 {
11928 {
11929 IkReal j4array[1], cj4array[1], sj4array[1];
11930 bool j4valid[1]={false};
11931 _nj4 = 1;
11932 IkReal x1535=((1.0)*sj1);
11933 CheckValue<IkReal> x1536=IKPowWithIntegerCheck(sj3,-1);
11934 if(!x1536.valid){
11935 continue;
11936 }
11937 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1536.value)*(((((-1.0)*cj0*r00*x1535))+(((-1.0)*r01*sj0*x1535))+(((-1.0)*cj1*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((x1536.value)*(((((-1.0)*cj0*r00*x1535))+(((-1.0)*r01*sj0*x1535))+(((-1.0)*cj1*r02))))))-1) <= IKFAST_SINCOS_THRESH )
11938 continue;
11939 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((x1536.value)*(((((-1.0)*cj0*r00*x1535))+(((-1.0)*r01*sj0*x1535))+(((-1.0)*cj1*r02))))));
11940 sj4array[0]=IKsin(j4array[0]);
11941 cj4array[0]=IKcos(j4array[0]);
11942 if( j4array[0] > IKPI )
11943 {
11944 j4array[0]-=IK2PI;
11945 }
11946 else if( j4array[0] < -IKPI )
11947 { j4array[0]+=IK2PI;
11948 }
11949 j4valid[0] = true;
11950 for(int ij4 = 0; ij4 < 1; ++ij4)
11951 {
11952 if( !j4valid[ij4] )
11953 {
11954 continue;
11955 }
11956 _ij4[0] = ij4; _ij4[1] = -1;
11957 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
11958 {
11959 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
11960 {
11961 j4valid[iij4]=false; _ij4[1] = iij4; break;
11962 }
11963 }
11964 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
11965 {
11966 IkReal evalcond[6];
11967 IkReal x1537=IKsin(j4);
11968 IkReal x1538=IKcos(j4);
11969 IkReal x1539=(cj0*px);
11970 IkReal x1540=(sj0*sj1);
11971 IkReal x1541=((1.0)*cj1);
11972 IkReal x1542=((1.0)*sj0);
11973 IkReal x1543=(cj0*r00);
11974 IkReal x1544=(cj3*x1538);
11975 IkReal x1545=(sj3*x1538);
11976 evalcond[0]=((((-1.0)*x1537))+(((-1.0)*r00*x1542))+((cj0*r01)));
11977 evalcond[1]=((0.00025116)+(((-1.0)*px*x1542))+(((-0.05525)*x1537))+((cj0*py)));
11978 evalcond[2]=(((cj1*r02))+x1545+((sj1*x1543))+((r01*x1540)));
11979 evalcond[3]=((((-1.0)*x1544))+((r02*sj1))+(((-1.0)*r01*sj0*x1541))+(((-1.0)*x1541*x1543)));
11980 evalcond[4]=((-0.04230543)+(((0.05525)*x1545))+(((0.278775)*cj3))+((sj1*x1539))+((cj1*pz))+(((-0.0137)*sj3))+((py*x1540)));
11981 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x1541))+(((-0.05525)*x1544))+(((-1.0)*x1539*x1541))+((pz*sj1))+(((0.278775)*sj3)));
11982 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
11983 {
11984 continue;
11985 }
11986 }
11987
11988 {
11989 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
11990 vinfos[0].jointtype = 1;
11991 vinfos[0].foffset = j0;
11992 vinfos[0].indices[0] = _ij0[0];
11993 vinfos[0].indices[1] = _ij0[1];
11994 vinfos[0].maxsolutions = _nj0;
11995 vinfos[1].jointtype = 1;
11996 vinfos[1].foffset = j1;
11997 vinfos[1].indices[0] = _ij1[0];
11998 vinfos[1].indices[1] = _ij1[1];
11999 vinfos[1].maxsolutions = _nj1;
12000 vinfos[2].jointtype = 1;
12001 vinfos[2].foffset = j2;
12002 vinfos[2].indices[0] = _ij2[0];
12003 vinfos[2].indices[1] = _ij2[1];
12004 vinfos[2].maxsolutions = _nj2;
12005 vinfos[3].jointtype = 1;
12006 vinfos[3].foffset = j3;
12007 vinfos[3].indices[0] = _ij3[0];
12008 vinfos[3].indices[1] = _ij3[1];
12009 vinfos[3].maxsolutions = _nj3;
12010 vinfos[4].jointtype = 1;
12011 vinfos[4].foffset = j4;
12012 vinfos[4].indices[0] = _ij4[0];
12013 vinfos[4].indices[1] = _ij4[1];
12014 vinfos[4].maxsolutions = _nj4;
12015 std::vector<int> vfree(0);
12016 solutions.AddSolution(vinfos,vfree);
12017 }
12018 }
12019 }
12020
12021 }
12022
12023 }
12024
12025 } else
12026 {
12027 {
12028 IkReal j4array[1], cj4array[1], sj4array[1];
12029 bool j4valid[1]={false};
12030 _nj4 = 1;
12031 IkReal x1546=((1.0)*cj1);
12032 CheckValue<IkReal> x1547=IKPowWithIntegerCheck(cj3,-1);
12033 if(!x1547.valid){
12034 continue;
12035 }
12036 if( IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1547.value)*(((((-1.0)*cj0*r00*x1546))+((r02*sj1))+(((-1.0)*r01*sj0*x1546)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))+IKsqr(((x1547.value)*(((((-1.0)*cj0*r00*x1546))+((r02*sj1))+(((-1.0)*r01*sj0*x1546))))))-1) <= IKFAST_SINCOS_THRESH )
12037 continue;
12038 j4array[0]=IKatan2(((((-1.0)*r00*sj0))+((cj0*r01))), ((x1547.value)*(((((-1.0)*cj0*r00*x1546))+((r02*sj1))+(((-1.0)*r01*sj0*x1546))))));
12039 sj4array[0]=IKsin(j4array[0]);
12040 cj4array[0]=IKcos(j4array[0]);
12041 if( j4array[0] > IKPI )
12042 {
12043 j4array[0]-=IK2PI;
12044 }
12045 else if( j4array[0] < -IKPI )
12046 { j4array[0]+=IK2PI;
12047 }
12048 j4valid[0] = true;
12049 for(int ij4 = 0; ij4 < 1; ++ij4)
12050 {
12051 if( !j4valid[ij4] )
12052 {
12053 continue;
12054 }
12055 _ij4[0] = ij4; _ij4[1] = -1;
12056 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12057 {
12058 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12059 {
12060 j4valid[iij4]=false; _ij4[1] = iij4; break;
12061 }
12062 }
12063 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12064 {
12065 IkReal evalcond[6];
12066 IkReal x1548=IKsin(j4);
12067 IkReal x1549=IKcos(j4);
12068 IkReal x1550=(cj0*px);
12069 IkReal x1551=(sj0*sj1);
12070 IkReal x1552=((1.0)*cj1);
12071 IkReal x1553=((1.0)*sj0);
12072 IkReal x1554=(cj0*r00);
12073 IkReal x1555=(cj3*x1549);
12074 IkReal x1556=(sj3*x1549);
12075 evalcond[0]=((((-1.0)*x1548))+(((-1.0)*r00*x1553))+((cj0*r01)));
12076 evalcond[1]=((0.00025116)+(((-1.0)*px*x1553))+(((-0.05525)*x1548))+((cj0*py)));
12077 evalcond[2]=(((r01*x1551))+((cj1*r02))+x1556+((sj1*x1554)));
12078 evalcond[3]=((((-1.0)*x1555))+(((-1.0)*x1552*x1554))+((r02*sj1))+(((-1.0)*r01*sj0*x1552)));
12079 evalcond[4]=((-0.04230543)+(((0.278775)*cj3))+((cj1*pz))+((sj1*x1550))+((py*x1551))+(((-0.0137)*sj3))+(((0.05525)*x1556)));
12080 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*py*sj0*x1552))+(((-1.0)*x1550*x1552))+(((-0.05525)*x1555))+((pz*sj1))+(((0.278775)*sj3)));
12081 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
12082 {
12083 continue;
12084 }
12085 }
12086
12087 {
12088 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12089 vinfos[0].jointtype = 1;
12090 vinfos[0].foffset = j0;
12091 vinfos[0].indices[0] = _ij0[0];
12092 vinfos[0].indices[1] = _ij0[1];
12093 vinfos[0].maxsolutions = _nj0;
12094 vinfos[1].jointtype = 1;
12095 vinfos[1].foffset = j1;
12096 vinfos[1].indices[0] = _ij1[0];
12097 vinfos[1].indices[1] = _ij1[1];
12098 vinfos[1].maxsolutions = _nj1;
12099 vinfos[2].jointtype = 1;
12100 vinfos[2].foffset = j2;
12101 vinfos[2].indices[0] = _ij2[0];
12102 vinfos[2].indices[1] = _ij2[1];
12103 vinfos[2].maxsolutions = _nj2;
12104 vinfos[3].jointtype = 1;
12105 vinfos[3].foffset = j3;
12106 vinfos[3].indices[0] = _ij3[0];
12107 vinfos[3].indices[1] = _ij3[1];
12108 vinfos[3].maxsolutions = _nj3;
12109 vinfos[4].jointtype = 1;
12110 vinfos[4].foffset = j4;
12111 vinfos[4].indices[0] = _ij4[0];
12112 vinfos[4].indices[1] = _ij4[1];
12113 vinfos[4].maxsolutions = _nj4;
12114 std::vector<int> vfree(0);
12115 solutions.AddSolution(vinfos,vfree);
12116 }
12117 }
12118 }
12119
12120 }
12121
12122 }
12123
12124 }
12125 } while(0);
12126 if( bgotonextstatement )
12127 {
12128 bool bgotonextstatement = true;
12129 do
12130 {
12131 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j2)))), 6.28318530717959)));
12132 if( IKabs(evalcond[0]) < 0.0000010000000000 )
12133 {
12134 bgotonextstatement=false;
12135 {
12136 IkReal j4eval[1];
12137 sj2=1.0;
12138 cj2=0;
12139 j2=1.5707963267949;
12140 j4eval[0]=sj3;
12141 if( IKabs(j4eval[0]) < 0.0000010000000000 )
12142 {
12143 {
12144 IkReal j4eval[1];
12145 sj2=1.0;
12146 cj2=0;
12147 j2=1.5707963267949;
12148 j4eval[0]=cj3;
12149 if( IKabs(j4eval[0]) < 0.0000010000000000 )
12150 {
12151 {
12152 IkReal evalcond[3];
12153 bool bgotonextstatement = true;
12154 do
12155 {
12156 IkReal x1557=((1.0)*cj1);
12157 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
12158 evalcond[1]=(((r02*sj1))+(((-1.0)*r01*sj0*x1557))+(((-1.0)*cj0*r00*x1557)));
12159 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x1557))+(((-1.0)*cj0*px*x1557))+((pz*sj1)));
12160 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12161 {
12162 bgotonextstatement=false;
12163 {
12164 IkReal j4array[1], cj4array[1], sj4array[1];
12165 bool j4valid[1]={false};
12166 _nj4 = 1;
12167 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
12168 continue;
12169 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), ((((-1.0)*r00*sj0))+((cj0*r01))));
12170 sj4array[0]=IKsin(j4array[0]);
12171 cj4array[0]=IKcos(j4array[0]);
12172 if( j4array[0] > IKPI )
12173 {
12174 j4array[0]-=IK2PI;
12175 }
12176 else if( j4array[0] < -IKPI )
12177 { j4array[0]+=IK2PI;
12178 }
12179 j4valid[0] = true;
12180 for(int ij4 = 0; ij4 < 1; ++ij4)
12181 {
12182 if( !j4valid[ij4] )
12183 {
12184 continue;
12185 }
12186 _ij4[0] = ij4; _ij4[1] = -1;
12187 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12188 {
12189 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12190 {
12191 j4valid[iij4]=false; _ij4[1] = iij4; break;
12192 }
12193 }
12194 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12195 {
12196 IkReal evalcond[4];
12197 IkReal x1558=IKcos(j4);
12198 IkReal x1559=IKsin(j4);
12199 IkReal x1560=(sj0*sj1);
12200 IkReal x1561=(cj0*sj1);
12201 IkReal x1562=((1.0)*sj0);
12202 evalcond[0]=((((-1.0)*x1558))+(((-1.0)*r00*x1562))+((cj0*r01)));
12203 evalcond[1]=((-0.21004884)+(((-1.0)*px*x1562))+(((-0.05525)*x1558))+((cj0*py)));
12204 evalcond[2]=((((-1.0)*x1559))+((cj1*r02))+((r00*x1561))+((r01*x1560)));
12205 evalcond[3]=((-0.26630543)+((cj1*pz))+((px*x1561))+(((-0.05525)*x1559))+((py*x1560)));
12206 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
12207 {
12208 continue;
12209 }
12210 }
12211
12212 {
12213 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12214 vinfos[0].jointtype = 1;
12215 vinfos[0].foffset = j0;
12216 vinfos[0].indices[0] = _ij0[0];
12217 vinfos[0].indices[1] = _ij0[1];
12218 vinfos[0].maxsolutions = _nj0;
12219 vinfos[1].jointtype = 1;
12220 vinfos[1].foffset = j1;
12221 vinfos[1].indices[0] = _ij1[0];
12222 vinfos[1].indices[1] = _ij1[1];
12223 vinfos[1].maxsolutions = _nj1;
12224 vinfos[2].jointtype = 1;
12225 vinfos[2].foffset = j2;
12226 vinfos[2].indices[0] = _ij2[0];
12227 vinfos[2].indices[1] = _ij2[1];
12228 vinfos[2].maxsolutions = _nj2;
12229 vinfos[3].jointtype = 1;
12230 vinfos[3].foffset = j3;
12231 vinfos[3].indices[0] = _ij3[0];
12232 vinfos[3].indices[1] = _ij3[1];
12233 vinfos[3].maxsolutions = _nj3;
12234 vinfos[4].jointtype = 1;
12235 vinfos[4].foffset = j4;
12236 vinfos[4].indices[0] = _ij4[0];
12237 vinfos[4].indices[1] = _ij4[1];
12238 vinfos[4].maxsolutions = _nj4;
12239 std::vector<int> vfree(0);
12240 solutions.AddSolution(vinfos,vfree);
12241 }
12242 }
12243 }
12244
12245 }
12246 } while(0);
12247 if( bgotonextstatement )
12248 {
12249 bool bgotonextstatement = true;
12250 do
12251 {
12252 IkReal x1563=((1.0)*cj1);
12253 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
12254 evalcond[1]=(((r02*sj1))+(((-1.0)*r01*sj0*x1563))+(((-1.0)*cj0*r00*x1563)));
12255 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1563))+(((-1.0)*cj0*px*x1563))+((pz*sj1)));
12256 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12257 {
12258 bgotonextstatement=false;
12259 {
12260 IkReal j4array[1], cj4array[1], sj4array[1];
12261 bool j4valid[1]={false};
12262 _nj4 = 1;
12263 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
12264 continue;
12265 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), (((r00*sj0))+(((-1.0)*cj0*r01))));
12266 sj4array[0]=IKsin(j4array[0]);
12267 cj4array[0]=IKcos(j4array[0]);
12268 if( j4array[0] > IKPI )
12269 {
12270 j4array[0]-=IK2PI;
12271 }
12272 else if( j4array[0] < -IKPI )
12273 { j4array[0]+=IK2PI;
12274 }
12275 j4valid[0] = true;
12276 for(int ij4 = 0; ij4 < 1; ++ij4)
12277 {
12278 if( !j4valid[ij4] )
12279 {
12280 continue;
12281 }
12282 _ij4[0] = ij4; _ij4[1] = -1;
12283 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12284 {
12285 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12286 {
12287 j4valid[iij4]=false; _ij4[1] = iij4; break;
12288 }
12289 }
12290 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12291 {
12292 IkReal evalcond[4];
12293 IkReal x1564=IKcos(j4);
12294 IkReal x1565=IKsin(j4);
12295 IkReal x1566=(sj0*sj1);
12296 IkReal x1567=(cj0*sj1);
12297 IkReal x1568=((1.0)*sj0);
12298 evalcond[0]=(x1564+(((-1.0)*r00*x1568))+((cj0*r01)));
12299 evalcond[1]=((-0.23744884)+(((0.05525)*x1564))+(((-1.0)*px*x1568))+((cj0*py)));
12300 evalcond[2]=(((cj1*r02))+((r00*x1567))+(((-1.0)*x1565))+((r01*x1566)));
12301 evalcond[3]=((-0.26630543)+((cj1*pz))+(((-0.05525)*x1565))+((px*x1567))+((py*x1566)));
12302 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
12303 {
12304 continue;
12305 }
12306 }
12307
12308 {
12309 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12310 vinfos[0].jointtype = 1;
12311 vinfos[0].foffset = j0;
12312 vinfos[0].indices[0] = _ij0[0];
12313 vinfos[0].indices[1] = _ij0[1];
12314 vinfos[0].maxsolutions = _nj0;
12315 vinfos[1].jointtype = 1;
12316 vinfos[1].foffset = j1;
12317 vinfos[1].indices[0] = _ij1[0];
12318 vinfos[1].indices[1] = _ij1[1];
12319 vinfos[1].maxsolutions = _nj1;
12320 vinfos[2].jointtype = 1;
12321 vinfos[2].foffset = j2;
12322 vinfos[2].indices[0] = _ij2[0];
12323 vinfos[2].indices[1] = _ij2[1];
12324 vinfos[2].maxsolutions = _nj2;
12325 vinfos[3].jointtype = 1;
12326 vinfos[3].foffset = j3;
12327 vinfos[3].indices[0] = _ij3[0];
12328 vinfos[3].indices[1] = _ij3[1];
12329 vinfos[3].maxsolutions = _nj3;
12330 vinfos[4].jointtype = 1;
12331 vinfos[4].foffset = j4;
12332 vinfos[4].indices[0] = _ij4[0];
12333 vinfos[4].indices[1] = _ij4[1];
12334 vinfos[4].maxsolutions = _nj4;
12335 std::vector<int> vfree(0);
12336 solutions.AddSolution(vinfos,vfree);
12337 }
12338 }
12339 }
12340
12341 }
12342 } while(0);
12343 if( bgotonextstatement )
12344 {
12345 bool bgotonextstatement = true;
12346 do
12347 {
12348 IkReal x1569=((1.0)*sj0);
12349 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
12350 evalcond[1]=((((-1.0)*r00*x1569))+((cj0*r01)));
12351 evalcond[2]=((-0.50252384)+(((-1.0)*px*x1569))+((cj0*py)));
12352 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12353 {
12354 bgotonextstatement=false;
12355 {
12356 IkReal j4array[1], cj4array[1], sj4array[1];
12357 bool j4valid[1]={false};
12358 _nj4 = 1;
12359 IkReal x1570=((1.0)*cj1);
12360 IkReal x1571=(cj0*r00);
12361 IkReal x1572=(r01*sj0);
12362 if( IKabs((((cj1*r02))+((sj1*x1571))+((sj1*x1572)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*x1570*x1572))+(((-1.0)*x1570*x1571))+((r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x1571))+((sj1*x1572))))+IKsqr(((((-1.0)*x1570*x1572))+(((-1.0)*x1570*x1571))+((r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
12363 continue;
12364 j4array[0]=IKatan2((((cj1*r02))+((sj1*x1571))+((sj1*x1572))), ((((-1.0)*x1570*x1572))+(((-1.0)*x1570*x1571))+((r02*sj1))));
12365 sj4array[0]=IKsin(j4array[0]);
12366 cj4array[0]=IKcos(j4array[0]);
12367 if( j4array[0] > IKPI )
12368 {
12369 j4array[0]-=IK2PI;
12370 }
12371 else if( j4array[0] < -IKPI )
12372 { j4array[0]+=IK2PI;
12373 }
12374 j4valid[0] = true;
12375 for(int ij4 = 0; ij4 < 1; ++ij4)
12376 {
12377 if( !j4valid[ij4] )
12378 {
12379 continue;
12380 }
12381 _ij4[0] = ij4; _ij4[1] = -1;
12382 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12383 {
12384 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12385 {
12386 j4valid[iij4]=false; _ij4[1] = iij4; break;
12387 }
12388 }
12389 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12390 {
12391 IkReal evalcond[4];
12392 IkReal x1573=IKsin(j4);
12393 IkReal x1574=IKcos(j4);
12394 IkReal x1575=(sj0*sj1);
12395 IkReal x1576=(cj0*sj1);
12396 IkReal x1577=((1.0)*cj0*cj1);
12397 IkReal x1578=((1.0)*cj1*sj0);
12398 evalcond[0]=(((cj1*r02))+((r01*x1575))+((r00*x1576))+(((-1.0)*x1573)));
12399 evalcond[1]=((-0.26630543)+((cj1*pz))+(((-0.05525)*x1573))+((px*x1576))+((py*x1575)));
12400 evalcond[2]=(((r02*sj1))+(((-1.0)*r01*x1578))+(((-1.0)*r00*x1577))+(((-1.0)*x1574)));
12401 evalcond[3]=((0.0137)+(((-1.0)*py*x1578))+(((-1.0)*px*x1577))+(((-0.05525)*x1574))+((pz*sj1)));
12402 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
12403 {
12404 continue;
12405 }
12406 }
12407
12408 {
12409 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12410 vinfos[0].jointtype = 1;
12411 vinfos[0].foffset = j0;
12412 vinfos[0].indices[0] = _ij0[0];
12413 vinfos[0].indices[1] = _ij0[1];
12414 vinfos[0].maxsolutions = _nj0;
12415 vinfos[1].jointtype = 1;
12416 vinfos[1].foffset = j1;
12417 vinfos[1].indices[0] = _ij1[0];
12418 vinfos[1].indices[1] = _ij1[1];
12419 vinfos[1].maxsolutions = _nj1;
12420 vinfos[2].jointtype = 1;
12421 vinfos[2].foffset = j2;
12422 vinfos[2].indices[0] = _ij2[0];
12423 vinfos[2].indices[1] = _ij2[1];
12424 vinfos[2].maxsolutions = _nj2;
12425 vinfos[3].jointtype = 1;
12426 vinfos[3].foffset = j3;
12427 vinfos[3].indices[0] = _ij3[0];
12428 vinfos[3].indices[1] = _ij3[1];
12429 vinfos[3].maxsolutions = _nj3;
12430 vinfos[4].jointtype = 1;
12431 vinfos[4].foffset = j4;
12432 vinfos[4].indices[0] = _ij4[0];
12433 vinfos[4].indices[1] = _ij4[1];
12434 vinfos[4].maxsolutions = _nj4;
12435 std::vector<int> vfree(0);
12436 solutions.AddSolution(vinfos,vfree);
12437 }
12438 }
12439 }
12440
12441 }
12442 } while(0);
12443 if( bgotonextstatement )
12444 {
12445 bool bgotonextstatement = true;
12446 do
12447 {
12448 IkReal x1579=((1.0)*sj0);
12449 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
12450 evalcond[1]=((((-1.0)*r00*x1579))+((cj0*r01)));
12451 evalcond[2]=((0.05502616)+(((-1.0)*px*x1579))+((cj0*py)));
12452 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12453 {
12454 bgotonextstatement=false;
12455 {
12456 IkReal j4array[1], cj4array[1], sj4array[1];
12457 bool j4valid[1]={false};
12458 _nj4 = 1;
12459 IkReal x1580=(r01*sj0);
12460 IkReal x1581=(cj0*r00);
12461 if( IKabs((((cj1*r02))+((sj1*x1581))+((sj1*x1580)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*x1580))+((cj1*x1581))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x1581))+((sj1*x1580))))+IKsqr((((cj1*x1580))+((cj1*x1581))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
12462 continue;
12463 j4array[0]=IKatan2((((cj1*r02))+((sj1*x1581))+((sj1*x1580))), (((cj1*x1580))+((cj1*x1581))+(((-1.0)*r02*sj1))));
12464 sj4array[0]=IKsin(j4array[0]);
12465 cj4array[0]=IKcos(j4array[0]);
12466 if( j4array[0] > IKPI )
12467 {
12468 j4array[0]-=IK2PI;
12469 }
12470 else if( j4array[0] < -IKPI )
12471 { j4array[0]+=IK2PI;
12472 }
12473 j4valid[0] = true;
12474 for(int ij4 = 0; ij4 < 1; ++ij4)
12475 {
12476 if( !j4valid[ij4] )
12477 {
12478 continue;
12479 }
12480 _ij4[0] = ij4; _ij4[1] = -1;
12481 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12482 {
12483 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12484 {
12485 j4valid[iij4]=false; _ij4[1] = iij4; break;
12486 }
12487 }
12488 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12489 {
12490 IkReal evalcond[4];
12491 IkReal x1582=IKsin(j4);
12492 IkReal x1583=IKcos(j4);
12493 IkReal x1584=(cj0*r00);
12494 IkReal x1585=(r01*sj0);
12495 IkReal x1586=((1.0)*cj1);
12496 IkReal x1587=(py*sj0);
12497 IkReal x1588=(cj0*px);
12498 evalcond[0]=((((-1.0)*x1585*x1586))+(((-1.0)*x1584*x1586))+((r02*sj1))+x1583);
12499 evalcond[1]=(((cj1*r02))+((sj1*x1585))+((sj1*x1584))+(((-1.0)*x1582)));
12500 evalcond[2]=((-0.26630543)+(((-0.05525)*x1582))+((cj1*pz))+((sj1*x1587))+((sj1*x1588)));
12501 evalcond[3]=((-0.0137)+(((0.05525)*x1583))+((pz*sj1))+(((-1.0)*x1586*x1587))+(((-1.0)*x1586*x1588)));
12502 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
12503 {
12504 continue;
12505 }
12506 }
12507
12508 {
12509 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12510 vinfos[0].jointtype = 1;
12511 vinfos[0].foffset = j0;
12512 vinfos[0].indices[0] = _ij0[0];
12513 vinfos[0].indices[1] = _ij0[1];
12514 vinfos[0].maxsolutions = _nj0;
12515 vinfos[1].jointtype = 1;
12516 vinfos[1].foffset = j1;
12517 vinfos[1].indices[0] = _ij1[0];
12518 vinfos[1].indices[1] = _ij1[1];
12519 vinfos[1].maxsolutions = _nj1;
12520 vinfos[2].jointtype = 1;
12521 vinfos[2].foffset = j2;
12522 vinfos[2].indices[0] = _ij2[0];
12523 vinfos[2].indices[1] = _ij2[1];
12524 vinfos[2].maxsolutions = _nj2;
12525 vinfos[3].jointtype = 1;
12526 vinfos[3].foffset = j3;
12527 vinfos[3].indices[0] = _ij3[0];
12528 vinfos[3].indices[1] = _ij3[1];
12529 vinfos[3].maxsolutions = _nj3;
12530 vinfos[4].jointtype = 1;
12531 vinfos[4].foffset = j4;
12532 vinfos[4].indices[0] = _ij4[0];
12533 vinfos[4].indices[1] = _ij4[1];
12534 vinfos[4].maxsolutions = _nj4;
12535 std::vector<int> vfree(0);
12536 solutions.AddSolution(vinfos,vfree);
12537 }
12538 }
12539 }
12540
12541 }
12542 } while(0);
12543 if( bgotonextstatement )
12544 {
12545 bool bgotonextstatement = true;
12546 do
12547 {
12548 if( 1 )
12549 {
12550 bgotonextstatement=false;
12551 continue;
12552
12553 }
12554 } while(0);
12555 if( bgotonextstatement )
12556 {
12557 }
12558 }
12559 }
12560 }
12561 }
12562 }
12563
12564 } else
12565 {
12566 {
12567 IkReal j4array[1], cj4array[1], sj4array[1];
12568 bool j4valid[1]={false};
12569 _nj4 = 1;
12570 IkReal x1589=((1.0)*cj1);
12571 IkReal x1590=(cj0*r00);
12572 IkReal x1591=(r01*sj0);
12573 CheckValue<IkReal> x1592=IKPowWithIntegerCheck(cj3,-1);
12574 if(!x1592.valid){
12575 continue;
12576 }
12577 if( IKabs((((cj1*r02))+((sj1*x1590))+((sj1*x1591)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1592.value)*((((r02*sj1))+(((-1.0)*x1589*x1590))+(((-1.0)*x1589*x1591)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((sj1*x1590))+((sj1*x1591))))+IKsqr(((x1592.value)*((((r02*sj1))+(((-1.0)*x1589*x1590))+(((-1.0)*x1589*x1591))))))-1) <= IKFAST_SINCOS_THRESH )
12578 continue;
12579 j4array[0]=IKatan2((((cj1*r02))+((sj1*x1590))+((sj1*x1591))), ((x1592.value)*((((r02*sj1))+(((-1.0)*x1589*x1590))+(((-1.0)*x1589*x1591))))));
12580 sj4array[0]=IKsin(j4array[0]);
12581 cj4array[0]=IKcos(j4array[0]);
12582 if( j4array[0] > IKPI )
12583 {
12584 j4array[0]-=IK2PI;
12585 }
12586 else if( j4array[0] < -IKPI )
12587 { j4array[0]+=IK2PI;
12588 }
12589 j4valid[0] = true;
12590 for(int ij4 = 0; ij4 < 1; ++ij4)
12591 {
12592 if( !j4valid[ij4] )
12593 {
12594 continue;
12595 }
12596 _ij4[0] = ij4; _ij4[1] = -1;
12597 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12598 {
12599 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12600 {
12601 j4valid[iij4]=false; _ij4[1] = iij4; break;
12602 }
12603 }
12604 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12605 {
12606 IkReal evalcond[6];
12607 IkReal x1593=IKsin(j4);
12608 IkReal x1594=IKcos(j4);
12609 IkReal x1595=(cj0*px);
12610 IkReal x1596=(sj0*sj1);
12611 IkReal x1597=((1.0)*cj1);
12612 IkReal x1598=((1.0)*sj0);
12613 IkReal x1599=(cj0*r00);
12614 IkReal x1600=((1.0)*x1594);
12615 IkReal x1601=((0.05525)*x1594);
12616 evalcond[0]=((((-1.0)*r00*x1598))+(((-1.0)*sj3*x1600))+((cj0*r01)));
12617 evalcond[1]=(((r01*x1596))+((cj1*r02))+((sj1*x1599))+(((-1.0)*x1593)));
12618 evalcond[2]=((-0.26630543)+(((-0.05525)*x1593))+((cj1*pz))+((sj1*x1595))+((py*x1596)));
12619 evalcond[3]=(((r02*sj1))+(((-1.0)*cj3*x1600))+(((-1.0)*x1597*x1599))+(((-1.0)*r01*sj0*x1597)));
12620 evalcond[4]=((-0.22374884)+(((-1.0)*sj3*x1601))+(((-1.0)*px*x1598))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((cj0*py)));
12621 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x1595*x1597))+(((-1.0)*py*sj0*x1597))+(((-1.0)*cj3*x1601))+((pz*sj1))+(((0.278775)*sj3)));
12622 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
12623 {
12624 continue;
12625 }
12626 }
12627
12628 {
12629 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12630 vinfos[0].jointtype = 1;
12631 vinfos[0].foffset = j0;
12632 vinfos[0].indices[0] = _ij0[0];
12633 vinfos[0].indices[1] = _ij0[1];
12634 vinfos[0].maxsolutions = _nj0;
12635 vinfos[1].jointtype = 1;
12636 vinfos[1].foffset = j1;
12637 vinfos[1].indices[0] = _ij1[0];
12638 vinfos[1].indices[1] = _ij1[1];
12639 vinfos[1].maxsolutions = _nj1;
12640 vinfos[2].jointtype = 1;
12641 vinfos[2].foffset = j2;
12642 vinfos[2].indices[0] = _ij2[0];
12643 vinfos[2].indices[1] = _ij2[1];
12644 vinfos[2].maxsolutions = _nj2;
12645 vinfos[3].jointtype = 1;
12646 vinfos[3].foffset = j3;
12647 vinfos[3].indices[0] = _ij3[0];
12648 vinfos[3].indices[1] = _ij3[1];
12649 vinfos[3].maxsolutions = _nj3;
12650 vinfos[4].jointtype = 1;
12651 vinfos[4].foffset = j4;
12652 vinfos[4].indices[0] = _ij4[0];
12653 vinfos[4].indices[1] = _ij4[1];
12654 vinfos[4].maxsolutions = _nj4;
12655 std::vector<int> vfree(0);
12656 solutions.AddSolution(vinfos,vfree);
12657 }
12658 }
12659 }
12660
12661 }
12662
12663 }
12664
12665 } else
12666 {
12667 {
12668 IkReal j4array[1], cj4array[1], sj4array[1];
12669 bool j4valid[1]={false};
12670 _nj4 = 1;
12671 CheckValue<IkReal> x1602=IKPowWithIntegerCheck(sj3,-1);
12672 if(!x1602.valid){
12673 continue;
12674 }
12675 if( IKabs((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1602.value)*(((((-1.0)*r00*sj0))+((cj0*r01)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))))+IKsqr(((x1602.value)*(((((-1.0)*r00*sj0))+((cj0*r01))))))-1) <= IKFAST_SINCOS_THRESH )
12676 continue;
12677 j4array[0]=IKatan2((((cj1*r02))+((cj0*r00*sj1))+((r01*sj0*sj1))), ((x1602.value)*(((((-1.0)*r00*sj0))+((cj0*r01))))));
12678 sj4array[0]=IKsin(j4array[0]);
12679 cj4array[0]=IKcos(j4array[0]);
12680 if( j4array[0] > IKPI )
12681 {
12682 j4array[0]-=IK2PI;
12683 }
12684 else if( j4array[0] < -IKPI )
12685 { j4array[0]+=IK2PI;
12686 }
12687 j4valid[0] = true;
12688 for(int ij4 = 0; ij4 < 1; ++ij4)
12689 {
12690 if( !j4valid[ij4] )
12691 {
12692 continue;
12693 }
12694 _ij4[0] = ij4; _ij4[1] = -1;
12695 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12696 {
12697 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12698 {
12699 j4valid[iij4]=false; _ij4[1] = iij4; break;
12700 }
12701 }
12702 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12703 {
12704 IkReal evalcond[6];
12705 IkReal x1603=IKsin(j4);
12706 IkReal x1604=IKcos(j4);
12707 IkReal x1605=(cj0*px);
12708 IkReal x1606=(sj0*sj1);
12709 IkReal x1607=((1.0)*cj1);
12710 IkReal x1608=((1.0)*sj0);
12711 IkReal x1609=(cj0*r00);
12712 IkReal x1610=((1.0)*x1604);
12713 IkReal x1611=((0.05525)*x1604);
12714 evalcond[0]=((((-1.0)*r00*x1608))+(((-1.0)*sj3*x1610))+((cj0*r01)));
12715 evalcond[1]=((((-1.0)*x1603))+((cj1*r02))+((r01*x1606))+((sj1*x1609)));
12716 evalcond[2]=((-0.26630543)+((py*x1606))+(((-0.05525)*x1603))+((sj1*x1605))+((cj1*pz)));
12717 evalcond[3]=((((-1.0)*cj3*x1610))+(((-1.0)*x1607*x1609))+((r02*sj1))+(((-1.0)*r01*sj0*x1607)));
12718 evalcond[4]=((-0.22374884)+(((-1.0)*px*x1608))+(((-0.278775)*cj3))+(((0.0137)*sj3))+((cj0*py))+(((-1.0)*sj3*x1611)));
12719 evalcond[5]=((((-1.0)*cj3*x1611))+(((0.0137)*cj3))+(((-1.0)*py*sj0*x1607))+(((-1.0)*x1605*x1607))+((pz*sj1))+(((0.278775)*sj3)));
12720 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
12721 {
12722 continue;
12723 }
12724 }
12725
12726 {
12727 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12728 vinfos[0].jointtype = 1;
12729 vinfos[0].foffset = j0;
12730 vinfos[0].indices[0] = _ij0[0];
12731 vinfos[0].indices[1] = _ij0[1];
12732 vinfos[0].maxsolutions = _nj0;
12733 vinfos[1].jointtype = 1;
12734 vinfos[1].foffset = j1;
12735 vinfos[1].indices[0] = _ij1[0];
12736 vinfos[1].indices[1] = _ij1[1];
12737 vinfos[1].maxsolutions = _nj1;
12738 vinfos[2].jointtype = 1;
12739 vinfos[2].foffset = j2;
12740 vinfos[2].indices[0] = _ij2[0];
12741 vinfos[2].indices[1] = _ij2[1];
12742 vinfos[2].maxsolutions = _nj2;
12743 vinfos[3].jointtype = 1;
12744 vinfos[3].foffset = j3;
12745 vinfos[3].indices[0] = _ij3[0];
12746 vinfos[3].indices[1] = _ij3[1];
12747 vinfos[3].maxsolutions = _nj3;
12748 vinfos[4].jointtype = 1;
12749 vinfos[4].foffset = j4;
12750 vinfos[4].indices[0] = _ij4[0];
12751 vinfos[4].indices[1] = _ij4[1];
12752 vinfos[4].maxsolutions = _nj4;
12753 std::vector<int> vfree(0);
12754 solutions.AddSolution(vinfos,vfree);
12755 }
12756 }
12757 }
12758
12759 }
12760
12761 }
12762
12763 }
12764 } while(0);
12765 if( bgotonextstatement )
12766 {
12767 bool bgotonextstatement = true;
12768 do
12769 {
12770 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j2)))), 6.28318530717959)));
12771 if( IKabs(evalcond[0]) < 0.0000010000000000 )
12772 {
12773 bgotonextstatement=false;
12774 {
12775 IkReal j4eval[1];
12776 sj2=-1.0;
12777 cj2=0;
12778 j2=-1.5707963267949;
12779 j4eval[0]=sj3;
12780 if( IKabs(j4eval[0]) < 0.0000010000000000 )
12781 {
12782 {
12783 IkReal j4eval[1];
12784 sj2=-1.0;
12785 cj2=0;
12786 j2=-1.5707963267949;
12787 j4eval[0]=cj3;
12788 if( IKabs(j4eval[0]) < 0.0000010000000000 )
12789 {
12790 {
12791 IkReal evalcond[3];
12792 bool bgotonextstatement = true;
12793 do
12794 {
12795 IkReal x1612=((1.0)*cj1);
12796 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-1.5707963267949)+j3)))), 6.28318530717959)));
12797 evalcond[1]=((((-1.0)*cj0*r00*x1612))+((r02*sj1))+(((-1.0)*r01*sj0*x1612)));
12798 evalcond[2]=((0.278775)+(((-1.0)*py*sj0*x1612))+(((-1.0)*cj0*px*x1612))+((pz*sj1)));
12799 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12800 {
12801 bgotonextstatement=false;
12802 {
12803 IkReal j4array[1], cj4array[1], sj4array[1];
12804 bool j4valid[1]={false};
12805 _nj4 = 1;
12806 IkReal x1613=((1.0)*sj1);
12807 if( IKabs(((((-1.0)*cj0*r00*x1613))+(((-1.0)*r01*sj0*x1613))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r00*sj0))+(((-1.0)*cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*cj0*r00*x1613))+(((-1.0)*r01*sj0*x1613))+(((-1.0)*cj1*r02))))+IKsqr((((r00*sj0))+(((-1.0)*cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
12808 continue;
12809 j4array[0]=IKatan2(((((-1.0)*cj0*r00*x1613))+(((-1.0)*r01*sj0*x1613))+(((-1.0)*cj1*r02))), (((r00*sj0))+(((-1.0)*cj0*r01))));
12810 sj4array[0]=IKsin(j4array[0]);
12811 cj4array[0]=IKcos(j4array[0]);
12812 if( j4array[0] > IKPI )
12813 {
12814 j4array[0]-=IK2PI;
12815 }
12816 else if( j4array[0] < -IKPI )
12817 { j4array[0]+=IK2PI;
12818 }
12819 j4valid[0] = true;
12820 for(int ij4 = 0; ij4 < 1; ++ij4)
12821 {
12822 if( !j4valid[ij4] )
12823 {
12824 continue;
12825 }
12826 _ij4[0] = ij4; _ij4[1] = -1;
12827 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12828 {
12829 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12830 {
12831 j4valid[iij4]=false; _ij4[1] = iij4; break;
12832 }
12833 }
12834 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12835 {
12836 IkReal evalcond[4];
12837 IkReal x1614=IKcos(j4);
12838 IkReal x1615=IKsin(j4);
12839 IkReal x1616=(sj0*sj1);
12840 IkReal x1617=(cj0*sj1);
12841 IkReal x1618=((1.0)*sj0);
12842 evalcond[0]=(x1614+(((-1.0)*r00*x1618))+((cj0*r01)));
12843 evalcond[1]=((0.21055116)+(((0.05525)*x1614))+(((-1.0)*px*x1618))+((cj0*py)));
12844 evalcond[2]=(((r01*x1616))+((r00*x1617))+x1615+((cj1*r02)));
12845 evalcond[3]=((-0.26630543)+((py*x1616))+(((0.05525)*x1615))+((cj1*pz))+((px*x1617)));
12846 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
12847 {
12848 continue;
12849 }
12850 }
12851
12852 {
12853 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12854 vinfos[0].jointtype = 1;
12855 vinfos[0].foffset = j0;
12856 vinfos[0].indices[0] = _ij0[0];
12857 vinfos[0].indices[1] = _ij0[1];
12858 vinfos[0].maxsolutions = _nj0;
12859 vinfos[1].jointtype = 1;
12860 vinfos[1].foffset = j1;
12861 vinfos[1].indices[0] = _ij1[0];
12862 vinfos[1].indices[1] = _ij1[1];
12863 vinfos[1].maxsolutions = _nj1;
12864 vinfos[2].jointtype = 1;
12865 vinfos[2].foffset = j2;
12866 vinfos[2].indices[0] = _ij2[0];
12867 vinfos[2].indices[1] = _ij2[1];
12868 vinfos[2].maxsolutions = _nj2;
12869 vinfos[3].jointtype = 1;
12870 vinfos[3].foffset = j3;
12871 vinfos[3].indices[0] = _ij3[0];
12872 vinfos[3].indices[1] = _ij3[1];
12873 vinfos[3].maxsolutions = _nj3;
12874 vinfos[4].jointtype = 1;
12875 vinfos[4].foffset = j4;
12876 vinfos[4].indices[0] = _ij4[0];
12877 vinfos[4].indices[1] = _ij4[1];
12878 vinfos[4].maxsolutions = _nj4;
12879 std::vector<int> vfree(0);
12880 solutions.AddSolution(vinfos,vfree);
12881 }
12882 }
12883 }
12884
12885 }
12886 } while(0);
12887 if( bgotonextstatement )
12888 {
12889 bool bgotonextstatement = true;
12890 do
12891 {
12892 IkReal x1619=((1.0)*cj1);
12893 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((1.5707963267949)+j3)))), 6.28318530717959)));
12894 evalcond[1]=((((-1.0)*cj0*r00*x1619))+((r02*sj1))+(((-1.0)*r01*sj0*x1619)));
12895 evalcond[2]=((-0.278775)+(((-1.0)*py*sj0*x1619))+(((-1.0)*cj0*px*x1619))+((pz*sj1)));
12896 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12897 {
12898 bgotonextstatement=false;
12899 {
12900 IkReal j4array[1], cj4array[1], sj4array[1];
12901 bool j4valid[1]={false};
12902 _nj4 = 1;
12903 IkReal x1620=((1.0)*sj1);
12904 if( IKabs(((((-1.0)*cj0*r00*x1620))+(((-1.0)*r01*sj0*x1620))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r00*sj0))+((cj0*r01)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*cj0*r00*x1620))+(((-1.0)*r01*sj0*x1620))+(((-1.0)*cj1*r02))))+IKsqr(((((-1.0)*r00*sj0))+((cj0*r01))))-1) <= IKFAST_SINCOS_THRESH )
12905 continue;
12906 j4array[0]=IKatan2(((((-1.0)*cj0*r00*x1620))+(((-1.0)*r01*sj0*x1620))+(((-1.0)*cj1*r02))), ((((-1.0)*r00*sj0))+((cj0*r01))));
12907 sj4array[0]=IKsin(j4array[0]);
12908 cj4array[0]=IKcos(j4array[0]);
12909 if( j4array[0] > IKPI )
12910 {
12911 j4array[0]-=IK2PI;
12912 }
12913 else if( j4array[0] < -IKPI )
12914 { j4array[0]+=IK2PI;
12915 }
12916 j4valid[0] = true;
12917 for(int ij4 = 0; ij4 < 1; ++ij4)
12918 {
12919 if( !j4valid[ij4] )
12920 {
12921 continue;
12922 }
12923 _ij4[0] = ij4; _ij4[1] = -1;
12924 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
12925 {
12926 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
12927 {
12928 j4valid[iij4]=false; _ij4[1] = iij4; break;
12929 }
12930 }
12931 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
12932 {
12933 IkReal evalcond[4];
12934 IkReal x1621=IKcos(j4);
12935 IkReal x1622=IKsin(j4);
12936 IkReal x1623=(sj0*sj1);
12937 IkReal x1624=(cj0*sj1);
12938 IkReal x1625=((1.0)*sj0);
12939 evalcond[0]=((((-1.0)*x1621))+(((-1.0)*r00*x1625))+((cj0*r01)));
12940 evalcond[1]=((0.23795116)+(((-0.05525)*x1621))+(((-1.0)*px*x1625))+((cj0*py)));
12941 evalcond[2]=(((r00*x1624))+((r01*x1623))+x1622+((cj1*r02)));
12942 evalcond[3]=((-0.26630543)+(((0.05525)*x1622))+((py*x1623))+((cj1*pz))+((px*x1624)));
12943 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
12944 {
12945 continue;
12946 }
12947 }
12948
12949 {
12950 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
12951 vinfos[0].jointtype = 1;
12952 vinfos[0].foffset = j0;
12953 vinfos[0].indices[0] = _ij0[0];
12954 vinfos[0].indices[1] = _ij0[1];
12955 vinfos[0].maxsolutions = _nj0;
12956 vinfos[1].jointtype = 1;
12957 vinfos[1].foffset = j1;
12958 vinfos[1].indices[0] = _ij1[0];
12959 vinfos[1].indices[1] = _ij1[1];
12960 vinfos[1].maxsolutions = _nj1;
12961 vinfos[2].jointtype = 1;
12962 vinfos[2].foffset = j2;
12963 vinfos[2].indices[0] = _ij2[0];
12964 vinfos[2].indices[1] = _ij2[1];
12965 vinfos[2].maxsolutions = _nj2;
12966 vinfos[3].jointtype = 1;
12967 vinfos[3].foffset = j3;
12968 vinfos[3].indices[0] = _ij3[0];
12969 vinfos[3].indices[1] = _ij3[1];
12970 vinfos[3].maxsolutions = _nj3;
12971 vinfos[4].jointtype = 1;
12972 vinfos[4].foffset = j4;
12973 vinfos[4].indices[0] = _ij4[0];
12974 vinfos[4].indices[1] = _ij4[1];
12975 vinfos[4].maxsolutions = _nj4;
12976 std::vector<int> vfree(0);
12977 solutions.AddSolution(vinfos,vfree);
12978 }
12979 }
12980 }
12981
12982 }
12983 } while(0);
12984 if( bgotonextstatement )
12985 {
12986 bool bgotonextstatement = true;
12987 do
12988 {
12989 IkReal x1626=((1.0)*sj0);
12990 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
12991 evalcond[1]=((((-1.0)*r00*x1626))+((cj0*r01)));
12992 evalcond[2]=((0.50302616)+(((-1.0)*px*x1626))+((cj0*py)));
12993 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
12994 {
12995 bgotonextstatement=false;
12996 {
12997 IkReal j4array[1], cj4array[1], sj4array[1];
12998 bool j4valid[1]={false};
12999 _nj4 = 1;
13000 IkReal x1627=((1.0)*cj1);
13001 IkReal x1628=(r01*sj0);
13002 IkReal x1629=((1.0)*sj1);
13003 IkReal x1630=(cj0*r00);
13004 if( IKabs(((((-1.0)*r02*x1627))+(((-1.0)*x1628*x1629))+(((-1.0)*x1629*x1630)))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*x1627*x1628))+(((-1.0)*x1627*x1630)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r02*x1627))+(((-1.0)*x1628*x1629))+(((-1.0)*x1629*x1630))))+IKsqr((((r02*sj1))+(((-1.0)*x1627*x1628))+(((-1.0)*x1627*x1630))))-1) <= IKFAST_SINCOS_THRESH )
13005 continue;
13006 j4array[0]=IKatan2(((((-1.0)*r02*x1627))+(((-1.0)*x1628*x1629))+(((-1.0)*x1629*x1630))), (((r02*sj1))+(((-1.0)*x1627*x1628))+(((-1.0)*x1627*x1630))));
13007 sj4array[0]=IKsin(j4array[0]);
13008 cj4array[0]=IKcos(j4array[0]);
13009 if( j4array[0] > IKPI )
13010 {
13011 j4array[0]-=IK2PI;
13012 }
13013 else if( j4array[0] < -IKPI )
13014 { j4array[0]+=IK2PI;
13015 }
13016 j4valid[0] = true;
13017 for(int ij4 = 0; ij4 < 1; ++ij4)
13018 {
13019 if( !j4valid[ij4] )
13020 {
13021 continue;
13022 }
13023 _ij4[0] = ij4; _ij4[1] = -1;
13024 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13025 {
13026 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13027 {
13028 j4valid[iij4]=false; _ij4[1] = iij4; break;
13029 }
13030 }
13031 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13032 {
13033 IkReal evalcond[4];
13034 IkReal x1631=IKsin(j4);
13035 IkReal x1632=IKcos(j4);
13036 IkReal x1633=(r01*sj0);
13037 IkReal x1634=(cj0*sj1);
13038 IkReal x1635=((1.0)*cj1);
13039 IkReal x1636=(py*sj0);
13040 evalcond[0]=(((sj1*x1633))+x1631+((cj1*r02))+((r00*x1634)));
13041 evalcond[1]=((-0.26630543)+((sj1*x1636))+((px*x1634))+((cj1*pz))+(((0.05525)*x1631)));
13042 evalcond[2]=((((-1.0)*x1633*x1635))+((r02*sj1))+(((-1.0)*x1632))+(((-1.0)*cj0*r00*x1635)));
13043 evalcond[3]=((0.0137)+(((-1.0)*x1635*x1636))+(((-1.0)*cj0*px*x1635))+(((-0.05525)*x1632))+((pz*sj1)));
13044 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
13045 {
13046 continue;
13047 }
13048 }
13049
13050 {
13051 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13052 vinfos[0].jointtype = 1;
13053 vinfos[0].foffset = j0;
13054 vinfos[0].indices[0] = _ij0[0];
13055 vinfos[0].indices[1] = _ij0[1];
13056 vinfos[0].maxsolutions = _nj0;
13057 vinfos[1].jointtype = 1;
13058 vinfos[1].foffset = j1;
13059 vinfos[1].indices[0] = _ij1[0];
13060 vinfos[1].indices[1] = _ij1[1];
13061 vinfos[1].maxsolutions = _nj1;
13062 vinfos[2].jointtype = 1;
13063 vinfos[2].foffset = j2;
13064 vinfos[2].indices[0] = _ij2[0];
13065 vinfos[2].indices[1] = _ij2[1];
13066 vinfos[2].maxsolutions = _nj2;
13067 vinfos[3].jointtype = 1;
13068 vinfos[3].foffset = j3;
13069 vinfos[3].indices[0] = _ij3[0];
13070 vinfos[3].indices[1] = _ij3[1];
13071 vinfos[3].maxsolutions = _nj3;
13072 vinfos[4].jointtype = 1;
13073 vinfos[4].foffset = j4;
13074 vinfos[4].indices[0] = _ij4[0];
13075 vinfos[4].indices[1] = _ij4[1];
13076 vinfos[4].maxsolutions = _nj4;
13077 std::vector<int> vfree(0);
13078 solutions.AddSolution(vinfos,vfree);
13079 }
13080 }
13081 }
13082
13083 }
13084 } while(0);
13085 if( bgotonextstatement )
13086 {
13087 bool bgotonextstatement = true;
13088 do
13089 {
13090 IkReal x1637=((1.0)*sj0);
13091 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
13092 evalcond[1]=((((-1.0)*r00*x1637))+((cj0*r01)));
13093 evalcond[2]=((-0.05452384)+(((-1.0)*px*x1637))+((cj0*py)));
13094 if( IKabs(evalcond[0]) < 0.0000010000000000 && IKabs(evalcond[1]) < 0.0000010000000000 && IKabs(evalcond[2]) < 0.0000010000000000 )
13095 {
13096 bgotonextstatement=false;
13097 {
13098 IkReal j4array[1], cj4array[1], sj4array[1];
13099 bool j4valid[1]={false};
13100 _nj4 = 1;
13101 IkReal x1638=((1.0)*r02);
13102 IkReal x1639=((1.0)*sj1);
13103 IkReal x1640=(cj0*r00);
13104 IkReal x1641=(r01*sj0);
13105 if( IKabs(((((-1.0)*x1639*x1640))+(((-1.0)*x1639*x1641))+(((-1.0)*cj1*x1638)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*sj1*x1638))+((cj1*x1640))+((cj1*x1641)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*x1639*x1640))+(((-1.0)*x1639*x1641))+(((-1.0)*cj1*x1638))))+IKsqr(((((-1.0)*sj1*x1638))+((cj1*x1640))+((cj1*x1641))))-1) <= IKFAST_SINCOS_THRESH )
13106 continue;
13107 j4array[0]=IKatan2(((((-1.0)*x1639*x1640))+(((-1.0)*x1639*x1641))+(((-1.0)*cj1*x1638))), ((((-1.0)*sj1*x1638))+((cj1*x1640))+((cj1*x1641))));
13108 sj4array[0]=IKsin(j4array[0]);
13109 cj4array[0]=IKcos(j4array[0]);
13110 if( j4array[0] > IKPI )
13111 {
13112 j4array[0]-=IK2PI;
13113 }
13114 else if( j4array[0] < -IKPI )
13115 { j4array[0]+=IK2PI;
13116 }
13117 j4valid[0] = true;
13118 for(int ij4 = 0; ij4 < 1; ++ij4)
13119 {
13120 if( !j4valid[ij4] )
13121 {
13122 continue;
13123 }
13124 _ij4[0] = ij4; _ij4[1] = -1;
13125 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13126 {
13127 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13128 {
13129 j4valid[iij4]=false; _ij4[1] = iij4; break;
13130 }
13131 }
13132 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13133 {
13134 IkReal evalcond[4];
13135 IkReal x1642=IKsin(j4);
13136 IkReal x1643=IKcos(j4);
13137 IkReal x1644=((1.0)*cj1);
13138 IkReal x1645=(cj0*r00);
13139 IkReal x1646=(r01*sj0);
13140 IkReal x1647=(py*sj0);
13141 IkReal x1648=(cj0*px);
13142 evalcond[0]=(((sj1*x1646))+((sj1*x1645))+x1642+((cj1*r02)));
13143 evalcond[1]=((((-1.0)*x1644*x1646))+(((-1.0)*x1644*x1645))+x1643+((r02*sj1)));
13144 evalcond[2]=((-0.26630543)+((sj1*x1648))+((sj1*x1647))+((cj1*pz))+(((0.05525)*x1642)));
13145 evalcond[3]=((-0.0137)+(((-1.0)*x1644*x1648))+(((-1.0)*x1644*x1647))+(((0.05525)*x1643))+((pz*sj1)));
13146 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH )
13147 {
13148 continue;
13149 }
13150 }
13151
13152 {
13153 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13154 vinfos[0].jointtype = 1;
13155 vinfos[0].foffset = j0;
13156 vinfos[0].indices[0] = _ij0[0];
13157 vinfos[0].indices[1] = _ij0[1];
13158 vinfos[0].maxsolutions = _nj0;
13159 vinfos[1].jointtype = 1;
13160 vinfos[1].foffset = j1;
13161 vinfos[1].indices[0] = _ij1[0];
13162 vinfos[1].indices[1] = _ij1[1];
13163 vinfos[1].maxsolutions = _nj1;
13164 vinfos[2].jointtype = 1;
13165 vinfos[2].foffset = j2;
13166 vinfos[2].indices[0] = _ij2[0];
13167 vinfos[2].indices[1] = _ij2[1];
13168 vinfos[2].maxsolutions = _nj2;
13169 vinfos[3].jointtype = 1;
13170 vinfos[3].foffset = j3;
13171 vinfos[3].indices[0] = _ij3[0];
13172 vinfos[3].indices[1] = _ij3[1];
13173 vinfos[3].maxsolutions = _nj3;
13174 vinfos[4].jointtype = 1;
13175 vinfos[4].foffset = j4;
13176 vinfos[4].indices[0] = _ij4[0];
13177 vinfos[4].indices[1] = _ij4[1];
13178 vinfos[4].maxsolutions = _nj4;
13179 std::vector<int> vfree(0);
13180 solutions.AddSolution(vinfos,vfree);
13181 }
13182 }
13183 }
13184
13185 }
13186 } while(0);
13187 if( bgotonextstatement )
13188 {
13189 bool bgotonextstatement = true;
13190 do
13191 {
13192 if( 1 )
13193 {
13194 bgotonextstatement=false;
13195 continue;
13196
13197 }
13198 } while(0);
13199 if( bgotonextstatement )
13200 {
13201 }
13202 }
13203 }
13204 }
13205 }
13206 }
13207
13208 } else
13209 {
13210 {
13211 IkReal j4array[1], cj4array[1], sj4array[1];
13212 bool j4valid[1]={false};
13213 _nj4 = 1;
13214 IkReal x1649=((1.0)*cj1);
13215 IkReal x1650=(r01*sj0);
13216 IkReal x1651=((1.0)*sj1);
13217 IkReal x1652=(cj0*r00);
13218 CheckValue<IkReal> x1653=IKPowWithIntegerCheck(cj3,-1);
13219 if(!x1653.valid){
13220 continue;
13221 }
13222 if( IKabs(((((-1.0)*x1650*x1651))+(((-1.0)*x1651*x1652))+(((-1.0)*r02*x1649)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1653.value)*((((r02*sj1))+(((-1.0)*x1649*x1650))+(((-1.0)*x1649*x1652)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*x1650*x1651))+(((-1.0)*x1651*x1652))+(((-1.0)*r02*x1649))))+IKsqr(((x1653.value)*((((r02*sj1))+(((-1.0)*x1649*x1650))+(((-1.0)*x1649*x1652))))))-1) <= IKFAST_SINCOS_THRESH )
13223 continue;
13224 j4array[0]=IKatan2(((((-1.0)*x1650*x1651))+(((-1.0)*x1651*x1652))+(((-1.0)*r02*x1649))), ((x1653.value)*((((r02*sj1))+(((-1.0)*x1649*x1650))+(((-1.0)*x1649*x1652))))));
13225 sj4array[0]=IKsin(j4array[0]);
13226 cj4array[0]=IKcos(j4array[0]);
13227 if( j4array[0] > IKPI )
13228 {
13229 j4array[0]-=IK2PI;
13230 }
13231 else if( j4array[0] < -IKPI )
13232 { j4array[0]+=IK2PI;
13233 }
13234 j4valid[0] = true;
13235 for(int ij4 = 0; ij4 < 1; ++ij4)
13236 {
13237 if( !j4valid[ij4] )
13238 {
13239 continue;
13240 }
13241 _ij4[0] = ij4; _ij4[1] = -1;
13242 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13243 {
13244 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13245 {
13246 j4valid[iij4]=false; _ij4[1] = iij4; break;
13247 }
13248 }
13249 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13250 {
13251 IkReal evalcond[6];
13252 IkReal x1654=IKsin(j4);
13253 IkReal x1655=IKcos(j4);
13254 IkReal x1656=(cj0*px);
13255 IkReal x1657=(sj0*sj1);
13256 IkReal x1658=((1.0)*cj1);
13257 IkReal x1659=((1.0)*sj0);
13258 IkReal x1660=(cj0*r00);
13259 IkReal x1661=(cj3*x1655);
13260 IkReal x1662=(sj3*x1655);
13261 evalcond[0]=((((-1.0)*r00*x1659))+x1662+((cj0*r01)));
13262 evalcond[1]=(((sj1*x1660))+x1654+((cj1*r02))+((r01*x1657)));
13263 evalcond[2]=((-0.26630543)+((sj1*x1656))+((py*x1657))+((cj1*pz))+(((0.05525)*x1654)));
13264 evalcond[3]=((((-1.0)*r01*sj0*x1658))+(((-1.0)*x1661))+((r02*sj1))+(((-1.0)*x1658*x1660)));
13265 evalcond[4]=((0.22425116)+(((-1.0)*px*x1659))+(((0.278775)*cj3))+(((-0.0137)*sj3))+((cj0*py))+(((0.05525)*x1662)));
13266 evalcond[5]=((((-1.0)*x1656*x1658))+(((0.0137)*cj3))+(((-0.05525)*x1661))+((pz*sj1))+(((-1.0)*py*sj0*x1658))+(((0.278775)*sj3)));
13267 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13268 {
13269 continue;
13270 }
13271 }
13272
13273 {
13274 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13275 vinfos[0].jointtype = 1;
13276 vinfos[0].foffset = j0;
13277 vinfos[0].indices[0] = _ij0[0];
13278 vinfos[0].indices[1] = _ij0[1];
13279 vinfos[0].maxsolutions = _nj0;
13280 vinfos[1].jointtype = 1;
13281 vinfos[1].foffset = j1;
13282 vinfos[1].indices[0] = _ij1[0];
13283 vinfos[1].indices[1] = _ij1[1];
13284 vinfos[1].maxsolutions = _nj1;
13285 vinfos[2].jointtype = 1;
13286 vinfos[2].foffset = j2;
13287 vinfos[2].indices[0] = _ij2[0];
13288 vinfos[2].indices[1] = _ij2[1];
13289 vinfos[2].maxsolutions = _nj2;
13290 vinfos[3].jointtype = 1;
13291 vinfos[3].foffset = j3;
13292 vinfos[3].indices[0] = _ij3[0];
13293 vinfos[3].indices[1] = _ij3[1];
13294 vinfos[3].maxsolutions = _nj3;
13295 vinfos[4].jointtype = 1;
13296 vinfos[4].foffset = j4;
13297 vinfos[4].indices[0] = _ij4[0];
13298 vinfos[4].indices[1] = _ij4[1];
13299 vinfos[4].maxsolutions = _nj4;
13300 std::vector<int> vfree(0);
13301 solutions.AddSolution(vinfos,vfree);
13302 }
13303 }
13304 }
13305
13306 }
13307
13308 }
13309
13310 } else
13311 {
13312 {
13313 IkReal j4array[1], cj4array[1], sj4array[1];
13314 bool j4valid[1]={false};
13315 _nj4 = 1;
13316 IkReal x1663=((1.0)*cj0);
13317 CheckValue<IkReal> x1664=IKPowWithIntegerCheck(sj3,-1);
13318 if(!x1664.valid){
13319 continue;
13320 }
13321 if( IKabs(((((-1.0)*r00*sj1*x1663))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1664.value)*((((r00*sj0))+(((-1.0)*r01*x1663)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((((-1.0)*r00*sj1*x1663))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02))))+IKsqr(((x1664.value)*((((r00*sj0))+(((-1.0)*r01*x1663))))))-1) <= IKFAST_SINCOS_THRESH )
13322 continue;
13323 j4array[0]=IKatan2(((((-1.0)*r00*sj1*x1663))+(((-1.0)*r01*sj0*sj1))+(((-1.0)*cj1*r02))), ((x1664.value)*((((r00*sj0))+(((-1.0)*r01*x1663))))));
13324 sj4array[0]=IKsin(j4array[0]);
13325 cj4array[0]=IKcos(j4array[0]);
13326 if( j4array[0] > IKPI )
13327 {
13328 j4array[0]-=IK2PI;
13329 }
13330 else if( j4array[0] < -IKPI )
13331 { j4array[0]+=IK2PI;
13332 }
13333 j4valid[0] = true;
13334 for(int ij4 = 0; ij4 < 1; ++ij4)
13335 {
13336 if( !j4valid[ij4] )
13337 {
13338 continue;
13339 }
13340 _ij4[0] = ij4; _ij4[1] = -1;
13341 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13342 {
13343 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13344 {
13345 j4valid[iij4]=false; _ij4[1] = iij4; break;
13346 }
13347 }
13348 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13349 {
13350 IkReal evalcond[6];
13351 IkReal x1665=IKsin(j4);
13352 IkReal x1666=IKcos(j4);
13353 IkReal x1667=(cj0*px);
13354 IkReal x1668=(sj0*sj1);
13355 IkReal x1669=((1.0)*cj1);
13356 IkReal x1670=((1.0)*sj0);
13357 IkReal x1671=(cj0*r00);
13358 IkReal x1672=(cj3*x1666);
13359 IkReal x1673=(sj3*x1666);
13360 evalcond[0]=(x1673+(((-1.0)*r00*x1670))+((cj0*r01)));
13361 evalcond[1]=(((sj1*x1671))+x1665+((cj1*r02))+((r01*x1668)));
13362 evalcond[2]=((-0.26630543)+((sj1*x1667))+((py*x1668))+((cj1*pz))+(((0.05525)*x1665)));
13363 evalcond[3]=((((-1.0)*r01*sj0*x1669))+(((-1.0)*x1669*x1671))+((r02*sj1))+(((-1.0)*x1672)));
13364 evalcond[4]=((0.22425116)+(((-1.0)*px*x1670))+(((0.05525)*x1673))+(((0.278775)*cj3))+(((-0.0137)*sj3))+((cj0*py)));
13365 evalcond[5]=((((0.0137)*cj3))+(((-1.0)*x1667*x1669))+(((-1.0)*py*sj0*x1669))+(((-0.05525)*x1672))+((pz*sj1))+(((0.278775)*sj3)));
13366 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13367 {
13368 continue;
13369 }
13370 }
13371
13372 {
13373 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13374 vinfos[0].jointtype = 1;
13375 vinfos[0].foffset = j0;
13376 vinfos[0].indices[0] = _ij0[0];
13377 vinfos[0].indices[1] = _ij0[1];
13378 vinfos[0].maxsolutions = _nj0;
13379 vinfos[1].jointtype = 1;
13380 vinfos[1].foffset = j1;
13381 vinfos[1].indices[0] = _ij1[0];
13382 vinfos[1].indices[1] = _ij1[1];
13383 vinfos[1].maxsolutions = _nj1;
13384 vinfos[2].jointtype = 1;
13385 vinfos[2].foffset = j2;
13386 vinfos[2].indices[0] = _ij2[0];
13387 vinfos[2].indices[1] = _ij2[1];
13388 vinfos[2].maxsolutions = _nj2;
13389 vinfos[3].jointtype = 1;
13390 vinfos[3].foffset = j3;
13391 vinfos[3].indices[0] = _ij3[0];
13392 vinfos[3].indices[1] = _ij3[1];
13393 vinfos[3].maxsolutions = _nj3;
13394 vinfos[4].jointtype = 1;
13395 vinfos[4].foffset = j4;
13396 vinfos[4].indices[0] = _ij4[0];
13397 vinfos[4].indices[1] = _ij4[1];
13398 vinfos[4].maxsolutions = _nj4;
13399 std::vector<int> vfree(0);
13400 solutions.AddSolution(vinfos,vfree);
13401 }
13402 }
13403 }
13404
13405 }
13406
13407 }
13408
13409 }
13410 } while(0);
13411 if( bgotonextstatement )
13412 {
13413 bool bgotonextstatement = true;
13414 do
13415 {
13416 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(j3))), 6.28318530717959)));
13417 if( IKabs(evalcond[0]) < 0.0000010000000000 )
13418 {
13419 bgotonextstatement=false;
13420 {
13421 IkReal j4eval[1];
13422 sj3=0;
13423 cj3=1.0;
13424 j3=0;
13425 j4eval[0]=cj2;
13426 if( IKabs(j4eval[0]) < 0.0000010000000000 )
13427 {
13428 {
13429 IkReal j4eval[1];
13430 sj3=0;
13431 cj3=1.0;
13432 j3=0;
13433 j4eval[0]=sj2;
13434 if( IKabs(j4eval[0]) < 0.0000010000000000 )
13435 {
13436 continue;
13437
13438 } else
13439 {
13440 {
13441 IkReal j4array[1], cj4array[1], sj4array[1];
13442 bool j4valid[1]={false};
13443 _nj4 = 1;
13444 IkReal x1674=((1.0)*cj1);
13445 IkReal x1675=(cj0*r00);
13446 IkReal x1676=(r01*sj0);
13447 CheckValue<IkReal> x1677=IKPowWithIntegerCheck(sj2,-1);
13448 if(!x1677.valid){
13449 continue;
13450 }
13451 if( IKabs(((x1677.value)*((((sj1*x1676))+((sj1*x1675))+((cj1*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((r02*sj1))+(((-1.0)*x1674*x1675))+(((-1.0)*x1674*x1676)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1677.value)*((((sj1*x1676))+((sj1*x1675))+((cj1*r02))))))+IKsqr((((r02*sj1))+(((-1.0)*x1674*x1675))+(((-1.0)*x1674*x1676))))-1) <= IKFAST_SINCOS_THRESH )
13452 continue;
13453 j4array[0]=IKatan2(((x1677.value)*((((sj1*x1676))+((sj1*x1675))+((cj1*r02))))), (((r02*sj1))+(((-1.0)*x1674*x1675))+(((-1.0)*x1674*x1676))));
13454 sj4array[0]=IKsin(j4array[0]);
13455 cj4array[0]=IKcos(j4array[0]);
13456 if( j4array[0] > IKPI )
13457 {
13458 j4array[0]-=IK2PI;
13459 }
13460 else if( j4array[0] < -IKPI )
13461 { j4array[0]+=IK2PI;
13462 }
13463 j4valid[0] = true;
13464 for(int ij4 = 0; ij4 < 1; ++ij4)
13465 {
13466 if( !j4valid[ij4] )
13467 {
13468 continue;
13469 }
13470 _ij4[0] = ij4; _ij4[1] = -1;
13471 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13472 {
13473 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13474 {
13475 j4valid[iij4]=false; _ij4[1] = iij4; break;
13476 }
13477 }
13478 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13479 {
13480 IkReal evalcond[6];
13481 IkReal x1678=IKsin(j4);
13482 IkReal x1679=IKcos(j4);
13483 IkReal x1680=(cj0*px);
13484 IkReal x1681=(sj0*sj1);
13485 IkReal x1682=((1.0)*sj0);
13486 IkReal x1683=((1.0)*cj1);
13487 IkReal x1684=(cj0*r00);
13488 IkReal x1685=(sj2*x1678);
13489 IkReal x1686=(cj2*x1678);
13490 evalcond[0]=(x1686+((cj0*r01))+(((-1.0)*r00*x1682)));
13491 evalcond[1]=(((r01*x1681))+((sj1*x1684))+(((-1.0)*x1685))+((cj1*r02)));
13492 evalcond[2]=((0.00025116)+(((-0.502775)*sj2))+((cj0*py))+(((-1.0)*px*x1682))+(((0.05525)*x1686)));
13493 evalcond[3]=((((-1.0)*x1683*x1684))+((r02*sj1))+(((-1.0)*x1679))+(((-1.0)*cj1*r01*x1682)));
13494 evalcond[4]=((0.0137)+(((-1.0)*cj1*py*x1682))+(((-1.0)*x1680*x1683))+(((-0.05525)*x1679))+((pz*sj1)));
13495 evalcond[5]=((-0.26630543)+((sj1*x1680))+((cj1*pz))+((py*x1681))+(((-0.502775)*cj2))+(((-0.05525)*x1685)));
13496 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13497 {
13498 continue;
13499 }
13500 }
13501
13502 {
13503 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13504 vinfos[0].jointtype = 1;
13505 vinfos[0].foffset = j0;
13506 vinfos[0].indices[0] = _ij0[0];
13507 vinfos[0].indices[1] = _ij0[1];
13508 vinfos[0].maxsolutions = _nj0;
13509 vinfos[1].jointtype = 1;
13510 vinfos[1].foffset = j1;
13511 vinfos[1].indices[0] = _ij1[0];
13512 vinfos[1].indices[1] = _ij1[1];
13513 vinfos[1].maxsolutions = _nj1;
13514 vinfos[2].jointtype = 1;
13515 vinfos[2].foffset = j2;
13516 vinfos[2].indices[0] = _ij2[0];
13517 vinfos[2].indices[1] = _ij2[1];
13518 vinfos[2].maxsolutions = _nj2;
13519 vinfos[3].jointtype = 1;
13520 vinfos[3].foffset = j3;
13521 vinfos[3].indices[0] = _ij3[0];
13522 vinfos[3].indices[1] = _ij3[1];
13523 vinfos[3].maxsolutions = _nj3;
13524 vinfos[4].jointtype = 1;
13525 vinfos[4].foffset = j4;
13526 vinfos[4].indices[0] = _ij4[0];
13527 vinfos[4].indices[1] = _ij4[1];
13528 vinfos[4].maxsolutions = _nj4;
13529 std::vector<int> vfree(0);
13530 solutions.AddSolution(vinfos,vfree);
13531 }
13532 }
13533 }
13534
13535 }
13536
13537 }
13538
13539 } else
13540 {
13541 {
13542 IkReal j4array[1], cj4array[1], sj4array[1];
13543 bool j4valid[1]={false};
13544 _nj4 = 1;
13545 IkReal x1687=((1.0)*r01);
13546 CheckValue<IkReal> x1688=IKPowWithIntegerCheck(cj2,-1);
13547 if(!x1688.valid){
13548 continue;
13549 }
13550 if( IKabs(((x1688.value)*((((r00*sj0))+(((-1.0)*cj0*x1687)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*cj0*cj1*r00))+((r02*sj1))+(((-1.0)*cj1*sj0*x1687)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1688.value)*((((r00*sj0))+(((-1.0)*cj0*x1687))))))+IKsqr(((((-1.0)*cj0*cj1*r00))+((r02*sj1))+(((-1.0)*cj1*sj0*x1687))))-1) <= IKFAST_SINCOS_THRESH )
13551 continue;
13552 j4array[0]=IKatan2(((x1688.value)*((((r00*sj0))+(((-1.0)*cj0*x1687))))), ((((-1.0)*cj0*cj1*r00))+((r02*sj1))+(((-1.0)*cj1*sj0*x1687))));
13553 sj4array[0]=IKsin(j4array[0]);
13554 cj4array[0]=IKcos(j4array[0]);
13555 if( j4array[0] > IKPI )
13556 {
13557 j4array[0]-=IK2PI;
13558 }
13559 else if( j4array[0] < -IKPI )
13560 { j4array[0]+=IK2PI;
13561 }
13562 j4valid[0] = true;
13563 for(int ij4 = 0; ij4 < 1; ++ij4)
13564 {
13565 if( !j4valid[ij4] )
13566 {
13567 continue;
13568 }
13569 _ij4[0] = ij4; _ij4[1] = -1;
13570 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13571 {
13572 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13573 {
13574 j4valid[iij4]=false; _ij4[1] = iij4; break;
13575 }
13576 }
13577 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13578 {
13579 IkReal evalcond[6];
13580 IkReal x1689=IKsin(j4);
13581 IkReal x1690=IKcos(j4);
13582 IkReal x1691=(cj0*px);
13583 IkReal x1692=(sj0*sj1);
13584 IkReal x1693=((1.0)*sj0);
13585 IkReal x1694=((1.0)*cj1);
13586 IkReal x1695=(cj0*r00);
13587 IkReal x1696=(sj2*x1689);
13588 IkReal x1697=(cj2*x1689);
13589 evalcond[0]=(x1697+(((-1.0)*r00*x1693))+((cj0*r01)));
13590 evalcond[1]=(((r01*x1692))+((sj1*x1695))+(((-1.0)*x1696))+((cj1*r02)));
13591 evalcond[2]=((0.00025116)+(((0.05525)*x1697))+(((-0.502775)*sj2))+((cj0*py))+(((-1.0)*px*x1693)));
13592 evalcond[3]=((((-1.0)*x1690))+(((-1.0)*x1694*x1695))+((r02*sj1))+(((-1.0)*cj1*r01*x1693)));
13593 evalcond[4]=((0.0137)+(((-1.0)*x1691*x1694))+(((-1.0)*cj1*py*x1693))+((pz*sj1))+(((-0.05525)*x1690)));
13594 evalcond[5]=((-0.26630543)+((sj1*x1691))+((cj1*pz))+(((-0.502775)*cj2))+((py*x1692))+(((-0.05525)*x1696)));
13595 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13596 {
13597 continue;
13598 }
13599 }
13600
13601 {
13602 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13603 vinfos[0].jointtype = 1;
13604 vinfos[0].foffset = j0;
13605 vinfos[0].indices[0] = _ij0[0];
13606 vinfos[0].indices[1] = _ij0[1];
13607 vinfos[0].maxsolutions = _nj0;
13608 vinfos[1].jointtype = 1;
13609 vinfos[1].foffset = j1;
13610 vinfos[1].indices[0] = _ij1[0];
13611 vinfos[1].indices[1] = _ij1[1];
13612 vinfos[1].maxsolutions = _nj1;
13613 vinfos[2].jointtype = 1;
13614 vinfos[2].foffset = j2;
13615 vinfos[2].indices[0] = _ij2[0];
13616 vinfos[2].indices[1] = _ij2[1];
13617 vinfos[2].maxsolutions = _nj2;
13618 vinfos[3].jointtype = 1;
13619 vinfos[3].foffset = j3;
13620 vinfos[3].indices[0] = _ij3[0];
13621 vinfos[3].indices[1] = _ij3[1];
13622 vinfos[3].maxsolutions = _nj3;
13623 vinfos[4].jointtype = 1;
13624 vinfos[4].foffset = j4;
13625 vinfos[4].indices[0] = _ij4[0];
13626 vinfos[4].indices[1] = _ij4[1];
13627 vinfos[4].maxsolutions = _nj4;
13628 std::vector<int> vfree(0);
13629 solutions.AddSolution(vinfos,vfree);
13630 }
13631 }
13632 }
13633
13634 }
13635
13636 }
13637
13638 }
13639 } while(0);
13640 if( bgotonextstatement )
13641 {
13642 bool bgotonextstatement = true;
13643 do
13644 {
13645 evalcond[0]=((-3.14159265358979)+(IKfmod(((3.14159265358979)+(IKabs(((-3.14159265358979)+j3)))), 6.28318530717959)));
13646 if( IKabs(evalcond[0]) < 0.0000010000000000 )
13647 {
13648 bgotonextstatement=false;
13649 {
13650 IkReal j4eval[1];
13651 sj3=0;
13652 cj3=-1.0;
13653 j3=3.14159265358979;
13654 j4eval[0]=cj2;
13655 if( IKabs(j4eval[0]) < 0.0000010000000000 )
13656 {
13657 {
13658 IkReal j4eval[1];
13659 sj3=0;
13660 cj3=-1.0;
13661 j3=3.14159265358979;
13662 j4eval[0]=sj2;
13663 if( IKabs(j4eval[0]) < 0.0000010000000000 )
13664 {
13665 continue;
13666
13667 } else
13668 {
13669 {
13670 IkReal j4array[1], cj4array[1], sj4array[1];
13671 bool j4valid[1]={false};
13672 _nj4 = 1;
13673 IkReal x1698=(r01*sj0);
13674 IkReal x1699=(cj0*r00);
13675 CheckValue<IkReal> x1700=IKPowWithIntegerCheck(sj2,-1);
13676 if(!x1700.valid){
13677 continue;
13678 }
13679 if( IKabs(((x1700.value)*((((sj1*x1699))+((sj1*x1698))+((cj1*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((((-1.0)*r02*sj1))+((cj1*x1698))+((cj1*x1699)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1700.value)*((((sj1*x1699))+((sj1*x1698))+((cj1*r02))))))+IKsqr(((((-1.0)*r02*sj1))+((cj1*x1698))+((cj1*x1699))))-1) <= IKFAST_SINCOS_THRESH )
13680 continue;
13681 j4array[0]=IKatan2(((x1700.value)*((((sj1*x1699))+((sj1*x1698))+((cj1*r02))))), ((((-1.0)*r02*sj1))+((cj1*x1698))+((cj1*x1699))));
13682 sj4array[0]=IKsin(j4array[0]);
13683 cj4array[0]=IKcos(j4array[0]);
13684 if( j4array[0] > IKPI )
13685 {
13686 j4array[0]-=IK2PI;
13687 }
13688 else if( j4array[0] < -IKPI )
13689 { j4array[0]+=IK2PI;
13690 }
13691 j4valid[0] = true;
13692 for(int ij4 = 0; ij4 < 1; ++ij4)
13693 {
13694 if( !j4valid[ij4] )
13695 {
13696 continue;
13697 }
13698 _ij4[0] = ij4; _ij4[1] = -1;
13699 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13700 {
13701 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13702 {
13703 j4valid[iij4]=false; _ij4[1] = iij4; break;
13704 }
13705 }
13706 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13707 {
13708 IkReal evalcond[6];
13709 IkReal x1701=IKsin(j4);
13710 IkReal x1702=IKcos(j4);
13711 IkReal x1703=(cj0*px);
13712 IkReal x1704=(sj0*sj1);
13713 IkReal x1705=((1.0)*sj0);
13714 IkReal x1706=((1.0)*cj1);
13715 IkReal x1707=(cj0*r00);
13716 IkReal x1708=(sj2*x1701);
13717 IkReal x1709=(cj2*x1701);
13718 evalcond[0]=(x1709+(((-1.0)*r00*x1705))+((cj0*r01)));
13719 evalcond[1]=(x1702+((r02*sj1))+(((-1.0)*cj1*r01*x1705))+(((-1.0)*x1706*x1707)));
13720 evalcond[2]=((((-1.0)*x1708))+((r01*x1704))+((cj1*r02))+((sj1*x1707)));
13721 evalcond[3]=((0.00025116)+(((-1.0)*px*x1705))+(((0.05525)*x1709))+((cj0*py))+(((0.054775)*sj2)));
13722 evalcond[4]=((-0.0137)+(((-1.0)*x1703*x1706))+(((0.05525)*x1702))+((pz*sj1))+(((-1.0)*cj1*py*x1705)));
13723 evalcond[5]=((-0.26630543)+((cj1*pz))+(((-0.05525)*x1708))+((sj1*x1703))+((py*x1704))+(((0.054775)*cj2)));
13724 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13725 {
13726 continue;
13727 }
13728 }
13729
13730 {
13731 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13732 vinfos[0].jointtype = 1;
13733 vinfos[0].foffset = j0;
13734 vinfos[0].indices[0] = _ij0[0];
13735 vinfos[0].indices[1] = _ij0[1];
13736 vinfos[0].maxsolutions = _nj0;
13737 vinfos[1].jointtype = 1;
13738 vinfos[1].foffset = j1;
13739 vinfos[1].indices[0] = _ij1[0];
13740 vinfos[1].indices[1] = _ij1[1];
13741 vinfos[1].maxsolutions = _nj1;
13742 vinfos[2].jointtype = 1;
13743 vinfos[2].foffset = j2;
13744 vinfos[2].indices[0] = _ij2[0];
13745 vinfos[2].indices[1] = _ij2[1];
13746 vinfos[2].maxsolutions = _nj2;
13747 vinfos[3].jointtype = 1;
13748 vinfos[3].foffset = j3;
13749 vinfos[3].indices[0] = _ij3[0];
13750 vinfos[3].indices[1] = _ij3[1];
13751 vinfos[3].maxsolutions = _nj3;
13752 vinfos[4].jointtype = 1;
13753 vinfos[4].foffset = j4;
13754 vinfos[4].indices[0] = _ij4[0];
13755 vinfos[4].indices[1] = _ij4[1];
13756 vinfos[4].maxsolutions = _nj4;
13757 std::vector<int> vfree(0);
13758 solutions.AddSolution(vinfos,vfree);
13759 }
13760 }
13761 }
13762
13763 }
13764
13765 }
13766
13767 } else
13768 {
13769 {
13770 IkReal j4array[1], cj4array[1], sj4array[1];
13771 bool j4valid[1]={false};
13772 _nj4 = 1;
13773 CheckValue<IkReal> x1710=IKPowWithIntegerCheck(cj2,-1);
13774 if(!x1710.valid){
13775 continue;
13776 }
13777 if( IKabs(((x1710.value)*((((r00*sj0))+(((-1.0)*cj0*r01)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr(((x1710.value)*((((r00*sj0))+(((-1.0)*cj0*r01))))))+IKsqr((((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))))-1) <= IKFAST_SINCOS_THRESH )
13778 continue;
13779 j4array[0]=IKatan2(((x1710.value)*((((r00*sj0))+(((-1.0)*cj0*r01))))), (((cj1*r01*sj0))+((cj0*cj1*r00))+(((-1.0)*r02*sj1))));
13780 sj4array[0]=IKsin(j4array[0]);
13781 cj4array[0]=IKcos(j4array[0]);
13782 if( j4array[0] > IKPI )
13783 {
13784 j4array[0]-=IK2PI;
13785 }
13786 else if( j4array[0] < -IKPI )
13787 { j4array[0]+=IK2PI;
13788 }
13789 j4valid[0] = true;
13790 for(int ij4 = 0; ij4 < 1; ++ij4)
13791 {
13792 if( !j4valid[ij4] )
13793 {
13794 continue;
13795 }
13796 _ij4[0] = ij4; _ij4[1] = -1;
13797 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13798 {
13799 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13800 {
13801 j4valid[iij4]=false; _ij4[1] = iij4; break;
13802 }
13803 }
13804 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13805 {
13806 IkReal evalcond[6];
13807 IkReal x1711=IKsin(j4);
13808 IkReal x1712=IKcos(j4);
13809 IkReal x1713=(cj0*px);
13810 IkReal x1714=(sj0*sj1);
13811 IkReal x1715=((1.0)*sj0);
13812 IkReal x1716=((1.0)*cj1);
13813 IkReal x1717=(cj0*r00);
13814 IkReal x1718=(sj2*x1711);
13815 IkReal x1719=(cj2*x1711);
13816 evalcond[0]=((((-1.0)*r00*x1715))+x1719+((cj0*r01)));
13817 evalcond[1]=(x1712+(((-1.0)*x1716*x1717))+((r02*sj1))+(((-1.0)*cj1*r01*x1715)));
13818 evalcond[2]=(((cj1*r02))+(((-1.0)*x1718))+((r01*x1714))+((sj1*x1717)));
13819 evalcond[3]=((0.00025116)+(((-1.0)*px*x1715))+(((0.05525)*x1719))+((cj0*py))+(((0.054775)*sj2)));
13820 evalcond[4]=((-0.0137)+(((-1.0)*x1713*x1716))+(((0.05525)*x1712))+(((-1.0)*cj1*py*x1715))+((pz*sj1)));
13821 evalcond[5]=((-0.26630543)+((cj1*pz))+(((-0.05525)*x1718))+((py*x1714))+((sj1*x1713))+(((0.054775)*cj2)));
13822 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13823 {
13824 continue;
13825 }
13826 }
13827
13828 {
13829 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13830 vinfos[0].jointtype = 1;
13831 vinfos[0].foffset = j0;
13832 vinfos[0].indices[0] = _ij0[0];
13833 vinfos[0].indices[1] = _ij0[1];
13834 vinfos[0].maxsolutions = _nj0;
13835 vinfos[1].jointtype = 1;
13836 vinfos[1].foffset = j1;
13837 vinfos[1].indices[0] = _ij1[0];
13838 vinfos[1].indices[1] = _ij1[1];
13839 vinfos[1].maxsolutions = _nj1;
13840 vinfos[2].jointtype = 1;
13841 vinfos[2].foffset = j2;
13842 vinfos[2].indices[0] = _ij2[0];
13843 vinfos[2].indices[1] = _ij2[1];
13844 vinfos[2].maxsolutions = _nj2;
13845 vinfos[3].jointtype = 1;
13846 vinfos[3].foffset = j3;
13847 vinfos[3].indices[0] = _ij3[0];
13848 vinfos[3].indices[1] = _ij3[1];
13849 vinfos[3].maxsolutions = _nj3;
13850 vinfos[4].jointtype = 1;
13851 vinfos[4].foffset = j4;
13852 vinfos[4].indices[0] = _ij4[0];
13853 vinfos[4].indices[1] = _ij4[1];
13854 vinfos[4].maxsolutions = _nj4;
13855 std::vector<int> vfree(0);
13856 solutions.AddSolution(vinfos,vfree);
13857 }
13858 }
13859 }
13860
13861 }
13862
13863 }
13864
13865 }
13866 } while(0);
13867 if( bgotonextstatement )
13868 {
13869 bool bgotonextstatement = true;
13870 do
13871 {
13872 if( 1 )
13873 {
13874 bgotonextstatement=false;
13875 continue;
13876
13877 }
13878 } while(0);
13879 if( bgotonextstatement )
13880 {
13881 }
13882 }
13883 }
13884 }
13885 }
13886 }
13887 }
13888 }
13889 }
13890 }
13891
13892 } else
13893 {
13894 {
13895 IkReal j4array[1], cj4array[1], sj4array[1];
13896 bool j4valid[1]={false};
13897 _nj4 = 1;
13898 CheckValue<IkReal> x1727=IKPowWithIntegerCheck(cj3,-1);
13899 if(!x1727.valid){
13900 continue;
13901 }
13902 IkReal x1720=x1727.value;
13903 IkReal x1721=(r02*sj1);
13904 IkReal x1722=(r01*sj0);
13905 IkReal x1723=((1.0)*cj1);
13906 IkReal x1724=(cj3*sj1);
13907 IkReal x1725=(cj0*r00);
13908 IkReal x1726=(cj1*cj2*sj3);
13909 CheckValue<IkReal> x1728=IKPowWithIntegerCheck(sj2,-1);
13910 if(!x1728.valid){
13911 continue;
13912 }
13913 if( IKabs((x1720*(x1728.value)*((((x1722*x1726))+((x1722*x1724))+((x1724*x1725))+((x1725*x1726))+(((-1.0)*cj2*sj3*x1721))+((cj1*cj3*r02)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x1720*((x1721+(((-1.0)*x1722*x1723))+(((-1.0)*x1723*x1725)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x1720*(x1728.value)*((((x1722*x1726))+((x1722*x1724))+((x1724*x1725))+((x1725*x1726))+(((-1.0)*cj2*sj3*x1721))+((cj1*cj3*r02))))))+IKsqr((x1720*((x1721+(((-1.0)*x1722*x1723))+(((-1.0)*x1723*x1725))))))-1) <= IKFAST_SINCOS_THRESH )
13914 continue;
13915 j4array[0]=IKatan2((x1720*(x1728.value)*((((x1722*x1726))+((x1722*x1724))+((x1724*x1725))+((x1725*x1726))+(((-1.0)*cj2*sj3*x1721))+((cj1*cj3*r02))))), (x1720*((x1721+(((-1.0)*x1722*x1723))+(((-1.0)*x1723*x1725))))));
13916 sj4array[0]=IKsin(j4array[0]);
13917 cj4array[0]=IKcos(j4array[0]);
13918 if( j4array[0] > IKPI )
13919 {
13920 j4array[0]-=IK2PI;
13921 }
13922 else if( j4array[0] < -IKPI )
13923 { j4array[0]+=IK2PI;
13924 }
13925 j4valid[0] = true;
13926 for(int ij4 = 0; ij4 < 1; ++ij4)
13927 {
13928 if( !j4valid[ij4] )
13929 {
13930 continue;
13931 }
13932 _ij4[0] = ij4; _ij4[1] = -1;
13933 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
13934 {
13935 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
13936 {
13937 j4valid[iij4]=false; _ij4[1] = iij4; break;
13938 }
13939 }
13940 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
13941 {
13942 IkReal evalcond[6];
13943 IkReal x1729=IKcos(j4);
13944 IkReal x1730=IKsin(j4);
13945 IkReal x1731=(cj0*px);
13946 IkReal x1732=(sj0*sj1);
13947 IkReal x1733=((0.0137)*sj3);
13948 IkReal x1734=((0.278775)*cj3);
13949 IkReal x1735=((1.0)*sj0);
13950 IkReal x1736=((1.0)*cj1);
13951 IkReal x1737=(cj0*r00);
13952 IkReal x1738=(sj2*x1730);
13953 IkReal x1739=((1.0)*x1729);
13954 IkReal x1740=(cj2*x1730);
13955 IkReal x1741=((0.05525)*sj3*x1729);
13956 evalcond[0]=(x1740+(((-1.0)*sj2*sj3*x1739))+(((-1.0)*r00*x1735))+((cj0*r01)));
13957 evalcond[1]=((((-1.0)*cj1*r01*x1735))+(((-1.0)*cj3*x1739))+((r02*sj1))+(((-1.0)*x1736*x1737)));
13958 evalcond[2]=(((r01*x1732))+((cj1*r02))+((sj1*x1737))+(((-1.0)*cj2*sj3*x1739))+(((-1.0)*x1738)));
13959 evalcond[3]=((((-1.0)*x1731*x1736))+(((-1.0)*cj1*py*x1735))+(((0.0137)*cj3))+(((-0.05525)*cj3*x1729))+((pz*sj1))+(((0.278775)*sj3)));
13960 evalcond[4]=((0.00025116)+(((0.05525)*x1740))+(((-0.224)*sj2))+(((-1.0)*sj2*x1741))+(((-1.0)*px*x1735))+((cj0*py))+(((-1.0)*sj2*x1734))+((sj2*x1733)));
13961 evalcond[5]=((-0.26630543)+(((-0.05525)*x1738))+((cj2*x1733))+((py*x1732))+(((-1.0)*cj2*x1734))+((sj1*x1731))+((cj1*pz))+(((-0.224)*cj2))+(((-1.0)*cj2*x1741)));
13962 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
13963 {
13964 continue;
13965 }
13966 }
13967
13968 {
13969 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
13970 vinfos[0].jointtype = 1;
13971 vinfos[0].foffset = j0;
13972 vinfos[0].indices[0] = _ij0[0];
13973 vinfos[0].indices[1] = _ij0[1];
13974 vinfos[0].maxsolutions = _nj0;
13975 vinfos[1].jointtype = 1;
13976 vinfos[1].foffset = j1;
13977 vinfos[1].indices[0] = _ij1[0];
13978 vinfos[1].indices[1] = _ij1[1];
13979 vinfos[1].maxsolutions = _nj1;
13980 vinfos[2].jointtype = 1;
13981 vinfos[2].foffset = j2;
13982 vinfos[2].indices[0] = _ij2[0];
13983 vinfos[2].indices[1] = _ij2[1];
13984 vinfos[2].maxsolutions = _nj2;
13985 vinfos[3].jointtype = 1;
13986 vinfos[3].foffset = j3;
13987 vinfos[3].indices[0] = _ij3[0];
13988 vinfos[3].indices[1] = _ij3[1];
13989 vinfos[3].maxsolutions = _nj3;
13990 vinfos[4].jointtype = 1;
13991 vinfos[4].foffset = j4;
13992 vinfos[4].indices[0] = _ij4[0];
13993 vinfos[4].indices[1] = _ij4[1];
13994 vinfos[4].maxsolutions = _nj4;
13995 std::vector<int> vfree(0);
13996 solutions.AddSolution(vinfos,vfree);
13997 }
13998 }
13999 }
14000
14001 }
14002
14003 }
14004
14005 } else
14006 {
14007 {
14008 IkReal j4array[1], cj4array[1], sj4array[1];
14009 bool j4valid[1]={false};
14010 _nj4 = 1;
14011 CheckValue<IkReal> x1748=IKPowWithIntegerCheck(cj3,-1);
14012 if(!x1748.valid){
14013 continue;
14014 }
14015 IkReal x1742=x1748.value;
14016 IkReal x1743=((1.0)*cj1);
14017 IkReal x1744=(cj0*r00);
14018 IkReal x1745=(r02*sj1);
14019 IkReal x1746=(sj2*sj3);
14020 IkReal x1747=(r01*sj0);
14021 CheckValue<IkReal> x1749=IKPowWithIntegerCheck(cj2,-1);
14022 if(!x1749.valid){
14023 continue;
14024 }
14025 if( IKabs((x1742*(x1749.value)*(((((-1.0)*cj0*cj3*r01))+(((-1.0)*x1743*x1744*x1746))+((x1745*x1746))+((cj3*r00*sj0))+(((-1.0)*x1743*x1746*x1747)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs((x1742*((x1745+(((-1.0)*x1743*x1744))+(((-1.0)*x1743*x1747)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((x1742*(x1749.value)*(((((-1.0)*cj0*cj3*r01))+(((-1.0)*x1743*x1744*x1746))+((x1745*x1746))+((cj3*r00*sj0))+(((-1.0)*x1743*x1746*x1747))))))+IKsqr((x1742*((x1745+(((-1.0)*x1743*x1744))+(((-1.0)*x1743*x1747))))))-1) <= IKFAST_SINCOS_THRESH )
14026 continue;
14027 j4array[0]=IKatan2((x1742*(x1749.value)*(((((-1.0)*cj0*cj3*r01))+(((-1.0)*x1743*x1744*x1746))+((x1745*x1746))+((cj3*r00*sj0))+(((-1.0)*x1743*x1746*x1747))))), (x1742*((x1745+(((-1.0)*x1743*x1744))+(((-1.0)*x1743*x1747))))));
14028 sj4array[0]=IKsin(j4array[0]);
14029 cj4array[0]=IKcos(j4array[0]);
14030 if( j4array[0] > IKPI )
14031 {
14032 j4array[0]-=IK2PI;
14033 }
14034 else if( j4array[0] < -IKPI )
14035 { j4array[0]+=IK2PI;
14036 }
14037 j4valid[0] = true;
14038 for(int ij4 = 0; ij4 < 1; ++ij4)
14039 {
14040 if( !j4valid[ij4] )
14041 {
14042 continue;
14043 }
14044 _ij4[0] = ij4; _ij4[1] = -1;
14045 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
14046 {
14047 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
14048 {
14049 j4valid[iij4]=false; _ij4[1] = iij4; break;
14050 }
14051 }
14052 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
14053 {
14054 IkReal evalcond[6];
14055 IkReal x1750=IKcos(j4);
14056 IkReal x1751=IKsin(j4);
14057 IkReal x1752=(cj0*px);
14058 IkReal x1753=(sj0*sj1);
14059 IkReal x1754=((0.0137)*sj3);
14060 IkReal x1755=((0.278775)*cj3);
14061 IkReal x1756=((1.0)*sj0);
14062 IkReal x1757=((1.0)*cj1);
14063 IkReal x1758=(cj0*r00);
14064 IkReal x1759=(sj2*x1751);
14065 IkReal x1760=((1.0)*x1750);
14066 IkReal x1761=(cj2*x1751);
14067 IkReal x1762=((0.05525)*sj3*x1750);
14068 evalcond[0]=(x1761+(((-1.0)*sj2*sj3*x1760))+(((-1.0)*r00*x1756))+((cj0*r01)));
14069 evalcond[1]=((((-1.0)*cj3*x1760))+(((-1.0)*x1757*x1758))+((r02*sj1))+(((-1.0)*cj1*r01*x1756)));
14070 evalcond[2]=((((-1.0)*cj2*sj3*x1760))+((cj1*r02))+(((-1.0)*x1759))+((sj1*x1758))+((r01*x1753)));
14071 evalcond[3]=((((0.0137)*cj3))+(((-0.05525)*cj3*x1750))+(((-1.0)*x1752*x1757))+((pz*sj1))+(((-1.0)*cj1*py*x1756))+(((0.278775)*sj3)));
14072 evalcond[4]=((0.00025116)+(((-1.0)*sj2*x1762))+(((-0.224)*sj2))+(((-1.0)*sj2*x1755))+(((0.05525)*x1761))+(((-1.0)*px*x1756))+((sj2*x1754))+((cj0*py)));
14073 evalcond[5]=((-0.26630543)+(((-1.0)*cj2*x1762))+((cj2*x1754))+((cj1*pz))+(((-0.224)*cj2))+(((-1.0)*cj2*x1755))+((sj1*x1752))+(((-0.05525)*x1759))+((py*x1753)));
14074 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
14075 {
14076 continue;
14077 }
14078 }
14079
14080 {
14081 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
14082 vinfos[0].jointtype = 1;
14083 vinfos[0].foffset = j0;
14084 vinfos[0].indices[0] = _ij0[0];
14085 vinfos[0].indices[1] = _ij0[1];
14086 vinfos[0].maxsolutions = _nj0;
14087 vinfos[1].jointtype = 1;
14088 vinfos[1].foffset = j1;
14089 vinfos[1].indices[0] = _ij1[0];
14090 vinfos[1].indices[1] = _ij1[1];
14091 vinfos[1].maxsolutions = _nj1;
14092 vinfos[2].jointtype = 1;
14093 vinfos[2].foffset = j2;
14094 vinfos[2].indices[0] = _ij2[0];
14095 vinfos[2].indices[1] = _ij2[1];
14096 vinfos[2].maxsolutions = _nj2;
14097 vinfos[3].jointtype = 1;
14098 vinfos[3].foffset = j3;
14099 vinfos[3].indices[0] = _ij3[0];
14100 vinfos[3].indices[1] = _ij3[1];
14101 vinfos[3].maxsolutions = _nj3;
14102 vinfos[4].jointtype = 1;
14103 vinfos[4].foffset = j4;
14104 vinfos[4].indices[0] = _ij4[0];
14105 vinfos[4].indices[1] = _ij4[1];
14106 vinfos[4].maxsolutions = _nj4;
14107 std::vector<int> vfree(0);
14108 solutions.AddSolution(vinfos,vfree);
14109 }
14110 }
14111 }
14112
14113 }
14114
14115 }
14116
14117 } else
14118 {
14119 {
14120 IkReal j4array[1], cj4array[1], sj4array[1];
14121 bool j4valid[1]={false};
14122 _nj4 = 1;
14123 IkReal x1763=(r01*sj2);
14124 IkReal x1764=(sj0*sj1);
14125 IkReal x1765=(cj2*r01);
14126 IkReal x1766=(r00*sj0);
14127 IkReal x1767=(cj1*r02);
14128 IkReal x1768=(cj0*r00*sj1);
14129 CheckValue<IkReal> x1769=IKPowWithIntegerCheck(sj3,-1);
14130 if(!x1769.valid){
14131 continue;
14132 }
14133 if( IKabs((((sj2*x1768))+((sj2*x1767))+(((-1.0)*cj0*x1765))+((cj2*x1766))+((x1763*x1764)))) < IKFAST_ATAN2_MAGTHRESH && IKabs(((x1769.value)*((((cj0*x1763))+((x1764*x1765))+(((-1.0)*sj2*x1766))+((cj2*x1768))+((cj2*x1767)))))) < IKFAST_ATAN2_MAGTHRESH && IKabs(IKsqr((((sj2*x1768))+((sj2*x1767))+(((-1.0)*cj0*x1765))+((cj2*x1766))+((x1763*x1764))))+IKsqr(((x1769.value)*((((cj0*x1763))+((x1764*x1765))+(((-1.0)*sj2*x1766))+((cj2*x1768))+((cj2*x1767))))))-1) <= IKFAST_SINCOS_THRESH )
14134 continue;
14135 j4array[0]=IKatan2((((sj2*x1768))+((sj2*x1767))+(((-1.0)*cj0*x1765))+((cj2*x1766))+((x1763*x1764))), ((x1769.value)*((((cj0*x1763))+((x1764*x1765))+(((-1.0)*sj2*x1766))+((cj2*x1768))+((cj2*x1767))))));
14136 sj4array[0]=IKsin(j4array[0]);
14137 cj4array[0]=IKcos(j4array[0]);
14138 if( j4array[0] > IKPI )
14139 {
14140 j4array[0]-=IK2PI;
14141 }
14142 else if( j4array[0] < -IKPI )
14143 { j4array[0]+=IK2PI;
14144 }
14145 j4valid[0] = true;
14146 for(int ij4 = 0; ij4 < 1; ++ij4)
14147 {
14148 if( !j4valid[ij4] )
14149 {
14150 continue;
14151 }
14152 _ij4[0] = ij4; _ij4[1] = -1;
14153 for(int iij4 = ij4+1; iij4 < 1; ++iij4)
14154 {
14155 if( j4valid[iij4] && IKabs(cj4array[ij4]-cj4array[iij4]) < IKFAST_SOLUTION_THRESH && IKabs(sj4array[ij4]-sj4array[iij4]) < IKFAST_SOLUTION_THRESH )
14156 {
14157 j4valid[iij4]=false; _ij4[1] = iij4; break;
14158 }
14159 }
14160 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
14161 {
14162 IkReal evalcond[6];
14163 IkReal x1770=IKcos(j4);
14164 IkReal x1771=IKsin(j4);
14165 IkReal x1772=(cj0*px);
14166 IkReal x1773=(sj0*sj1);
14167 IkReal x1774=((0.0137)*sj3);
14168 IkReal x1775=((0.278775)*cj3);
14169 IkReal x1776=((1.0)*sj0);
14170 IkReal x1777=((1.0)*cj1);
14171 IkReal x1778=(cj0*r00);
14172 IkReal x1779=(sj2*x1771);
14173 IkReal x1780=((1.0)*x1770);
14174 IkReal x1781=(cj2*x1771);
14175 IkReal x1782=((0.05525)*sj3*x1770);
14176 evalcond[0]=((((-1.0)*sj2*sj3*x1780))+x1781+(((-1.0)*r00*x1776))+((cj0*r01)));
14177 evalcond[1]=(((r02*sj1))+(((-1.0)*cj3*x1780))+(((-1.0)*cj1*r01*x1776))+(((-1.0)*x1777*x1778)));
14178 evalcond[2]=((((-1.0)*x1779))+((cj1*r02))+((r01*x1773))+(((-1.0)*cj2*sj3*x1780))+((sj1*x1778)));
14179 evalcond[3]=((((0.0137)*cj3))+(((-1.0)*x1772*x1777))+(((-0.05525)*cj3*x1770))+(((-1.0)*cj1*py*x1776))+((pz*sj1))+(((0.278775)*sj3)));
14180 evalcond[4]=((0.00025116)+(((0.05525)*x1781))+(((-0.224)*sj2))+(((-1.0)*px*x1776))+(((-1.0)*sj2*x1775))+((sj2*x1774))+((cj0*py))+(((-1.0)*sj2*x1782)));
14181 evalcond[5]=((-0.26630543)+(((-1.0)*cj2*x1775))+(((-0.05525)*x1779))+((cj1*pz))+(((-1.0)*cj2*x1782))+(((-0.224)*cj2))+((sj1*x1772))+((cj2*x1774))+((py*x1773)));
14182 if( IKabs(evalcond[0]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[1]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[2]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[3]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[4]) > IKFAST_EVALCOND_THRESH || IKabs(evalcond[5]) > IKFAST_EVALCOND_THRESH )
14183 {
14184 continue;
14185 }
14186 }
14187
14188 {
14189 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
14190 vinfos[0].jointtype = 1;
14191 vinfos[0].foffset = j0;
14192 vinfos[0].indices[0] = _ij0[0];
14193 vinfos[0].indices[1] = _ij0[1];
14194 vinfos[0].maxsolutions = _nj0;
14195 vinfos[1].jointtype = 1;
14196 vinfos[1].foffset = j1;
14197 vinfos[1].indices[0] = _ij1[0];
14198 vinfos[1].indices[1] = _ij1[1];
14199 vinfos[1].maxsolutions = _nj1;
14200 vinfos[2].jointtype = 1;
14201 vinfos[2].foffset = j2;
14202 vinfos[2].indices[0] = _ij2[0];
14203 vinfos[2].indices[1] = _ij2[1];
14204 vinfos[2].maxsolutions = _nj2;
14205 vinfos[3].jointtype = 1;
14206 vinfos[3].foffset = j3;
14207 vinfos[3].indices[0] = _ij3[0];
14208 vinfos[3].indices[1] = _ij3[1];
14209 vinfos[3].maxsolutions = _nj3;
14210 vinfos[4].jointtype = 1;
14211 vinfos[4].foffset = j4;
14212 vinfos[4].indices[0] = _ij4[0];
14213 vinfos[4].indices[1] = _ij4[1];
14214 vinfos[4].maxsolutions = _nj4;
14215 std::vector<int> vfree(0);
14216 solutions.AddSolution(vinfos,vfree);
14217 }
14218 }
14219 }
14220
14221 }
14222
14223 }
14224 }
14225 }
14226
14227 }
14228
14229 }
14230 }
14231 }
14232
14233 static inline bool checkconsistency8(const IkReal* Breal)
14234 {
14235 IkReal norm = 0.1;
14236 for(int i = 0; i < 7; ++i) {
14237 norm += IKabs(Breal[i]);
14238 }
14239
14240 IkReal tol = 1e-2*norm;
14241 return IKabs(Breal[0]*Breal[1]-Breal[2]) < tol && IKabs(Breal[1]*Breal[1]-Breal[3]) < tol && IKabs(Breal[0]*Breal[3]-Breal[4]) < tol && IKabs(Breal[1]*Breal[3]-Breal[5]) < tol && IKabs(Breal[0]*Breal[5]-Breal[6]) < tol;
14242 }
14246 static inline void solvedialyticpoly8qep(const IkReal* matcoeffs, IkReal* rawroots, int& numroots)
14247 {
14248 const IkReal tol = 128.0*std::numeric_limits<IkReal>::epsilon();
14249 IkReal IKFAST_ALIGNED16(M[16*16]) = {0};
14250 IkReal IKFAST_ALIGNED16(A[8*8]);
14251 IkReal IKFAST_ALIGNED16(work[16*16*15]);
14252 int ipiv[8];
14253 int info, coeffindex;
14254 const int worksize=16*16*15;
14255 const int matrixdim = 8;
14256 const int matrixdim2 = 16;
14257 numroots = 0;
14258
14259 coeffindex = 0;
14260 for(int j = 0; j < 4; ++j) {
14261 for(int k = 0; k < 6; ++k) {
14262 M[matrixdim+(j+4)+2*matrixdim*k] = M[matrixdim+j+2*matrixdim*(k+2)] = -matcoeffs[coeffindex++];
14263 }
14264 }
14265 for(int j = 0; j < 4; ++j) {
14266 for(int k = 0; k < 6; ++k) {
14267 M[matrixdim+(j+4)+2*matrixdim*k+matrixdim*2*matrixdim] = M[matrixdim+j+2*matrixdim*(k+2)+matrixdim*2*matrixdim] = -matcoeffs[coeffindex++];
14268 }
14269 }
14270 for(int j = 0; j < 4; ++j) {
14271 for(int k = 0; k < 6; ++k) {
14272 A[(j+4)+matrixdim*k] = A[j+matrixdim*(k+2)] = matcoeffs[coeffindex++];
14273 }
14274 for(int k = 0; k < 2; ++k) {
14275 A[j+matrixdim*k] = A[(j+4)+matrixdim*(k+6)] = 0;
14276 }
14277 }
14278 const IkReal lfpossibilities[4][4] = {{1,-1,1,1},{1,0,-2,1},{1,1,2,0},{1,-1,4,1}};
14279 int lfindex = -1;
14280 bool bsingular = true;
14281 do {
14282 dgetrf_(&matrixdim,&matrixdim,A,&matrixdim,&ipiv[0],&info);
14283 if( info == 0 ) {
14284 bsingular = false;
14285 for(int j = 0; j < matrixdim; ++j) {
14286 if( IKabs(A[j*matrixdim+j]) < 100*tol ) {
14287 bsingular = true;
14288 break;
14289 }
14290 }
14291 if( !bsingular ) {
14292 break;
14293 }
14294 }
14295 if( lfindex == 3 ) {
14296 break;
14297 }
14298
14299 lfindex++;
14300 const IkReal* lf = lfpossibilities[lfindex];
14301
14302 coeffindex = 0;
14303 for(int j = 0; j < 4; ++j) {
14304 for(int k = 0; k < 6; ++k) {
14305 IkReal a = matcoeffs[coeffindex+48], b = matcoeffs[coeffindex+24], c = matcoeffs[coeffindex];
14306 A[(j+4)+matrixdim*k] = A[j+matrixdim*(k+2)] = lf[0]*lf[0]*a+lf[0]*lf[2]*b+lf[2]*lf[2]*c;
14307 M[matrixdim+(j+4)+2*matrixdim*k] = M[matrixdim+j+2*matrixdim*(k+2)] = -(lf[1]*lf[1]*a + lf[1]*lf[3]*b + lf[3]*lf[3]*c);
14308 M[matrixdim+(j+4)+2*matrixdim*k+matrixdim*2*matrixdim] = M[matrixdim+j+2*matrixdim*(k+2)+matrixdim*2*matrixdim] = -(2*lf[0]*lf[1]*a + (lf[0]*lf[3]+lf[1]*lf[2])*b + 2*lf[2]*lf[3]*c);
14309 coeffindex++;
14310 }
14311 for(int k = 0; k < 2; ++k) {
14312 A[j+matrixdim*k] = A[(j+4)+matrixdim*(k+6)] = 0;
14313 }
14314 }
14315 } while(lfindex<4);
14316
14317 if( bsingular ) {
14318 return;
14319 }
14320 dgetrs_("No transpose", &matrixdim, &matrixdim2, A, &matrixdim, &ipiv[0], &M[matrixdim], &matrixdim2, &info);
14321 if( info != 0 ) {
14322 return;
14323 }
14324
14325
14326 for(int j = 0; j < matrixdim; ++j) {
14327 M[matrixdim*2*matrixdim+j+matrixdim*2*j] = 1;
14328 }
14329 IkReal IKFAST_ALIGNED16(wr[16]);
14330 IkReal IKFAST_ALIGNED16(wi[16]);
14331 IkReal IKFAST_ALIGNED16(vr[16*16]);
14332 int one=1;
14333 dgeev_("N", "V", &matrixdim2, M, &matrixdim2, wr, wi,NULL, &one, vr, &matrixdim2, work, &worksize, &info);
14334 if( info != 0 ) {
14335 return;
14336 }
14337 IkReal Breal[matrixdim-1];
14338 for(int i = 0; i < matrixdim2; ++i) {
14339
14340 if( IKabs(wi[i]) < 5e-5 ) {
14341 IkReal* ev = vr+matrixdim2*i;
14342 if( IKabs(wr[i]) > 1 ) {
14343 ev += matrixdim;
14344 }
14345
14346 if( IKabs(ev[0]) < tol ) {
14347 continue;
14348 }
14349 IkReal iconst = 1/ev[0];
14350 for(int j = 1; j < matrixdim; ++j) {
14351 Breal[j-1] = ev[j]*iconst;
14352 }
14353 if( checkconsistency8(Breal) ) {
14354 if( lfindex >= 0 ) {
14355 const IkReal* lf = lfpossibilities[lfindex];
14356 rawroots[numroots++] = (wr[i]*lf[0]+lf[1])/(wr[i]*lf[2]+lf[3]);
14357 }
14358 else {
14359 rawroots[numroots++] = wr[i];
14360 }
14361 bool bsmall0=IKabs(ev[0]) > IKabs(ev[2]);
14362 bool bsmall1=IKabs(ev[0]) > IKabs(ev[1]);
14363 if( bsmall0 && bsmall1 ) {
14364 rawroots[numroots++] = ev[2]/ev[0];
14365 rawroots[numroots++] = ev[1]/ev[0];
14366 }
14367 else if( bsmall0 && !bsmall1 ) {
14368 rawroots[numroots++] = ev[3]/ev[1];
14369 rawroots[numroots++] = ev[1]/ev[0];
14370 }
14371 else if( !bsmall0 && bsmall1 ) {
14372 rawroots[numroots++] = ev[6]/ev[4];
14373 rawroots[numroots++] = ev[7]/ev[6];
14374 }
14375 else if( !bsmall0 && !bsmall1 ) {
14376 rawroots[numroots++] = ev[7]/ev[5];
14377 rawroots[numroots++] = ev[7]/ev[6];
14378 }
14379 }
14380 }
14381 }
14382 }};
14383
14384
14387 IKFAST_API bool ComputeIk(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions) {
14388 IKSolver solver;
14389 return solver.ComputeIk(eetrans,eerot,pfree,solutions);
14390 }
14391
14392 IKFAST_API bool ComputeIk2(const IkReal* eetrans, const IkReal* eerot, const IkReal* pfree, IkSolutionListBase<IkReal>& solutions, void* pOpenRAVEManip) {
14393 IKSolver solver;
14394 return solver.ComputeIk(eetrans,eerot,pfree,solutions);
14395 }
14396
14397 IKFAST_API const char* GetKinematicsHash() { return "<robot:GenericRobot - komodo_arm (e83948d1b482a8c168aaa0bbfa0644c4)>"; }
14398
14399 IKFAST_API const char* GetIkFastVersion() { return "0x10000048"; }
14400
14401 #ifdef IKFAST_NAMESPACE
14402 }
14403 #endif
14404
14405 #ifndef IKFAST_NO_MAIN
14406 #include <stdio.h>
14407 #include <stdlib.h>
14408 #ifdef IKFAST_NAMESPACE
14409 using namespace IKFAST_NAMESPACE;
14410 #endif
14411 int main(int argc, char** argv)
14412 {
14413 if( argc != 12+GetNumFreeParameters()+1 ) {
14414 printf("\nUsage: ./ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n"
14415 "Returns the ik solutions given the transformation of the end effector specified by\n"
14416 "a 3x3 rotation R (rXX), and a 3x1 translation (tX).\n"
14417 "There are %d free parameters that have to be specified.\n\n",GetNumFreeParameters());
14418 return 1;
14419 }
14420
14421 IkSolutionList<IkReal> solutions;
14422 std::vector<IkReal> vfree(GetNumFreeParameters());
14423 IkReal eerot[9],eetrans[3];
14424 eerot[0] = atof(argv[1]); eerot[1] = atof(argv[2]); eerot[2] = atof(argv[3]); eetrans[0] = atof(argv[4]);
14425 eerot[3] = atof(argv[5]); eerot[4] = atof(argv[6]); eerot[5] = atof(argv[7]); eetrans[1] = atof(argv[8]);
14426 eerot[6] = atof(argv[9]); eerot[7] = atof(argv[10]); eerot[8] = atof(argv[11]); eetrans[2] = atof(argv[12]);
14427 for(std::size_t i = 0; i < vfree.size(); ++i)
14428 vfree[i] = atof(argv[13+i]);
14429 bool bSuccess = ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions);
14430
14431 if( !bSuccess ) {
14432 fprintf(stderr,"Failed to get ik solution\n");
14433 return -1;
14434 }
14435
14436 printf("Found %d ik solutions:\n", (int)solutions.GetNumSolutions());
14437 std::vector<IkReal> solvalues(GetNumJoints());
14438 for(std::size_t i = 0; i < solutions.GetNumSolutions(); ++i) {
14439 const IkSolutionBase<IkReal>& sol = solutions.GetSolution(i);
14440 printf("sol%d (free=%d): ", (int)i, (int)sol.GetFree().size());
14441 std::vector<IkReal> vsolfree(sol.GetFree().size());
14442 sol.GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL);
14443 for( std::size_t j = 0; j < solvalues.size(); ++j)
14444 printf("%.15f, ", solvalues[j]);
14445 printf("\n");
14446 }
14447 return 0;
14448 }
14449
14450 #endif