include/raytracermodule.h
author Radek Brich <radek.brich@devl.cz>
Thu, 15 May 2008 00:07:25 +0200
branchpyrit
changeset 96 9eb71e76c7fd
child 97 2a853d284a6a
permissions -rw-r--r--
added Python binding for material.h classes added raytracermodule.h header file for declarations updated car.py demo added texture.py demo (based on spheres_glass.py) all remaining 'centre' changed to more common 'center' added some more const's to material.h

/*
 * raytracermodule.h: raytracer module for Python
 *
 * This file is part of Pyrit Ray Tracer.
 *
 * Copyright 2006, 2007, 2008  Radek Brich
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef RAYTRACERMODULE_H
#define RAYTRACERMODULE_H

#include <Python.h>
#include "raytracer.h"
#include "octree.h"
#include "kdtree.h"


#define TYPE_OBJECT(name, basicsize, dealloc, flags, doc, methods, members, base, init) \
{ \
	PyObject_HEAD_INIT(NULL) \
	0,                          /* ob_size */ \
	(name),                     /* tp_name */ \
	(basicsize),                /* tp_basicsize*/ \
	0,                          /* tp_itemsize*/ \
	(dealloc),                  /* tp_dealloc*/ \
	0,                          /* tp_print*/\
	0,                          /* tp_getattr*/\
	0,                          /* tp_setattr*/\
	0,                          /* tp_compare*/\
	0,                          /* tp_repr*/\
	0,                          /* tp_as_number*/\
	0,                          /* tp_as_sequence*/\
	0,                          /* tp_as_mapping*/\
	0,                          /* tp_hash */\
	0,                          /* tp_call*/\
	0,                          /* tp_str*/\
	PyObject_GenericGetAttr,    /* tp_getattro*/\
	0,                          /* tp_setattro*/\
	0,                          /* tp_as_buffer*/\
	(flags),                    /* tp_flags*/\
	(doc),                      /* tp_doc */\
	0,                          /* tp_traverse */\
	0,                          /* tp_clear */\
	0,                          /* tp_richcompare */\
	0,                          /* tp_weaklistoffset */\
	0,                          /* tp_iter */\
	0,                          /* tp_iternext */\
	(methods),                  /* tp_methods */\
	(members),                  /* tp_members */\
	0,                          /* tp_getset */\
	(base),                     /* tp_base */\
	0,                          /* tp_dict */ \
	0,                          /* tp_descr_get */ \
	0,                          /* tp_descr_set */ \
	0,                          /* tp_dictoffset */ \
	(init),                     /* tp_init */ \
	0,                          /* tp_alloc */ \
	0,                          /* tp_new */ \
	0,                          /* tp_free */ \
}

/** Light object */
typedef struct {
	PyObject_HEAD
	Light *light;
} LightObject;

/** Camera object */
typedef struct {
	PyObject_HEAD
	Camera *camera;
} CameraObject;

/** Pixmap object */
typedef struct {
	PyObject_HEAD
	const Pixmap *pixmap;
} PixmapObject;

/** abstract TextureMap object */
typedef struct {
	PyObject_HEAD
	TextureMap *texturemap;
} TextureMapObject;

/** PlanarMap object - inherits TextureMap */
typedef struct {
	TextureMapObject texturemap;
} PlanarMapObject;

/** CubicMap object - inherits TextureMap */
typedef struct {
	TextureMapObject texturemap;
} CubicMapObject;

/** CylinderMap object - inherits TextureMap */
typedef struct {
	TextureMapObject texturemap;
} CylinderMapObject;

/** SphereMap object - inherits TextureMap */
typedef struct {
	TextureMapObject texturemap;
} SphereMapObject;

/** abstract ColourMap object */
typedef struct {
	PyObject_HEAD
	ColourMap *colourmap;
} ColourMapObject;

/** LinearColourMap object - inherits ColourMap */
typedef struct {
	ColourMapObject colourmap;
} LinearColourMapObject;

/** BoundColourMap object - inherits ColourMap */
typedef struct {
	ColourMapObject colourmap;
	Float *bounds;
	Colour *colours;
} BoundColourMapObject;

/** abstract Texture object */
typedef struct {
	PyObject_HEAD
	Texture *texture;
} TextureObject;

/** ImageTexture object - inherits Texture */
typedef struct {
	TextureObject texture;
} ImageTextureObject;

/** CheckersTexture object - inherits Texture */
typedef struct {
	TextureObject texture;
} CheckersTextureObject;

/** CloudTexture object - inherits Texture */
typedef struct {
	TextureObject texture;
} CloudTextureObject;

/** Material object */
typedef struct {
	PyObject_HEAD
	Material *material;
} MaterialObject;

/** NormalVertex object */
typedef struct {
	PyObject_HEAD
	NormalVertex *nvertex;
} NormalVertexObject;

/** abstract Shape object */
typedef struct {
	PyObject_HEAD
	Shape *shape;
} ShapeObject;

/** Triangle object - inherits Shape */
typedef struct {
	ShapeObject shape;
} TriangleObject;

/** Sphere object - inherits Shape */
typedef struct {
	ShapeObject shape;
} SphereObject;

/** Box object - inherits Shape */
typedef struct {
	ShapeObject shape;
} BoxObject;

/** abstract Sampler object */
typedef struct {
	PyObject_HEAD
	Sampler *sampler;
} SamplerObject;

/** DefaultSampler object - inherits Sampler */
typedef struct {
	SamplerObject sampler;
} DefaultSamplerObject;

/** Container object */
typedef struct {
	PyObject_HEAD
	Container *container;
} ContainerObject;

/** Octree object - inherits Container */
typedef struct {
	ContainerObject container;
} OctreeObject;

/** KdTree object - inherits Container */
typedef struct {
	ContainerObject container;
} KdTreeObject;

/** main Raytracer object */
typedef struct {
	PyObject_HEAD
	Raytracer *raytracer;
	vector<PyObject*> *children;
} RaytracerObject;

#endif