| 383 | |
| 384 | |
| 385 | int |
| 386 | X11Renderer::drawPolygon(const Matrix &pos, const Vector &data, int tag, int mode) |
| 387 | |
| 388 | { |
| 389 | #ifdef _G3DEBUG |
| 390 | if (pos.noCols() != 3) { |
| 391 | opserr <<"X11Renderer::drawPolygon - matrix needs 3 cols\n"; |
| 392 | return -1; |
| 393 | } |
| 394 | if (pos.noRows() != data.Size()) { |
| 395 | opserr <<"X11Renderer::drawPolygon - matrix & vector incompatible\n"; |
| 396 | return -1; |
| 397 | } |
| 398 | #endif |
| 399 | |
| 400 | FACE *theFace = new FACE(); |
| 401 | |
| 402 | float posX,posY,posZ, r, g, b; |
| 403 | double value; |
| 404 | MYPOINT *point; |
| 405 | |
| 406 | // add POINTs to the FACE |
| 407 | int numRows = pos.noRows(); |
| 408 | for (int i=0; i<numRows; i++) { |
| 409 | posX = pos(i,0); |
| 410 | posY = pos(i,1); |
| 411 | posZ = pos(i,2); |
| 412 | value = data(i); |
| 413 | r = theMap->getRed(value); |
| 414 | g = theMap->getGreen(value); |
| 415 | b = theMap->getBlue(value); |
| 416 | |
| 417 | if (aFile == 1) { |
| 418 | theFile << posX << " " << posY << " " << posZ << " " << r |
| 419 | << " " << g << " " << b << " " << endln; |
| 420 | } |
| 421 | |
| 422 | point = new MYPOINT(1,posX,posY,posZ); |
| 423 | point->r = r; |
| 424 | point->g = g; |
| 425 | point->b = b; |
| 426 | |
| 427 | theFace->AddPoint(*point); |
| 428 | } |
| 429 | |
| 430 | // display the face |
| 431 | FACE &res1 = theView->transform(*theFace); |
| 432 | // opserr << "X11Renderer: face after view " << theFace; |
| 433 | FACE &res2 = theProjection->transform(res1); |
| 434 | // opserr << "X11Renderer: face after projection " << theFace; |
| 435 | FACE &res3 = theClipping->transform(res2); |
| 436 | // opserr << "X11Renderer: face after clipping " << theFace; |
| 437 | FACE &res4 = theViewport->transform(res3); |
| 438 | // opserr << "X11Renderer: face after viewport " << theFace; |
| 439 | theScan->scanPolygon(res4); |
| 440 | return 0; |
| 441 | } |
| 442 |
no test coverage detected