layer1/Ray.h (131 lines of code) (raw):
/*
A* -------------------------------------------------------------------
B* This file contains source code for the PyMOL computer program
C* copyright 1998-2000 by Warren Lyford Delano of DeLano Scientific.
D* -------------------------------------------------------------------
E* It is unlawful to modify or remove this copyright notice.
F* -------------------------------------------------------------------
G* Please see the accompanying LICENSE file for further information.
H* -------------------------------------------------------------------
I* Additional authors of this source file include:
-*
-*
-*
Z* -------------------------------------------------------------------
*/
#ifndef _H_Ray
#define _H_Ray
#include"Base.h"
#include"Basis.h"
#include"PyMOLGlobals.h"
#define cRayMaxBasis 10
typedef struct _CRayAntiThreadInfo CRayAntiThreadInfo;
typedef struct _CRayHashThreadInfo CRayHashThreadInfo;
typedef struct _CRayThreadInfo CRayThreadInfo;
CRay *RayNew(PyMOLGlobals * G, int antialias);
void RayFree(CRay * I);
void RayPrepare(CRay * I, float v0, float v1, float v2,
float v3, float v4, float v5,
float fov, float *pos,
float *mat, float *rotMat,
float aspRat, int width, int height,
float pixel_scale, int ortho, float pixel_ratio,
float back_ratio, float magnified);
void RayRender(CRay * I, unsigned int *image,
double timing, float angle, int antialias, unsigned int *return_bg);
void RayRenderPOV(CRay * I, int width, int height, char **headerVLA,
char **charVLA, float front, float back, float fov, float angle,
int antialias);
void RayRenderIDTF(CRay * I, char **node_vla, char **rsrc_vla);
void RayRenderVRML1(CRay * I, int width, int height,
char **vla_ptr, float front, float back,
float fov, float angle, float z_corr);
void RayRenderVRML2(CRay * I, int width, int height,
char **vla_ptr, float front, float back,
float fov, float angle, float z_corr);
void RayRenderCOLLADA(CRay * I, int width, int height,
char **vla_ptr, float front, float back, float fov);
void RayRenderObjMtl(CRay * I, int width, int height, char **objVLA_ptr,
char **mtlVLA_ptr, float front, float back, float fov,
float angle, float z_corr);
void RayRenderTest(CRay * I, int width, int height, float front, float back, float fov);
void RaySetTTT(CRay * I, int flag, float *ttt);
void RayGetTTT(CRay * I, float *ttt);
void RayPushTTT(CRay * I);
void RayPopTTT(CRay * I);
void RaySetContext(CRay * I, int context);
void RayRenderColorTable(CRay * I, int width, int height, int *image);
int RayTraceThread(CRayThreadInfo * T);
int RayGetNPrimitives(CRay * I);
void RayGetScaledAxes(CRay * I, float *xn, float *yn);
int RayHashThread(CRayHashThreadInfo * T);
int RayAntiThread(CRayAntiThreadInfo * T);
// JMS: added so they can be used in COLLADA.c
int RayExpandPrimitives(CRay * I);
int RayTransformFirst(CRay * I, int perspective, int identity);
void RayComputeBox(CRay * I);
int TriangleReverse(CPrimitive * p);
typedef struct {
int op;
int x1, y1, z1;
int x2, y2, z2;
int x3, y3, z3;
int c;
int r;
} G3dPrimitive;
G3dPrimitive *RayRenderG3d(CRay * I, int width, int height, float front,
float back, float fov, int quiet);
struct _CRay {
// methods
int sphere3fv(const float *v, float r);
int cylinder3fv(const float *v1, const float *v2, float r, const float *c1, const float *c2);
int customCylinder3fv(const float *v1, const float *v2, float r, const float *c1,
const float *c2, int cap1, int cap2);
int cone3fv(const float *v1, const float *v2, float r1, float r2, const float *c1,
const float *c2, int cap1, int cap2);
int sausage3fv(const float *v1, const float *v2, float r, const float *c1, const float *c2);
void color3fv(const float *c);
int triangle3fv(
const float *v1, const float *v2, const float *v3,
const float *n1, const float *n2, const float *n3, const float *c1, const float *c2, const float *c3);
int triangleTrans3fv(
const float *v1, const float *v2, const float *v3,
const float *n1, const float *n2, const float *n3,
const float *c1, const float *c2, const float *c3,
float t1, float t2, float t3);
void wobble(int mode, const float *par);
void transparentf(float t);
int character(int char_id);
void interiorColor3fv(const float *v, int passive);
int ellipsoid3fv(const float *v, float r, const float *n1, const float *n2, const float *n3);
int setLastToNoLighting(char no_lighting);
/* everything below should be private */
PyMOLGlobals *G;
CPrimitive *Primitive;
int NPrimitive;
CBasis *Basis;
int NBasis;
int *Vert2Prim;
float CurColor[3], IntColor[3];
float ModelView[16];
float ProMatrix[16];
float Rotation[16];
float Volume[6];
float Range[3];
int BigEndian;
int Wobble;
float WobbleParam[3];
float Trans;
float Random[256];
int TTTFlag;
float TTT[16];
float *TTTStackVLA;
int TTTStackDepth;
int Context;
int CheckInterior;
float AspRatio;
int Width, Height;
float PixelRadius;
int Ortho;
float min_box[3];
float max_box[3];
int Sampling;
float PixelRatio;
float Magnified; /* ray pixels to screen pixels */
float FrontBackRatio;
double PrimSize;
int PrimSizeCnt;
float Fov, Pos[3];
unsigned char *bkgrd_data;
int bkgrd_width, bkgrd_height;
};
void RayGetScreenVertex(CRay * I, float *v, float *dest);
float RayGetScreenVertexScale(CRay * I, float *v1);
void RayAdjustZtoScreenZ(CRay * ray, float *pos, float z);
void RayAdjustZtoScreenZofPoint(CRay * ray, float *pos, float *zpoint);
void RaySetPointToWorldScreenRelative(CRay * ray, float *pos, float *screenPt);
float RayGetScaledAllAxesAtPoint(CRay * I, float *pt, float *xn, float *yn, float *zn);
float* RayGetProMatrix(CRay * I);
#endif