home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
MODEL
/
POLY.H
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-25
|
8KB
|
335 lines
/*
* ポリゴンデータ管理ライブラリ
*
* Copyright T.Kobayashi 1993.9.5
*/
#ifndef POLY
#define POLY 1
#ifndef BUFFER
# include "buffer.h"
#endif
#ifndef MATRIX
# include "matrix.h"
#endif
#ifndef COLOR
# include "color.h"
#endif
#define POLY_SIMPLE 0
#define POLY_SHADE 1
#define POLY_UV 2
#define POLY_UVSHADE 3
#define SELECT_UPDATE 0
#define SELECT_AND 1
#define SELECT_OR 2
#define SELECT_XOR 3
#define SELECT_LOG 3
#define SELECT_ALL 0
#define SELECT_SUB 16
#define MODE_INVISIBLE 1
#define FILE_OVERWRITE 0
#define FILE_APPEND 1
#define SHADE_OFF 0
#define SHADE_ON 1
#define SHADE_CREATE 2
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#ifndef ON
#define ON 1
#define OFF 0
#endif
#ifndef _alloca
#define _alloca( size ) __builtin_alloca( size )
#endif
#define F_NAME_LEN 512
#define PolyTop() BufferTop()
#define PolyNext( a ) BufferNext( a )
/*
* アトリビュート
*/
#define ATTR_NAME_LEN 16
typedef struct {
short flag ;
short code ;
#if 0
short r, g, b ;
short amb, dif, spc, size, h ;
#else
Color col ; /* 色 */
Color amb, dif, spc, size ; /* アトリビュートのパラメータ */
Color ref, tra, rfr, att ; /* (共通規格参照) */
short h ; /* スペキュラーの色相 */
int maptype ; /* マッピングのタイプ */
char colorfile[F_NAME_LEN] ; /* マッピング元の画像ファイル名*/
int mapsize[2][2], mapview[2][2], mapwind[2][2] ;
/* マッピングパラメータ */
#endif
char name[ATTR_NAME_LEN+1] ;
char fname[F_NAME_LEN+1] ;
}
Attrbute ;
extern Attrbute *AttrData ;
extern int AttrCurrent ;
extern int AttrSize ;
extern int AttrLast ;
/*
* オブジェクト
*/
#define OBJ_NAME_LEN 16
typedef struct {
short flag ;
short edit ;
char name[OBJ_NAME_LEN+1] ;
char fname[F_NAME_LEN+1] ;
}
ObjectStruct ;
extern ObjectStruct *ObjData ;
extern int ObjCurrent ;
extern int ObjSize ;
extern int ObjLast ;
/*
* ポリゴン
*/
typedef struct {
short x, y, z ;
short vx, vy, vz ;
short u, v ;
}
Vertex ;
typedef struct {
short type ;
short ref ;
int size ;
int dtype ;
Vertex ver ;
}
VertexClass ;
#ifndef __cplusplus
typedef struct {
short flag, size ;
short select ; /* 選択フラグ */
short type ; /* データタイプ */
short atr ; /* アトリビュート番号 */
short obj ; /* オブジェクト番号 */
short vers ; /* 頂点数 */
short mode ; /* モード */
short vec[3]; /* 法線ベクトル(左回りが表) */
short dmy; /* ダミー (4の倍数へ) */
Vertex ver[1] ; /* 頂点 */
}
Polygon ;
#endif
/*
* 選択状態
*/
typedef struct _SelectClass {
short type ;
short ref ;
int size ;
int polys ;
int selbuf[1] ;
}
SelectClass ;
typedef struct _EdgeData {
short x1, y1, z1;
short x2, y2, z2;
long count;
} EdgeData;
/*
* エッジ
*/
#ifdef DATA
typedef struct _EdgeClass {
Object object;
short min[3], max[3];
int allocsize, edges;
EdgeData edge[1];
} EdgeClass;
typedef struct _VertexSetClass {
Object object;
int allocsize, vers;
Vertex ver[1];
} VertexSetClass;
#endif
extern int VertexClassID ;
extern int VectorClassID ;
#ifndef __cplusplus
extern Polygon *CurrentPoly ;
extern Polygon *PolyPtr ;
#endif
extern int MaxVertex ;
extern int Selects ;
#ifdef __cplusplus
extern "C" {
#endif
/* poly.c */
extern void PolyInit( int, int, int, int );
extern void PolyExit( void );
extern int PolySize( int );
extern int Polygons( void );
extern void PolyAppend( void );
#if 0
extern int PolyLoad( void );
#endif
extern void *PolyLoad( void );
extern void *PolyLoadPtr( void *p );
extern void PolySave( void );
extern void PolyDelete( void );
extern void PolyMove( Matrix );
extern void PolyInvisible( int );
extern void PolyShiftVertex( int );
extern void PolyInvVertex( void );
/* atr.c */
extern void AttrInit( int );
extern void AttrExit( void );
extern int AttrAppend( char* );
extern int AttrSearch( char* );
extern int AttrSearchOrAppend( char* );
extern void AttrChange( int );
extern int AttrReadFile( char*, int );
extern int AttrDelete( int );
extern int AttrWriteFile( char *file, int objno, int mode );
/* object.c */
extern void ObjInit( int );
extern void ObjExit( void );
extern int ObjAppend( char* );
extern int ObjSearch( char* );
extern int ObjSearchOrAppend( char* );
extern void ObjChange( int );
extern void ObjValid( void );
extern int ObjDelete( int );
/* select.c */
extern void PolySelectAll( int, int );
extern void PolySelectArea( int, int, Vertex*, Vertex* );
extern void PolySelectPers( int, int, int, int, int, int );
extern void PolySelectAttr( int, int, int );
extern void PolySelectObj( int, int, int );
extern void PolySelectPolyType( int, int, int );
extern int SelectBox( Vertex*, Vertex* );
extern void SelectSave( SelectClass* );
extern void SelectCurrent( SelectClass *sel );
extern void SelectLoad( SelectClass* );
extern int SelectNumber( SelectClass*, int );
#ifndef __cplusplus
extern Polygon *GetSelectPolyNumber( SelectClass*, int );
#endif
extern int SelectPolygons( SelectClass* );
extern void PolySelectDelete( SelectClass *sel) ;
extern void SelectAdjoint(SelectClass *dst, SelectClass *src);
/* file.c */
extern int PolyReadFile( char*, int );
extern int PolyWriteFile( int, int );
#ifdef VECTOR
extern void WriteFrame( Matrix, char*, char*, Vector* );
#endif
/* frame.c */
extern int FrmReadFile( char *file, char *dir, int );
/* search.c */
extern Vertex *PolyVertex( Vertex*, int );
extern void PolyPlane( Vertex*, int, const Vertex* );
/* shade.c */
extern void PolyShade( int );
extern void PolyShadeInv( void );
extern void Coefficent( int[3], Vertex*, int );
/* map.c */
extern void PolyMap( int, Matrix, int, int, int, int );
/* edge.c */
extern void EdgeLibInit( void );
#ifdef DATA
extern int EdgeSearch(EdgeClass *edge, Vertex *p1, Vertex *p2);
extern EdgeClass *EdgeAppend(EdgeClass *edge, Vertex *p1, Vertex *p2);
extern EdgeClass *EdgeDelete(EdgeClass *edge, Vertex *p1, Vertex *p2);
extern EdgeClass *EdgeAlloc(int size);
extern EdgeClass *EdgeRealloc(EdgeClass *edge, int size);
extern EdgeClass *EdgeSelectVertex(EdgeClass *edge, Vertex *p1);
#ifdef MATRIXCLASS
extern EdgeClass *EdgeMulMatrix(EdgeClass *edge, MatrixClass *mat);
#endif
extern EdgeClass *EdgeLogicalOr(EdgeClass *e1, EdgeClass *e2);
extern EdgeClass *EdgeLogicalSub(EdgeClass *e1, EdgeClass *e2);
extern EdgeClass *EdgeLogicalAnd(EdgeClass *e1, EdgeClass *e2);
extern EdgeClass *EdgeLogicalXor(EdgeClass *e1, EdgeClass *e2);
extern int EdgeLogicalEqual(EdgeClass *e1, EdgeClass *e2);
extern EdgeClass *EdgeSelect(void);
extern EdgeClass *EdgeSelectCount(EdgeClass *edge, int begin, int end);
extern void PolySelectEdge( EdgeClass *edge, int flag, int sw);
extern void DrawEdge(EdgeClass* edge, int color);
#endif
/* verset.c */
extern void VertexSetLibInit( void );
#ifdef DATA
extern int VertexSearch(VertexSetClass *verset, Vertex *vd);
extern VertexSetClass *VertexAppend(VertexSetClass *verset, Vertex *vd);
extern VertexSetClass *VertexDelete(VertexSetClass *verset, Vertex *vd);
extern VertexSetClass *VertexAlloc(int size);
#ifdef MATRIXCLASS
extern VertexSetClass *VertexMulMatrix(VertexSetClass *verset, MatrixClass* mat);
#endif
extern VertexSetClass *VertexLogicalOr(VertexSetClass *e1, VertexSetClass *e2);
extern VertexSetClass *VertexLogicalSub(VertexSetClass *e1, VertexSetClass *e2);
extern VertexSetClass *VertexLogicalAnd(VertexSetClass *e1, VertexSetClass *e2);
extern VertexSetClass *VertexLogicalXor(VertexSetClass *e1, VertexSetClass *e2);
extern int VertexLogicalEqual(VertexSetClass *e1, VertexSetClass *e2);
extern VertexSetClass *VertexSelect(void);
extern void PolySelectVertex( VertexSetClass *verset, int flag, int sw);
extern VertexSetClass *VertexPositionVertex(VertexSetClass *verset);
extern VertexSetClass *VertexSelectPosition(VertexSetClass *verset, Vertex *ver);
#endif
/* polylib.c */
extern void PolyLibInit( void );
/* sellib.c */
extern void SelectLibInit( void );
/* atrlib.c */
extern void AttrLibInit( void );
/* objlib.c */
extern void ObjLibInit( void );
#ifdef __cplusplus
}
#endif
#endif