Ignore:
Timestamp:
Mar 11, 2000, 10:05:07 AM (26 years ago)
Author:
jeroen
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/opengl/glu/nurbs/internals/slicer.cpp

    r2689 r3079  
    1 /* $Id: slicer.cpp,v 1.1 2000-02-09 08:50:28 jeroen Exp $ */
     1/* $Id: slicer.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $ */
    22/*
    33** License Applicability. Except to the extent portions of this file are
     
    3737 * slicer.c++
    3838 *
    39  * $Date: 2000-02-09 08:50:28 $ $Revision: 1.1 $
    40  * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/internals/slicer.cpp,v 1.1 2000-02-09 08:50:28 jeroen Exp $
     39 * $Date: 2000-03-11 09:05:03 $ $Revision: 1.2 $
     40 * $Header: /home/ktk/tmp/odin/2007/netlabs.cvs/odin32/src/opengl/glu/nurbs/internals/slicer.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $
    4141 */
    4242
     
    5555#include "varray.h"
    5656
    57 #include "polyUtil.h" //for area()
     57#include "polyUtil.h"                  /* for area()                       */
    5858
    5959//static int count=0;
     
    111111
    112112  n_changes  = (compV2InX(loop->prev->head(), loop->prev->tail())
    113                 != cur_sign);
     113                != cur_sign);
    114114
    115115  for(temp=loop->next; temp != loop; temp = temp->next)
     
    120120       {
    121121#ifdef DEBUG
    122         printf("***change signe\n");
     122        printf("***change signe\n");
    123123#endif
    124         n_changes++;
     124        n_changes++;
    125125       }
    126126    }
     
    154154      //first find bot
    155155      for(temp = loop->next; temp != loop; temp = temp->next)
    156         {
    157           if(compInY(temp->tail(), temp->prev->tail()) > 0)
    158             break;
    159         }
     156        {
     157          if(compInY(temp->tail(), temp->prev->tail()) > 0)
     158            break;
     159        }
    160160      bot = temp->prev;
    161161      //then find top
    162162      for(temp=loop->prev; temp != loop; temp = temp->prev)
    163         {
    164           if(compInY(temp->tail(), temp->prev->tail()) > 0)
    165             break;
    166         }
     163        {
     164          if(compInY(temp->tail(), temp->prev->tail()) > 0)
     165            break;
     166        }
    167167      top = temp;
    168168    }
     
    170170    {
    171171      for(temp=loop->next; temp != loop; temp = temp->next)
    172         {
    173           if(compInY(temp->tail(), temp->prev->tail()) < 0)
    174             break;
    175         }
     172        {
     173          if(compInY(temp->tail(), temp->prev->tail()) < 0)
     174            break;
     175        }
    176176      top = temp->prev;
    177177      for(temp=loop->prev; temp != loop; temp = temp->prev)
    178         {
    179           if(compInY(temp->tail(), temp->prev->tail()) < 0)
    180             break;
    181         }
     178        {
     179          if(compInY(temp->tail(), temp->prev->tail()) < 0)
     180            break;
     181        }
    182182      bot = temp;
    183183    }
     
    192192    {
    193193      for(i=0; i<=jarc->pwlArc->npts-2; i++)
    194         {
    195           inc_chain.appendVertex(jarc->pwlArc->pts[i].param);
    196         }
     194        {
     195          inc_chain.appendVertex(jarc->pwlArc->pts[i].param);
     196        }
    197197
    198198    }
     
    201201    {
    202202      for(i=jarc->pwlArc->npts-2; i>=0; i--)
    203         {
    204           dec_chain.appendVertex(jarc->pwlArc->pts[i].param);
    205         }
     203        {
     204          dec_chain.appendVertex(jarc->pwlArc->pts[i].param);
     205        }
    206206    }
    207207  for(i=bot->pwlArc->npts-2; i>=1; i--)
    208208    {
    209209      dec_chain.appendVertex(jarc->pwlArc->pts[i].param);
    210     }   
     210    }
    211211
    212212  monoTriangulationRec(top->tail(), bot->tail(), &inc_chain, 0,
    213                        &dec_chain, 0, &backend);
     213                       &dec_chain, 0, &backend);
    214214
    215215}
     
    225225      nlines++;
    226226      if(nlines == 5)
    227         break;
     227        break;
    228228    }
    229229  if(nlines != 4)
     
    238238printf("loop->next->head=(%f,%f)\n", loop->next->head()[0], loop->next->head()[1]);
    239239if(fabs(loop->tail()[0] - loop->head()[0])<0.000001)
    240         printf("equal 1\n");
     240        printf("equal 1\n");
    241241if(loop->next->tail()[1] == loop->next->head()[1])
    242         printf("equal 2\n");
     242        printf("equal 2\n");
    243243*/
    244244
     
    290290      int i;
    291291      for(i=0; i<n; i++)
    292         backend.tmeshvertNOGE(&verts[i]);
     292        backend.tmeshvertNOGE(&verts[i]);
    293293    }
    294294}
     
    319319    {
    320320      if(loop->tail()[1] > loop->prev->prev->tail()[1])
    321         {
    322 
    323         top = loop;
    324         }
     321        {
     322
     323        top = loop;
     324        }
    325325      else{
    326326
    327         top = loop->prev->prev;
    328         }
     327        top = loop->prev->prev;
     328        }
    329329    }
    330330  else
    331331    {
    332332      if(loop->tail()[0] > loop->prev->prev->tail()[0])
    333         {
    334           //loop is the right arc
    335 
    336           top = loop->next;
    337         }
     333        {
     334          //loop is the right arc
     335
     336          top = loop->next;
     337        }
    338338      else
    339         {
    340 
    341           top = loop->prev;
    342         }
     339        {
     340
     341          top = loop->prev;
     342        }
    343343    }
    344344  left = top->next;
     
    353353      int nu = top->pwlArc->npts;
    354354      if(nu < bot->pwlArc->npts)
    355         nu = bot->pwlArc->npts;
     355        nu = bot->pwlArc->npts;
    356356      int nv = left->pwlArc->npts;
    357357      if(nv < right->pwlArc->npts)
    358         nv = right->pwlArc->npts;
     358        nv = right->pwlArc->npts;
    359359/*
    360360      if(nu > 2 && nv > 2)
    361         {
    362           triangulateRectGen(top, nu-2,  nv-2, backend);
    363           return;
    364         }
     361        {
     362          triangulateRectGen(top, nu-2,  nv-2, backend);
     363          return;
     364        }
    365365*/
    366366    }
     
    376376
    377377      if(maxPointsTB < maxPointsLR)
    378         triangulateRectAux(left->pwlArc, right->pwlArc, bot->pwlArc, top->pwlArc, backend);
     378        triangulateRectAux(left->pwlArc, right->pwlArc, bot->pwlArc, top->pwlArc, backend);
    379379      else
    380         triangulateRectAux(top->pwlArc, bot->pwlArc, left->pwlArc, right->pwlArc, backend);
     380        triangulateRectAux(top->pwlArc, bot->pwlArc, left->pwlArc, right->pwlArc, backend);
    381381    }
    382382}
     
    397397
    398398      if(top->npts == 2) {
    399         backend.bgntfan();
    400         OPT_OUTVERT(top->pts[0], backend);//the root
    401         for(i=0; i<left->npts; i++){
    402           OPT_OUTVERT(left->pts[i], backend);
    403         }
    404         for(i=1; i<= bot->npts-2; i++){
    405           OPT_OUTVERT(bot->pts[i], backend);
    406         }
    407         backend.endtfan();
    408        
    409         backend.bgntfan();
    410         OPT_OUTVERT(bot->pts[bot->npts-2], backend);
    411         for(i=0; i<right->npts; i++){
    412           OPT_OUTVERT(right->pts[i], backend);
    413         }
    414         backend.endtfan();
     399        backend.bgntfan();
     400        OPT_OUTVERT(top->pts[0], backend);//the root
     401        for(i=0; i<left->npts; i++){
     402          OPT_OUTVERT(left->pts[i], backend);
     403        }
     404        for(i=1; i<= bot->npts-2; i++){
     405          OPT_OUTVERT(bot->pts[i], backend);
     406        }
     407        backend.endtfan();
     408
     409        backend.bgntfan();
     410        OPT_OUTVERT(bot->pts[bot->npts-2], backend);
     411        for(i=0; i<right->npts; i++){
     412          OPT_OUTVERT(right->pts[i], backend);
     413        }
     414        backend.endtfan();
    415415      }
    416416      else if(bot->npts == 2) {
    417         backend.bgntfan();
    418         OPT_OUTVERT(bot->pts[0], backend);//the root
    419         for(i=0; i<right->npts; i++){
    420           OPT_OUTVERT(right->pts[i], backend);
    421         }
    422         for(i=1; i<= top->npts-2; i++){
    423           OPT_OUTVERT(top->pts[i], backend);
    424         }
    425         backend.endtfan();
    426        
    427         backend.bgntfan();
    428         OPT_OUTVERT(top->pts[top->npts-2], backend);
    429         for(i=0; i<left->npts; i++){
    430           OPT_OUTVERT(left->pts[i], backend);
    431         }
    432         backend.endtfan();
     417        backend.bgntfan();
     418        OPT_OUTVERT(bot->pts[0], backend);//the root
     419        for(i=0; i<right->npts; i++){
     420          OPT_OUTVERT(right->pts[i], backend);
     421        }
     422        for(i=1; i<= top->npts-2; i++){
     423          OPT_OUTVERT(top->pts[i], backend);
     424        }
     425        backend.endtfan();
     426
     427        backend.bgntfan();
     428        OPT_OUTVERT(top->pts[top->npts-2], backend);
     429        for(i=0; i<left->npts; i++){
     430          OPT_OUTVERT(left->pts[i], backend);
     431        }
     432        backend.endtfan();
    433433      }
    434434      else { //both top and bot have >=3 points
    435        
    436         backend.bgntfan();
    437        
    438         OPT_OUTVERT(top->pts[top->npts-2], backend);
    439        
    440         for(i=0; i<=d; i++)
    441           {
    442             OPT_OUTVERT(left->pts[i], backend);
    443           }
    444         backend.endtfan();
    445        
    446         backend.bgntfan();
    447        
    448         OPT_OUTVERT(bot->pts[1], backend);
    449        
    450         OPT_OUTVERT(top->pts[top->npts-2], backend);
    451        
    452         for(i=d; i< left->npts; i++)
    453           {
    454             OPT_OUTVERT(left->pts[i], backend);
    455           }
    456         backend.endtfan();
    457 
    458         d = right->npts/2;
    459         //output only when d<right->npts-1 and
    460         //
    461         if(d<right->npts-1)
    462           {     
    463             backend.bgntfan();
    464             //      backend.tmeshvert(& top->pts[1]);
    465             OPT_OUTVERT(top->pts[1], backend);
    466             for(i=d; i< right->npts; i++)
    467               {
    468                 //        backend.tmeshvert(& right->pts[i]);
    469                
    470                 OPT_OUTVERT(right->pts[i], backend);
    471                
    472               }
    473             backend.endtfan();
    474           }
    475        
    476         backend.bgntfan();
    477         //      backend.tmeshvert(& bot->pts[bot->npts-2]);
    478         OPT_OUTVERT( bot->pts[bot->npts-2], backend);
    479         for(i=0; i<=d; i++)
    480           {
    481             //    backend.tmeshvert(& right->pts[i]);
    482             OPT_OUTVERT(right->pts[i], backend);
    483        
    484           }
    485        
    486         //      backend.tmeshvert(& top->pts[1]);
    487         OPT_OUTVERT(top->pts[1], backend);
    488        
    489         backend.endtfan();
    490 
    491 
    492         topd_left = top->npts-2;
    493         topd_right = 1; //topd_left>= topd_right
    494 
    495         botd_left = 1;
    496         botd_right = bot->npts-2; //botd_left<= bot_dright
    497 
    498        
    499         if(top->npts < bot->npts)
    500           {
    501             int delta=bot->npts - top->npts;
    502             int u = delta/2;
    503             botd_left = 1+ u;
    504             botd_right = bot->npts-2-( delta-u);       
    505        
    506             if(botd_left >1)
    507               {
    508                 backend.bgntfan();
    509                 //        backend.tmeshvert(& top->pts[top->npts-2]);
    510                 OPT_OUTVERT(top->pts[top->npts-2], backend);
    511                 for(i=1; i<= botd_left; i++)
    512                   {
    513                     //        backend.tmeshvert(& bot->pts[i]);
    514                     OPT_OUTVERT(bot->pts[i] , backend);
    515                   }
    516                 backend.endtfan();
    517               }
    518             if(botd_right < bot->npts-2)
    519               {
    520                 backend.bgntfan();
    521                 OPT_OUTVERT(top->pts[1], backend);
    522                 for(i=botd_right; i<= bot->npts-2; i++)
    523                   OPT_OUTVERT(bot->pts[i], backend);
    524                 backend.endtfan();
    525               }
    526           }
    527         else if(top->npts> bot->npts)
    528           {
    529             int delta=top->npts-bot->npts;
    530             int u = delta/2;
    531             topd_left = top->npts-2 - u;
    532             topd_right = 1+delta-u;
    533        
    534             if(topd_left < top->npts-2)
    535               {
    536                 backend.bgntfan();
    537                 //        backend.tmeshvert(& bot->pts[1]);
    538                 OPT_OUTVERT(bot->pts[1], backend);
    539                 for(i=topd_left; i<= top->npts-2; i++)
    540                   {
    541                     //        backend.tmeshvert(& top->pts[i]);
    542                     OPT_OUTVERT(top->pts[i], backend);
    543                   }
    544                 backend.endtfan();
    545               }
    546             if(topd_right > 1)
    547               {
    548                 backend.bgntfan();
    549                 OPT_OUTVERT(bot->pts[bot->npts-2], backend);
    550                 for(i=1; i<= topd_right; i++)
    551                   OPT_OUTVERT(top->pts[i], backend);
    552                 backend.endtfan();
    553               }
    554           }
    555        
    556         if(topd_left <= topd_right)
    557           return;
    558 
    559         backend.bgnqstrip();
    560         for(j=botd_left, i=topd_left; i>=topd_right; i--,j++)
    561           {
    562             //    backend.tmeshvert(& top->pts[i]);
    563             //    backend.tmeshvert(& bot->pts[j]);
    564             OPT_OUTVERT(top->pts[i], backend);
    565             OPT_OUTVERT(bot->pts[j], backend);
    566           }
    567         backend.endqstrip();
    568        
     435
     436        backend.bgntfan();
     437
     438        OPT_OUTVERT(top->pts[top->npts-2], backend);
     439
     440        for(i=0; i<=d; i++)
     441          {
     442            OPT_OUTVERT(left->pts[i], backend);
     443          }
     444        backend.endtfan();
     445
     446        backend.bgntfan();
     447
     448        OPT_OUTVERT(bot->pts[1], backend);
     449
     450        OPT_OUTVERT(top->pts[top->npts-2], backend);
     451
     452        for(i=d; i< left->npts; i++)
     453          {
     454            OPT_OUTVERT(left->pts[i], backend);
     455          }
     456        backend.endtfan();
     457
     458        d = right->npts/2;
     459        //output only when d<right->npts-1 and
     460        //
     461        if(d<right->npts-1)
     462          {
     463            backend.bgntfan();
     464            //      backend.tmeshvert(& top->pts[1]);
     465            OPT_OUTVERT(top->pts[1], backend);
     466            for(i=d; i< right->npts; i++)
     467              {
     468                //        backend.tmeshvert(& right->pts[i]);
     469
     470                OPT_OUTVERT(right->pts[i], backend);
     471
     472              }
     473            backend.endtfan();
     474          }
     475
     476        backend.bgntfan();
     477        //      backend.tmeshvert(& bot->pts[bot->npts-2]);
     478        OPT_OUTVERT( bot->pts[bot->npts-2], backend);
     479        for(i=0; i<=d; i++)
     480          {
     481            //    backend.tmeshvert(& right->pts[i]);
     482            OPT_OUTVERT(right->pts[i], backend);
     483
     484          }
     485
     486        //      backend.tmeshvert(& top->pts[1]);
     487        OPT_OUTVERT(top->pts[1], backend);
     488
     489        backend.endtfan();
     490
     491
     492        topd_left = top->npts-2;
     493        topd_right = 1; //topd_left>= topd_right
     494
     495        botd_left = 1;
     496        botd_right = bot->npts-2; //botd_left<= bot_dright
     497
     498
     499        if(top->npts < bot->npts)
     500          {
     501            int delta=bot->npts - top->npts;
     502            int u = delta/2;
     503            botd_left = 1+ u;
     504            botd_right = bot->npts-2-( delta-u);
     505
     506            if(botd_left >1)
     507              {
     508                backend.bgntfan();
     509                //        backend.tmeshvert(& top->pts[top->npts-2]);
     510                OPT_OUTVERT(top->pts[top->npts-2], backend);
     511                for(i=1; i<= botd_left; i++)
     512                  {
     513                    //        backend.tmeshvert(& bot->pts[i]);
     514                    OPT_OUTVERT(bot->pts[i] , backend);
     515                  }
     516                backend.endtfan();
     517              }
     518            if(botd_right < bot->npts-2)
     519              {
     520                backend.bgntfan();
     521                OPT_OUTVERT(top->pts[1], backend);
     522                for(i=botd_right; i<= bot->npts-2; i++)
     523                  OPT_OUTVERT(bot->pts[i], backend);
     524                backend.endtfan();
     525              }
     526          }
     527        else if(top->npts> bot->npts)
     528          {
     529            int delta=top->npts-bot->npts;
     530            int u = delta/2;
     531            topd_left = top->npts-2 - u;
     532            topd_right = 1+delta-u;
     533
     534            if(topd_left < top->npts-2)
     535              {
     536                backend.bgntfan();
     537                //        backend.tmeshvert(& bot->pts[1]);
     538                OPT_OUTVERT(bot->pts[1], backend);
     539                for(i=topd_left; i<= top->npts-2; i++)
     540                  {
     541                    //        backend.tmeshvert(& top->pts[i]);
     542                    OPT_OUTVERT(top->pts[i], backend);
     543                  }
     544                backend.endtfan();
     545              }
     546            if(topd_right > 1)
     547              {
     548                backend.bgntfan();
     549                OPT_OUTVERT(bot->pts[bot->npts-2], backend);
     550                for(i=1; i<= topd_right; i++)
     551                  OPT_OUTVERT(top->pts[i], backend);
     552                backend.endtfan();
     553              }
     554          }
     555
     556        if(topd_left <= topd_right)
     557          return;
     558
     559        backend.bgnqstrip();
     560        for(j=botd_left, i=topd_left; i>=topd_right; i--,j++)
     561          {
     562            //    backend.tmeshvert(& top->pts[i]);
     563            //    backend.tmeshvert(& bot->pts[j]);
     564            OPT_OUTVERT(top->pts[i], backend);
     565            OPT_OUTVERT(bot->pts[j], backend);
     566          }
     567        backend.endqstrip();
     568
    569569      }
    570570    }
     
    573573
    574574static void triangulateRectCenter(int n_ulines, REAL* u_val,
    575                                   int n_vlines, REAL* v_val,
    576                                   Backend& backend)
     575                                  int n_vlines, REAL* v_val,
     576                                  Backend& backend)
    577577{
    578578  TrimVertex trimVert;
     
    580580
    581581  backend.surfgrid(u_val[0], u_val[n_ulines-1], n_ulines-1,
    582                    v_val[n_vlines-1], v_val[0], n_vlines-1);
     582                   v_val[n_vlines-1], v_val[0], n_vlines-1);
    583583
    584584  if(n_ulines>1 && n_vlines>1)
     
    593593      backend.bgnqstrip();
    594594      for(j=0; j<n_ulines; j++)
    595         {
    596           trimVert.param[0] = u_val[j];
    597           trimVert.param[1] = v_val[i+1];
    598           backend.tmeshvert(& trimVert);       
    599 
    600           trimVert.param[1] = v_val[i];
    601           backend.tmeshvert(& trimVert);       
    602         }
     595        {
     596          trimVert.param[0] = u_val[j];
     597          trimVert.param[1] = v_val[i+1];
     598          backend.tmeshvert(& trimVert);
     599
     600          trimVert.param[1] = v_val[i];
     601          backend.tmeshvert(& trimVert);
     602        }
    603603      backend.endqstrip();
    604604
     
    617617      assert(upper_val);
    618618      if(dir)
    619         {
    620           for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++)
    621             {
    622               upper_val[k] = arc->pwlArc->pts[i].param[0];
    623             }   
    624           backend.evalUStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[1],
    625                              upper_val,
    626                              n_ulines, v, u_val);
    627         }
     619        {
     620          for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++)
     621            {
     622              upper_val[k] = arc->pwlArc->pts[i].param[0];
     623            }
     624          backend.evalUStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[1],
     625                             upper_val,
     626                             n_ulines, v, u_val);
     627        }
    628628      else
    629         {
    630           for(k=0,i=0;  i<arc->pwlArc->npts; i++,k++)
    631             {
    632               upper_val[k] = arc->pwlArc->pts[i].param[0];
    633 
    634             }           
    635 
    636           backend.evalUStrip(
    637                              n_ulines, v, u_val,
    638                              arc->pwlArc->npts, arc->pwlArc->pts[0].param[1], upper_val
    639                              );
    640         }
     629        {
     630          for(k=0,i=0;  i<arc->pwlArc->npts; i++,k++)
     631            {
     632              upper_val[k] = arc->pwlArc->pts[i].param[0];
     633
     634            }
     635
     636          backend.evalUStrip(
     637                             n_ulines, v, u_val,
     638                             arc->pwlArc->npts, arc->pwlArc->pts[0].param[1], upper_val
     639                             );
     640        }
    641641
    642642      free(upper_val);
     
    649649      assert(left_val);
    650650      if(dir)
    651         {
    652           for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++)
    653             {
    654               left_val[k] = arc->pwlArc->pts[i].param[1];
    655             }
    656           backend.evalVStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[0],
    657                              left_val,
    658                              n_ulines, v, u_val);
    659         }
     651        {
     652          for(k=0,i=arc->pwlArc->npts-1; i>=0; i--,k++)
     653            {
     654              left_val[k] = arc->pwlArc->pts[i].param[1];
     655            }
     656          backend.evalVStrip(arc->pwlArc->npts, arc->pwlArc->pts[0].param[0],
     657                             left_val,
     658                             n_ulines, v, u_val);
     659        }
    660660      else
    661         {
    662           for(k=0,i=0;  i<arc->pwlArc->npts; i++,k++)
    663             {
    664               left_val[k] = arc->pwlArc->pts[i].param[1];
    665             }
    666            backend.evalVStrip(
    667                              n_ulines, v, u_val,
    668                              arc->pwlArc->npts, arc->pwlArc->pts[0].param[0], left_val
    669                              );
    670         }
     661        {
     662          for(k=0,i=0;  i<arc->pwlArc->npts; i++,k++)
     663            {
     664              left_val[k] = arc->pwlArc->pts[i].param[1];
     665            }
     666           backend.evalVStrip(
     667                             n_ulines, v, u_val,
     668                             arc->pwlArc->npts, arc->pwlArc->pts[0].param[0], left_val
     669                             );
     670        }
    671671      free(left_val);
    672672      return;
    673673    }
    674        
     674
    675675  //the following is a different version of the above code. If you comment
    676676  //the above code, the following code will still work. The reason to leave
     
    689689      assert(temp_u_val);
    690690      for(i=0; i<n_ulines; i++)
    691         temp_u_val[i] = u_val[n_ulines-1-i];
     691        temp_u_val[i] = u_val[n_ulines-1-i];
    692692    }
    693693  u_val = temp_u_val;
     
    699699      backend.bgntfan();
    700700      if(is_u){
    701         trimVert.param[0] = u_val[0];
    702         trimVert.param[1] = v;
     701        trimVert.param[0] = u_val[0];
     702        trimVert.param[1] = v;
    703703      }
    704704      else
    705         {
    706         trimVert.param[1] = u_val[0];
    707         trimVert.param[0] = v;
     705        {
     706        trimVert.param[1] = u_val[0];
     707        trimVert.param[0] = v;
    708708      }
    709        
     709
    710710      backend.tmeshvert(& trimVert);
    711711      for(i=d1; i< parc->npts; i++)
    712         backend.tmeshvert(& parc->pts[i]);
     712        backend.tmeshvert(& parc->pts[i]);
    713713      backend.endtfan();
    714714
     
    723723      backend.tmeshvert(& parc->pts[parc->npts-1]);
    724724      for(i=0; i<= d2; i++)
    725         {
    726           if(is_u){
    727             trimVert.param[0] = u_val[i];
    728             trimVert.param[1] = v;
    729           }
    730           else
    731             {
    732               trimVert.param[1] = u_val[i];
    733               trimVert.param[0] = v;
    734             }
    735           backend.tmeshvert(&trimVert);
    736         }
     725        {
     726          if(is_u){
     727            trimVert.param[0] = u_val[i];
     728            trimVert.param[1] = v;
     729          }
     730          else
     731            {
     732              trimVert.param[1] = u_val[i];
     733              trimVert.param[0] = v;
     734            }
     735          backend.tmeshvert(&trimVert);
     736        }
    737737      backend.endtfan();
    738738
     
    744744    for(i=d1, j=d2; i>=0; i--, j++)
    745745      {
    746         backend.tmeshvert(& parc->pts[i]);
    747 
    748         if(is_u){
    749           trimVert.param[0] = u_val[j];
    750           trimVert.param[1] = v;
    751         }
    752         else{
    753           trimVert.param[1] = u_val[j];
    754           trimVert.param[0] = v;
    755         }
    756         backend.tmeshvert(&trimVert);
    757 
    758 
    759        
     746        backend.tmeshvert(& parc->pts[i]);
     747
     748        if(is_u){
     749          trimVert.param[0] = u_val[j];
     750          trimVert.param[1] = v;
     751        }
     752        else{
     753          trimVert.param[1] = u_val[j];
     754          trimVert.param[0] = v;
     755        }
     756        backend.tmeshvert(&trimVert);
     757
     758
     759
    760760      }
    761761    backend.endqstrip();
     
    781781
    782782      if(loop->tail()[1] > loop->prev->prev->tail()[1])
    783         {
    784 
    785         top = loop;
    786         }
     783        {
     784
     785        top = loop;
     786        }
    787787      else{
    788788
    789         top = loop->prev->prev;
    790         }
     789        top = loop->prev->prev;
     790        }
    791791    }
    792792  else
    793793    {
    794794      if(loop->tail()[0] > loop->prev->prev->tail()[0])
    795         {
    796           //loop is the right arc
    797 
    798           top = loop->next;
    799         }
     795        {
     796          //loop is the right arc
     797
     798          top = loop->next;
     799        }
    800800      else
    801         {
    802 
    803           top = loop->prev;
    804         }
     801        {
     802
     803          top = loop->prev;
     804        }
    805805    }
    806806
     
    813813                 left->pwlArc->npts +
    814814                 bot->pwlArc->npts +
    815                   right->pwlArc->npts
    816                       + 2*n_ulines + 2*n_vlines
    817                         -8;
     815                  right->pwlArc->npts
     816                      + 2*n_ulines + 2*n_vlines
     817                        -8;
    818818  num_quads += (n_ulines-1)*(n_vlines-1);
    819819#endif
    820820/*
    821821  backend.surfgrid(left->tail()[0], right->tail()[0], n_ulines+1,
    822                    top->tail()[1], bot->tail()[1], n_vlines+1);
     822                   top->tail()[1], bot->tail()[1], n_vlines+1);
    823823//  if(n_ulines>1 && n_vlines>1)
    824824    backend.surfmesh(0,0,n_ulines+1,n_vlines+1);
     
    911911      directedLine *dline = arcToDLine(arc);
    912912      if(ret == NULL)
    913         ret = dline;
     913        ret = dline;
    914914      else
    915         ret->insert(dline);
     915        ret->insert(dline);
    916916      return ret;
    917917    }
     
    919919    {
    920920      for(Int i=0; i<arc->pwlArc->npts-1; i++)
    921         {
    922           Real vert[2][2];
    923           vert[0][0] = arc->pwlArc->pts[i].param[0];
    924           vert[0][1] = arc->pwlArc->pts[i].param[1];
    925           vert[1][0] = arc->pwlArc->pts[i+1].param[0];
    926           vert[1][1] = arc->pwlArc->pts[i+1].param[1];
    927        
    928           sampledLine *sline = new sampledLine(2, vert);
    929           directedLine *dline = new directedLine(INCREASING, sline);
    930           if(ret == NULL)
    931             ret = dline;
    932           else
    933             ret->insert(dline);
    934         }
     921        {
     922          Real vert[2][2];
     923          vert[0][0] = arc->pwlArc->pts[i].param[0];
     924          vert[0][1] = arc->pwlArc->pts[i].param[1];
     925          vert[1][0] = arc->pwlArc->pts[i+1].param[0];
     926          vert[1][1] = arc->pwlArc->pts[i+1].param[1];
     927
     928          sampledLine *sline = new sampledLine(2, vert);
     929          directedLine *dline = new directedLine(INCREASING, sline);
     930          if(ret == NULL)
     931            ret = dline;
     932          else
     933            ret->insert(dline);
     934        }
    935935      return ret;
    936936    }
     
    938938
    939939
    940        
     940
    941941directedLine* arcLoopToDLineLoop(Arc_ptr loop)
    942942{
     
    970970      rectBlock* block = rbArray->get_element(l);
    971971      for(k=0, i=block->get_upGridLineIndex(); i>block->get_lowGridLineIndex(); i--, k++)
    972         {
    973 
    974           backend.bgnqstrip();
    975           for(j=block->get_leftIndices()[k+1]; j<= block->get_rightIndices()[k+1]; j++)
    976             {
    977               trimVert->param[0] = u_values[j];
    978               trimVert->param[1] = v_values[i];
    979               backend.tmeshvert(trimVert);
    980 
    981               trimVert->param[1] = v_values[i-1];
    982               backend.tmeshvert(trimVert);
    983 
    984             }
    985           backend.endqstrip();
    986 
    987         }
     972        {
     973
     974          backend.bgnqstrip();
     975          for(j=block->get_leftIndices()[k+1]; j<= block->get_rightIndices()[k+1]; j++)
     976            {
     977              trimVert->param[0] = u_values[j];
     978              trimVert->param[1] = v_values[i];
     979              backend.tmeshvert(trimVert);
     980
     981              trimVert->param[1] = v_values[i-1];
     982              backend.tmeshvert(trimVert);
     983
     984            }
     985          backend.endqstrip();
     986
     987        }
    988988    }
    989989
     
    10011001  //we need counter-clockwise.
    10021002  backend.surfgrid(grid->get_u_min(), grid->get_u_max(), grid->get_n_ulines()-1,
    1003                    grid->get_v_max(), grid->get_v_min(), n_vlines-1);
     1003                   grid->get_v_max(), grid->get_v_min(), n_vlines-1);
    10041004
    10051005
     
    10111011
    10121012      for(k=0, i=high; i>low; i--, k++)
    1013         {
    1014           backend.surfmesh(block->get_leftIndices()[k+1], n_vlines-1-i, block->get_rightIndices()[k+1]-block->get_leftIndices()[k+1], 1);
    1015         }
     1013        {
     1014          backend.surfmesh(block->get_leftIndices()[k+1], n_vlines-1-i, block->get_rightIndices()[k+1]-block->get_leftIndices()[k+1], 1);
     1015        }
    10161016    }
    10171017}
     
    10331033      case PRIMITIVE_STREAM_FAN:
    10341034
    1035         backend.bgntfan();
    1036 
    1037         for(j=0; j<pStream->get_length(i); j++)
    1038           {     
    1039             trimVert->param[0] = vertices[k];
    1040             trimVert->param[1] = vertices[k+1];
    1041             backend.tmeshvert(trimVert);       
    1042        
    1043 //          backend.tmeshvert(vertices[k], vertices[k+1]);
    1044             k += 2;
    1045           }
    1046         backend.endtfan();
    1047         break;
    1048        
     1035        backend.bgntfan();
     1036
     1037        for(j=0; j<pStream->get_length(i); j++)
     1038          {
     1039            trimVert->param[0] = vertices[k];
     1040            trimVert->param[1] = vertices[k+1];
     1041            backend.tmeshvert(trimVert);
     1042
     1043//          backend.tmeshvert(vertices[k], vertices[k+1]);
     1044            k += 2;
     1045          }
     1046        backend.endtfan();
     1047        break;
     1048
    10491049      default:
    1050         fprintf(stderr, "evalStream: not implemented yet\n");
    1051         exit(1);
     1050        fprintf(stderr, "evalStream: not implemented yet\n");
     1051        exit(1);
    10521052
    10531053      }
     
    10551055  free(trimVert);
    10561056}
    1057        
    1058        
    1059        
     1057
     1058
     1059
    10601060
    10611061void Slicer::slice_new(Arc_ptr loop)
     
    11071107    {
    11081108      if(vlinear)
    1109         triangulateRect(loop, backend, 1, ulinear, vlinear);
     1109        triangulateRect(loop, backend, 1, ulinear, vlinear);
    11101110      else if(ulinear)
    1111         triangulateRect(loop, backend, -1, ulinear, vlinear);   
     1111        triangulateRect(loop, backend, -1, ulinear, vlinear);
    11121112      else
    1113         triangulateRect(loop, backend, 0, ulinear, vlinear);           
     1113        triangulateRect(loop, backend, 0, ulinear, vlinear);
    11141114    }
    11151115
     
    11511151  printf("num_quads = %i\n", num_quads);
    11521152#endif
     1153
    11531154}
    11541155
     
    11701171
    11711172Slicer::Slicer( Backend &b )
    1172         : CoveAndTiler( b ), Mesher( b ), backend( b )
     1173        : CoveAndTiler( b ), Mesher( b ), backend( b )
    11731174{
    11741175    ulinear = 0;
     
    12191220
    12201221    for( long quad=0; quad<varray.numquads; quad++ ) {
    1221         backend.surfgrid( uarray.uarray[0],
    1222                        uarray.uarray[ulines-1],
    1223                        ulines-1,
    1224                        varray.vval[quad],
    1225                        varray.vval[quad+1],
    1226                        varray.voffset[quad+1] - varray.voffset[quad] );
    1227 
    1228         for( long i=varray.voffset[quad]+1; i <= varray.voffset[quad+1]; i++ ) {
    1229             topv = botv++;
    1230             advance( topv - varray.voffset[quad],
    1231                      botv - varray.voffset[quad],
    1232                      varray.varray[botv] );
    1233             if( i == vlines )
    1234                 getPts( extrema[2] );
    1235             else
    1236                 getPts( backend );
    1237             getGridExtent();
     1222        backend.surfgrid( uarray.uarray[0],
     1223                       uarray.uarray[ulines-1],
     1224                       ulines-1,
     1225                       varray.vval[quad],
     1226                       varray.vval[quad+1],
     1227                       varray.voffset[quad+1] - varray.voffset[quad] );
     1228
     1229        for( long i=varray.voffset[quad]+1; i <= varray.voffset[quad+1]; i++ ) {
     1230            topv = botv++;
     1231            advance( topv - varray.voffset[quad],
     1232                     botv - varray.voffset[quad],
     1233                     varray.varray[botv] );
     1234            if( i == vlines )
     1235                getPts( extrema[2] );
     1236            else
     1237                getPts( backend );
     1238            getGridExtent();
    12381239            if( isolines ) {
    1239                 outline();
    1240             } else {
    1241                 if( canTile() )
    1242                     coveAndTile();
    1243                 else
    1244                     mesh();
    1245             }
     1240                outline();
     1241            } else {
     1242                if( canTile() )
     1243                    coveAndTile();
     1244                else
     1245                    mesh();
     1246            }
    12461247        }
    12471248   }
     
    12571258    backend.bgnoutline();
    12581259    while( (nextupper( &upper )) ) {
    1259         if( upper.isGridVert() )
    1260             backend.linevert( upper.g );
    1261         else
    1262             backend.linevert( upper.t );
     1260        if( upper.isGridVert() )
     1261            backend.linevert( upper.g );
     1262        else
     1263            backend.linevert( upper.t );
    12631264    }
    12641265    backend.endoutline();
     
    12661267    backend.bgnoutline();
    12671268    while( (nextlower( &lower )) ) {
    1268         if( lower.isGridVert() )
    1269             backend.linevert( lower.g );
    1270         else
    1271             backend.linevert( lower.t );
     1269        if( lower.isGridVert() )
     1270            backend.linevert( lower.g );
     1271        else
     1272            backend.linevert( lower.t );
    12721273    }
    12731274    backend.endoutline();
     
    12811282
    12821283    if( jarc->pwlArc->npts >= 2 ) {
    1283         backend.bgnoutline();
    1284         for( int j = jarc->pwlArc->npts-1; j >= 0; j--  )
    1285             backend.linevert( &(jarc->pwlArc->pts[j]) );
    1286         backend.endoutline();
    1287     }
    1288 }
    1289 
    1290 
     1284        backend.bgnoutline();
     1285        for( int j = jarc->pwlArc->npts-1; j >= 0; j--  )
     1286            backend.linevert( &(jarc->pwlArc->pts[j]) );
     1287        backend.endoutline();
     1288    }
     1289}
     1290
     1291
Note: See TracChangeset for help on using the changeset viewer.