|
Blender
V2.59
|
00001 /* 00002 * $Id: mathutils_Vector.c 39300 2011-08-11 09:40:14Z moguri $ 00003 * ***** BEGIN GPL LICENSE BLOCK ***** 00004 * 00005 * This program is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU General Public License 00007 * as published by the Free Software Foundation; either version 2 00008 * of the License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software Foundation, 00017 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00018 * 00019 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. 00020 * All rights reserved. 00021 * 00022 * 00023 * Contributor(s): Willian P. Germano, Joseph Gilbert, Ken Hughes, Alex Fraser, Campbell Barton 00024 * 00025 * ***** END GPL LICENSE BLOCK ***** 00026 */ 00027 00033 #include <Python.h> 00034 00035 #include "mathutils.h" 00036 00037 #include "BLI_math.h" 00038 #include "BLI_utildefines.h" 00039 00040 extern void PyC_LineSpit(void); 00041 00042 #define MAX_DIMENSIONS 4 00043 00044 /* Swizzle axes get packed into a single value that is used as a closure. Each 00045 axis uses SWIZZLE_BITS_PER_AXIS bits. The first bit (SWIZZLE_VALID_AXIS) is 00046 used as a sentinel: if it is unset, the axis is not valid. */ 00047 #define SWIZZLE_BITS_PER_AXIS 3 00048 #define SWIZZLE_VALID_AXIS 0x4 00049 #define SWIZZLE_AXIS 0x3 00050 00051 static PyObject *Vector_copy(VectorObject *self); 00052 static PyObject *Vector_to_tuple_ext(VectorObject *self, int ndigits); 00053 00054 /* Supports 2D, 3D, and 4D vector objects both int and float values 00055 * accepted. Mixed float and int values accepted. Ints are parsed to float 00056 */ 00057 static PyObject *Vector_new(PyTypeObject *type, PyObject *args, PyObject *UNUSED(kwds)) 00058 { 00059 float vec[4]= {0.0f, 0.0f, 0.0f, 0.0f}; 00060 int size= 3; /* default to a 3D vector */ 00061 00062 switch(PyTuple_GET_SIZE(args)) { 00063 case 0: 00064 break; 00065 case 1: 00066 if((size=mathutils_array_parse(vec, 2, 4, PyTuple_GET_ITEM(args, 0), "mathutils.Vector()")) == -1) 00067 return NULL; 00068 break; 00069 default: 00070 PyErr_SetString(PyExc_TypeError, 00071 "mathutils.Vector(): " 00072 "more then a single arg given"); 00073 return NULL; 00074 } 00075 return newVectorObject(vec, size, Py_NEW, type); 00076 } 00077 00078 static PyObject *vec__apply_to_copy(PyNoArgsFunction vec_func, VectorObject *self) 00079 { 00080 PyObject *ret= Vector_copy(self); 00081 PyObject *ret_dummy= vec_func(ret); 00082 if(ret_dummy) { 00083 Py_DECREF(ret_dummy); 00084 return (PyObject *)ret; 00085 } 00086 else { /* error */ 00087 Py_DECREF(ret); 00088 return NULL; 00089 } 00090 } 00091 00092 /*-----------------------------METHODS---------------------------- */ 00093 PyDoc_STRVAR(Vector_zero_doc, 00094 ".. method:: zero()\n" 00095 "\n" 00096 " Set all values to zero.\n" 00097 ); 00098 static PyObject *Vector_zero(VectorObject *self) 00099 { 00100 fill_vn(self->vec, self->size, 0.0f); 00101 00102 if(BaseMath_WriteCallback(self) == -1) 00103 return NULL; 00104 00105 Py_RETURN_NONE; 00106 } 00107 00108 PyDoc_STRVAR(Vector_normalize_doc, 00109 ".. method:: normalize()\n" 00110 "\n" 00111 " Normalize the vector, making the length of the vector always 1.0.\n" 00112 "\n" 00113 " .. warning:: Normalizing a vector where all values are zero results\n" 00114 " in all axis having a nan value (not a number).\n" 00115 "\n" 00116 " .. note:: Normalize works for vectors of all sizes,\n" 00117 " however 4D Vectors w axis is left untouched.\n" 00118 ); 00119 static PyObject *Vector_normalize(VectorObject *self) 00120 { 00121 int i; 00122 float norm = 0.0f; 00123 00124 if(BaseMath_ReadCallback(self) == -1) 00125 return NULL; 00126 00127 for(i = 0; i < self->size; i++) { 00128 norm += self->vec[i] * self->vec[i]; 00129 } 00130 norm = (float) sqrt(norm); 00131 for(i = 0; i < self->size; i++) { 00132 self->vec[i] /= norm; 00133 } 00134 00135 (void)BaseMath_WriteCallback(self); 00136 Py_RETURN_NONE; 00137 } 00138 PyDoc_STRVAR(Vector_normalized_doc, 00139 ".. method:: normalized()\n" 00140 "\n" 00141 " Return a new, normalized vector.\n" 00142 "\n" 00143 " :return: a normalized copy of the vector\n" 00144 " :rtype: :class:`Vector`\n" 00145 ); 00146 static PyObject *Vector_normalized(VectorObject *self) 00147 { 00148 return vec__apply_to_copy((PyNoArgsFunction)Vector_normalize, self); 00149 } 00150 00151 PyDoc_STRVAR(Vector_resize_2d_doc, 00152 ".. method:: resize_2d()\n" 00153 "\n" 00154 " Resize the vector to 2D (x, y).\n" 00155 "\n" 00156 " :return: an instance of itself\n" 00157 " :rtype: :class:`Vector`\n" 00158 ); 00159 static PyObject *Vector_resize_2d(VectorObject *self) 00160 { 00161 if(self->wrapped==Py_WRAP) { 00162 PyErr_SetString(PyExc_TypeError, 00163 "vector.resize_2d(): " 00164 "cannot resize wrapped data - only python vectors"); 00165 return NULL; 00166 } 00167 if(self->cb_user) { 00168 PyErr_SetString(PyExc_TypeError, 00169 "vector.resize_2d(): " 00170 "cannot resize a vector that has an owner"); 00171 return NULL; 00172 } 00173 00174 self->vec = PyMem_Realloc(self->vec, (sizeof(float) * 2)); 00175 if(self->vec == NULL) { 00176 PyErr_SetString(PyExc_MemoryError, 00177 "vector.resize_2d(): " 00178 "problem allocating pointer space"); 00179 return NULL; 00180 } 00181 00182 self->size = 2; 00183 Py_RETURN_NONE; 00184 } 00185 00186 PyDoc_STRVAR(Vector_resize_3d_doc, 00187 ".. method:: resize_3d()\n" 00188 "\n" 00189 " Resize the vector to 3D (x, y, z).\n" 00190 "\n" 00191 " :return: an instance of itself\n" 00192 " :rtype: :class:`Vector`\n" 00193 ); 00194 static PyObject *Vector_resize_3d(VectorObject *self) 00195 { 00196 if (self->wrapped==Py_WRAP) { 00197 PyErr_SetString(PyExc_TypeError, 00198 "vector.resize_3d(): " 00199 "cannot resize wrapped data - only python vectors"); 00200 return NULL; 00201 } 00202 if(self->cb_user) { 00203 PyErr_SetString(PyExc_TypeError, 00204 "vector.resize_3d(): " 00205 "cannot resize a vector that has an owner"); 00206 return NULL; 00207 } 00208 00209 self->vec = PyMem_Realloc(self->vec, (sizeof(float) * 3)); 00210 if(self->vec == NULL) { 00211 PyErr_SetString(PyExc_MemoryError, 00212 "vector.resize_3d(): " 00213 "problem allocating pointer space"); 00214 return NULL; 00215 } 00216 00217 if(self->size == 2) 00218 self->vec[2] = 0.0f; 00219 00220 self->size = 3; 00221 Py_RETURN_NONE; 00222 } 00223 00224 PyDoc_STRVAR(Vector_resize_4d_doc, 00225 ".. method:: resize_4d()\n" 00226 "\n" 00227 " Resize the vector to 4D (x, y, z, w).\n" 00228 "\n" 00229 " :return: an instance of itself\n" 00230 " :rtype: :class:`Vector`\n" 00231 ); 00232 static PyObject *Vector_resize_4d(VectorObject *self) 00233 { 00234 if(self->wrapped==Py_WRAP) { 00235 PyErr_SetString(PyExc_TypeError, 00236 "vector.resize_4d(): " 00237 "cannot resize wrapped data - only python vectors"); 00238 return NULL; 00239 } 00240 if(self->cb_user) { 00241 PyErr_SetString(PyExc_TypeError, 00242 "vector.resize_4d(): " 00243 "cannot resize a vector that has an owner"); 00244 return NULL; 00245 } 00246 00247 self->vec = PyMem_Realloc(self->vec, (sizeof(float) * 4)); 00248 if(self->vec == NULL) { 00249 PyErr_SetString(PyExc_MemoryError, 00250 "vector.resize_4d(): " 00251 "problem allocating pointer space"); 00252 return NULL; 00253 } 00254 00255 if(self->size == 2){ 00256 self->vec[2] = 0.0f; 00257 self->vec[3] = 1.0f; 00258 } 00259 else if(self->size == 3){ 00260 self->vec[3] = 1.0f; 00261 } 00262 self->size = 4; 00263 Py_RETURN_NONE; 00264 } 00265 PyDoc_STRVAR(Vector_to_2d_doc, 00266 ".. method:: to_2d()\n" 00267 "\n" 00268 " Return a 2d copy of the vector.\n" 00269 "\n" 00270 " :return: a new vector\n" 00271 " :rtype: :class:`Vector`\n" 00272 ); 00273 static PyObject *Vector_to_2d(VectorObject *self) 00274 { 00275 if(BaseMath_ReadCallback(self) == -1) 00276 return NULL; 00277 00278 return newVectorObject(self->vec, 2, Py_NEW, Py_TYPE(self)); 00279 } 00280 PyDoc_STRVAR(Vector_to_3d_doc, 00281 ".. method:: to_3d()\n" 00282 "\n" 00283 " Return a 3d copy of the vector.\n" 00284 "\n" 00285 " :return: a new vector\n" 00286 " :rtype: :class:`Vector`\n" 00287 ); 00288 static PyObject *Vector_to_3d(VectorObject *self) 00289 { 00290 float tvec[3]= {0.0f}; 00291 00292 if(BaseMath_ReadCallback(self) == -1) 00293 return NULL; 00294 00295 memcpy(tvec, self->vec, sizeof(float) * MIN2(self->size, 3)); 00296 return newVectorObject(tvec, 3, Py_NEW, Py_TYPE(self)); 00297 } 00298 PyDoc_STRVAR(Vector_to_4d_doc, 00299 ".. method:: to_4d()\n" 00300 "\n" 00301 " Return a 4d copy of the vector.\n" 00302 "\n" 00303 " :return: a new vector\n" 00304 " :rtype: :class:`Vector`\n" 00305 ); 00306 static PyObject *Vector_to_4d(VectorObject *self) 00307 { 00308 float tvec[4]= {0.0f, 0.0f, 0.0f, 1.0f}; 00309 00310 if(BaseMath_ReadCallback(self) == -1) 00311 return NULL; 00312 00313 memcpy(tvec, self->vec, sizeof(float) * MIN2(self->size, 4)); 00314 return newVectorObject(tvec, 4, Py_NEW, Py_TYPE(self)); 00315 } 00316 00317 PyDoc_STRVAR(Vector_to_tuple_doc, 00318 ".. method:: to_tuple(precision=-1)\n" 00319 "\n" 00320 " Return this vector as a tuple with.\n" 00321 "\n" 00322 " :arg precision: The number to round the value to in [-1, 21].\n" 00323 " :type precision: int\n" 00324 " :return: the values of the vector rounded by *precision*\n" 00325 " :rtype: tuple\n" 00326 ); 00327 /* note: BaseMath_ReadCallback must be called beforehand */ 00328 static PyObject *Vector_to_tuple_ext(VectorObject *self, int ndigits) 00329 { 00330 PyObject *ret; 00331 int i; 00332 00333 ret= PyTuple_New(self->size); 00334 00335 if(ndigits >= 0) { 00336 for(i = 0; i < self->size; i++) { 00337 PyTuple_SET_ITEM(ret, i, PyFloat_FromDouble(double_round((double)self->vec[i], ndigits))); 00338 } 00339 } 00340 else { 00341 for(i = 0; i < self->size; i++) { 00342 PyTuple_SET_ITEM(ret, i, PyFloat_FromDouble(self->vec[i])); 00343 } 00344 } 00345 00346 return ret; 00347 } 00348 00349 static PyObject *Vector_to_tuple(VectorObject *self, PyObject *args) 00350 { 00351 int ndigits= 0; 00352 00353 if(!PyArg_ParseTuple(args, "|i:to_tuple", &ndigits)) 00354 return NULL; 00355 00356 if(ndigits > 22 || ndigits < 0) { 00357 PyErr_SetString(PyExc_ValueError, 00358 "vector.to_tuple(ndigits): " 00359 "ndigits must be between 0 and 21"); 00360 return NULL; 00361 } 00362 00363 if(PyTuple_GET_SIZE(args)==0) 00364 ndigits= -1; 00365 00366 if(BaseMath_ReadCallback(self) == -1) 00367 return NULL; 00368 00369 return Vector_to_tuple_ext(self, ndigits); 00370 } 00371 00372 PyDoc_STRVAR(Vector_to_track_quat_doc, 00373 ".. method:: to_track_quat(track, up)\n" 00374 "\n" 00375 " Return a quaternion rotation from the vector and the track and up axis.\n" 00376 "\n" 00377 " :arg track: Track axis in ['X', 'Y', 'Z', '-X', '-Y', '-Z'].\n" 00378 " :type track: string\n" 00379 " :arg up: Up axis in ['X', 'Y', 'Z'].\n" 00380 " :type up: string\n" 00381 " :return: rotation from the vector and the track and up axis.\n" 00382 " :rtype: :class:`Quaternion`\n" 00383 ); 00384 static PyObject *Vector_to_track_quat(VectorObject *self, PyObject *args) 00385 { 00386 float vec[3], quat[4]; 00387 const char *strack, *sup; 00388 short track = 2, up = 1; 00389 00390 if(!PyArg_ParseTuple(args, "|ss:to_track_quat", &strack, &sup)) 00391 return NULL; 00392 00393 if (self->size != 3) { 00394 PyErr_SetString(PyExc_TypeError, 00395 "vector.to_track_quat(): " 00396 "only for 3D vectors"); 00397 return NULL; 00398 } 00399 00400 if(BaseMath_ReadCallback(self) == -1) 00401 return NULL; 00402 00403 if (strack) { 00404 const char *axis_err_msg= "only X, -X, Y, -Y, Z or -Z for track axis"; 00405 00406 if (strlen(strack) == 2) { 00407 if (strack[0] == '-') { 00408 switch(strack[1]) { 00409 case 'X': 00410 track = 3; 00411 break; 00412 case 'Y': 00413 track = 4; 00414 break; 00415 case 'Z': 00416 track = 5; 00417 break; 00418 default: 00419 PyErr_SetString(PyExc_ValueError, axis_err_msg); 00420 return NULL; 00421 } 00422 } 00423 else { 00424 PyErr_SetString(PyExc_ValueError, axis_err_msg); 00425 return NULL; 00426 } 00427 } 00428 else if (strlen(strack) == 1) { 00429 switch(strack[0]) { 00430 case '-': 00431 case 'X': 00432 track = 0; 00433 break; 00434 case 'Y': 00435 track = 1; 00436 break; 00437 case 'Z': 00438 track = 2; 00439 break; 00440 default: 00441 PyErr_SetString(PyExc_ValueError, axis_err_msg); 00442 return NULL; 00443 } 00444 } 00445 else { 00446 PyErr_SetString(PyExc_ValueError, axis_err_msg); 00447 return NULL; 00448 } 00449 } 00450 00451 if (sup) { 00452 const char *axis_err_msg= "only X, Y or Z for up axis"; 00453 if (strlen(sup) == 1) { 00454 switch(*sup) { 00455 case 'X': 00456 up = 0; 00457 break; 00458 case 'Y': 00459 up = 1; 00460 break; 00461 case 'Z': 00462 up = 2; 00463 break; 00464 default: 00465 PyErr_SetString(PyExc_ValueError, axis_err_msg); 00466 return NULL; 00467 } 00468 } 00469 else { 00470 PyErr_SetString(PyExc_ValueError, axis_err_msg); 00471 return NULL; 00472 } 00473 } 00474 00475 if (track == up) { 00476 PyErr_SetString(PyExc_ValueError, 00477 "Can't have the same axis for track and up"); 00478 return NULL; 00479 } 00480 00481 /* 00482 flip vector around, since vectoquat expect a vector from target to tracking object 00483 and the python function expects the inverse (a vector to the target). 00484 */ 00485 negate_v3_v3(vec, self->vec); 00486 00487 vec_to_quat(quat, vec, track, up); 00488 00489 return newQuaternionObject(quat, Py_NEW, NULL); 00490 } 00491 00492 /* 00493 * Vector.reflect(mirror): return a reflected vector on the mirror normal 00494 * vec - ((2 * DotVecs(vec, mirror)) * mirror) 00495 */ 00496 PyDoc_STRVAR(Vector_reflect_doc, 00497 ".. method:: reflect(mirror)\n" 00498 "\n" 00499 " Return the reflection vector from the *mirror* argument.\n" 00500 "\n" 00501 " :arg mirror: This vector could be a normal from the reflecting surface.\n" 00502 " :type mirror: :class:`Vector`\n" 00503 " :return: The reflected vector matching the size of this vector.\n" 00504 " :rtype: :class:`Vector`\n" 00505 ); 00506 static PyObject *Vector_reflect(VectorObject *self, PyObject *value) 00507 { 00508 int value_size; 00509 float mirror[3], vec[3]; 00510 float reflect[3] = {0.0f}; 00511 float tvec[MAX_DIMENSIONS]; 00512 00513 if(BaseMath_ReadCallback(self) == -1) 00514 return NULL; 00515 00516 if((value_size= mathutils_array_parse(tvec, 2, 4, value, "vector.reflect(other), invalid 'other' arg")) == -1) 00517 return NULL; 00518 00519 mirror[0] = tvec[0]; 00520 mirror[1] = tvec[1]; 00521 if (value_size > 2) mirror[2] = tvec[2]; 00522 else mirror[2] = 0.0; 00523 00524 vec[0] = self->vec[0]; 00525 vec[1] = self->vec[1]; 00526 if (self->size > 2) vec[2] = self->vec[2]; 00527 else vec[2] = 0.0; 00528 00529 normalize_v3(mirror); 00530 reflect_v3_v3v3(reflect, vec, mirror); 00531 00532 return newVectorObject(reflect, self->size, Py_NEW, Py_TYPE(self)); 00533 } 00534 00535 PyDoc_STRVAR(Vector_cross_doc, 00536 ".. method:: cross(other)\n" 00537 "\n" 00538 " Return the cross product of this vector and another.\n" 00539 "\n" 00540 " :arg other: The other vector to perform the cross product with.\n" 00541 " :type other: :class:`Vector`\n" 00542 " :return: The cross product.\n" 00543 " :rtype: :class:`Vector`\n" 00544 "\n" 00545 " .. note:: both vectors must be 3D\n" 00546 ); 00547 static PyObject *Vector_cross(VectorObject *self, PyObject *value) 00548 { 00549 VectorObject *ret; 00550 float tvec[MAX_DIMENSIONS]; 00551 00552 if(BaseMath_ReadCallback(self) == -1) 00553 return NULL; 00554 00555 if(mathutils_array_parse(tvec, self->size, self->size, value, "vector.cross(other), invalid 'other' arg") == -1) 00556 return NULL; 00557 00558 ret= (VectorObject *)newVectorObject(NULL, 3, Py_NEW, Py_TYPE(self)); 00559 cross_v3_v3v3(ret->vec, self->vec, tvec); 00560 return (PyObject *)ret; 00561 } 00562 00563 PyDoc_STRVAR(Vector_dot_doc, 00564 ".. method:: dot(other)\n" 00565 "\n" 00566 " Return the dot product of this vector and another.\n" 00567 "\n" 00568 " :arg other: The other vector to perform the dot product with.\n" 00569 " :type other: :class:`Vector`\n" 00570 " :return: The dot product.\n" 00571 " :rtype: :class:`Vector`\n" 00572 ); 00573 static PyObject *Vector_dot(VectorObject *self, PyObject *value) 00574 { 00575 float tvec[MAX_DIMENSIONS]; 00576 double dot = 0.0; 00577 int x; 00578 00579 if(BaseMath_ReadCallback(self) == -1) 00580 return NULL; 00581 00582 if(mathutils_array_parse(tvec, self->size, self->size, value, "vector.dot(other), invalid 'other' arg") == -1) 00583 return NULL; 00584 00585 for(x = 0; x < self->size; x++) { 00586 dot += (double)(self->vec[x] * tvec[x]); 00587 } 00588 00589 return PyFloat_FromDouble(dot); 00590 } 00591 00592 PyDoc_STRVAR(Vector_angle_doc, 00593 ".. function:: angle(other, fallback)\n" 00594 "\n" 00595 " Return the angle between two vectors.\n" 00596 "\n" 00597 " :arg other: another vector to compare the angle with\n" 00598 " :type other: :class:`Vector`\n" 00599 " :arg fallback: return this value when the angle cant be calculated\n" 00600 " (zero length vector)\n" 00601 " :type fallback: any\n" 00602 " :return: angle in radians or fallback when given\n" 00603 " :rtype: float\n" 00604 "\n" 00605 " .. note:: Zero length vectors raise an :exc:`AttributeError`.\n" 00606 ); 00607 static PyObject *Vector_angle(VectorObject *self, PyObject *args) 00608 { 00609 const int size= self->size; 00610 float tvec[MAX_DIMENSIONS]; 00611 PyObject *value; 00612 double dot = 0.0f, test_v1 = 0.0f, test_v2 = 0.0f; 00613 int x; 00614 PyObject *fallback= NULL; 00615 00616 if(!PyArg_ParseTuple(args, "O|O:angle", &value, &fallback)) 00617 return NULL; 00618 00619 if(BaseMath_ReadCallback(self) == -1) 00620 return NULL; 00621 00622 if(mathutils_array_parse(tvec, size, size, value, "vector.angle(other), invalid 'other' arg") == -1) 00623 return NULL; 00624 00625 for(x = 0; x < size; x++) { 00626 test_v1 += (double)(self->vec[x] * self->vec[x]); 00627 test_v2 += (double)(tvec[x] * tvec[x]); 00628 } 00629 if (!test_v1 || !test_v2){ 00630 /* avoid exception */ 00631 if(fallback) { 00632 Py_INCREF(fallback); 00633 return fallback; 00634 } 00635 else { 00636 PyErr_SetString(PyExc_ValueError, 00637 "vector.angle(other): " 00638 "zero length vectors have no valid angle"); 00639 return NULL; 00640 } 00641 } 00642 00643 //dot product 00644 for(x = 0; x < self->size; x++) { 00645 dot += (double)(self->vec[x] * tvec[x]); 00646 } 00647 dot /= (sqrt(test_v1) * sqrt(test_v2)); 00648 00649 return PyFloat_FromDouble(saacos(dot)); 00650 } 00651 00652 PyDoc_STRVAR(Vector_rotation_difference_doc, 00653 ".. function:: difference(other)\n" 00654 "\n" 00655 " Returns a quaternion representing the rotational difference between this\n" 00656 " vector and another.\n" 00657 "\n" 00658 " :arg other: second vector.\n" 00659 " :type other: :class:`Vector`\n" 00660 " :return: the rotational difference between the two vectors.\n" 00661 " :rtype: :class:`Quaternion`\n" 00662 "\n" 00663 " .. note:: 2D vectors raise an :exc:`AttributeError`.\n" 00664 ); 00665 static PyObject *Vector_rotation_difference(VectorObject *self, PyObject *value) 00666 { 00667 float quat[4], vec_a[3], vec_b[3]; 00668 00669 if(self->size < 3) { 00670 PyErr_SetString(PyExc_ValueError, 00671 "vec.difference(value): " 00672 "expects both vectors to be size 3 or 4"); 00673 return NULL; 00674 } 00675 00676 if(BaseMath_ReadCallback(self) == -1) 00677 return NULL; 00678 00679 if(mathutils_array_parse(vec_b, 3, MAX_DIMENSIONS, value, "vector.difference(other), invalid 'other' arg") == -1) 00680 return NULL; 00681 00682 normalize_v3_v3(vec_a, self->vec); 00683 normalize_v3(vec_b); 00684 00685 rotation_between_vecs_to_quat(quat, vec_a, vec_b); 00686 00687 return newQuaternionObject(quat, Py_NEW, NULL); 00688 } 00689 00690 PyDoc_STRVAR(Vector_project_doc, 00691 ".. function:: project(other)\n" 00692 "\n" 00693 " Return the projection of this vector onto the *other*.\n" 00694 "\n" 00695 " :arg other: second vector.\n" 00696 " :type other: :class:`Vector`\n" 00697 " :return: the parallel projection vector\n" 00698 " :rtype: :class:`Vector`\n" 00699 ); 00700 static PyObject *Vector_project(VectorObject *self, PyObject *value) 00701 { 00702 const int size= self->size; 00703 float tvec[MAX_DIMENSIONS]; 00704 float vec[MAX_DIMENSIONS]; 00705 double dot = 0.0f, dot2 = 0.0f; 00706 int x; 00707 00708 if(BaseMath_ReadCallback(self) == -1) 00709 return NULL; 00710 00711 if(mathutils_array_parse(tvec, size, size, value, "vector.project(other), invalid 'other' arg") == -1) 00712 return NULL; 00713 00714 if(BaseMath_ReadCallback(self) == -1) 00715 return NULL; 00716 00717 //get dot products 00718 for(x = 0; x < size; x++) { 00719 dot += (double)(self->vec[x] * tvec[x]); 00720 dot2 += (double)(tvec[x] * tvec[x]); 00721 } 00722 //projection 00723 dot /= dot2; 00724 for(x = 0; x < size; x++) { 00725 vec[x] = (float)dot * tvec[x]; 00726 } 00727 return newVectorObject(vec, size, Py_NEW, Py_TYPE(self)); 00728 } 00729 00730 PyDoc_STRVAR(Vector_lerp_doc, 00731 ".. function:: lerp(other, factor)\n" 00732 "\n" 00733 " Returns the interpolation of two vectors.\n" 00734 "\n" 00735 " :arg other: value to interpolate with.\n" 00736 " :type other: :class:`Vector`\n" 00737 " :arg factor: The interpolation value in [0.0, 1.0].\n" 00738 " :type factor: float\n" 00739 " :return: The interpolated rotation.\n" 00740 " :rtype: :class:`Vector`\n" 00741 ); 00742 static PyObject *Vector_lerp(VectorObject *self, PyObject *args) 00743 { 00744 const int size= self->size; 00745 PyObject *value= NULL; 00746 float fac, ifac; 00747 float tvec[MAX_DIMENSIONS], vec[MAX_DIMENSIONS]; 00748 int x; 00749 00750 if(!PyArg_ParseTuple(args, "Of:lerp", &value, &fac)) 00751 return NULL; 00752 00753 if(mathutils_array_parse(tvec, size, size, value, "vector.lerp(other), invalid 'other' arg") == -1) 00754 return NULL; 00755 00756 if(BaseMath_ReadCallback(self) == -1) 00757 return NULL; 00758 00759 ifac= 1.0f - fac; 00760 00761 for(x = 0; x < size; x++) { 00762 vec[x] = (ifac * self->vec[x]) + (fac * tvec[x]); 00763 } 00764 return newVectorObject(vec, size, Py_NEW, Py_TYPE(self)); 00765 } 00766 00767 PyDoc_STRVAR(Vector_rotate_doc, 00768 ".. function:: rotate(other)\n" 00769 "\n" 00770 " Return vector by a rotation value.\n" 00771 "\n" 00772 " :arg other: rotation component of mathutils value\n" 00773 " :type other: :class:`Euler`, :class:`Quaternion` or :class:`Matrix`\n" 00774 ); 00775 static PyObject *Vector_rotate(VectorObject *self, PyObject *value) 00776 { 00777 float other_rmat[3][3]; 00778 00779 if(BaseMath_ReadCallback(self) == -1) 00780 return NULL; 00781 00782 if(mathutils_any_to_rotmat(other_rmat, value, "vector.rotate(value)") == -1) 00783 return NULL; 00784 00785 if(self->size < 3) { 00786 PyErr_SetString(PyExc_ValueError, 00787 "Vector must be 3D or 4D"); 00788 return NULL; 00789 } 00790 00791 mul_m3_v3(other_rmat, self->vec); 00792 00793 (void)BaseMath_WriteCallback(self); 00794 Py_RETURN_NONE; 00795 } 00796 00797 PyDoc_STRVAR(Vector_copy_doc, 00798 ".. function:: copy()\n" 00799 "\n" 00800 " Returns a copy of this vector.\n" 00801 "\n" 00802 " :return: A copy of the vector.\n" 00803 " :rtype: :class:`Vector`\n" 00804 "\n" 00805 " .. note:: use this to get a copy of a wrapped vector with\n" 00806 " no reference to the original data.\n" 00807 ); 00808 static PyObject *Vector_copy(VectorObject *self) 00809 { 00810 if(BaseMath_ReadCallback(self) == -1) 00811 return NULL; 00812 00813 return newVectorObject(self->vec, self->size, Py_NEW, Py_TYPE(self)); 00814 } 00815 00816 static PyObject *Vector_repr(VectorObject *self) 00817 { 00818 PyObject *ret, *tuple; 00819 00820 if(BaseMath_ReadCallback(self) == -1) 00821 return NULL; 00822 00823 tuple= Vector_to_tuple_ext(self, -1); 00824 ret= PyUnicode_FromFormat("Vector(%R)", tuple); 00825 Py_DECREF(tuple); 00826 return ret; 00827 } 00828 00829 /* Sequence Protocol */ 00830 /* sequence length len(vector) */ 00831 static int Vector_len(VectorObject *self) 00832 { 00833 return self->size; 00834 } 00835 /* sequence accessor (get): vector[index] */ 00836 static PyObject *vector_item_internal(VectorObject *self, int i, const int is_attr) 00837 { 00838 if(i<0) i= self->size-i; 00839 00840 if(i < 0 || i >= self->size) { 00841 if(is_attr) { 00842 PyErr_Format(PyExc_AttributeError, 00843 "vector.%c: unavailable on %dd vector", 00844 *(((char *)"xyzw") + i), self->size); 00845 } 00846 else { 00847 PyErr_SetString(PyExc_IndexError, 00848 "vector[index]: out of range"); 00849 } 00850 return NULL; 00851 } 00852 00853 if(BaseMath_ReadIndexCallback(self, i) == -1) 00854 return NULL; 00855 00856 return PyFloat_FromDouble(self->vec[i]); 00857 } 00858 00859 static PyObject *Vector_item(VectorObject *self, int i) 00860 { 00861 return vector_item_internal(self, i, FALSE); 00862 } 00863 /* sequence accessor (set): vector[index] = value */ 00864 static int vector_ass_item_internal(VectorObject *self, int i, PyObject *value, const int is_attr) 00865 { 00866 float scalar; 00867 if((scalar=PyFloat_AsDouble(value))==-1.0f && PyErr_Occurred()) { /* parsed item not a number */ 00868 PyErr_SetString(PyExc_TypeError, 00869 "vector[index] = x: " 00870 "index argument not a number"); 00871 return -1; 00872 } 00873 00874 if(i<0) i= self->size-i; 00875 00876 if(i < 0 || i >= self->size){ 00877 if(is_attr) { 00878 PyErr_Format(PyExc_AttributeError, 00879 "vector.%c = x: unavailable on %dd vector", 00880 *(((char *)"xyzw") + i), self->size); 00881 } 00882 else { 00883 PyErr_SetString(PyExc_IndexError, 00884 "vector[index] = x: " 00885 "assignment index out of range"); 00886 } 00887 return -1; 00888 } 00889 self->vec[i] = scalar; 00890 00891 if(BaseMath_WriteIndexCallback(self, i) == -1) 00892 return -1; 00893 return 0; 00894 } 00895 00896 static int Vector_ass_item(VectorObject *self, int i, PyObject *value) 00897 { 00898 return vector_ass_item_internal(self, i, value, FALSE); 00899 } 00900 00901 /* sequence slice (get): vector[a:b] */ 00902 static PyObject *Vector_slice(VectorObject *self, int begin, int end) 00903 { 00904 PyObject *tuple; 00905 int count; 00906 00907 if(BaseMath_ReadCallback(self) == -1) 00908 return NULL; 00909 00910 CLAMP(begin, 0, self->size); 00911 if (end<0) end= self->size+end+1; 00912 CLAMP(end, 0, self->size); 00913 begin= MIN2(begin, end); 00914 00915 tuple= PyTuple_New(end - begin); 00916 for(count = begin; count < end; count++) { 00917 PyTuple_SET_ITEM(tuple, count - begin, PyFloat_FromDouble(self->vec[count])); 00918 } 00919 00920 return tuple; 00921 } 00922 /* sequence slice (set): vector[a:b] = value */ 00923 static int Vector_ass_slice(VectorObject *self, int begin, int end, PyObject *seq) 00924 { 00925 int y, size = 0; 00926 float vec[MAX_DIMENSIONS]; 00927 00928 if(BaseMath_ReadCallback(self) == -1) 00929 return -1; 00930 00931 CLAMP(begin, 0, self->size); 00932 CLAMP(end, 0, self->size); 00933 begin = MIN2(begin, end); 00934 00935 size = (end - begin); 00936 if(mathutils_array_parse(vec, size, size, seq, "vector[begin:end] = [...]") == -1) 00937 return -1; 00938 00939 /*parsed well - now set in vector*/ 00940 for(y = 0; y < size; y++){ 00941 self->vec[begin + y] = vec[y]; 00942 } 00943 00944 if(BaseMath_WriteCallback(self) == -1) 00945 return -1; 00946 00947 return 0; 00948 } 00949 00950 /* Numeric Protocols */ 00951 /* addition: obj + obj */ 00952 static PyObject *Vector_add(PyObject *v1, PyObject *v2) 00953 { 00954 VectorObject *vec1 = NULL, *vec2 = NULL; 00955 float vec[MAX_DIMENSIONS]; 00956 00957 if (!VectorObject_Check(v1) || !VectorObject_Check(v2)) { 00958 PyErr_SetString(PyExc_AttributeError, 00959 "Vector addition: " 00960 "arguments not valid for this operation"); 00961 return NULL; 00962 } 00963 vec1 = (VectorObject*)v1; 00964 vec2 = (VectorObject*)v2; 00965 00966 if(BaseMath_ReadCallback(vec1) == -1 || BaseMath_ReadCallback(vec2) == -1) 00967 return NULL; 00968 00969 /*VECTOR + VECTOR*/ 00970 if(vec1->size != vec2->size) { 00971 PyErr_SetString(PyExc_AttributeError, 00972 "Vector addition: " 00973 "vectors must have the same dimensions for this operation"); 00974 return NULL; 00975 } 00976 00977 add_vn_vnvn(vec, vec1->vec, vec2->vec, vec1->size); 00978 00979 return newVectorObject(vec, vec1->size, Py_NEW, Py_TYPE(v1)); 00980 } 00981 00982 /* addition in-place: obj += obj */ 00983 static PyObject *Vector_iadd(PyObject *v1, PyObject *v2) 00984 { 00985 VectorObject *vec1 = NULL, *vec2 = NULL; 00986 00987 if (!VectorObject_Check(v1) || !VectorObject_Check(v2)) { 00988 PyErr_SetString(PyExc_AttributeError, 00989 "Vector addition: " 00990 "arguments not valid for this operation"); 00991 return NULL; 00992 } 00993 vec1 = (VectorObject*)v1; 00994 vec2 = (VectorObject*)v2; 00995 00996 if(vec1->size != vec2->size) { 00997 PyErr_SetString(PyExc_AttributeError, 00998 "Vector addition: " 00999 "vectors must have the same dimensions for this operation"); 01000 return NULL; 01001 } 01002 01003 if(BaseMath_ReadCallback(vec1) == -1 || BaseMath_ReadCallback(vec2) == -1) 01004 return NULL; 01005 01006 add_vn_vn(vec1->vec, vec2->vec, vec1->size); 01007 01008 (void)BaseMath_WriteCallback(vec1); 01009 Py_INCREF(v1); 01010 return v1; 01011 } 01012 01013 /* subtraction: obj - obj */ 01014 static PyObject *Vector_sub(PyObject *v1, PyObject *v2) 01015 { 01016 VectorObject *vec1 = NULL, *vec2 = NULL; 01017 float vec[MAX_DIMENSIONS]; 01018 01019 if (!VectorObject_Check(v1) || !VectorObject_Check(v2)) { 01020 PyErr_SetString(PyExc_AttributeError, 01021 "Vector subtraction: " 01022 "arguments not valid for this operation"); 01023 return NULL; 01024 } 01025 vec1 = (VectorObject*)v1; 01026 vec2 = (VectorObject*)v2; 01027 01028 if(BaseMath_ReadCallback(vec1) == -1 || BaseMath_ReadCallback(vec2) == -1) 01029 return NULL; 01030 01031 if(vec1->size != vec2->size) { 01032 PyErr_SetString(PyExc_AttributeError, 01033 "Vector subtraction: " 01034 "vectors must have the same dimensions for this operation"); 01035 return NULL; 01036 } 01037 01038 sub_vn_vnvn(vec, vec1->vec, vec2->vec, vec1->size); 01039 01040 return newVectorObject(vec, vec1->size, Py_NEW, Py_TYPE(v1)); 01041 } 01042 01043 /* subtraction in-place: obj -= obj */ 01044 static PyObject *Vector_isub(PyObject *v1, PyObject *v2) 01045 { 01046 VectorObject *vec1= NULL, *vec2= NULL; 01047 01048 if (!VectorObject_Check(v1) || !VectorObject_Check(v2)) { 01049 PyErr_SetString(PyExc_AttributeError, 01050 "Vector subtraction: " 01051 "arguments not valid for this operation"); 01052 return NULL; 01053 } 01054 vec1 = (VectorObject*)v1; 01055 vec2 = (VectorObject*)v2; 01056 01057 if(vec1->size != vec2->size) { 01058 PyErr_SetString(PyExc_AttributeError, 01059 "Vector subtraction: " 01060 "vectors must have the same dimensions for this operation"); 01061 return NULL; 01062 } 01063 01064 if(BaseMath_ReadCallback(vec1) == -1 || BaseMath_ReadCallback(vec2) == -1) 01065 return NULL; 01066 01067 sub_vn_vn(vec1->vec, vec2->vec, vec1->size); 01068 01069 (void)BaseMath_WriteCallback(vec1); 01070 Py_INCREF(v1); 01071 return v1; 01072 } 01073 01074 /*------------------------obj * obj------------------------------ 01075 mulplication*/ 01076 01077 01078 /* COLUMN VECTOR Multiplication (Vector X Matrix) 01079 * [a] * [1][4][7] 01080 * [b] * [2][5][8] 01081 * [c] * [3][6][9] 01082 * 01083 * note: vector/matrix multiplication IS NOT COMMUTATIVE!!!! 01084 * note: assume read callbacks have been done first. 01085 */ 01086 int column_vector_multiplication(float rvec[MAX_DIMENSIONS], VectorObject* vec, MatrixObject * mat) 01087 { 01088 float vec_cpy[MAX_DIMENSIONS]; 01089 double dot = 0.0f; 01090 int x, y, z = 0; 01091 01092 if(mat->row_size != vec->size){ 01093 if(mat->row_size == 4 && vec->size == 3) { 01094 vec_cpy[3] = 1.0f; 01095 } 01096 else { 01097 PyErr_SetString(PyExc_TypeError, 01098 "matrix * vector: " 01099 "matrix.row_size and len(vector) must be the same, " 01100 "except for 3D vector * 4x4 matrix."); 01101 return -1; 01102 } 01103 } 01104 01105 memcpy(vec_cpy, vec->vec, vec->size * sizeof(float)); 01106 01107 rvec[3] = 1.0f; 01108 01109 for(x = 0; x < mat->col_size; x++) { 01110 for(y = 0; y < mat->row_size; y++) { 01111 dot += (double)(mat->matrix[y][x] * vec_cpy[y]); 01112 } 01113 rvec[z++] = (float)dot; 01114 dot = 0.0f; 01115 } 01116 01117 return 0; 01118 } 01119 01120 static PyObject *vector_mul_float(VectorObject *vec, const float scalar) 01121 { 01122 float tvec[MAX_DIMENSIONS]; 01123 mul_vn_vn_fl(tvec, vec->vec, vec->size, scalar); 01124 return newVectorObject(tvec, vec->size, Py_NEW, Py_TYPE(vec)); 01125 } 01126 01127 static PyObject *Vector_mul(PyObject *v1, PyObject *v2) 01128 { 01129 VectorObject *vec1 = NULL, *vec2 = NULL; 01130 float scalar; 01131 01132 if VectorObject_Check(v1) { 01133 vec1= (VectorObject *)v1; 01134 if(BaseMath_ReadCallback(vec1) == -1) 01135 return NULL; 01136 } 01137 if VectorObject_Check(v2) { 01138 vec2= (VectorObject *)v2; 01139 if(BaseMath_ReadCallback(vec2) == -1) 01140 return NULL; 01141 } 01142 01143 01144 /* make sure v1 is always the vector */ 01145 if (vec1 && vec2) { 01146 int i; 01147 double dot = 0.0f; 01148 01149 if(vec1->size != vec2->size) { 01150 PyErr_SetString(PyExc_ValueError, 01151 "Vector multiplication: " 01152 "vectors must have the same dimensions for this operation"); 01153 return NULL; 01154 } 01155 01156 /*dot product*/ 01157 for(i = 0; i < vec1->size; i++) { 01158 dot += (double)(vec1->vec[i] * vec2->vec[i]); 01159 } 01160 return PyFloat_FromDouble(dot); 01161 } 01162 else if (vec1) { 01163 if (MatrixObject_Check(v2)) { 01164 extern void PyC_LineSpit(void); 01165 01166 /* VEC * MATRIX */ 01167 /* this is deprecated!, use the reverse instead */ 01168 float tvec[MAX_DIMENSIONS]; 01169 01170 01171 /* ------ to be removed ------*/ 01172 #ifndef MATH_STANDALONE 01173 #ifdef WITH_ASSERT_ABORT 01174 PyErr_SetString(PyExc_ValueError, 01175 "(Vector * Matrix) is now removed, reverse the " 01176 "order (promoted to an Error for Debug builds)"); 01177 return NULL; 01178 #else 01179 printf("Warning: (Vector * Matrix) is now deprecated, " 01180 "reverse the multiplication order in the script.\n"); 01181 PyC_LineSpit(); 01182 #endif 01183 #endif /* ifndef MATH_STANDALONE */ 01184 /* ------ to be removed ------*/ 01185 01186 01187 if(BaseMath_ReadCallback((MatrixObject *)v2) == -1) 01188 return NULL; 01189 if(column_vector_multiplication(tvec, vec1, (MatrixObject*)v2) == -1) { 01190 return NULL; 01191 } 01192 01193 return newVectorObject(tvec, vec1->size, Py_NEW, Py_TYPE(vec1)); 01194 } 01195 else if (QuaternionObject_Check(v2)) { 01196 /* VEC * QUAT */ 01197 QuaternionObject *quat2 = (QuaternionObject*)v2; 01198 float tvec[3]; 01199 01200 if(vec1->size != 3) { 01201 PyErr_SetString(PyExc_ValueError, 01202 "Vector multiplication: " 01203 "only 3D vector rotations (with quats) currently supported"); 01204 return NULL; 01205 } 01206 if(BaseMath_ReadCallback(quat2) == -1) { 01207 return NULL; 01208 } 01209 01210 01211 /* ------ to be removed ------*/ 01212 #ifndef MATH_STANDALONE 01213 #ifdef WITH_ASSERT_ABORT 01214 PyErr_SetString(PyExc_ValueError, 01215 "(Vector * Quat) is now removed, reverse the " 01216 "order (promoted to an Error for Debug builds)"); 01217 return NULL; 01218 #else 01219 printf("Warning: (Vector * Quat) is now deprecated, " 01220 "reverse the multiplication order in the script.\n"); 01221 PyC_LineSpit(); 01222 #endif 01223 #endif /* ifndef MATH_STANDALONE */ 01224 /* ------ to be removed ------*/ 01225 01226 01227 copy_v3_v3(tvec, vec1->vec); 01228 mul_qt_v3(quat2->quat, tvec); 01229 return newVectorObject(tvec, 3, Py_NEW, Py_TYPE(vec1)); 01230 } 01231 else if (((scalar= PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred())==0) { /* VEC * FLOAT */ 01232 return vector_mul_float(vec1, scalar); 01233 } 01234 } 01235 else if (vec2) { 01236 if (((scalar= PyFloat_AsDouble(v1)) == -1.0f && PyErr_Occurred())==0) { /* FLOAT * VEC */ 01237 return vector_mul_float(vec2, scalar); 01238 } 01239 } 01240 else { 01241 BLI_assert(!"internal error"); 01242 } 01243 01244 PyErr_Format(PyExc_TypeError, 01245 "Vector multiplication: " 01246 "not supported between '%.200s' and '%.200s' types", 01247 Py_TYPE(v1)->tp_name, Py_TYPE(v2)->tp_name); 01248 return NULL; 01249 } 01250 01251 /* mulplication in-place: obj *= obj */ 01252 static PyObject *Vector_imul(PyObject *v1, PyObject *v2) 01253 { 01254 VectorObject *vec = (VectorObject *)v1; 01255 float scalar; 01256 01257 if(BaseMath_ReadCallback(vec) == -1) 01258 return NULL; 01259 01260 /* only support vec*=float and vec*=mat 01261 vec*=vec result is a float so that wont work */ 01262 if (MatrixObject_Check(v2)) { 01263 float rvec[MAX_DIMENSIONS]; 01264 if(BaseMath_ReadCallback((MatrixObject *)v2) == -1) 01265 return NULL; 01266 01267 if(column_vector_multiplication(rvec, vec, (MatrixObject*)v2) == -1) 01268 return NULL; 01269 01270 01271 /* ------ to be removed ------*/ 01272 #ifndef MATH_STANDALONE 01273 #ifdef WITH_ASSERT_ABORT 01274 PyErr_SetString(PyExc_ValueError, 01275 "(Vector *= Matrix) is now removed, reverse the " 01276 "order (promoted to an Error for Debug builds) " 01277 "and uses the non in-place multiplication."); 01278 return NULL; 01279 #else 01280 printf("Warning: (Vector *= Matrix) is now deprecated, " 01281 "reverse the (non in-place) multiplication order in the script.\n"); 01282 PyC_LineSpit(); 01283 #endif 01284 #endif /* ifndef MATH_STANDALONE */ 01285 /* ------ to be removed ------*/ 01286 01287 01288 memcpy(vec->vec, rvec, sizeof(float) * vec->size); 01289 } 01290 else if (QuaternionObject_Check(v2)) { 01291 /* VEC *= QUAT */ 01292 QuaternionObject *quat2 = (QuaternionObject*)v2; 01293 01294 if(vec->size != 3) { 01295 PyErr_SetString(PyExc_ValueError, 01296 "Vector multiplication: " 01297 "only 3D vector rotations (with quats) currently supported"); 01298 return NULL; 01299 } 01300 01301 if(BaseMath_ReadCallback(quat2) == -1) { 01302 return NULL; 01303 } 01304 01305 01306 /* ------ to be removed ------*/ 01307 #ifndef MATH_STANDALONE 01308 #ifdef WITH_ASSERT_ABORT 01309 PyErr_SetString(PyExc_ValueError, 01310 "(Vector *= Quat) is now removed, reverse the " 01311 "order (promoted to an Error for Debug builds) " 01312 "and uses the non in-place multiplication."); 01313 return NULL; 01314 #else 01315 printf("Warning: (Vector *= Quat) is now deprecated, " 01316 "reverse the (non in-place) multiplication order in the script.\n"); 01317 PyC_LineSpit(); 01318 #endif 01319 #endif /* ifndef MATH_STANDALONE */ 01320 /* ------ to be removed ------*/ 01321 01322 01323 mul_qt_v3(quat2->quat, vec->vec); 01324 } 01325 else if (((scalar= PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred())==0) { /* VEC *= FLOAT */ 01326 mul_vn_fl(vec->vec, vec->size, scalar); 01327 } 01328 else { 01329 PyErr_SetString(PyExc_TypeError, 01330 "Vector multiplication: " 01331 "arguments not acceptable for this operation"); 01332 return NULL; 01333 } 01334 01335 (void)BaseMath_WriteCallback(vec); 01336 Py_INCREF(v1); 01337 return v1; 01338 } 01339 01340 /* divid: obj / obj */ 01341 static PyObject *Vector_div(PyObject *v1, PyObject *v2) 01342 { 01343 int i; 01344 float vec[4], scalar; 01345 VectorObject *vec1 = NULL; 01346 01347 if(!VectorObject_Check(v1)) { /* not a vector */ 01348 PyErr_SetString(PyExc_TypeError, 01349 "Vector division: " 01350 "Vector must be divided by a float"); 01351 return NULL; 01352 } 01353 vec1 = (VectorObject*)v1; /* vector */ 01354 01355 if(BaseMath_ReadCallback(vec1) == -1) 01356 return NULL; 01357 01358 if((scalar=PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred()) { /* parsed item not a number */ 01359 PyErr_SetString(PyExc_TypeError, 01360 "Vector division: " 01361 "Vector must be divided by a float"); 01362 return NULL; 01363 } 01364 01365 if(scalar==0.0f) { 01366 PyErr_SetString(PyExc_ZeroDivisionError, 01367 "Vector division: " 01368 "divide by zero error"); 01369 return NULL; 01370 } 01371 01372 for(i = 0; i < vec1->size; i++) { 01373 vec[i] = vec1->vec[i] / scalar; 01374 } 01375 return newVectorObject(vec, vec1->size, Py_NEW, Py_TYPE(v1)); 01376 } 01377 01378 /* divide in-place: obj /= obj */ 01379 static PyObject *Vector_idiv(PyObject *v1, PyObject *v2) 01380 { 01381 int i; 01382 float scalar; 01383 VectorObject *vec1 = (VectorObject*)v1; 01384 01385 if(BaseMath_ReadCallback(vec1) == -1) 01386 return NULL; 01387 01388 if((scalar=PyFloat_AsDouble(v2)) == -1.0f && PyErr_Occurred()) { /* parsed item not a number */ 01389 PyErr_SetString(PyExc_TypeError, 01390 "Vector division: " 01391 "Vector must be divided by a float"); 01392 return NULL; 01393 } 01394 01395 if(scalar==0.0f) { 01396 PyErr_SetString(PyExc_ZeroDivisionError, 01397 "Vector division: " 01398 "divide by zero error"); 01399 return NULL; 01400 } 01401 for(i = 0; i < vec1->size; i++) { 01402 vec1->vec[i] /= scalar; 01403 } 01404 01405 (void)BaseMath_WriteCallback(vec1); 01406 01407 Py_INCREF(v1); 01408 return v1; 01409 } 01410 01411 /* -obj 01412 returns the negative of this object*/ 01413 static PyObject *Vector_neg(VectorObject *self) 01414 { 01415 float tvec[MAX_DIMENSIONS]; 01416 01417 if(BaseMath_ReadCallback(self) == -1) 01418 return NULL; 01419 01420 negate_vn_vn(tvec, self->vec, self->size); 01421 return newVectorObject(tvec, self->size, Py_NEW, Py_TYPE(self)); 01422 } 01423 01424 /*------------------------vec_magnitude_nosqrt (internal) - for comparing only */ 01425 static double vec_magnitude_nosqrt(float *data, int size) 01426 { 01427 double dot = 0.0f; 01428 int i; 01429 01430 for(i=0; i<size; i++){ 01431 dot += (double)data[i]; 01432 } 01433 /*return (double)sqrt(dot);*/ 01434 /* warning, line above removed because we are not using the length, 01435 rather the comparing the sizes and for this we do not need the sqrt 01436 for the actual length, the dot must be sqrt'd */ 01437 return dot; 01438 } 01439 01440 01441 /*------------------------tp_richcmpr 01442 returns -1 execption, 0 false, 1 true */ 01443 static PyObject* Vector_richcmpr(PyObject *objectA, PyObject *objectB, int comparison_type) 01444 { 01445 VectorObject *vecA = NULL, *vecB = NULL; 01446 int result = 0; 01447 double epsilon = .000001f; 01448 double lenA, lenB; 01449 01450 if (!VectorObject_Check(objectA) || !VectorObject_Check(objectB)){ 01451 if (comparison_type == Py_NE){ 01452 Py_RETURN_TRUE; 01453 } 01454 else { 01455 Py_RETURN_FALSE; 01456 } 01457 } 01458 vecA = (VectorObject*)objectA; 01459 vecB = (VectorObject*)objectB; 01460 01461 if(BaseMath_ReadCallback(vecA) == -1 || BaseMath_ReadCallback(vecB) == -1) 01462 return NULL; 01463 01464 if (vecA->size != vecB->size){ 01465 if (comparison_type == Py_NE){ 01466 Py_RETURN_TRUE; 01467 } 01468 else { 01469 Py_RETURN_FALSE; 01470 } 01471 } 01472 01473 switch (comparison_type){ 01474 case Py_LT: 01475 lenA = vec_magnitude_nosqrt(vecA->vec, vecA->size); 01476 lenB = vec_magnitude_nosqrt(vecB->vec, vecB->size); 01477 if(lenA < lenB){ 01478 result = 1; 01479 } 01480 break; 01481 case Py_LE: 01482 lenA = vec_magnitude_nosqrt(vecA->vec, vecA->size); 01483 lenB = vec_magnitude_nosqrt(vecB->vec, vecB->size); 01484 if(lenA < lenB){ 01485 result = 1; 01486 } 01487 else { 01488 result = (((lenA + epsilon) > lenB) && ((lenA - epsilon) < lenB)); 01489 } 01490 break; 01491 case Py_EQ: 01492 result = EXPP_VectorsAreEqual(vecA->vec, vecB->vec, vecA->size, 1); 01493 break; 01494 case Py_NE: 01495 result = !EXPP_VectorsAreEqual(vecA->vec, vecB->vec, vecA->size, 1); 01496 break; 01497 case Py_GT: 01498 lenA = vec_magnitude_nosqrt(vecA->vec, vecA->size); 01499 lenB = vec_magnitude_nosqrt(vecB->vec, vecB->size); 01500 if(lenA > lenB){ 01501 result = 1; 01502 } 01503 break; 01504 case Py_GE: 01505 lenA = vec_magnitude_nosqrt(vecA->vec, vecA->size); 01506 lenB = vec_magnitude_nosqrt(vecB->vec, vecB->size); 01507 if(lenA > lenB){ 01508 result = 1; 01509 } 01510 else { 01511 result = (((lenA + epsilon) > lenB) && ((lenA - epsilon) < lenB)); 01512 } 01513 break; 01514 default: 01515 printf("The result of the comparison could not be evaluated"); 01516 break; 01517 } 01518 if (result == 1){ 01519 Py_RETURN_TRUE; 01520 } 01521 else { 01522 Py_RETURN_FALSE; 01523 } 01524 } 01525 01526 /*-----------------PROTCOL DECLARATIONS--------------------------*/ 01527 static PySequenceMethods Vector_SeqMethods = { 01528 (lenfunc) Vector_len, /* sq_length */ 01529 (binaryfunc) NULL, /* sq_concat */ 01530 (ssizeargfunc) NULL, /* sq_repeat */ 01531 (ssizeargfunc) Vector_item, /* sq_item */ 01532 NULL, /* py3 deprecated slice func */ 01533 (ssizeobjargproc) Vector_ass_item, /* sq_ass_item */ 01534 NULL, /* py3 deprecated slice assign func */ 01535 (objobjproc) NULL, /* sq_contains */ 01536 (binaryfunc) NULL, /* sq_inplace_concat */ 01537 (ssizeargfunc) NULL, /* sq_inplace_repeat */ 01538 }; 01539 01540 static PyObject *Vector_subscript(VectorObject* self, PyObject* item) 01541 { 01542 if (PyIndex_Check(item)) { 01543 Py_ssize_t i; 01544 i = PyNumber_AsSsize_t(item, PyExc_IndexError); 01545 if (i == -1 && PyErr_Occurred()) 01546 return NULL; 01547 if (i < 0) 01548 i += self->size; 01549 return Vector_item(self, i); 01550 } 01551 else if (PySlice_Check(item)) { 01552 Py_ssize_t start, stop, step, slicelength; 01553 01554 if (PySlice_GetIndicesEx((void *)item, self->size, &start, &stop, &step, &slicelength) < 0) 01555 return NULL; 01556 01557 if (slicelength <= 0) { 01558 return PyTuple_New(0); 01559 } 01560 else if (step == 1) { 01561 return Vector_slice(self, start, stop); 01562 } 01563 else { 01564 PyErr_SetString(PyExc_IndexError, 01565 "slice steps not supported with vectors"); 01566 return NULL; 01567 } 01568 } 01569 else { 01570 PyErr_Format(PyExc_TypeError, 01571 "vector indices must be integers, not %.200s", 01572 Py_TYPE(item)->tp_name); 01573 return NULL; 01574 } 01575 } 01576 01577 static int Vector_ass_subscript(VectorObject* self, PyObject* item, PyObject* value) 01578 { 01579 if (PyIndex_Check(item)) { 01580 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); 01581 if (i == -1 && PyErr_Occurred()) 01582 return -1; 01583 if (i < 0) 01584 i += self->size; 01585 return Vector_ass_item(self, i, value); 01586 } 01587 else if (PySlice_Check(item)) { 01588 Py_ssize_t start, stop, step, slicelength; 01589 01590 if (PySlice_GetIndicesEx((void *)item, self->size, &start, &stop, &step, &slicelength) < 0) 01591 return -1; 01592 01593 if (step == 1) 01594 return Vector_ass_slice(self, start, stop, value); 01595 else { 01596 PyErr_SetString(PyExc_IndexError, 01597 "slice steps not supported with vectors"); 01598 return -1; 01599 } 01600 } 01601 else { 01602 PyErr_Format(PyExc_TypeError, 01603 "vector indices must be integers, not %.200s", 01604 Py_TYPE(item)->tp_name); 01605 return -1; 01606 } 01607 } 01608 01609 static PyMappingMethods Vector_AsMapping = { 01610 (lenfunc)Vector_len, 01611 (binaryfunc)Vector_subscript, 01612 (objobjargproc)Vector_ass_subscript 01613 }; 01614 01615 01616 static PyNumberMethods Vector_NumMethods = { 01617 (binaryfunc) Vector_add, /*nb_add*/ 01618 (binaryfunc) Vector_sub, /*nb_subtract*/ 01619 (binaryfunc) Vector_mul, /*nb_multiply*/ 01620 NULL, /*nb_remainder*/ 01621 NULL, /*nb_divmod*/ 01622 NULL, /*nb_power*/ 01623 (unaryfunc) Vector_neg, /*nb_negative*/ 01624 (unaryfunc) NULL, /*tp_positive*/ 01625 (unaryfunc) NULL, /*tp_absolute*/ 01626 (inquiry) NULL, /*tp_bool*/ 01627 (unaryfunc) NULL, /*nb_invert*/ 01628 NULL, /*nb_lshift*/ 01629 (binaryfunc)NULL, /*nb_rshift*/ 01630 NULL, /*nb_and*/ 01631 NULL, /*nb_xor*/ 01632 NULL, /*nb_or*/ 01633 NULL, /*nb_int*/ 01634 NULL, /*nb_reserved*/ 01635 NULL, /*nb_float*/ 01636 Vector_iadd, /* nb_inplace_add */ 01637 Vector_isub, /* nb_inplace_subtract */ 01638 Vector_imul, /* nb_inplace_multiply */ 01639 NULL, /* nb_inplace_remainder */ 01640 NULL, /* nb_inplace_power */ 01641 NULL, /* nb_inplace_lshift */ 01642 NULL, /* nb_inplace_rshift */ 01643 NULL, /* nb_inplace_and */ 01644 NULL, /* nb_inplace_xor */ 01645 NULL, /* nb_inplace_or */ 01646 NULL, /* nb_floor_divide */ 01647 Vector_div, /* nb_true_divide */ 01648 NULL, /* nb_inplace_floor_divide */ 01649 Vector_idiv, /* nb_inplace_true_divide */ 01650 NULL, /* nb_index */ 01651 }; 01652 01653 /*------------------PY_OBECT DEFINITION--------------------------*/ 01654 01655 /* 01656 * vector axis, vector.x/y/z/w 01657 */ 01658 01659 static PyObject *Vector_getAxis(VectorObject *self, void *type) 01660 { 01661 return vector_item_internal(self, GET_INT_FROM_POINTER(type), TRUE); 01662 } 01663 01664 static int Vector_setAxis(VectorObject *self, PyObject *value, void *type) 01665 { 01666 return vector_ass_item_internal(self, GET_INT_FROM_POINTER(type), value, TRUE); 01667 } 01668 01669 /* vector.length */ 01670 static PyObject *Vector_getLength(VectorObject *self, void *UNUSED(closure)) 01671 { 01672 double dot = 0.0f; 01673 int i; 01674 01675 if(BaseMath_ReadCallback(self) == -1) 01676 return NULL; 01677 01678 for(i = 0; i < self->size; i++){ 01679 dot += (double)(self->vec[i] * self->vec[i]); 01680 } 01681 return PyFloat_FromDouble(sqrt(dot)); 01682 } 01683 01684 static int Vector_setLength(VectorObject *self, PyObject *value) 01685 { 01686 double dot = 0.0f, param; 01687 int i; 01688 01689 if(BaseMath_ReadCallback(self) == -1) 01690 return -1; 01691 01692 if((param=PyFloat_AsDouble(value)) == -1.0 && PyErr_Occurred()) { 01693 PyErr_SetString(PyExc_TypeError, 01694 "length must be set to a number"); 01695 return -1; 01696 } 01697 01698 if (param < 0.0) { 01699 PyErr_SetString(PyExc_ValueError, 01700 "cannot set a vectors length to a negative value"); 01701 return -1; 01702 } 01703 if (param == 0.0) { 01704 fill_vn(self->vec, self->size, 0.0f); 01705 return 0; 01706 } 01707 01708 for(i = 0; i < self->size; i++){ 01709 dot += (double)(self->vec[i] * self->vec[i]); 01710 } 01711 01712 if (!dot) /* cant sqrt zero */ 01713 return 0; 01714 01715 dot = sqrt(dot); 01716 01717 if (dot==param) 01718 return 0; 01719 01720 dot= dot/param; 01721 01722 for(i = 0; i < self->size; i++){ 01723 self->vec[i]= self->vec[i] / (float)dot; 01724 } 01725 01726 (void)BaseMath_WriteCallback(self); /* checked already */ 01727 01728 return 0; 01729 } 01730 01731 /* vector.length_squared */ 01732 static PyObject *Vector_getLengthSquared(VectorObject *self, void *UNUSED(closure)) 01733 { 01734 double dot = 0.0f; 01735 int i; 01736 01737 if(BaseMath_ReadCallback(self) == -1) 01738 return NULL; 01739 01740 for(i = 0; i < self->size; i++){ 01741 dot += (double)(self->vec[i] * self->vec[i]); 01742 } 01743 return PyFloat_FromDouble(dot); 01744 } 01745 01746 /* Get a new Vector according to the provided swizzle. This function has little 01747 error checking, as we are in control of the inputs: the closure is set by us 01748 in Vector_createSwizzleGetSeter. */ 01749 static PyObject *Vector_getSwizzle(VectorObject *self, void *closure) 01750 { 01751 size_t axis_to; 01752 size_t axis_from; 01753 float vec[MAX_DIMENSIONS]; 01754 unsigned int swizzleClosure; 01755 01756 if(BaseMath_ReadCallback(self) == -1) 01757 return NULL; 01758 01759 /* Unpack the axes from the closure into an array. */ 01760 axis_to = 0; 01761 swizzleClosure = GET_INT_FROM_POINTER(closure); 01762 while (swizzleClosure & SWIZZLE_VALID_AXIS) 01763 { 01764 axis_from = swizzleClosure & SWIZZLE_AXIS; 01765 if(axis_from >= self->size) { 01766 PyErr_SetString(PyExc_AttributeError, 01767 "Vector swizzle: " 01768 "specified axis not present"); 01769 return NULL; 01770 } 01771 01772 vec[axis_to] = self->vec[axis_from]; 01773 swizzleClosure = swizzleClosure >> SWIZZLE_BITS_PER_AXIS; 01774 axis_to++; 01775 } 01776 01777 return newVectorObject(vec, axis_to, Py_NEW, Py_TYPE(self)); 01778 } 01779 01780 /* Set the items of this vector using a swizzle. 01781 - If value is a vector or list this operates like an array copy, except that 01782 the destination is effectively re-ordered as defined by the swizzle. At 01783 most min(len(source), len(dest)) values will be copied. 01784 - If the value is scalar, it is copied to all axes listed in the swizzle. 01785 - If an axis appears more than once in the swizzle, the final occurrence is 01786 the one that determines its value. 01787 01788 Returns 0 on success and -1 on failure. On failure, the vector will be 01789 unchanged. */ 01790 static int Vector_setSwizzle(VectorObject *self, PyObject *value, void *closure) 01791 { 01792 size_t size_from; 01793 float scalarVal; 01794 01795 size_t axis_from; 01796 size_t axis_to; 01797 01798 unsigned int swizzleClosure; 01799 01800 float tvec[MAX_DIMENSIONS]; 01801 float vec_assign[MAX_DIMENSIONS]; 01802 01803 if(BaseMath_ReadCallback(self) == -1) 01804 return -1; 01805 01806 /* Check that the closure can be used with this vector: even 2D vectors have 01807 swizzles defined for axes z and w, but they would be invalid. */ 01808 swizzleClosure = GET_INT_FROM_POINTER(closure); 01809 axis_from= 0; 01810 while (swizzleClosure & SWIZZLE_VALID_AXIS) { 01811 axis_to = swizzleClosure & SWIZZLE_AXIS; 01812 if (axis_to >= self->size) 01813 { 01814 PyErr_SetString(PyExc_AttributeError, 01815 "Vector swizzle: " 01816 "specified axis not present"); 01817 return -1; 01818 } 01819 swizzleClosure = swizzleClosure >> SWIZZLE_BITS_PER_AXIS; 01820 axis_from++; 01821 } 01822 01823 if (((scalarVal=PyFloat_AsDouble(value)) == -1 && PyErr_Occurred())==0) { 01824 int i; 01825 for(i=0; i < MAX_DIMENSIONS; i++) 01826 vec_assign[i]= scalarVal; 01827 01828 size_from= axis_from; 01829 } 01830 else if(PyErr_Clear(), (size_from=mathutils_array_parse(vec_assign, 2, 4, value, "mathutils.Vector.**** = swizzle assignment")) == -1) { 01831 return -1; 01832 } 01833 01834 if(axis_from != size_from) { 01835 PyErr_SetString(PyExc_AttributeError, 01836 "Vector swizzle: size does not match swizzle"); 01837 return -1; 01838 } 01839 01840 /* Copy vector contents onto swizzled axes. */ 01841 axis_from = 0; 01842 swizzleClosure = GET_INT_FROM_POINTER(closure); 01843 while (swizzleClosure & SWIZZLE_VALID_AXIS) 01844 { 01845 axis_to = swizzleClosure & SWIZZLE_AXIS; 01846 tvec[axis_to] = vec_assign[axis_from]; 01847 swizzleClosure = swizzleClosure >> SWIZZLE_BITS_PER_AXIS; 01848 axis_from++; 01849 } 01850 01851 memcpy(self->vec, tvec, axis_from * sizeof(float)); 01852 /* continue with BaseMathObject_WriteCallback at the end */ 01853 01854 if(BaseMath_WriteCallback(self) == -1) 01855 return -1; 01856 else 01857 return 0; 01858 } 01859 01860 /*****************************************************************************/ 01861 /* Python attributes get/set structure: */ 01862 /*****************************************************************************/ 01863 static PyGetSetDef Vector_getseters[] = { 01864 {(char *)"x", (getter)Vector_getAxis, (setter)Vector_setAxis, (char *)"Vector X axis.\n\n:type: float", (void *)0}, 01865 {(char *)"y", (getter)Vector_getAxis, (setter)Vector_setAxis, (char *)"Vector Y axis.\n\n:type: float", (void *)1}, 01866 {(char *)"z", (getter)Vector_getAxis, (setter)Vector_setAxis, (char *)"Vector Z axis (3D Vectors only).\n\n:type: float", (void *)2}, 01867 {(char *)"w", (getter)Vector_getAxis, (setter)Vector_setAxis, (char *)"Vector W axis (4D Vectors only).\n\n:type: float", (void *)3}, 01868 {(char *)"length", (getter)Vector_getLength, (setter)Vector_setLength, (char *)"Vector Length.\n\n:type: float", NULL}, 01869 {(char *)"length_squared", (getter)Vector_getLengthSquared, (setter)NULL, (char *)"Vector length squared (v.dot(v)).\n\n:type: float", NULL}, 01870 {(char *)"magnitude", (getter)Vector_getLength, (setter)Vector_setLength, (char *)"Vector Length.\n\n:type: float", NULL}, 01871 {(char *)"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, (char *)BaseMathObject_Wrapped_doc, NULL}, 01872 {(char *)"owner", (getter)BaseMathObject_getOwner, (setter)NULL, (char *)BaseMathObject_Owner_doc, NULL}, 01873 01874 /* autogenerated swizzle attrs, see python script below */ 01875 {(char *)"xx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 36 01876 {(char *)"xxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 292 01877 {(char *)"xxxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2340 01878 {(char *)"xxxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2852 01879 {(char *)"xxxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3364 01880 {(char *)"xxxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3876 01881 {(char *)"xxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 356 01882 {(char *)"xxyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2404 01883 {(char *)"xxyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2916 01884 {(char *)"xxyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3428 01885 {(char *)"xxyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3940 01886 {(char *)"xxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 420 01887 {(char *)"xxzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2468 01888 {(char *)"xxzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2980 01889 {(char *)"xxzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3492 01890 {(char *)"xxzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4004 01891 {(char *)"xxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 484 01892 {(char *)"xxwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2532 01893 {(char *)"xxwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3044 01894 {(char *)"xxwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3556 01895 {(char *)"xxww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4068 01896 {(char *)"xy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 44 01897 {(char *)"xyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 300 01898 {(char *)"xyxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2348 01899 {(char *)"xyxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2860 01900 {(char *)"xyxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3372 01901 {(char *)"xyxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3884 01902 {(char *)"xyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 364 01903 {(char *)"xyyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2412 01904 {(char *)"xyyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2924 01905 {(char *)"xyyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3436 01906 {(char *)"xyyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3948 01907 {(char *)"xyz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 428 01908 {(char *)"xyzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2476 01909 {(char *)"xyzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2988 01910 {(char *)"xyzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3500 01911 {(char *)"xyzw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4012 01912 {(char *)"xyw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 492 01913 {(char *)"xywx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2540 01914 {(char *)"xywy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3052 01915 {(char *)"xywz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3564 01916 {(char *)"xyww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4076 01917 {(char *)"xz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 52 01918 {(char *)"xzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 308 01919 {(char *)"xzxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2356 01920 {(char *)"xzxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2868 01921 {(char *)"xzxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3380 01922 {(char *)"xzxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3892 01923 {(char *)"xzy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 372 01924 {(char *)"xzyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2420 01925 {(char *)"xzyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2932 01926 {(char *)"xzyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3444 01927 {(char *)"xzyw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3956 01928 {(char *)"xzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 436 01929 {(char *)"xzzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2484 01930 {(char *)"xzzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2996 01931 {(char *)"xzzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3508 01932 {(char *)"xzzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4020 01933 {(char *)"xzw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 500 01934 {(char *)"xzwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2548 01935 {(char *)"xzwy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3060 01936 {(char *)"xzwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3572 01937 {(char *)"xzww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4084 01938 {(char *)"xw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 60 01939 {(char *)"xwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 316 01940 {(char *)"xwxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2364 01941 {(char *)"xwxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2876 01942 {(char *)"xwxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3388 01943 {(char *)"xwxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3900 01944 {(char *)"xwy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 380 01945 {(char *)"xwyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2428 01946 {(char *)"xwyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2940 01947 {(char *)"xwyz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3452 01948 {(char *)"xwyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3964 01949 {(char *)"xwz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 444 01950 {(char *)"xwzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2492 01951 {(char *)"xwzy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3004 01952 {(char *)"xwzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3516 01953 {(char *)"xwzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4028 01954 {(char *)"xww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 508 01955 {(char *)"xwwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2556 01956 {(char *)"xwwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3068 01957 {(char *)"xwwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3580 01958 {(char *)"xwww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4092 01959 {(char *)"yx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 37 01960 {(char *)"yxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 293 01961 {(char *)"yxxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2341 01962 {(char *)"yxxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2853 01963 {(char *)"yxxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3365 01964 {(char *)"yxxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3877 01965 {(char *)"yxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 357 01966 {(char *)"yxyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2405 01967 {(char *)"yxyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2917 01968 {(char *)"yxyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3429 01969 {(char *)"yxyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3941 01970 {(char *)"yxz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 421 01971 {(char *)"yxzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2469 01972 {(char *)"yxzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2981 01973 {(char *)"yxzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3493 01974 {(char *)"yxzw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4005 01975 {(char *)"yxw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 485 01976 {(char *)"yxwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2533 01977 {(char *)"yxwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3045 01978 {(char *)"yxwz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3557 01979 {(char *)"yxww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4069 01980 {(char *)"yy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 45 01981 {(char *)"yyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 301 01982 {(char *)"yyxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2349 01983 {(char *)"yyxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2861 01984 {(char *)"yyxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3373 01985 {(char *)"yyxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3885 01986 {(char *)"yyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 365 01987 {(char *)"yyyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2413 01988 {(char *)"yyyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2925 01989 {(char *)"yyyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3437 01990 {(char *)"yyyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3949 01991 {(char *)"yyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 429 01992 {(char *)"yyzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2477 01993 {(char *)"yyzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2989 01994 {(char *)"yyzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3501 01995 {(char *)"yyzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4013 01996 {(char *)"yyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 493 01997 {(char *)"yywx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2541 01998 {(char *)"yywy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3053 01999 {(char *)"yywz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3565 02000 {(char *)"yyww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4077 02001 {(char *)"yz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 53 02002 {(char *)"yzx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 309 02003 {(char *)"yzxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2357 02004 {(char *)"yzxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2869 02005 {(char *)"yzxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3381 02006 {(char *)"yzxw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3893 02007 {(char *)"yzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 373 02008 {(char *)"yzyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2421 02009 {(char *)"yzyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2933 02010 {(char *)"yzyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3445 02011 {(char *)"yzyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3957 02012 {(char *)"yzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 437 02013 {(char *)"yzzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2485 02014 {(char *)"yzzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2997 02015 {(char *)"yzzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3509 02016 {(char *)"yzzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4021 02017 {(char *)"yzw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 501 02018 {(char *)"yzwx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2549 02019 {(char *)"yzwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3061 02020 {(char *)"yzwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3573 02021 {(char *)"yzww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4085 02022 {(char *)"yw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 61 02023 {(char *)"ywx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 317 02024 {(char *)"ywxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2365 02025 {(char *)"ywxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2877 02026 {(char *)"ywxz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3389 02027 {(char *)"ywxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3901 02028 {(char *)"ywy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 381 02029 {(char *)"ywyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2429 02030 {(char *)"ywyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2941 02031 {(char *)"ywyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3453 02032 {(char *)"ywyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3965 02033 {(char *)"ywz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 445 02034 {(char *)"ywzx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2493 02035 {(char *)"ywzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3005 02036 {(char *)"ywzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3517 02037 {(char *)"ywzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4029 02038 {(char *)"yww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 509 02039 {(char *)"ywwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2557 02040 {(char *)"ywwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3069 02041 {(char *)"ywwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3581 02042 {(char *)"ywww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((1|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4093 02043 {(char *)"zx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 38 02044 {(char *)"zxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 294 02045 {(char *)"zxxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2342 02046 {(char *)"zxxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2854 02047 {(char *)"zxxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3366 02048 {(char *)"zxxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3878 02049 {(char *)"zxy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 358 02050 {(char *)"zxyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2406 02051 {(char *)"zxyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2918 02052 {(char *)"zxyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3430 02053 {(char *)"zxyw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3942 02054 {(char *)"zxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 422 02055 {(char *)"zxzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2470 02056 {(char *)"zxzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2982 02057 {(char *)"zxzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3494 02058 {(char *)"zxzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4006 02059 {(char *)"zxw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 486 02060 {(char *)"zxwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2534 02061 {(char *)"zxwy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3046 02062 {(char *)"zxwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3558 02063 {(char *)"zxww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4070 02064 {(char *)"zy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 46 02065 {(char *)"zyx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 302 02066 {(char *)"zyxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2350 02067 {(char *)"zyxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2862 02068 {(char *)"zyxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3374 02069 {(char *)"zyxw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3886 02070 {(char *)"zyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 366 02071 {(char *)"zyyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2414 02072 {(char *)"zyyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2926 02073 {(char *)"zyyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3438 02074 {(char *)"zyyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3950 02075 {(char *)"zyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 430 02076 {(char *)"zyzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2478 02077 {(char *)"zyzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2990 02078 {(char *)"zyzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3502 02079 {(char *)"zyzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4014 02080 {(char *)"zyw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 494 02081 {(char *)"zywx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2542 02082 {(char *)"zywy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3054 02083 {(char *)"zywz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3566 02084 {(char *)"zyww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4078 02085 {(char *)"zz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 54 02086 {(char *)"zzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 310 02087 {(char *)"zzxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2358 02088 {(char *)"zzxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2870 02089 {(char *)"zzxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3382 02090 {(char *)"zzxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3894 02091 {(char *)"zzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 374 02092 {(char *)"zzyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2422 02093 {(char *)"zzyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2934 02094 {(char *)"zzyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3446 02095 {(char *)"zzyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3958 02096 {(char *)"zzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 438 02097 {(char *)"zzzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2486 02098 {(char *)"zzzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2998 02099 {(char *)"zzzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3510 02100 {(char *)"zzzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4022 02101 {(char *)"zzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 502 02102 {(char *)"zzwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2550 02103 {(char *)"zzwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3062 02104 {(char *)"zzwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3574 02105 {(char *)"zzww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4086 02106 {(char *)"zw", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 62 02107 {(char *)"zwx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 318 02108 {(char *)"zwxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2366 02109 {(char *)"zwxy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2878 02110 {(char *)"zwxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3390 02111 {(char *)"zwxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3902 02112 {(char *)"zwy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 382 02113 {(char *)"zwyx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2430 02114 {(char *)"zwyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2942 02115 {(char *)"zwyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3454 02116 {(char *)"zwyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3966 02117 {(char *)"zwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 446 02118 {(char *)"zwzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2494 02119 {(char *)"zwzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3006 02120 {(char *)"zwzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3518 02121 {(char *)"zwzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4030 02122 {(char *)"zww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 510 02123 {(char *)"zwwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2558 02124 {(char *)"zwwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3070 02125 {(char *)"zwwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3582 02126 {(char *)"zwww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((2|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4094 02127 {(char *)"wx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 39 02128 {(char *)"wxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 295 02129 {(char *)"wxxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2343 02130 {(char *)"wxxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2855 02131 {(char *)"wxxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3367 02132 {(char *)"wxxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3879 02133 {(char *)"wxy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 359 02134 {(char *)"wxyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2407 02135 {(char *)"wxyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2919 02136 {(char *)"wxyz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3431 02137 {(char *)"wxyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3943 02138 {(char *)"wxz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 423 02139 {(char *)"wxzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2471 02140 {(char *)"wxzy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2983 02141 {(char *)"wxzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3495 02142 {(char *)"wxzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4007 02143 {(char *)"wxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 487 02144 {(char *)"wxwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2535 02145 {(char *)"wxwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3047 02146 {(char *)"wxwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3559 02147 {(char *)"wxww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4071 02148 {(char *)"wy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 47 02149 {(char *)"wyx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 303 02150 {(char *)"wyxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2351 02151 {(char *)"wyxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2863 02152 {(char *)"wyxz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3375 02153 {(char *)"wyxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3887 02154 {(char *)"wyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 367 02155 {(char *)"wyyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2415 02156 {(char *)"wyyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2927 02157 {(char *)"wyyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3439 02158 {(char *)"wyyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3951 02159 {(char *)"wyz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 431 02160 {(char *)"wyzx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2479 02161 {(char *)"wyzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2991 02162 {(char *)"wyzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3503 02163 {(char *)"wyzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4015 02164 {(char *)"wyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 495 02165 {(char *)"wywx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2543 02166 {(char *)"wywy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3055 02167 {(char *)"wywz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3567 02168 {(char *)"wyww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4079 02169 {(char *)"wz", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 55 02170 {(char *)"wzx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 311 02171 {(char *)"wzxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2359 02172 {(char *)"wzxy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2871 02173 {(char *)"wzxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3383 02174 {(char *)"wzxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3895 02175 {(char *)"wzy", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 375 02176 {(char *)"wzyx", (getter)Vector_getSwizzle, (setter)Vector_setSwizzle, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2423 02177 {(char *)"wzyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2935 02178 {(char *)"wzyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3447 02179 {(char *)"wzyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3959 02180 {(char *)"wzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 439 02181 {(char *)"wzzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2487 02182 {(char *)"wzzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2999 02183 {(char *)"wzzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3511 02184 {(char *)"wzzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4023 02185 {(char *)"wzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 503 02186 {(char *)"wzwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2551 02187 {(char *)"wzwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3063 02188 {(char *)"wzwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3575 02189 {(char *)"wzww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4087 02190 {(char *)"ww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 63 02191 {(char *)"wwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 319 02192 {(char *)"wwxx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2367 02193 {(char *)"wwxy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2879 02194 {(char *)"wwxz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3391 02195 {(char *)"wwxw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3903 02196 {(char *)"wwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 383 02197 {(char *)"wwyx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2431 02198 {(char *)"wwyy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2943 02199 {(char *)"wwyz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3455 02200 {(char *)"wwyw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3967 02201 {(char *)"wwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 447 02202 {(char *)"wwzx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2495 02203 {(char *)"wwzy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3007 02204 {(char *)"wwzz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3519 02205 {(char *)"wwzw", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4031 02206 {(char *)"www", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2))))}, // 511 02207 {(char *)"wwwx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((0|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 2559 02208 {(char *)"wwwy", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((1|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3071 02209 {(char *)"wwwz", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((2|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 3583 02210 {(char *)"wwww", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((3|SWIZZLE_VALID_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((3|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) )}, // 4095 02211 {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ 02212 }; 02213 02214 /* Python script used to make swizzle array */ 02215 /* 02216 SWIZZLE_BITS_PER_AXIS = 3 02217 SWIZZLE_VALID_AXIS = 0x4 02218 02219 axis_dict = {} 02220 axis_pos = {'x':0, 'y':1, 'z':2, 'w':3} 02221 axises = 'xyzw' 02222 while len(axises) >= 2: 02223 02224 for axis_0 in axises: 02225 axis_0_pos = axis_pos[axis_0] 02226 for axis_1 in axises: 02227 axis_1_pos = axis_pos[axis_1] 02228 axis_dict[axis_0+axis_1] = '((%s|SWIZZLE_VALID_AXIS) | ((%s|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS))' % (axis_0_pos, axis_1_pos) 02229 if len(axises)>2: 02230 for axis_2 in axises: 02231 axis_2_pos = axis_pos[axis_2] 02232 axis_dict[axis_0+axis_1+axis_2] = '((%s|SWIZZLE_VALID_AXIS) | ((%s|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((%s|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)))' % (axis_0_pos, axis_1_pos, axis_2_pos) 02233 if len(axises)>3: 02234 for axis_3 in axises: 02235 axis_3_pos = axis_pos[axis_3] 02236 axis_dict[axis_0+axis_1+axis_2+axis_3] = '((%s|SWIZZLE_VALID_AXIS) | ((%s|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS) | ((%s|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*2)) | ((%s|SWIZZLE_VALID_AXIS)<<(SWIZZLE_BITS_PER_AXIS*3))) ' % (axis_0_pos, axis_1_pos, axis_2_pos, axis_3_pos) 02237 02238 axises = axises[:-1] 02239 02240 02241 items = axis_dict.items() 02242 items.sort(key = lambda a: a[0].replace('x', '0').replace('y', '1').replace('z', '2').replace('w', '3')) 02243 02244 unique = set() 02245 for key, val in items: 02246 num = eval(val) 02247 set_str = 'Vector_setSwizzle' if (len(set(key)) == len(key)) else 'NULL' 02248 print '\t{"%s", %s(getter)Vector_getSwizzle, (setter)%s, NULL, SET_INT_IN_POINTER(%s)}, // %s' % (key, (' '*(4-len(key))), set_str, axis_dict[key], num) 02249 unique.add(num) 02250 02251 if len(unique) != len(items): 02252 print "ERROR" 02253 */ 02254 02255 #if 0 02256 //ROW VECTOR Multiplication - Vector X Matrix 02257 //[x][y][z] * [1][4][7] 02258 // [2][5][8] 02259 // [3][6][9] 02260 //vector/matrix multiplication IS NOT COMMUTATIVE!!!! 02261 static int row_vector_multiplication(float rvec[4], VectorObject* vec, MatrixObject * mat) 02262 { 02263 float vec_cpy[4]; 02264 double dot = 0.0f; 02265 int x, y, z = 0, vec_size = vec->size; 02266 02267 if(mat->colSize != vec_size){ 02268 if(mat->colSize == 4 && vec_size != 3){ 02269 PyErr_SetString(PyExc_ValueError, 02270 "vector * matrix: matrix column size " 02271 "and the vector size must be the same"); 02272 return -1; 02273 } 02274 else { 02275 vec_cpy[3] = 1.0f; 02276 } 02277 } 02278 02279 if(BaseMath_ReadCallback(vec) == -1 || BaseMath_ReadCallback(mat) == -1) 02280 return -1; 02281 02282 memcpy(vec_cpy, vec->vec, vec_size * sizeof(float)); 02283 02284 rvec[3] = 1.0f; 02285 //muliplication 02286 for(x = 0; x < mat->rowSize; x++) { 02287 for(y = 0; y < mat->colSize; y++) { 02288 dot += mat->matrix[x][y] * vec_cpy[y]; 02289 } 02290 rvec[z++] = (float)dot; 02291 dot = 0.0f; 02292 } 02293 return 0; 02294 } 02295 #endif 02296 02297 /*----------------------------Vector.negate() -------------------- */ 02298 PyDoc_STRVAR(Vector_negate_doc, 02299 ".. method:: negate()\n" 02300 "\n" 02301 " Set all values to their negative.\n" 02302 "\n" 02303 " :return: an instance of itself\n" 02304 " :rtype: :class:`Vector`\n" 02305 ); 02306 static PyObject *Vector_negate(VectorObject *self) 02307 { 02308 if(BaseMath_ReadCallback(self) == -1) 02309 return NULL; 02310 02311 negate_vn(self->vec, self->size); 02312 02313 (void)BaseMath_WriteCallback(self); // already checked for error 02314 Py_RETURN_NONE; 02315 } 02316 02317 static struct PyMethodDef Vector_methods[] = { 02318 /* in place only */ 02319 {"zero", (PyCFunction) Vector_zero, METH_NOARGS, Vector_zero_doc}, 02320 {"negate", (PyCFunction) Vector_negate, METH_NOARGS, Vector_negate_doc}, 02321 02322 /* operate on original or copy */ 02323 {"normalize", (PyCFunction) Vector_normalize, METH_NOARGS, Vector_normalize_doc}, 02324 {"normalized", (PyCFunction) Vector_normalized, METH_NOARGS, Vector_normalized_doc}, 02325 02326 {"to_2d", (PyCFunction) Vector_to_2d, METH_NOARGS, Vector_to_2d_doc}, 02327 {"resize_2d", (PyCFunction) Vector_resize_2d, METH_NOARGS, Vector_resize_2d_doc}, 02328 {"to_3d", (PyCFunction) Vector_to_3d, METH_NOARGS, Vector_to_3d_doc}, 02329 {"resize_3d", (PyCFunction) Vector_resize_3d, METH_NOARGS, Vector_resize_3d_doc}, 02330 {"to_4d", (PyCFunction) Vector_to_4d, METH_NOARGS, Vector_to_4d_doc}, 02331 {"resize_4d", (PyCFunction) Vector_resize_4d, METH_NOARGS, Vector_resize_4d_doc}, 02332 {"to_tuple", (PyCFunction) Vector_to_tuple, METH_VARARGS, Vector_to_tuple_doc}, 02333 {"to_track_quat", (PyCFunction) Vector_to_track_quat, METH_VARARGS, Vector_to_track_quat_doc}, 02334 02335 /* operation between 2 or more types */ 02336 {"reflect", (PyCFunction) Vector_reflect, METH_O, Vector_reflect_doc}, 02337 {"cross", (PyCFunction) Vector_cross, METH_O, Vector_cross_doc}, 02338 {"dot", (PyCFunction) Vector_dot, METH_O, Vector_dot_doc}, 02339 {"angle", (PyCFunction) Vector_angle, METH_VARARGS, Vector_angle_doc}, 02340 {"rotation_difference", (PyCFunction) Vector_rotation_difference, METH_O, Vector_rotation_difference_doc}, 02341 {"project", (PyCFunction) Vector_project, METH_O, Vector_project_doc}, 02342 {"lerp", (PyCFunction) Vector_lerp, METH_VARARGS, Vector_lerp_doc}, 02343 {"rotate", (PyCFunction) Vector_rotate, METH_O, Vector_rotate_doc}, 02344 02345 {"copy", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc}, 02346 {"__copy__", (PyCFunction) Vector_copy, METH_NOARGS, NULL}, 02347 {NULL, NULL, 0, NULL} 02348 }; 02349 02350 02351 /* Note 02352 Py_TPFLAGS_CHECKTYPES allows us to avoid casting all types to Vector when coercing 02353 but this means for eg that 02354 vec*mat and mat*vec both get sent to Vector_mul and it neesd to sort out the order 02355 */ 02356 02357 PyDoc_STRVAR(vector_doc, 02358 "This object gives access to Vectors in Blender." 02359 ); 02360 PyTypeObject vector_Type = { 02361 PyVarObject_HEAD_INIT(NULL, 0) 02362 /* For printing, in format "<module>.<name>" */ 02363 "mathutils.Vector", /* char *tp_name; */ 02364 sizeof(VectorObject), /* int tp_basicsize; */ 02365 0, /* tp_itemsize; For allocation */ 02366 02367 /* Methods to implement standard operations */ 02368 02369 (destructor) BaseMathObject_dealloc,/* destructor tp_dealloc; */ 02370 NULL, /* printfunc tp_print; */ 02371 NULL, /* getattrfunc tp_getattr; */ 02372 NULL, /* setattrfunc tp_setattr; */ 02373 NULL, /* cmpfunc tp_compare; */ 02374 (reprfunc)Vector_repr, /* reprfunc tp_repr; */ 02375 02376 /* Method suites for standard classes */ 02377 02378 &Vector_NumMethods, /* PyNumberMethods *tp_as_number; */ 02379 &Vector_SeqMethods, /* PySequenceMethods *tp_as_sequence; */ 02380 &Vector_AsMapping, /* PyMappingMethods *tp_as_mapping; */ 02381 02382 /* More standard operations (here for binary compatibility) */ 02383 02384 NULL, /* hashfunc tp_hash; */ 02385 NULL, /* ternaryfunc tp_call; */ 02386 NULL, /* reprfunc tp_str; */ 02387 NULL, /* getattrofunc tp_getattro; */ 02388 NULL, /* setattrofunc tp_setattro; */ 02389 02390 /* Functions to access object as input/output buffer */ 02391 NULL, /* PyBufferProcs *tp_as_buffer; */ 02392 02393 /*** Flags to define presence of optional/expanded features ***/ 02394 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, 02395 vector_doc, /* char *tp_doc; Documentation string */ 02396 /*** Assigned meaning in release 2.0 ***/ 02397 02398 /* call function for all accessible objects */ 02399 (traverseproc)BaseMathObject_traverse, //tp_traverse 02400 02401 /* delete references to contained objects */ 02402 (inquiry)BaseMathObject_clear, //tp_clear 02403 02404 /*** Assigned meaning in release 2.1 ***/ 02405 /*** rich comparisons ***/ 02406 (richcmpfunc)Vector_richcmpr, /* richcmpfunc tp_richcompare; */ 02407 02408 /*** weak reference enabler ***/ 02409 0, /* long tp_weaklistoffset; */ 02410 02411 /*** Added in release 2.2 ***/ 02412 /* Iterators */ 02413 NULL, /* getiterfunc tp_iter; */ 02414 NULL, /* iternextfunc tp_iternext; */ 02415 02416 /*** Attribute descriptor and subclassing stuff ***/ 02417 Vector_methods, /* struct PyMethodDef *tp_methods; */ 02418 NULL, /* struct PyMemberDef *tp_members; */ 02419 Vector_getseters, /* struct PyGetSetDef *tp_getset; */ 02420 NULL, /* struct _typeobject *tp_base; */ 02421 NULL, /* PyObject *tp_dict; */ 02422 NULL, /* descrgetfunc tp_descr_get; */ 02423 NULL, /* descrsetfunc tp_descr_set; */ 02424 0, /* long tp_dictoffset; */ 02425 NULL, /* initproc tp_init; */ 02426 NULL, /* allocfunc tp_alloc; */ 02427 Vector_new, /* newfunc tp_new; */ 02428 /* Low-level free-memory routine */ 02429 NULL, /* freefunc tp_free; */ 02430 /* For PyObject_IS_GC */ 02431 NULL, /* inquiry tp_is_gc; */ 02432 NULL, /* PyObject *tp_bases; */ 02433 /* method resolution order */ 02434 NULL, /* PyObject *tp_mro; */ 02435 NULL, /* PyObject *tp_cache; */ 02436 NULL, /* PyObject *tp_subclasses; */ 02437 NULL, /* PyObject *tp_weaklist; */ 02438 NULL 02439 }; 02440 02441 /*------------------------newVectorObject (internal)------------- 02442 creates a new vector object 02443 pass Py_WRAP - if vector is a WRAPPER for data allocated by BLENDER 02444 (i.e. it was allocated elsewhere by MEM_mallocN()) 02445 pass Py_NEW - if vector is not a WRAPPER and managed by PYTHON 02446 (i.e. it must be created here with PyMEM_malloc())*/ 02447 PyObject *newVectorObject(float *vec, const int size, const int type, PyTypeObject *base_type) 02448 { 02449 VectorObject *self; 02450 02451 if(size > 4 || size < 2) { 02452 PyErr_SetString(PyExc_RuntimeError, 02453 "Vector(): invalid size"); 02454 return NULL; 02455 } 02456 02457 self= base_type ? (VectorObject *)base_type->tp_alloc(base_type, 0) : 02458 (VectorObject *)PyObject_GC_New(VectorObject, &vector_Type); 02459 02460 if(self) { 02461 self->size = size; 02462 02463 /* init callbacks as NULL */ 02464 self->cb_user= NULL; 02465 self->cb_type= self->cb_subtype= 0; 02466 02467 if(type == Py_WRAP) { 02468 self->vec = vec; 02469 self->wrapped = Py_WRAP; 02470 } 02471 else if (type == Py_NEW) { 02472 self->vec= PyMem_Malloc(size * sizeof(float)); 02473 if(vec) { 02474 memcpy(self->vec, vec, size * sizeof(float)); 02475 } 02476 else { /* new empty */ 02477 fill_vn(self->vec, size, 0.0f); 02478 if(size == 4) { /* do the homogenous thing */ 02479 self->vec[3] = 1.0f; 02480 } 02481 } 02482 self->wrapped = Py_NEW; 02483 } 02484 else { 02485 Py_FatalError("Vector(): invalid type!"); 02486 } 02487 } 02488 return (PyObject *) self; 02489 } 02490 02491 PyObject *newVectorObject_cb(PyObject *cb_user, int size, int cb_type, int cb_subtype) 02492 { 02493 float dummy[4] = {0.0, 0.0, 0.0, 0.0}; /* dummy init vector, callbacks will be used on access */ 02494 VectorObject *self= (VectorObject *)newVectorObject(dummy, size, Py_NEW, NULL); 02495 if(self) { 02496 Py_INCREF(cb_user); 02497 self->cb_user= cb_user; 02498 self->cb_type= (unsigned char)cb_type; 02499 self->cb_subtype= (unsigned char)cb_subtype; 02500 PyObject_GC_Track(self); 02501 } 02502 02503 return (PyObject *)self; 02504 }