The R Project SVN R

Rev

Rev 29864 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 29864 Rev 30691
Line 419... Line 419...
419
    int jjj = 1;
419
    int jjj = 1;
420
    while ((jjj < ns) && (distanceSum < labelDistance)) {
420
    while ((jjj < ns) && (distanceSum < labelDistance)) {
421
	/* Find a gap big enough for the label
421
	/* Find a gap big enough for the label
422
	   use several segments if necessary
422
	   use several segments if necessary
423
	*/
423
	*/
424
	dX = xxx[jjj] - xxx[jjj - n - 1];
424
	dX = xxx[jjj] - xxx[jjj - n - 1]; /* jjj - n - 1 == 0 */
425
	dY = yyy[jjj] - yyy[jjj - n - 1];
425
	dY = yyy[jjj] - yyy[jjj - n - 1];
426
	dXC = GConvertXUnits(dX, USER, INCHES, dd);
426
	dXC = GConvertXUnits(dX, USER, INCHES, dd);
427
	dYC = GConvertYUnits(dY, USER, INCHES, dd);
427
	dYC = GConvertYUnits(dY, USER, INCHES, dd);
428
	distanceSum = hypot(dXC, dYC);
428
	distanceSum = hypot(dXC, dYC);
429
	jjj = (jjj + 1);
429
	jjj++;
430
	n += 1;
430
	n++;
431
    }
431
    }
432
    if (distanceSum < labelDistance)
432
    if (distanceSum < labelDistance)
433
	return 0;
433
	return 0;
434
    else
434
    else
435
	return n;
435
	return n;
Line 445... Line 445...
445
    int jjj = ns - 2;
445
    int jjj = ns - 2;
446
    while ((jjj > -1) && (distanceSum < labelDistance)) {
446
    while ((jjj > -1) && (distanceSum < labelDistance)) {
447
	/* Find a gap big enough for the label
447
	/* Find a gap big enough for the label
448
	   use several segments if necessary
448
	   use several segments if necessary
449
	*/
449
	*/
450
	dX = xxx[jjj] - xxx[jjj + n + 1];
450
	dX = xxx[jjj] - xxx[jjj + n + 1]; /*jjj + n + 1 == ns -1 */
451
	dY = yyy[jjj] - yyy[jjj + n + 1];
451
	dY = yyy[jjj] - yyy[jjj + n + 1];
452
	dXC = GConvertXUnits(dX, USER, INCHES, dd);
452
	dXC = GConvertXUnits(dX, USER, INCHES, dd);
453
	dYC = GConvertYUnits(dY, USER, INCHES, dd);
453
	dYC = GConvertYUnits(dY, USER, INCHES, dd);
454
	distanceSum = hypot(dXC, dYC);
454
	distanceSum = hypot(dXC, dYC);
455
	jjj--;
455
	jjj--;
456
	n -= 1;
456
	n++;
457
    }
457
    }
458
    if (distanceSum < labelDistance)
458
    if (distanceSum < labelDistance)
459
	return 0;
459
	return 0;
460
    else
460
    else
461
	return -n;
461
	return n;
462
}
462
}
463
 
463
 
464
/* 
464
/* 
465
 * Generate a list of segments for a single level
465
 * Generate a list of segments for a single level
466
 */
466
 */
Line 1357... Line 1357...
1357
/* contour(x, y, z, levels, labels, labcex, drawlabels, 
1357
/* contour(x, y, z, levels, labels, labcex, drawlabels, 
1358
 *         method, vfont, col = col, lty = lty, lwd = lwd)
1358
 *         method, vfont, col = col, lty = lty, lwd = lwd)
1359
 */
1359
 */
1360
SEXP do_contour(SEXP call, SEXP op, SEXP args, SEXP env)
1360
SEXP do_contour(SEXP call, SEXP op, SEXP args, SEXP env)
1361
{
1361
{
1362
    SEXP oargs, c, x, y, z, vfont, col, lty, lwd, labels;
1362
    SEXP oargs, c, x, y, z, vfont, col, rawcol, lty, lwd, labels;
1363
    int i, j, nx, ny, nc, ncol, nlty, nlwd;
1363
    int i, j, nx, ny, nc, ncol, nlty, nlwd;
1364
    int ltysave, colsave, lwdsave;
1364
    int ltysave, colsave, lwdsave;
1365
    double cexsave;
1365
    double cexsave;
1366
    double atom, zmin, zmax;
1366
    double atom, zmin, zmax;
1367
    char *vmax, *vmax0;
1367
    char *vmax, *vmax0;
Line 1422... Line 1422...
1422
	typeface = INTEGER(vfont)[0];
1422
	typeface = INTEGER(vfont)[0];
1423
	fontindex = INTEGER(vfont)[1];
1423
	fontindex = INTEGER(vfont)[1];
1424
    }
1424
    }
1425
    args = CDR(args);
1425
    args = CDR(args);
1426
 
1426
 
-
 
1427
    rawcol = CAR(args);
1427
    PROTECT(col = FixupCol(CAR(args), NA_INTEGER));
1428
    PROTECT(col = FixupCol(rawcol, NA_INTEGER));
1428
    ncol = length(col);
1429
    ncol = length(col);
1429
    args = CDR(args);
1430
    args = CDR(args);
1430
 
1431
 
1431
    PROTECT(lty = FixupLty(CAR(args), Rf_gpptr(dd)->lty));
1432
    PROTECT(lty = FixupLty(CAR(args), Rf_gpptr(dd)->lty));
1432
    nlty = length(lty);
1433
    nlty = length(lty);
Line 1512... Line 1513...
1512
    for (i = 0; i < nc; i++) {
1513
    for (i = 0; i < nc; i++) {
1513
	vmax = vmaxget();
1514
	vmax = vmaxget();
1514
	Rf_gpptr(dd)->lty = INTEGER(lty)[i % nlty];
1515
	Rf_gpptr(dd)->lty = INTEGER(lty)[i % nlty];
1515
	if (Rf_gpptr(dd)->lty == NA_INTEGER)
1516
	if (Rf_gpptr(dd)->lty == NA_INTEGER)
1516
	    Rf_gpptr(dd)->lty = ltysave;
1517
	    Rf_gpptr(dd)->lty = ltysave;
1517
	Rf_gpptr(dd)->col = INTEGER(col)[i % ncol];
-
 
1518
	if (Rf_gpptr(dd)->col == NA_INTEGER)
1518
	if (isNAcol(rawcol, i, ncol))
1519
	    Rf_gpptr(dd)->col = colsave;
1519
	    Rf_gpptr(dd)->col = colsave;
-
 
1520
	else 
-
 
1521
	    Rf_gpptr(dd)->col = INTEGER(col)[i % ncol];
1520
	Rf_gpptr(dd)->lwd = REAL(lwd)[i % nlwd];
1522
	Rf_gpptr(dd)->lwd = REAL(lwd)[i % nlwd];
1521
	if (Rf_gpptr(dd)->lwd == NA_REAL)
1523
	if (Rf_gpptr(dd)->lwd == NA_REAL)
1522
	    Rf_gpptr(dd)->lwd = lwdsave;
1524
	    Rf_gpptr(dd)->lwd = lwdsave;
1523
	Rf_gpptr(dd)->cex = labcex;
1525
	Rf_gpptr(dd)->cex = labcex;
1524
	contour(x, nx, y, ny, z, REAL(c)[i], labels, i,
1526
	contour(x, nx, y, ny, z, REAL(c)[i], labels, i,