The R Project SVN R

Rev

Rev 56695 | Rev 59039 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 56695 Rev 57771
Line 1526... Line 1526...
1526
	      int *npt)
1526
	      int *npt)
1527
{
1527
{
1528
    double c;
1528
    double c;
1529
 
1529
 
1530
    if (z1 > z2 ) {
1530
    if (z1 > z2 ) {
1531
	if (z2 > high || z1 < low)
1531
	if (z2 > high || z1 < low) return;
1532
	    return;
-
 
1533
	if (z1 < high) {
1532
	if (z1 < high) {
1534
	    x[*npt] = x1;
1533
	    x[*npt] = x1;
1535
	    y[*npt] = y1;
1534
	    y[*npt] = y1;
1536
	    z[*npt] = z1;
1535
	    z[*npt] = z1;
1537
	    ++*npt;
1536
	    ++*npt;
-
 
1537
	} else if (z1 == R_PosInf) {
-
 
1538
	    x[*npt] = x2;
-
 
1539
	    y[*npt] = y1;
1538
	}
1540
	    z[*npt] = z2;
1539
	else {
1541
	    ++*npt;
-
 
1542
	} else { /* z1 >= high, z2 in range */
1540
	    c = (z1 - high) / (z1 - z2);
1543
	    c = (z1 - high) / (z1 - z2);
1541
	    x[*npt] = x1 + c * (x2 - x1);
1544
	    x[*npt] = x1 + c * (x2 - x1);
1542
	    y[*npt] = y1;
1545
	    y[*npt] = y1;
1543
	    z[*npt] = z1 + c * (z2 - z1);
1546
	    z[*npt] = z1 + c * (z2 - z1);
1544
	    ++*npt;
1547
	    ++*npt;
1545
	}
1548
	}
1546
	if (z2 > low) {
1549
	if (z2 == R_NegInf) {
-
 
1550
	    x[*npt] = x1;
-
 
1551
	    y[*npt] = y1;
1547
	}
1552
	    z[*npt] = z1;
1548
	else {
1553
	    ++*npt;
-
 
1554
	} else if (z2 <= low) { /* and z1 in range */
1549
	    c = (z2 -low) / (z2 - z1);
1555
	    c = (z2 -low) / (z2 - z1);
1550
	    x[*npt] = x2 - c * (x2 - x1);
1556
	    x[*npt] = x2 - c * (x2 - x1);
1551
	    y[*npt] = y1;
1557
	    y[*npt] = y1;
1552
	    z[*npt] = z2 - c * (z2 - z1);
1558
	    z[*npt] = z2 - c * (z2 - z1);
1553
	    ++*npt;
1559
	    ++*npt;
1554
	}
1560
	}
1555
    }
-
 
1556
    else if (z1 < z2) {
1561
    } else if (z1 < z2) {
1557
	if (z2 < low || z1 > high)
1562
	if (z2 < low || z1 > high) return;
1558
	    return;
-
 
1559
	if (z1 > low) {
1563
	if (z1 > low) {
1560
	    x[*npt] = x1;
1564
	    x[*npt] = x1;
1561
	    y[*npt] = y1;
1565
	    y[*npt] = y1;
1562
	    z[*npt] = z1;
1566
	    z[*npt] = z1;
1563
	    ++*npt;
1567
	    ++*npt;
-
 
1568
	} else if (z1 == R_NegInf) {
-
 
1569
	    x[*npt] = x2;
-
 
1570
	    y[*npt] = y1;
-
 
1571
	    z[*npt] = z2;;
1564
	}
1572
	    ++*npt;
1565
	else {
1573
	} else { /* and z2 in range */
1566
	    c = (z1 - low) / (z1 - z2);
1574
	    c = (z1 - low) / (z1 - z2);
1567
	    x[*npt] = x1 + c * (x2 - x1);
1575
	    x[*npt] = x1 + c * (x2 - x1);
1568
	    y[*npt] = y1;
1576
	    y[*npt] = y1;
1569
	    z[*npt] = z1 + c * (z2 - z1);
1577
	    z[*npt] = z1 + c * (z2 - z1);
1570
	    ++*npt;
1578
	    ++*npt;
Line 1575... Line 1583...
1575
	    x[*npt] = x2;
1583
	    x[*npt] = x2;
1576
	    y[*npt] = y2;
1584
	    y[*npt] = y2;
1577
	    z[*npt] = z2;
1585
	    z[*npt] = z2;
1578
	    ++*npt;
1586
	    ++*npt;
1579
#endif
1587
#endif
-
 
1588
	} else if (z2 == R_PosInf) {
-
 
1589
	    x[*npt] = x1;
-
 
1590
	    y[*npt] = y1;
1580
	}
1591
	    z[*npt] = z1;
1581
	else {
1592
	    ++*npt;
-
 
1593
	} else { /* z2 high, z1 in range */
1582
	    c = (z2 - high) / (z2 - z1);
1594
	    c = (z2 - high) / (z2 - z1);
1583
	    x[*npt] = x2 - c * (x2 - x1);
1595
	    x[*npt] = x2 - c * (x2 - x1);
1584
	    y[*npt] = y1;
1596
	    y[*npt] = y1;
1585
	    z[*npt] = z2 - c * (z2 - z1);
1597
	    z[*npt] = z2 - c * (z2 - z1);
1586
	    ++*npt;
1598
	    ++*npt;
1587
	}
1599
	}
1588
    }
-
 
1589
    else {
1600
    } else {
1590
	if(low <= z1 && z1 <= high) {
1601
	if(low <= z1 && z1 <= high) {
1591
	    x[*npt] = x1;
1602
	    x[*npt] = x1;
1592
	    y[*npt] = y1;
1603
	    y[*npt] = y1;
1593
	    z[*npt] = z1;
1604
	    z[*npt] = z1;
1594
	    ++*npt;
1605
	    ++*npt;
Line 1715... Line 1726...
1715
				    z[i + (j - 1) * nx],
1726
				    z[i + (j - 1) * nx],
1716
				    z[i - 1 + j * nx],
1727
				    z[i - 1 + j * nx],
1717
				    z[i + j * nx],
1728
				    z[i + j * nx],
1718
				    px, py, pz, &npt);
1729
				    px, py, pz, &npt);
1719
		if (npt > 2)
1730
		if (npt > 2)
1720
		    GPolygon(npt, px, py, USER, col[(k-1)%ncol],
1731
		    GPolygon(npt, px, py, USER, col[(k-1) % ncol],
1721
			     R_TRANWHITE, dd);
1732
			     R_TRANWHITE, dd);
1722
	    }
1733
	    }
1723
	}
1734
	}
1724
    }
1735
    }
1725
    GMode(0, dd);
1736
    GMode(0, dd);