00001
00002
00003
00004
00005
00006
00007
00038
00039
00040
00041
00042 #include <stdlib.h>
00043 #include <stdio.h>
00044 #include "prm.h"
00045 #include "quad.h"
00046 #include "circ.h"
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00086 struct _prm {
00088 struct _prm *next;
00090 struct _prm *prev;
00092 int type;
00094 void *geom;
00096 int sel;
00098 long int color;
00100 double height;
00101 };
00102
00105 static Prm *prm_head = 0L;
00106
00107
00108
00109
00110
00111
00112
00113
00114
00123 static Prm *prmCreateEmpty( void )
00124 {
00125 Prm *prm;
00126
00127
00128
00129 prm = malloc( sizeof( Prm ) );
00130 if( prm == NULL )
00131 return( NULL );
00132
00133
00134
00135 prm->next = NULL;
00136 prm->prev = NULL;
00137 prm->type = PRM_UNDEF;
00138 prm->geom = NULL;
00139 prm->sel = 0;
00140 prm->color = 0L;
00141 prm->height = 0.0;
00142
00143 return( prm );
00144 }
00145
00146
00147
00164 static void prmInsertFront( Prm *prm )
00165 {
00166
00167 }
00168
00169
00170
00188 static void prmInsertBack( Prm *prm )
00189 {
00190
00191 }
00192
00193
00194
00209 static void prmRemoveFromList( Prm *prm )
00210 {
00211
00212 }
00213
00214
00215
00224 static Prm *prmGetFirstSelected( void )
00225 {
00226
00227
00228 return( NULL );
00229 }
00230
00231
00232
00233
00234
00235
00236
00237
00238 Prm *prmCreateFront( PrmType type )
00239 {
00240 Prm *prm;
00241 prm = prmCreateEmpty( );
00242 if( prm == NULL )
00243 return( NULL );
00244
00245 switch( type )
00246 {
00247 case PRM_QUAD:
00248 prm->type = PRM_QUAD;
00249 prm->geom = quadCreate( );
00250 break;
00251 case PRM_CIRC:
00252 prm->type = PRM_CIRC;
00253 prm->geom = circCreate( );
00254 break;
00255 default:
00256 free( prm );
00257 return( NULL );
00258 }
00259 prmInsertFront( prm );
00260
00261 return( prm );
00262 }
00263
00264
00265
00266 Prm *prmCreateBack( PrmType type )
00267 {
00268 Prm *prm;
00269 prm = prmCreateEmpty( );
00270 if( prm == NULL )
00271 return( NULL );
00272
00273 switch( type )
00274 {
00275 case PRM_QUAD:
00276 prm->type = PRM_QUAD;
00277 prm->geom = quadCreate( );
00278 break;
00279 case PRM_CIRC:
00280 prm->type = PRM_CIRC;
00281 prm->geom = circCreate( );
00282 break;
00283 default:
00284 free( prm );
00285 return( NULL );
00286 }
00287 prmInsertBack( prm );
00288
00289 return( prm );
00290 }
00291
00292
00293
00294 void prmDelete( Prm *prm )
00295 {
00296 prmRemoveFromList( prm );
00297 if( prm->geom )
00298 {
00299 switch( prm->type )
00300 {
00301 case PRM_QUAD:
00302 quadDelete( (Quad *)prm->geom );
00303 break;
00304 case PRM_CIRC:
00305 circDelete( (Circ *)prm->geom );
00306 break;
00307 default:
00308 break;
00309 }
00310 }
00311 free( prm );
00312 }
00313
00314
00315
00316 void prmDeleteSelected( void )
00317 {
00318 Prm *prm;
00319 while( (prm = prmGetFirstSelected( )) != NULL )
00320 {
00321 prmDelete( prm );
00322 }
00323 }
00324
00325
00326
00327 void prmDeleteList( void )
00328 {
00329
00330 }
00331
00332
00333
00334 Prm *prmFirst( void )
00335 {
00336
00337 }
00338
00339
00340
00341 Prm *prmLast( void )
00342 {
00343
00344 }
00345
00346
00347
00348 Prm *prmNext( Prm *prm )
00349 {
00350
00351 }
00352
00353
00354
00355 Prm *prmPrevious( Prm *prm )
00356 {
00357
00358 }
00359
00360
00361
00362 void prmMoveFront( Prm *prm )
00363 {
00364
00365
00366
00367
00368 if( prm == prm_head )
00369 return;
00370
00371
00372
00373
00374
00375
00376
00377 prmRemoveFromList( prm );
00378 prmInsertFront( prm );
00379 }
00380
00381
00382
00383 void prmMoveBack( Prm *prm )
00384 {
00385
00386
00387
00388
00389 if( prm == prm_head->prev )
00390 return;
00391
00392
00393
00394
00395
00396
00397
00398 prmRemoveFromList( prm );
00399 prmInsertBack( prm );
00400 }
00401
00402
00403
00404 int prmGetType( Prm *prm )
00405 {
00406 return( (int)prm->type );
00407 }
00408
00409
00410
00411 void prmRead( Prm *prm, FILE *fd )
00412 {
00413 switch( prm->type )
00414 {
00415 case PRM_QUAD:
00416 quadRead( (Quad *)prm->geom, fd );
00417 break;
00418 case PRM_CIRC:
00419 circRead( (Circ *)prm->geom, fd );
00420 break;
00421 default:
00422 break;
00423 }
00424 }
00425
00426
00427
00428 void prmWrite( Prm *prm, FILE *fd )
00429 {
00430 switch( prm->type )
00431 {
00432 case PRM_QUAD:
00433 quadWrite( (Quad *)prm->geom, fd );
00434 break;
00435 case PRM_CIRC:
00436 circWrite( (Circ *)prm->geom, fd );
00437 break;
00438 default:
00439 break;
00440 }
00441 }
00442
00443
00444
00445 int prmGetNPts( Prm *prm )
00446 {
00447 int npts;
00448
00449 switch( prm->type )
00450 {
00451 case PRM_QUAD:
00452 npts = quadGetNPts( (Quad *)prm->geom );
00453 break;
00454 case PRM_CIRC:
00455 npts = circGetNPts( (Circ *)prm->geom );
00456 break;
00457 default:
00458 npts = 0;
00459 break;
00460 }
00461 return( npts );
00462 }
00463
00464
00465
00466 void prmSetCoords( Prm *prm, int id, double x, double y )
00467 {
00468 switch( prm->type )
00469 {
00470 case PRM_QUAD:
00471 quadSetCoords( (Quad *)prm->geom, id, x, y );
00472 break;
00473 case PRM_CIRC:
00474 circSetCoords( (Circ *)prm->geom, id, x, y );
00475 break;
00476 default:
00477 break;
00478 }
00479 }
00480
00481
00482
00483 void prmGetCoords( Prm *prm, int id, double *x, double *y )
00484 {
00485 switch( prm->type )
00486 {
00487 case PRM_QUAD:
00488 quadGetCoords( (Quad *)prm->geom, id, x, y );
00489 break;
00490 case PRM_CIRC:
00491 circGetCoords( (Circ *)prm->geom, id, x, y );
00492 break;
00493 default:
00494 break;
00495 }
00496 }
00497
00498
00499
00500 void prmSet1stPt( Prm *prm, double x, double y )
00501 {
00502 switch( prm->type )
00503 {
00504 case PRM_QUAD:
00505 quadSet1stPt( (Quad *)prm->geom, x, y );
00506 break;
00507 case PRM_CIRC:
00508 circSet1stPt( (Circ *)prm->geom, x, y );
00509 break;
00510 default:
00511 break;
00512 }
00513 }
00514
00515
00516
00517 void prmSet2ndPt( Prm *prm, double x, double y )
00518 {
00519 switch( prm->type )
00520 {
00521 case PRM_QUAD:
00522 quadSet2ndPt( (Quad *)prm->geom, x, y );
00523 break;
00524 case PRM_CIRC:
00525 circSet2ndPt( (Circ *)prm->geom, x, y );
00526 break;
00527 default:
00528 break;
00529 }
00530 }
00531
00532
00533
00534 void prmSelectAll( )
00535 {
00536
00537 }
00538
00539
00540
00541 void prmSelect( Prm *prm )
00542 {
00543
00544 }
00545
00546
00547
00548 void prmUnselect( Prm *prm )
00549 {
00550
00551 }
00552
00553
00554
00555 void prmUnselectAll( )
00556 {
00557
00558 }
00559
00560
00561
00562 int prmCheckSelected( Prm *prm )
00563 {
00564
00565 return( 0 );
00566 }
00567
00568
00569
00570 void prmSetColor( Prm *prm, long int color )
00571 {
00572 prm->color = color;
00573 }
00574
00575
00576
00577 long int prmGetColor( Prm *prm )
00578 {
00579 return( prm->color );
00580 }
00581
00582
00583
00584 void prmSetHeight( Prm *prm, double height )
00585 {
00586 prm->height = height;
00587 }
00588
00589
00590
00591 double prmGetHeight( Prm *prm )
00592 {
00593 return( prm->height );
00594 }
00595
00596
00597
00598 int prmPickArea( Prm *prm, double x, double y )
00599 {
00600 int status;
00601
00602 switch( prm->type )
00603 {
00604 case PRM_QUAD:
00605 status = quadPickArea( (Quad *)prm->geom, x, y );
00606 break;
00607 case PRM_CIRC:
00608 status = circPickArea( (Circ *)prm->geom, x, y );
00609 break;
00610 default:
00611 status = 0;
00612 break;
00613 }
00614 return( status );
00615 }
00616
00617
00618
00619 int prmPickVertex( Prm *prm, double x, double y, double tol,
00620 int *id )
00621 {
00622 int status;
00623
00624 switch( prm->type )
00625 {
00626 case PRM_QUAD:
00627 status = quadPickVertex( (Quad *)prm->geom, x, y, tol, id );
00628 break;
00629 case PRM_CIRC:
00630 status = circPickVertex( (Circ *)prm->geom, x, y, tol, id );
00631 break;
00632 default:
00633 status = 0;
00634 break;
00635 }
00636 return( status );
00637 }
00638
00639
00640
00641 int prmPickSide( Prm *prm, double x, double y, double tol,
00642 int *id )
00643 {
00644 int status;
00645
00646 switch( prm->type )
00647 {
00648 case PRM_QUAD:
00649 status = quadPickSide( (Quad *)prm->geom, x, y, tol, id );
00650 break;
00651 case PRM_CIRC:
00652 status = circPickSide( (Circ *)prm->geom, x, y, tol, id );
00653 break;
00654 default:
00655 status = 0;
00656 break;
00657 }
00658 return( status );
00659 }
00660
00661
00662
00663 void prmTranslate( Prm *prm, double dx, double dy )
00664 {
00665 switch( prm->type )
00666 {
00667 case PRM_QUAD:
00668 quadTranslate( (Quad *)prm->geom, dx, dy );
00669 break;
00670 case PRM_CIRC:
00671 circTranslate( (Circ *)prm->geom, dx, dy );
00672 break;
00673 default:
00674 break;
00675 }
00676 }
00677
00678
00679
00680 void prmTranslateVertex( Prm *prm, int id, double dx, double dy )
00681 {
00682 switch( prm->type )
00683 {
00684 case PRM_QUAD:
00685 quadTranslateVertex( (Quad *)prm->geom, id, dx, dy );
00686 break;
00687 case PRM_CIRC:
00688 circTranslateVertex( (Circ *)prm->geom, id, dx, dy );
00689 break;
00690 default:
00691 break;
00692 }
00693 }
00694
00695
00696
00697 void prmTranslateSide( Prm *prm, int id, double dx, double dy )
00698 {
00699 switch( prm->type )
00700 {
00701 case PRM_QUAD:
00702 quadTranslateSide( (Quad *)prm->geom, id, dx, dy );
00703 break;
00704 case PRM_CIRC:
00705 circTranslateSide( (Circ *)prm->geom, id, dx, dy );
00706 break;
00707 default:
00708 break;
00709 }
00710 }
00711
00712
00713
00714 void prmGetBox( Prm *prm, double *xmin, double *xmax,
00715 double *ymin, double *ymax )
00716 {
00717 switch( prm->type )
00718 {
00719 case PRM_QUAD:
00720 quadGetBox( (Quad *)prm->geom, xmin, xmax, ymin, ymax );
00721 break;
00722 case PRM_CIRC:
00723 circGetBox( (Circ *)prm->geom, xmin, xmax, ymin, ymax );
00724 break;
00725 default:
00726 break;
00727 }
00728 }
00729
00730
00731
00732 int prmGetGlobalBox( double *xmin, double *xmax,
00733 double *ymin, double *ymax )
00734 {
00735
00736
00737 return( 1 );
00738 }
00739
00740
00741
00742 void prmDisplayBoundary( Prm *prm )
00743 {
00744 switch( prm->type )
00745 {
00746 case PRM_QUAD:
00747 quadDisplayBoundary( (Quad *)prm->geom );
00748 break;
00749 case PRM_CIRC:
00750 circDisplayBoundary( (Circ *)prm->geom );
00751 break;
00752 default:
00753 break;
00754 }
00755 }
00756
00757
00758
00759 void prmDisplayInterior( Prm *prm )
00760 {
00761 switch( prm->type )
00762 {
00763 case PRM_QUAD:
00764 quadDisplayInterior( (Quad *)prm->geom );
00765 break;
00766 case PRM_CIRC:
00767 circDisplayInterior( (Circ *)prm->geom );
00768 break;
00769 default:
00770 break;
00771 }
00772 }
00773
00774
00775
00776 void prmDisplaySolid( Prm *prm )
00777 {
00778 switch( prm->type )
00779 {
00780 case PRM_QUAD:
00781 quadDisplaySolid( (Quad *)prm->geom, prmGetHeight( prm ) );
00782 break;
00783 case PRM_CIRC:
00784 circDisplaySolid( (Circ *)prm->geom, prmGetHeight( prm ) );
00785 break;
00786 default:
00787 break;
00788 }
00789 }
00790
00791
00792
00793 void prmHighltSolid( Prm *prm )
00794 {
00795 switch( prm->type )
00796 {
00797 case PRM_QUAD:
00798 quadHighltSolid( (Quad *)prm->geom, prmGetHeight( prm ) );
00799 break;
00800 case PRM_CIRC:
00801 circHighltSolid( (Circ *)prm->geom, prmGetHeight( prm ) );
00802 break;
00803 default:
00804 break;
00805 }
00806 }
00807
00808
00809
00810 void prmDisplayZbuffer( Prm *prm )
00811 {
00812 switch( prm->type )
00813 {
00814 case PRM_QUAD:
00815 quadDisplayZbuffer( (Quad *)prm->geom, prmGetHeight( prm ),
00816 prmGetColor( prm ) );
00817 break;
00818 case PRM_CIRC:
00819 circDisplayZbuffer( (Circ *)prm->geom, prmGetHeight( prm ),
00820 prmGetColor( prm ) );
00821 break;
00822 default:
00823 break;
00824 }
00825 }
00826
00828 =========== prmHighltSolid ======================*/
00829
00830 void prmHighltSolid( Prm *prm )
00831 {
00832 switch( prm->type )
00833 {
00834 case PRM_QUAD:
00835 quadHighltSolid( (Quad *)prm->geom, prmGetHeight( prm ) );
00836 break;
00837 case PRM_CIRC:
00838 circHighltSolid( (Circ *)prm->geom, prmGetHeight( prm ) );
00839 break;
00840 default:
00841 break;
00842 }
00843 }
00844
00845
00846
00847 void prmDisplayZbuffer( Prm *prm )
00848 {
00849 switch( prm->type )
00850 {
00851 case PRM_QUAD:
00852 quadDisplayZbuffer( (Quad *)prm->geom, prmGetHeight( prm ),
00853 prmGetColor( prm ) );
00854 break;
00855 case PRM_CIRC:
00856 circDisplayZbuffer( (Circ *)prm->geom, prmGetHeight( prm ),
00857 prmGetColor( prm ) );
00858 break;
00859 default:
00860 break;
00861 }
00862 }
00863