home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / POLYEDIT.LZH / MODEL / MAP.C < prev    next >
C/C++ Source or Header  |  1996-03-26  |  2KB  |  92 lines

  1. /*
  2.  *        ポリゴンデータ管理ライブラリ
  3.  *
  4.  *        Copyright    T.Kobayashi        1994.8.7
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <math.h>
  11. #include <assert.h>
  12.  
  13. #include "lib.h"
  14. #include "alloc.h"
  15. #include "buffer.h"
  16. #include "poly.h"
  17. #include "view.h"
  18.  
  19. /*    セレクトされているポリゴンにマッピング座標をつける    */
  20. void    PolyMap(int sw, Matrix mat, int u1, int v1, int u2, int v2 )
  21. {
  22.     int        i, x, y ;
  23.     int        imat[5][3] ;
  24.  
  25.     Polygon    *poly ;
  26.     Vertex    *ver ;
  27.  
  28.     if ( Selects == 0 )
  29.         return ;
  30.  
  31.     MatToInt( imat, mat );
  32.  
  33.     if ( sw )
  34.     {
  35.         poly = PolyTop();
  36.         while( poly != NULL )
  37.         {
  38.             if ( poly->select == ON )
  39.             {
  40.                 poly->type |= POLY_UV ;
  41.                 ver = poly->ver ;
  42.                 ObjData[poly->obj].edit = TRUE ;
  43.                 for( i = poly->vers ; i > 0 ; i-- )
  44.                 {
  45.                     x = (int)ver->x * imat[0][0]
  46.                       + (int)ver->y * imat[1][0]
  47.                       + (int)ver->z * imat[2][0]
  48.                       +               imat[4][0];
  49.                     y = (int)ver->x * imat[0][1]
  50.                       + (int)ver->y * imat[1][1]
  51.                       + (int)ver->z * imat[2][1]
  52.                       +               imat[4][1];
  53.                     if (x > 0) {
  54.                         ver->u = imat[3][0] + (short)( ( x + 32767) >> 16 );
  55.                     } else {
  56.                         ver->u = imat[3][0] - (short)( (-x + 32767) >> 16 );
  57.                     }
  58.                     if (y > 0) {
  59.                         ver->v = imat[3][1] + (short)( ( y + 32767) >> 16 );
  60.                     } else {
  61.                         ver->v = imat[3][1] - (short)( (-y + 32767) >> 16 );
  62.                     }
  63.                     if (ver->u < u1) ver->u = u1;
  64.                     if (ver->u > u2) ver->u = u2;
  65.                     if (ver->v < v1) ver->v = v1;
  66.                     if (ver->v > v2) ver->v = v2;
  67.  
  68.                     ver++ ;
  69.                 }
  70.             }
  71.             poly = PolyNext( poly );
  72.         }
  73.     }
  74.     else
  75.     {
  76.         poly = PolyTop();
  77.         while( poly != NULL )
  78.         {
  79.             if ( poly->select == ON )
  80.             {
  81.                 if ( poly->select == ON )
  82.                 {
  83.                     poly->type &= ( ~ POLY_UV );
  84.                     ObjData[poly->obj].edit = TRUE ;
  85.                 }
  86.             }
  87.             poly = PolyNext( poly );
  88.         }
  89.     }
  90. }
  91.  
  92.