(style, abcd, min, max)
| 477 | } |
| 478 | |
| 479 | function tryCreateTetra(style, abcd, min, max) { |
| 480 | var result = false; |
| 481 | |
| 482 | var xyzv = getXYZV(abcd); |
| 483 | |
| 484 | var ok = [ |
| 485 | inRange(xyzv[0][3], min, max), |
| 486 | inRange(xyzv[1][3], min, max), |
| 487 | inRange(xyzv[2][3], min, max), |
| 488 | inRange(xyzv[3][3], min, max) |
| 489 | ]; |
| 490 | |
| 491 | if(!ok[0] && !ok[1] && !ok[2] && !ok[3]) { |
| 492 | return result; |
| 493 | } |
| 494 | |
| 495 | if(ok[0] && ok[1] && ok[2] && ok[3]) { |
| 496 | if(drawingSpaceframe) { |
| 497 | result = drawTetra(style, xyzv, abcd) || result; |
| 498 | } |
| 499 | return result; |
| 500 | } |
| 501 | |
| 502 | var interpolated = false; |
| 503 | |
| 504 | [ |
| 505 | [0, 1, 2, 3], |
| 506 | [3, 0, 1, 2], |
| 507 | [2, 3, 0, 1], |
| 508 | [1, 2, 3, 0] |
| 509 | ].forEach(function(e) { |
| 510 | if(ok[e[0]] && ok[e[1]] && ok[e[2]] && !ok[e[3]]) { |
| 511 | var A = xyzv[e[0]]; |
| 512 | var B = xyzv[e[1]]; |
| 513 | var C = xyzv[e[2]]; |
| 514 | var D = xyzv[e[3]]; |
| 515 | |
| 516 | if(drawingSpaceframe) { |
| 517 | result = drawTri(style, [A, B, C], [abcd[e[0]], abcd[e[1]], abcd[e[2]]]) || result; |
| 518 | } else { |
| 519 | var p1 = calcIntersection(D, A, min, max); |
| 520 | var p2 = calcIntersection(D, B, min, max); |
| 521 | var p3 = calcIntersection(D, C, min, max); |
| 522 | |
| 523 | result = drawTri(null, [p1, p2, p3], [-1, -1, -1]) || result; |
| 524 | } |
| 525 | |
| 526 | interpolated = true; |
| 527 | } |
| 528 | }); |
| 529 | if(interpolated) return result; |
| 530 | |
| 531 | [ |
| 532 | [0, 1, 2, 3], |
| 533 | [1, 2, 3, 0], |
| 534 | [2, 3, 0, 1], |
| 535 | [3, 0, 1, 2], |
| 536 | [0, 2, 3, 1], |
no test coverage detected
searching dependent graphs…