Blender V2.61 - r43446
|
00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of VideoTexture library 00004 00005 Copyright (c) 2007 The Zdeno Ash Miklas 00006 00007 This program is free software; you can redistribute it and/or modify it under 00008 the terms of the GNU Lesser General Public License as published by the Free Software 00009 Foundation; either version 2 of the License, or (at your option) any later 00010 version. 00011 00012 This program is distributed in the hope that it will be useful, but WITHOUT 00013 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00014 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00015 00016 You should have received a copy of the GNU Lesser General Public License along with 00017 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00018 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00019 http://www.gnu.org/copyleft/lesser.txt. 00020 ----------------------------------------------------------------------------- 00021 */ 00022 00027 #include <PyObjectPlus.h> 00028 #include <structmember.h> 00029 00030 #include "FilterNormal.h" 00031 00032 #include "FilterBase.h" 00033 #include "PyTypeList.h" 00034 00035 // implementation FilterNormal 00036 00037 // constructor 00038 FilterNormal::FilterNormal (void) : m_colIdx(0) 00039 { 00040 // set default depth 00041 setDepth(4); 00042 } 00043 00044 // set color shift 00045 void FilterNormal::setColor (unsigned short colIdx) 00046 { 00047 // check validity of index 00048 if (colIdx < 3) 00049 // set color shift 00050 m_colIdx = colIdx; 00051 } 00052 00053 // set depth 00054 void FilterNormal::setDepth (float depth) 00055 { 00056 m_depth = depth; 00057 m_depthScale = depth / depthScaleKoef; 00058 } 00059 00060 00061 // cast Filter pointer to FilterNormal 00062 inline FilterNormal * getFilter (PyFilter * self) 00063 { return static_cast<FilterNormal*>(self->m_filter); } 00064 00065 00066 // python methods and get/sets 00067 00068 // get index of color used to calculate normal 00069 static PyObject * getColor (PyFilter * self, void * closure) 00070 { 00071 return Py_BuildValue("H", getFilter(self)->getColor()); 00072 } 00073 00074 // set index of color used to calculate normal 00075 static int setColor (PyFilter * self, PyObject * value, void * closure) 00076 { 00077 // check validity of parameter 00078 if (value == NULL || !PyLong_Check(value)) 00079 { 00080 PyErr_SetString(PyExc_TypeError, "filt.colorIdx = int: VideoTexture.FilterNormal, expected the value must be a int"); 00081 return -1; 00082 } 00083 // set color index 00084 getFilter(self)->setColor((unsigned short)(PyLong_AsSsize_t(value))); 00085 // success 00086 return 0; 00087 } 00088 00089 00090 // get depth 00091 static PyObject * getDepth (PyFilter * self, void * closure) 00092 { 00093 return Py_BuildValue("f", getFilter(self)->getDepth()); 00094 } 00095 00096 // set depth 00097 static int setDepth (PyFilter * self, PyObject * value, void * closure) 00098 { 00099 // check validity of parameter 00100 if (value) 00101 { 00102 float depth= (float)PyFloat_AsDouble(value); 00103 if ((depth==-1 && PyErr_Occurred()) == 0) /* no error converting to a float? */ 00104 { 00105 // set depth 00106 getFilter(self)->setDepth(depth); 00107 // success 00108 return 0; 00109 } 00110 } 00111 00112 PyErr_SetString(PyExc_TypeError, "filt.depth = float: VideoTexture.FilterNormal, expected the value must be a float"); 00113 return -1; 00114 } 00115 00116 00117 // attributes structure 00118 static PyGetSetDef filterNormalGetSets[] = 00119 { 00120 {(char*)"colorIdx", (getter)getColor, (setter)setColor, (char*)"index of color used to calculate normal (0 - red, 1 - green, 2 - blue)", NULL}, 00121 {(char*)"depth", (getter)getDepth, (setter)setDepth, (char*)"depth of relief", NULL}, 00122 // attributes from FilterBase class 00123 {(char*)"previous", (getter)Filter_getPrevious, (setter)Filter_setPrevious, (char*)"previous pixel filter", NULL}, 00124 {NULL} 00125 }; 00126 00127 // define python type 00128 PyTypeObject FilterNormalType = 00129 { 00130 PyVarObject_HEAD_INIT(NULL, 0) 00131 "VideoTexture.FilterNormal", /*tp_name*/ 00132 sizeof(PyFilter), /*tp_basicsize*/ 00133 0, /*tp_itemsize*/ 00134 (destructor)Filter_dealloc,/*tp_dealloc*/ 00135 0, /*tp_print*/ 00136 0, /*tp_getattr*/ 00137 0, /*tp_setattr*/ 00138 0, /*tp_compare*/ 00139 0, /*tp_repr*/ 00140 0, /*tp_as_number*/ 00141 0, /*tp_as_sequence*/ 00142 0, /*tp_as_mapping*/ 00143 0, /*tp_hash */ 00144 0, /*tp_call*/ 00145 0, /*tp_str*/ 00146 0, /*tp_getattro*/ 00147 0, /*tp_setattro*/ 00148 0, /*tp_as_buffer*/ 00149 Py_TPFLAGS_DEFAULT, /*tp_flags*/ 00150 "Filter for Blue Screen objects", /* tp_doc */ 00151 0, /* tp_traverse */ 00152 0, /* tp_clear */ 00153 0, /* tp_richcompare */ 00154 0, /* tp_weaklistoffset */ 00155 0, /* tp_iter */ 00156 0, /* tp_iternext */ 00157 NULL, /* tp_methods */ 00158 0, /* tp_members */ 00159 filterNormalGetSets, /* tp_getset */ 00160 0, /* tp_base */ 00161 0, /* tp_dict */ 00162 0, /* tp_descr_get */ 00163 0, /* tp_descr_set */ 00164 0, /* tp_dictoffset */ 00165 (initproc)Filter_init<FilterNormal>, /* tp_init */ 00166 0, /* tp_alloc */ 00167 Filter_allocNew, /* tp_new */ 00168 }; 00169