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 >
C/C++ Source or Header  |  1996-07-25  |  8KB  |  335 lines

  1. /*
  2.  *        ポリゴンデータ管理ライブラリ
  3.  *
  4.  *        Copyright    T.Kobayashi        1993.9.5
  5.  */
  6.  
  7. #ifndef POLY
  8. #define    POLY    1
  9.  
  10. #ifndef    BUFFER
  11. #    include "buffer.h"
  12. #endif
  13.  
  14. #ifndef    MATRIX
  15. #    include "matrix.h"
  16. #endif
  17.  
  18. #ifndef    COLOR
  19. #    include "color.h"
  20. #endif
  21.  
  22. #define    POLY_SIMPLE        0
  23. #define    POLY_SHADE        1
  24. #define    POLY_UV            2
  25. #define    POLY_UVSHADE    3
  26.  
  27. #define    SELECT_UPDATE    0
  28. #define    SELECT_AND        1
  29. #define    SELECT_OR        2
  30. #define    SELECT_XOR        3
  31. #define    SELECT_LOG        3
  32.  
  33. #define    SELECT_ALL        0
  34. #define    SELECT_SUB        16
  35.  
  36. #define    MODE_INVISIBLE    1
  37. #define    FILE_OVERWRITE    0
  38. #define    FILE_APPEND        1
  39.  
  40. #define SHADE_OFF         0
  41. #define SHADE_ON          1
  42. #define SHADE_CREATE    2
  43.  
  44. #ifndef    TRUE
  45.     #define    TRUE    1
  46.     #define    FALSE    0
  47. #endif
  48.  
  49. #ifndef    ON
  50.     #define    ON        1
  51.     #define    OFF        0
  52. #endif
  53.  
  54. #ifndef    _alloca
  55.     #define    _alloca( size )        __builtin_alloca( size )
  56. #endif
  57.  
  58. #define    F_NAME_LEN    512
  59.  
  60. #define    PolyTop()        BufferTop()
  61. #define    PolyNext( a )    BufferNext( a )
  62.  
  63.  
  64. /*
  65.  *        アトリビュート
  66.  */
  67. #define    ATTR_NAME_LEN    16
  68.  
  69. typedef    struct    {
  70.     short    flag ;
  71.     short    code ;
  72. #if 0
  73.     short    r, g, b ;
  74.     short    amb, dif, spc, size, h ;
  75. #else
  76.     Color        col ;                    /*    色                            */
  77.     Color        amb, dif, spc, size ;    /*    アトリビュートのパラメータ    */
  78.     Color        ref, tra, rfr, att ;    /*      (共通規格参照)            */
  79.     short        h ;                        /*    スペキュラーの色相            */
  80.     int            maptype ;                /*    マッピングのタイプ            */
  81.     char        colorfile[F_NAME_LEN] ;    /*    マッピング元の画像ファイル名*/
  82.     int            mapsize[2][2], mapview[2][2], mapwind[2][2] ;
  83.                                         /*    マッピングパラメータ        */
  84. #endif
  85.     char    name[ATTR_NAME_LEN+1] ;
  86.     char    fname[F_NAME_LEN+1] ;
  87. }
  88.     Attrbute ;
  89.  
  90. extern    Attrbute    *AttrData ;
  91. extern    int            AttrCurrent ;
  92. extern    int            AttrSize ;
  93. extern    int            AttrLast ;
  94.  
  95. /*
  96.  *        オブジェクト
  97.  */
  98. #define    OBJ_NAME_LEN    16
  99. typedef    struct {
  100.     short    flag ;
  101.     short    edit ;
  102.     char    name[OBJ_NAME_LEN+1] ;
  103.     char    fname[F_NAME_LEN+1] ;
  104. }
  105.     ObjectStruct ;
  106. extern    ObjectStruct *ObjData ;
  107. extern    int            ObjCurrent ;
  108. extern    int            ObjSize ;
  109. extern    int            ObjLast ;
  110.  
  111.  
  112. /*
  113.  *        ポリゴン
  114.  */
  115. typedef    struct    {
  116.     short        x, y, z ;
  117.     short        vx, vy, vz ;
  118.     short        u, v ;
  119. }
  120.     Vertex ;
  121.  
  122. typedef    struct    {
  123.     short        type ;
  124.     short        ref ;
  125.     int            size ;
  126.     int            dtype ;
  127.     Vertex        ver ;
  128. }
  129.     VertexClass ;
  130.  
  131. #ifndef __cplusplus
  132. typedef    struct    {
  133.     short    flag, size  ;
  134.     short    select ;        /*    選択フラグ            */
  135.     short    type ;            /*    データタイプ        */
  136.     short    atr ;            /*    アトリビュート番号    */
  137.     short    obj ;            /*    オブジェクト番号    */
  138.     short    vers ;            /*    頂点数                */
  139.     short    mode ;            /*    モード                */
  140.     short    vec[3];          /*    法線ベクトル(左回りが表)    */
  141.     short    dmy;            /*     ダミー (4の倍数へ)    */
  142.     Vertex    ver[1] ;        /*    頂点                */
  143. }
  144.     Polygon ;
  145. #endif
  146.  
  147. /*
  148.  *        選択状態
  149.  */
  150. typedef    struct    _SelectClass {
  151.     short        type ;
  152.     short        ref ;
  153.     int            size ;
  154.     int            polys ;
  155.     int            selbuf[1] ;
  156. }
  157.     SelectClass ;
  158.  
  159.  
  160. typedef struct _EdgeData {
  161.     short    x1, y1, z1;
  162.     short    x2, y2, z2;
  163.     long    count;
  164. }    EdgeData;
  165.  
  166. /*
  167.  *        エッジ
  168.  */
  169. #ifdef DATA
  170. typedef struct    _EdgeClass {
  171.     Object    object;
  172.     short    min[3], max[3];
  173.     int        allocsize, edges;
  174.     EdgeData    edge[1];
  175. }    EdgeClass;
  176.  
  177. typedef struct _VertexSetClass {
  178.     Object object;
  179.     int allocsize, vers;
  180.     Vertex    ver[1];
  181. }    VertexSetClass;
  182. #endif
  183.  
  184. extern    int        VertexClassID ;
  185. extern    int        VectorClassID ;
  186. #ifndef __cplusplus
  187. extern    Polygon    *CurrentPoly ;
  188. extern    Polygon    *PolyPtr ;
  189. #endif
  190. extern    int        MaxVertex ;
  191. extern    int        Selects ;
  192.  
  193. #ifdef __cplusplus
  194. extern "C" {
  195. #endif
  196. /*    poly.c    */
  197. extern    void    PolyInit( int, int, int, int );
  198. extern    void    PolyExit( void );
  199. extern    int        PolySize( int );
  200. extern    int        Polygons( void );
  201. extern    void    PolyAppend( void );
  202. #if 0
  203. extern    int        PolyLoad( void );
  204. #endif
  205. extern    void    *PolyLoad( void );
  206. extern    void    *PolyLoadPtr( void *p );
  207. extern    void    PolySave( void );
  208. extern    void    PolyDelete( void );
  209. extern    void    PolyMove( Matrix );
  210. extern    void    PolyInvisible( int );
  211. extern    void    PolyShiftVertex( int );
  212. extern    void    PolyInvVertex( void );
  213.  
  214. /*    atr.c    */
  215. extern    void    AttrInit( int );
  216. extern    void    AttrExit( void );
  217. extern    int        AttrAppend( char* );
  218. extern    int        AttrSearch( char* );
  219. extern    int        AttrSearchOrAppend( char* );
  220. extern    void    AttrChange( int );
  221. extern    int        AttrReadFile( char*, int );
  222. extern    int        AttrDelete( int );
  223. extern    int        AttrWriteFile( char *file, int objno, int mode );
  224.  
  225. /*    object.c    */
  226. extern    void    ObjInit( int );
  227. extern    void    ObjExit( void );
  228. extern    int        ObjAppend( char* );
  229. extern    int        ObjSearch( char* );
  230. extern    int        ObjSearchOrAppend( char* );
  231. extern    void    ObjChange( int );
  232. extern    void    ObjValid( void );
  233. extern    int        ObjDelete( int );
  234.  
  235. /*    select.c    */
  236. extern    void    PolySelectAll( int, int );
  237. extern    void    PolySelectArea( int, int, Vertex*, Vertex* );
  238. extern    void    PolySelectPers( int, int, int, int, int, int );
  239. extern    void    PolySelectAttr( int, int, int );
  240. extern    void    PolySelectObj( int, int, int );
  241. extern    void    PolySelectPolyType( int, int, int );
  242. extern    int        SelectBox( Vertex*, Vertex* );
  243. extern    void    SelectSave( SelectClass* );
  244. extern    void    SelectCurrent( SelectClass    *sel );
  245. extern    void    SelectLoad( SelectClass* );
  246. extern    int        SelectNumber( SelectClass*, int );
  247. #ifndef __cplusplus
  248. extern    Polygon *GetSelectPolyNumber( SelectClass*, int );
  249. #endif
  250. extern    int        SelectPolygons( SelectClass* );
  251. extern    void    PolySelectDelete( SelectClass    *sel) ;
  252. extern    void    SelectAdjoint(SelectClass *dst, SelectClass *src);
  253.  
  254. /*    file.c    */
  255. extern    int        PolyReadFile( char*, int );
  256. extern    int        PolyWriteFile( int, int );
  257. #ifdef VECTOR
  258. extern    void    WriteFrame( Matrix, char*, char*, Vector* );
  259. #endif
  260.  
  261. /*    frame.c    */
  262. extern    int        FrmReadFile( char *file, char *dir, int );
  263.  
  264. /*    search.c    */
  265. extern    Vertex    *PolyVertex( Vertex*, int );
  266. extern    void    PolyPlane( Vertex*, int, const Vertex* );
  267.  
  268. /*    shade.c    */
  269. extern    void    PolyShade( int );
  270. extern    void    PolyShadeInv( void );
  271. extern    void    Coefficent( int[3], Vertex*, int );
  272.  
  273. /*    map.c    */
  274. extern    void    PolyMap( int, Matrix, int, int, int, int );
  275.  
  276. /*    edge.c    */
  277. extern    void    EdgeLibInit( void );
  278. #ifdef DATA
  279. extern    int            EdgeSearch(EdgeClass *edge, Vertex *p1, Vertex *p2);
  280. extern    EdgeClass    *EdgeAppend(EdgeClass *edge, Vertex *p1, Vertex *p2);
  281. extern    EdgeClass    *EdgeDelete(EdgeClass *edge, Vertex *p1, Vertex *p2);
  282. extern    EdgeClass    *EdgeAlloc(int size);
  283. extern    EdgeClass    *EdgeRealloc(EdgeClass *edge, int size);
  284. extern    EdgeClass    *EdgeSelectVertex(EdgeClass *edge, Vertex *p1);
  285. #ifdef MATRIXCLASS
  286. extern    EdgeClass    *EdgeMulMatrix(EdgeClass *edge, MatrixClass *mat);
  287. #endif
  288. extern    EdgeClass    *EdgeLogicalOr(EdgeClass *e1, EdgeClass *e2);
  289. extern    EdgeClass    *EdgeLogicalSub(EdgeClass *e1, EdgeClass *e2);
  290. extern    EdgeClass    *EdgeLogicalAnd(EdgeClass *e1, EdgeClass *e2);
  291. extern    EdgeClass    *EdgeLogicalXor(EdgeClass *e1, EdgeClass *e2);
  292. extern    int            EdgeLogicalEqual(EdgeClass *e1, EdgeClass *e2);
  293. extern    EdgeClass    *EdgeSelect(void);
  294. extern    EdgeClass    *EdgeSelectCount(EdgeClass *edge, int begin, int end);
  295. extern    void    PolySelectEdge( EdgeClass *edge, int flag, int sw);
  296. extern    void        DrawEdge(EdgeClass* edge, int color);
  297. #endif
  298.  
  299. /*    verset.c    */
  300. extern    void    VertexSetLibInit( void );
  301. #ifdef DATA
  302. extern    int    VertexSearch(VertexSetClass *verset, Vertex *vd);
  303. extern    VertexSetClass    *VertexAppend(VertexSetClass *verset, Vertex *vd);
  304. extern    VertexSetClass    *VertexDelete(VertexSetClass *verset, Vertex *vd);
  305. extern    VertexSetClass    *VertexAlloc(int size);
  306. #ifdef MATRIXCLASS
  307. extern    VertexSetClass    *VertexMulMatrix(VertexSetClass *verset, MatrixClass* mat);
  308. #endif
  309. extern    VertexSetClass    *VertexLogicalOr(VertexSetClass *e1, VertexSetClass *e2);
  310. extern    VertexSetClass    *VertexLogicalSub(VertexSetClass *e1, VertexSetClass *e2);
  311. extern    VertexSetClass    *VertexLogicalAnd(VertexSetClass *e1, VertexSetClass *e2);
  312. extern    VertexSetClass    *VertexLogicalXor(VertexSetClass *e1, VertexSetClass *e2);
  313. extern    int    VertexLogicalEqual(VertexSetClass *e1, VertexSetClass *e2);
  314. extern    VertexSetClass    *VertexSelect(void);
  315. extern    void    PolySelectVertex( VertexSetClass *verset, int flag, int sw);
  316. extern    VertexSetClass    *VertexPositionVertex(VertexSetClass *verset);
  317. extern    VertexSetClass    *VertexSelectPosition(VertexSetClass *verset, Vertex *ver);
  318. #endif
  319.  
  320. /*    polylib.c    */
  321. extern    void    PolyLibInit( void );
  322.  
  323. /*    sellib.c    */
  324. extern    void    SelectLibInit( void );
  325.  
  326. /*    atrlib.c    */
  327. extern    void    AttrLibInit( void );
  328.  
  329. /*    objlib.c    */
  330. extern    void    ObjLibInit( void );
  331. #ifdef __cplusplus
  332. }
  333. #endif
  334. #endif
  335.