Changeset 3079 for trunk/src/opengl/glu/nurbs/internals
- Timestamp:
- Mar 11, 2000, 10:05:07 AM (26 years ago)
- File:
-
- 1 edited
-
trunk/src/opengl/glu/nurbs/internals/slicer.cpp (modified) (42 diffs)
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:28jeroen Exp $ */1 /* $Id: slicer.cpp,v 1.2 2000-03-11 09:05:03 jeroen Exp $ */ 2 2 /* 3 3 ** License Applicability. Except to the extent portions of this file are … … 37 37 * slicer.c++ 38 38 * 39 * $Date: 2000-0 2-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:28jeroen 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 $ 41 41 */ 42 42 … … 55 55 #include "varray.h" 56 56 57 #include "polyUtil.h" //for area()57 #include "polyUtil.h" /* for area() */ 58 58 59 59 //static int count=0; … … 111 111 112 112 n_changes = (compV2InX(loop->prev->head(), loop->prev->tail()) 113 != cur_sign);113 != cur_sign); 114 114 115 115 for(temp=loop->next; temp != loop; temp = temp->next) … … 120 120 { 121 121 #ifdef DEBUG 122 printf("***change signe\n");122 printf("***change signe\n"); 123 123 #endif 124 n_changes++;124 n_changes++; 125 125 } 126 126 } … … 154 154 //first find bot 155 155 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 } 160 160 bot = temp->prev; 161 161 //then find top 162 162 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 } 167 167 top = temp; 168 168 } … … 170 170 { 171 171 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 } 176 176 top = temp->prev; 177 177 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 } 182 182 bot = temp; 183 183 } … … 192 192 { 193 193 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 } 197 197 198 198 } … … 201 201 { 202 202 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 } 206 206 } 207 207 for(i=bot->pwlArc->npts-2; i>=1; i--) 208 208 { 209 209 dec_chain.appendVertex(jarc->pwlArc->pts[i].param); 210 } 210 } 211 211 212 212 monoTriangulationRec(top->tail(), bot->tail(), &inc_chain, 0, 213 &dec_chain, 0, &backend);213 &dec_chain, 0, &backend); 214 214 215 215 } … … 225 225 nlines++; 226 226 if(nlines == 5) 227 break;227 break; 228 228 } 229 229 if(nlines != 4) … … 238 238 printf("loop->next->head=(%f,%f)\n", loop->next->head()[0], loop->next->head()[1]); 239 239 if(fabs(loop->tail()[0] - loop->head()[0])<0.000001) 240 printf("equal 1\n");240 printf("equal 1\n"); 241 241 if(loop->next->tail()[1] == loop->next->head()[1]) 242 printf("equal 2\n");242 printf("equal 2\n"); 243 243 */ 244 244 … … 290 290 int i; 291 291 for(i=0; i<n; i++) 292 backend.tmeshvertNOGE(&verts[i]);292 backend.tmeshvertNOGE(&verts[i]); 293 293 } 294 294 } … … 319 319 { 320 320 if(loop->tail()[1] > loop->prev->prev->tail()[1]) 321 {322 323 top = loop;324 }321 { 322 323 top = loop; 324 } 325 325 else{ 326 326 327 top = loop->prev->prev;328 }327 top = loop->prev->prev; 328 } 329 329 } 330 330 else 331 331 { 332 332 if(loop->tail()[0] > loop->prev->prev->tail()[0]) 333 {334 //loop is the right arc335 336 top = loop->next;337 }333 { 334 //loop is the right arc 335 336 top = loop->next; 337 } 338 338 else 339 {340 341 top = loop->prev;342 }339 { 340 341 top = loop->prev; 342 } 343 343 } 344 344 left = top->next; … … 353 353 int nu = top->pwlArc->npts; 354 354 if(nu < bot->pwlArc->npts) 355 nu = bot->pwlArc->npts;355 nu = bot->pwlArc->npts; 356 356 int nv = left->pwlArc->npts; 357 357 if(nv < right->pwlArc->npts) 358 nv = right->pwlArc->npts;358 nv = right->pwlArc->npts; 359 359 /* 360 360 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 } 365 365 */ 366 366 } … … 376 376 377 377 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); 379 379 else 380 triangulateRectAux(top->pwlArc, bot->pwlArc, left->pwlArc, right->pwlArc, backend);380 triangulateRectAux(top->pwlArc, bot->pwlArc, left->pwlArc, right->pwlArc, backend); 381 381 } 382 382 } … … 397 397 398 398 if(top->npts == 2) { 399 backend.bgntfan();400 OPT_OUTVERT(top->pts[0], backend);//the root401 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(); 415 415 } 416 416 else if(bot->npts == 2) { 417 backend.bgntfan();418 OPT_OUTVERT(bot->pts[0], backend);//the root419 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(); 433 433 } 434 434 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 and460 //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_right494 495 botd_left = 1;496 botd_right = bot->npts-2; //botd_left<= bot_dright497 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 569 569 } 570 570 } … … 573 573 574 574 static 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) 577 577 { 578 578 TrimVertex trimVert; … … 580 580 581 581 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); 583 583 584 584 if(n_ulines>1 && n_vlines>1) … … 593 593 backend.bgnqstrip(); 594 594 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 } 603 603 backend.endqstrip(); 604 604 … … 617 617 assert(upper_val); 618 618 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 } 628 628 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_val639 ); 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 } 641 641 642 642 free(upper_val); … … 649 649 assert(left_val); 650 650 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 } 660 660 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_val669 ); 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 } 671 671 free(left_val); 672 672 return; 673 673 } 674 674 675 675 //the following is a different version of the above code. If you comment 676 676 //the above code, the following code will still work. The reason to leave … … 689 689 assert(temp_u_val); 690 690 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]; 692 692 } 693 693 u_val = temp_u_val; … … 699 699 backend.bgntfan(); 700 700 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; 703 703 } 704 704 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; 708 708 } 709 709 710 710 backend.tmeshvert(& trimVert); 711 711 for(i=d1; i< parc->npts; i++) 712 backend.tmeshvert(& parc->pts[i]);712 backend.tmeshvert(& parc->pts[i]); 713 713 backend.endtfan(); 714 714 … … 723 723 backend.tmeshvert(& parc->pts[parc->npts-1]); 724 724 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 else731 {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 } 737 737 backend.endtfan(); 738 738 … … 744 744 for(i=d1, j=d2; i>=0; i--, j++) 745 745 { 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 760 760 } 761 761 backend.endqstrip(); … … 781 781 782 782 if(loop->tail()[1] > loop->prev->prev->tail()[1]) 783 {784 785 top = loop;786 }783 { 784 785 top = loop; 786 } 787 787 else{ 788 788 789 top = loop->prev->prev;790 }789 top = loop->prev->prev; 790 } 791 791 } 792 792 else 793 793 { 794 794 if(loop->tail()[0] > loop->prev->prev->tail()[0]) 795 {796 //loop is the right arc797 798 top = loop->next;799 }795 { 796 //loop is the right arc 797 798 top = loop->next; 799 } 800 800 else 801 {802 803 top = loop->prev;804 }801 { 802 803 top = loop->prev; 804 } 805 805 } 806 806 … … 813 813 left->pwlArc->npts + 814 814 bot->pwlArc->npts + 815 right->pwlArc->npts816 + 2*n_ulines + 2*n_vlines817 -8;815 right->pwlArc->npts 816 + 2*n_ulines + 2*n_vlines 817 -8; 818 818 num_quads += (n_ulines-1)*(n_vlines-1); 819 819 #endif 820 820 /* 821 821 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); 823 823 // if(n_ulines>1 && n_vlines>1) 824 824 backend.surfmesh(0,0,n_ulines+1,n_vlines+1); … … 911 911 directedLine *dline = arcToDLine(arc); 912 912 if(ret == NULL) 913 ret = dline;913 ret = dline; 914 914 else 915 ret->insert(dline);915 ret->insert(dline); 916 916 return ret; 917 917 } … … 919 919 { 920 920 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 else933 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 } 935 935 return ret; 936 936 } … … 938 938 939 939 940 940 941 941 directedLine* arcLoopToDLineLoop(Arc_ptr loop) 942 942 { … … 970 970 rectBlock* block = rbArray->get_element(l); 971 971 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 } 988 988 } 989 989 … … 1001 1001 //we need counter-clockwise. 1002 1002 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); 1004 1004 1005 1005 … … 1011 1011 1012 1012 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 } 1016 1016 } 1017 1017 } … … 1033 1033 case PRIMITIVE_STREAM_FAN: 1034 1034 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 1049 1049 default: 1050 fprintf(stderr, "evalStream: not implemented yet\n");1051 exit(1);1050 fprintf(stderr, "evalStream: not implemented yet\n"); 1051 exit(1); 1052 1052 1053 1053 } … … 1055 1055 free(trimVert); 1056 1056 } 1057 1058 1059 1057 1058 1059 1060 1060 1061 1061 void Slicer::slice_new(Arc_ptr loop) … … 1107 1107 { 1108 1108 if(vlinear) 1109 triangulateRect(loop, backend, 1, ulinear, vlinear);1109 triangulateRect(loop, backend, 1, ulinear, vlinear); 1110 1110 else if(ulinear) 1111 triangulateRect(loop, backend, -1, ulinear, vlinear); 1111 triangulateRect(loop, backend, -1, ulinear, vlinear); 1112 1112 else 1113 triangulateRect(loop, backend, 0, ulinear, vlinear); 1113 triangulateRect(loop, backend, 0, ulinear, vlinear); 1114 1114 } 1115 1115 … … 1151 1151 printf("num_quads = %i\n", num_quads); 1152 1152 #endif 1153 1153 1154 } 1154 1155 … … 1170 1171 1171 1172 Slicer::Slicer( Backend &b ) 1172 : CoveAndTiler( b ), Mesher( b ), backend( b )1173 : CoveAndTiler( b ), Mesher( b ), backend( b ) 1173 1174 { 1174 1175 ulinear = 0; … … 1219 1220 1220 1221 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 else1236 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(); 1238 1239 if( isolines ) { 1239 outline();1240 } else {1241 if( canTile() )1242 coveAndTile();1243 else1244 mesh();1245 }1240 outline(); 1241 } else { 1242 if( canTile() ) 1243 coveAndTile(); 1244 else 1245 mesh(); 1246 } 1246 1247 } 1247 1248 } … … 1257 1258 backend.bgnoutline(); 1258 1259 while( (nextupper( &upper )) ) { 1259 if( upper.isGridVert() )1260 backend.linevert( upper.g );1261 else1262 backend.linevert( upper.t );1260 if( upper.isGridVert() ) 1261 backend.linevert( upper.g ); 1262 else 1263 backend.linevert( upper.t ); 1263 1264 } 1264 1265 backend.endoutline(); … … 1266 1267 backend.bgnoutline(); 1267 1268 while( (nextlower( &lower )) ) { 1268 if( lower.isGridVert() )1269 backend.linevert( lower.g );1270 else1271 backend.linevert( lower.t );1269 if( lower.isGridVert() ) 1270 backend.linevert( lower.g ); 1271 else 1272 backend.linevert( lower.t ); 1272 1273 } 1273 1274 backend.endoutline(); … … 1281 1282 1282 1283 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.
