📄 miscovl.c
字号:
/* these rarely change */
if(originfp != 8 || heightfp != 7 || widthfp != 10 || distfp != 24
|| depthfp != 8 || zdots != 128)
put_parm(" %s=%d/%g/%g/%g/%g/%g",s_julibrot3d,
zdots, originfp, depthfp, heightfp, widthfp,distfp);
if(eyesfp != 0)
put_parm(" %s=%g",s_julibroteyes,eyesfp);
if(neworbittype != JULIA)
{
char *name;
name = fractalspecific[neworbittype].name;
if(*name=='*')
name++;
put_parm(s_seqs,s_orbitname,name);
}
if(juli3Dmode !=0)
put_parm(s_seqs,s_3dmode,juli3Doptions[juli3Dmode]);
}
if (fractype == FORMULA || fractype == FFORMULA)
{
put_parm( s_seqs,s_formulafile,FormFileName);
put_parm( s_seqs,s_formulaname,FormName);
}
if (fractype == LSYSTEM)
{
put_parm( s_seqs,s_lfile,LFileName);
put_parm( s_seqs,s_lname,LName);
}
if (fractype == IFS || fractype == IFS3D)
{
put_parm( s_seqs,s_ifsfile,IFSFileName);
put_parm( s_seqs,s_ifs,IFSName);
}
if (fractype == INVERSEJULIA || fractype == INVERSEJULIAFP)
{
extern int major_method, minor_method;
put_parm( " %s=%s/%s",s_miim,major[major_method], minor[minor_method]);
}
showtrig(buf); /* this function is in miscres.c */
if (buf[0])
put_parm(buf);
if (usr_stdcalcmode != 'g')
put_parm(" %s=%c",s_passes,usr_stdcalcmode);
if (usemag && cvtcentermag(&Xctr, &Yctr, &Magnification)) {
put_parm(" %s=",s_centermag);
put_parm((delmin > 1000) ? "%g/%g/%g"
: "%+20.17lf/%+20.17lf/%+20.17lf",
Xctr,Yctr,Magnification);
}
else {
int xdigits,ydigits;
put_parm( " %s=",s_corners);
xdigits = getprec(xxmin,xxmax,xx3rd);
ydigits = getprec(yymin,yymax,yy3rd);
put_float(0,xxmin,xdigits);
put_float(1,xxmax,xdigits);
put_float(1,yymin,ydigits);
put_float(1,yymax,ydigits);
if (xx3rd != xxmin || yy3rd != yymin) {
put_float(1,xx3rd,xdigits);
put_float(1,yy3rd,ydigits);
}
}
for (i = (MAXPARAMS-1); i >= 0; --i)
if (param[i] != 0.0) break;
if (i >= 0) {
if (fractype == CELLULAR)
put_parm(" %s=%.1f",s_params,param[0]);
else
#ifndef XFRACT
put_parm(" %s=%.17Lg",s_params,(long double)param[0]);
#else
put_parm(" %s=%.17g",s_params,(double)param[0]);
#endif
for (j = 1; j <= i; ++j)
if (fractype == CELLULAR)
put_parm("/%.1f",param[j]);
else
#ifndef XFRACT
put_parm("/%.17Lg",(long double)param[j]);
#else
put_parm("/%.17g",(double)param[j]);
#endif
}
if(useinitorbit == 2)
put_parm( " %s=pixel",s_initorbit);
else if(useinitorbit == 1)
put_parm( " %s=%.15g/%.15g",s_initorbit,initorbit.x,initorbit.y);
if (floatflag)
put_parm( " %s=y",s_float);
if (maxit != 150)
put_parm(s_seqd,s_maxiter,maxit);
if(bailout && (potflag == 0 || potparam[2] == 0.0))
put_parm( s_seqd,s_bailout,bailout);
if(fillcolor != -1) {
put_parm(" %s=",s_fillcolor);
put_parm( "%d",fillcolor);
}
if (inside != 1) {
put_parm(" %s=",s_inside);
if (inside == -1)
put_parm( s_maxiter);
else if (inside == -59)
put_parm(s_zmag);
else if (inside == -60)
put_parm(s_bof60);
else if (inside == -61)
put_parm(s_bof61);
else if (inside == -100)
put_parm(s_epscross);
else if (inside == -101)
put_parm(s_startrail);
else if (inside == -102)
put_parm(s_period);
else
put_parm( "%d",inside);
}
if (outside != -1)
{
put_parm(" %s=",s_outside);
if (outside == -2)
put_parm(s_real);
else if (outside == -3)
put_parm(s_imag);
else if (outside == -4)
put_parm(s_mult);
else if (outside == -5)
put_parm(s_sum);
else
put_parm( "%d",outside);
}
if(LogFlag) {
put_parm( " %s=",s_logmap);
if(LogFlag == -1)
put_parm( "old");
else if(LogFlag == 1)
put_parm( "yes");
else
put_parm( "%d", LogFlag);
}
if (potflag) {
put_parm( " %s=%d/%g/%d",s_potential,
(int)potparam[0],potparam[1],(int)potparam[2]);
if(pot16bit)
put_parm( "/%s",s_16bit);
}
if (invert)
put_parm( " %s=%g/%g/%g",s_invert,
inversion[0], inversion[1], inversion[2]);
if (decomp[0])
put_parm( s_seqd,s_decomp, decomp[0]);
if (distest)
put_parm( s_seqdd,s_distest, distest, distestwidth);
if (usr_biomorph != -1)
put_parm( s_seqd,s_biomorph, usr_biomorph);
if (finattract)
put_parm(" %s=y",s_finattract);
if (forcesymmetry != 999) {
static char far msg[] =
{"Regenerate before <b> to get correct symmetry"};
if(forcesymmetry == 1000)
stopmsg(0,msg);
put_parm( " %s=",s_symmetry);
if (forcesymmetry==XAXIS)
put_parm(s_xaxis);
else if(forcesymmetry==YAXIS)
put_parm(s_yaxis);
else if(forcesymmetry==XYAXIS)
put_parm(s_xyaxis);
else if(forcesymmetry==ORIGIN)
put_parm(s_origin);
else if(forcesymmetry==PI_SYM)
put_parm(s_pi);
else
put_parm(s_none);
}
if (periodicitycheck != 1)
put_parm( s_seqd,s_periodicity,periodicitycheck);
if (rflag)
put_parm( s_seqd,s_rseed,rseed);
if (rangeslen) {
put_parm(" %s=",s_ranges);
i = 0;
while (i < rangeslen) {
if (i)
put_parm("/");
if (ranges[i] == -1) {
put_parm("-%d/",ranges[++i]);
++i;
}
put_parm("%d",ranges[i++]);
}
}
}
if (display3d >= 1) {
/***** 3d transform only parameters in this section *****/
if(display3d == 2)
put_parm( s_seqs,s_3d,s_overlay);
else
put_parm( s_seqs,s_3d,s_yes);
if (loaded3d == 0)
put_filename(s_filename,readname);
if (SPHERE) {
put_parm( " %s=y",s_sphere);
put_parm( s_seqdd,s_latitude, THETA1, THETA2);
put_parm( s_seqdd,s_longitude, PHI1, PHI2);
put_parm( s_seqd,s_radius, RADIUS);
}
put_parm( s_seqdd,s_scalexyz, XSCALE, YSCALE);
put_parm( s_seqd,s_roughness, ROUGH);
put_parm( s_seqd,s_waterline, WATERLINE);
if (FILLTYPE)
put_parm( s_seqd,s_filltype, FILLTYPE);
if (transparent[0] || transparent[1])
put_parm( s_seqdd,s_transparent, transparent[0],transparent[1]);
if (preview) {
put_parm( s_seqs,s_preview,s_yes);
if (showbox)
put_parm( s_seqs,s_showbox,s_yes);
put_parm( s_seqd,s_coarse,previewfactor);
}
if (RAY) {
put_parm( s_seqd,s_ray,RAY);
if (BRIEF)
put_parm(" %s=y",s_brief);
}
if (FILLTYPE > 4) {
put_parm( s_seqddd,s_lightsource, XLIGHT, YLIGHT, ZLIGHT);
if (LIGHTAVG)
put_parm( " %=%d",s_smoothing, LIGHTAVG);
}
if (RANDOMIZE)
put_parm( s_seqd,s_randomize,RANDOMIZE);
if (Targa_Out)
put_parm( " %s=y",s_fullcolor);
if (Ambient)
put_parm( s_seqd,s_ambient,Ambient);
if (haze)
put_parm( s_seqd,s_haze,haze);
}
if (display3d) { /* universal 3d */
/***** common (fractal & transform) 3d parameters in this section *****/
if (!SPHERE || display3d < 0)
put_parm( s_seqddd,s_rotation, XROT, YROT, ZROT);
put_parm( s_seqd,s_perspective, ZVIEWER);
put_parm( s_seqdd,s_xyshift, XSHIFT, YSHIFT);
if(xtrans || ytrans)
put_parm( s_seqdd,s_xyadjust,xtrans,ytrans);
if(glassestype) {
put_parm( s_seqd,s_stereo,glassestype);
put_parm( s_seqd,s_interocular,eyeseparation);
put_parm( s_seqd,s_converge,xadjust);
put_parm( " %s=%d/%d/%d/%d",s_crop,
red_crop_left,red_crop_right,blue_crop_left,blue_crop_right);
put_parm( s_seqdd,s_bright,
red_bright,blue_bright);
}
}
/***** universal parameters in this section *****/
if(viewwindow == 1)
{
put_parm(" %s=%g/%g",s_viewwindows,viewreduction,finalaspectratio);
if(viewcrop)
put_parm("/%s",s_yes);
else
put_parm("/%s",s_no);
put_parm("/%d/%d",viewxdots,viewydots);
}
if (*colorinf != 'n') {
put_parm(" %s=",s_colors);
if (*colorinf == '@')
put_parm(colorinf);
else {
int curc,scanc,force,diffmag;
int delta,diff1[4][3],diff2[4][3];
curc = force = 0;
while (1) {
/* emit color in rgb 3 char encoded form */
for (j = 0; j < 3; ++j) {
if ((k = dacbox[curc][j]) < 10) k += '0';
else if (k < 36) k += ('A' - 10);
else k += ('_' - 36);
buf[j] = k;
}
buf[3] = 0;
put_parm(buf);
if (++curc >= maxcolor) /* quit if done last color */
break;
/* Next a P Branderhorst special, a tricky scan for smooth-shaded
ranges which can be written as <nn> to compress .par file entry.
Method used is to check net change in each color value over
spans of 2 to 5 color numbers. First time for each span size
the value change is noted. After first time the change is
checked against noted change. First time it differs, a
a difference of 1 is tolerated and noted as an alternate
acceptable change. When change is not one of the tolerated
values, loop exits. */
if (force) {
--force;
continue;
}
scanc = curc;
while (scanc < maxcolor) { /* scan while same diff to next */
if ((i = scanc - curc) > 3) /* check spans up to 4 steps */
i = 3;
for (k = 0; k <= i; ++k) {
for (j = 0; j < 3; ++j) { /* check pattern of chg per color */
delta = (int)dacbox[scanc][j] - (int)dacbox[scanc-k-1][j];
if (k == scanc - curc)
diff1[k][j] = diff2[k][j] = delta;
else
if (delta != diff1[k][j] && delta != diff2[k][j]) {
diffmag = abs(delta - diff1[k][j]);
if (diff1[k][j] != diff2[k][j] || diffmag != 1)
break;
diff2[k][j] = delta;
}
}
if (j < 3) break; /* must've exited from inner loop above */
}
if (k <= i) break; /* must've exited from inner loop above */
++scanc;
}
/* now scanc-1 is next color which must be written explicitly */
if (scanc - curc > 2) { /* good, we have a shaded range */
if (scanc != maxcolor) {
if (diffmag < 3) { /* not a sharp slope change? */
force = 2; /* force more between ranges, to stop */
--scanc; /* "drift" when load/store/load/store/ */
}
if (k) { /* more of the same */
force += k;
--scanc;
}
}
if (--scanc - curc > 1) {
put_parm("<%d>",scanc-curc);
curc = scanc;
}
else /* changed our mind */
force = 0;
}
}
}
}
if (rotate_lo != 1 || rotate_hi != 255)
put_parm( s_seqdd,s_cyclerange,rotate_lo,rotate_hi);
while (wbdata->len) /* flush the buffer */
put_parm_line();
}
static void put_filename(char *keyword,char *fname)
{
char *p;
if (*fname && !endswithslash(fname)) {
if ((p = strrchr(fname, SLASHC)))
if (*(fname = p+1) == 0) return;
put_parm(s_seqs,keyword,fname);
}
}
#ifndef XFRACT
static void put_parm(char *parm,...)
#else
static void put_parm(va_alist)
va_dcl
#endif
{
char *bufptr;
va_list args;
#ifndef XFRACT
va_start(args,parm);
#else
char * parm;
va_start(args);
parm = va_arg(args,char *);
#endif
if (*parm == ' ' /* starting a new parm */
&& wbdata->len == 0) /* skip leading space */
++parm;
bufptr = wbdata->buf + wbdata->len;
vsprintf(bufptr,parm,args);
while (*(bufptr++))
++wbdata->len;
while (wbdata->len > 200)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -