summaryrefslogtreecommitdiffstats
path: root/Tests/FindPython/NumPy/arraytest.c
blob: db259e55a3658e82990da3542dd0a0c353a1ef6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "Python.h"

#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
#include "numpy/arrayobject.h"

#include <math.h>

static PyObject* vecsq(PyObject* self, PyObject* args);

static PyMethodDef arraytestMethods[] = { { "vecsq", vecsq, METH_VARARGS },
                                          { NULL, NULL } };

static PyObject* vecsq(PyObject* self, PyObject* args)
{
  PyArrayObject *vecin, *vecout;
  npy_intp dims[2];
  double *cin, *cout;
  int i, j, n, m;

  if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &vecin))
    return NULL;

  n = dims[0] = PyArray_NDIM(vecin);
  vecout = (PyArrayObject*)PyArray_SimpleNew(1, dims, NPY_DOUBLE);

  cin = (double*)PyArray_DATA(vecin);
  cout = (double*)PyArray_DATA(vecout);

  for (i = 0; i < n; i++) {
    cout[i] = cin[i] * cin[i];
  }
  return PyArray_Return(vecout);
}

#if defined(PYTHON2)
PyMODINIT_FUNC init_C_arraytest(void)
{
  (void)Py_InitModule("arraytest2", arraytestMethods);
  import_array();
}
#endif

#if defined(PYTHON3)
static struct PyModuleDef arraytestmodule = {
  PyModuleDef_HEAD_INIT, "arraytest3", /* name of module */
  NULL,                                /* module documentation, may be NULL */
  -1, /* size of per-interpreter state of the module,
         or -1 if the module keeps state in global variables. */
  arraytestMethods
};

PyMODINIT_FUNC PyInit_C_arraytest(void)
{
  PyObject* po = PyModule_Create(&arraytestmodule);
  import_array();
  return po;
}
#endif
F MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** $QT_END_LICENSE$ ** ****************************************************************************/ #include <QtCore> #include <QtGui> class Pixmap : public QGraphicsWidget { Q_OBJECT public: Pixmap(const QPixmap &pix, QGraphicsItem *parent = 0) : QGraphicsWidget(parent), orig(pix), p(pix) { } void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { painter->drawPixmap(QPointF(), p); } virtual void mousePressEvent(QGraphicsSceneMouseEvent * ) { emit clicked(); } virtual void setGeometry(const QRectF &rect) { QGraphicsWidget::setGeometry(rect); if (rect.size().width() > orig.size().width()) p = orig.scaled(rect.size().toSize()); else p = orig; } Q_SIGNALS: void clicked(); private: QPixmap orig; QPixmap p; }; void createStates(const QObjectList &objects, const QRect &selectedRect, QState *parent) { for (int i = 0; i < objects.size(); ++i) { QState *state = new QState(parent); state->assignProperty(objects.at(i), "geometry", selectedRect); parent->addTransition(objects.at(i), SIGNAL(clicked()), state); } } void createAnimations(const QObjectList &objects, QStateMachine *machine) { for (int i=0; i<objects.size(); ++i) machine->addDefaultAnimation(new QPropertyAnimation(objects.at(i), "geometry")); } int main(int argc, char **argv) { Q_INIT_RESOURCE(appchooser); QApplication app(argc, argv); Pixmap *p1 = new Pixmap(QPixmap(":/digikam.png")); Pixmap *p2 = new Pixmap(QPixmap(":/akregator.png")); Pixmap *p3 = new Pixmap(QPixmap(":/accessories-dictionary.png")); Pixmap *p4 = new Pixmap(QPixmap(":/k3b.png")); p1->setObjectName("p1"); p2->setObjectName("p2"); p3->setObjectName("p3"); p4->setObjectName("p4"); p1->setGeometry(QRectF(0.0, 0.0, 64.0, 64.0)); p2->setGeometry(QRectF(236.0, 0.0, 64.0, 64.0)); p3->setGeometry(QRectF(236.0, 236.0, 64.0, 64.0)); p4->setGeometry(QRectF(0.0, 236.0, 64.0, 64.0)); QGraphicsScene scene(0, 0, 300, 300); scene.setBackgroundBrush(Qt::white); scene.addItem(p1); scene.addItem(p2); scene.addItem(p3); scene.addItem(p4); QGraphicsView window(&scene); window.setFrameStyle(0); window.setAlignment(Qt::AlignLeft | Qt::AlignTop); window.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); window.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QStateMachine machine; machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties); QState *group = new QState(&machine); group->setObjectName("group"); QRect selectedRect(86, 86, 128, 128); QState *idleState = new QState(group); group->setInitialState(idleState); QObjectList objects; objects << p1 << p2 << p3 << p4; createStates(objects, selectedRect, group); createAnimations(objects, &machine); machine.setInitialState(group); machine.start(); window.resize(300, 300); window.show(); return app.exec(); } #include "main.moc"