summaryrefslogtreecommitdiff
path: root/target/targen.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/targen.c')
-rw-r--r--target/targen.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/target/targen.c b/target/targen.c
index a29ef63..74bbe96 100644
--- a/target/targen.c
+++ b/target/targen.c
@@ -43,8 +43,10 @@
/* NOTE:
- The device model is assumed to not take xpow into account,
- hence the expected values don't reflect its effect.
+ xpow is applied over the top of the normal or supplied
+ device model, so it effectively becomes a modification
+ of the device model.
+
The general filter is applied prior to the xpow being applied.
Many of the test patch types do take it into account
when computing the ink limit.
@@ -101,6 +103,10 @@
any possible angle, none of the test data points should appear
to line up. The Argyll target generator seems to acheive this goal.
+ A final problem withe regular grids is that they can lead to
+ Runge's phenomenon, depending on the nature of the interpolation
+ algorithm used.
+
*/
#undef DEBUG
@@ -677,7 +683,7 @@ double xpow /* Extra device power, default = none */
if (xpow < 0.0)
xpow = XPOW_DEFAULT;
- s->ixpow = xpow;
+ s->ixpow = 1.0/xpow;
/* See if we have a profile */
if (profName != NULL
@@ -877,6 +883,7 @@ usage(int level, char *diag, ...) {
fprintf(stderr," -V demphasis Degree of dark region patch concentration 1.0-4.0 (default %.2f = none)\n",DEMPH_DEFAULT);
fprintf(stderr," -F L,a,b,rad Filter out samples outside Lab sphere.\n");
fprintf(stderr," -O Don't re-order display RGB patches for minimum delay\n");
+ fprintf(stderr," -U Don't filter out duplicate patches\n");
#ifdef VRML_DIAG
fprintf(stderr," -w Dump diagnostic outfilel%s file (Lab locations)\n",vrml_ext());
fprintf(stderr," -W Dump diagnostic outfiled%s file (Device locations)\n",vrml_ext());
@@ -941,8 +948,9 @@ int main(int argc, char *argv[]) {
double uilimit = -1.0; /* Underlying (pre-calibration, scale 1.0) ink limit */
double nemph = NEMPH_DEFAULT;
double demph = DEMPH_DEFAULT;
+ int dontdedupe = 0; /* Don't filter duplicate samples */
int dontreorder = 0; /* Don't re-order RGB display patches for min delay */
- int filter = 0; /* Filter values */
+ int filter = 0; /* Filter values outside given sphere */
double filt[4] = { 50,0,0,0 };
static char fname[MAXNAMEL+1] = { 0 }; /* Output file base name */
static char pname[MAXNAMEL+1] = { 0 }; /* Device profile name */
@@ -1231,6 +1239,11 @@ int main(int argc, char *argv[]) {
dontreorder = 1;
}
+ /* Don't filter out redundant patches */
+ else if (argv[fa][1] == 'U') {
+ dontdedupe = 1;
+ }
+
#ifdef VRML_DIAG
else if (argv[fa][1] == 'w') /* Lab */
dumpvrml |= 1;
@@ -1612,7 +1625,7 @@ int main(int argc, char *argv[]) {
val[e] = icx_powlike(val[e], xpow * demph);
/* See if it is already in the fixed list */
- if (fxlist != NULL) {
+ if (!dontdedupe && fxlist != NULL) {
int k;
for (k = 0; k < fxno; k++) {
for (e = 0; e < di; e++) {
@@ -1717,7 +1730,7 @@ int main(int argc, char *argv[]) {
addp = 0;
/* See if it is already in the fixed list */
- if (fxlist != NULL) {
+ if (!dontdedupe && fxlist != NULL) {
int k;
for (k = 0; k < fxno; k++) {
for (e = 0; e < di; e++) {
@@ -1802,7 +1815,7 @@ int main(int argc, char *argv[]) {
addp = 0; /* Don't add patches over ink limit */
/* See if it is already in the fixed list */
- if (addp && fxlist != NULL) {
+ if (addp && !dontdedupe && fxlist != NULL) {
int k;
for (k = 0; k < fxno; k++) {
for (e = 0; e < di; e++) {
@@ -1891,7 +1904,7 @@ int main(int argc, char *argv[]) {
addp = 1; /* Default add the point */
/* See if it is already in the fixed list */
- if (fxlist != NULL) {
+ if (!dontdedupe && fxlist != NULL) {
int k;
for (k = 0; k < fxno; k++) {
for (e = 0; e < di; e++) {
@@ -1998,7 +2011,7 @@ int main(int argc, char *argv[]) {
addp = 0; /* Don't add patches over ink limit */
/* See if it is already in the fixed list */
- if (addp && fxlist != NULL) {
+ if (addp && !dontdedupe && fxlist != NULL) {
int k;
for (k = 0; k < fxno; k++) {
for (e = 0; e < di; e++) {