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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
/*
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 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;
};
#endif
|