version 1.1, 2018/09/19 05:45:08 |
version 1.2, 2018/09/28 08:20:29 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM$ |
* $OpenXM: OpenXM_contrib2/asir2018/plot/if.c,v 1.1 2018/09/19 05:45:08 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 111 int open_canvas(NODE arg){ |
|
Line 111 int open_canvas(NODE arg){ |
|
can->width=DEFAULTWIDTH; |
can->width=DEFAULTWIDTH; |
can->height=DEFAULTHEIGHT; |
can->height=DEFAULTHEIGHT; |
} else { |
} else { |
can->width=QTOS((Q)BDY(BDY(wsize))); |
can->width=ZTOS((Q)BDY(BDY(wsize))); |
can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); |
can->height=ZTOS((Q)BDY(NEXT(BDY(wsize)))); |
} |
} |
if(wname)can->wname=BDY(wname); |
if(wname)can->wname=BDY(wname); |
else can->wname=""; |
else can->wname=""; |
Line 157 int plot(NODE arg,int fn){ |
|
Line 157 int plot(NODE arg,int fn){ |
|
can->zmin=ToReal(BDY(n)); |
can->zmin=ToReal(BDY(n)); |
n=NEXT(n);can->zmax=ToReal(BDY(n)); |
n=NEXT(n);can->zmax=ToReal(BDY(n)); |
n=NEXT(n); |
n=NEXT(n); |
if(can->mode==modeNO(CONPLOT))can->nzstep=n?QTOS((Q)BDY(n)):MAXGC; |
if(can->mode==modeNO(CONPLOT))can->nzstep=n?ZTOS((Q)BDY(n)):MAXGC; |
else { |
else { |
can->vx=VR((P)BDY(BDY(zrange))); |
can->vx=VR((P)BDY(BDY(zrange))); |
can->nzstep=n?QTOS((Q)BDY(n)):DEFAULTPOLARSTEP; |
can->nzstep=n?ZTOS((Q)BDY(n)):DEFAULTPOLARSTEP; |
} |
} |
} |
} |
if(!wsize){ |
if(!wsize){ |
can->width=DEFAULTWIDTH; |
can->width=DEFAULTWIDTH; |
can->height=DEFAULTHEIGHT; |
can->height=DEFAULTHEIGHT; |
} else { |
} else { |
can->width=QTOS((Q)BDY(BDY(wsize))); |
can->width=ZTOS((Q)BDY(BDY(wsize))); |
can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); |
can->height=ZTOS((Q)BDY(NEXT(BDY(wsize)))); |
} |
} |
if(wname) can->wname=BDY(wname); |
if(wname) can->wname=BDY(wname); |
else can->wname=""; |
else can->wname=""; |
can->formula=formula; |
can->formula=formula; |
if(can->mode==modeNO(PLOT)){ |
if(can->mode==modeNO(PLOT)){ |
//plot |
//plot |
can->prec=argc(arg)==7 ? QTOS((Q)ARG6(arg)) : 0; |
can->prec=argc(arg)==7 ? ZTOS((Q)ARG6(arg)) : 0; |
plotcalc(can); |
plotcalc(can); |
create_canvas(can); |
create_canvas(can); |
plot_print(display,can); |
plot_print(display,can); |
Line 237 int memory_plot(NODE arg,LIST *bytes){ |
|
Line 237 int memory_plot(NODE arg,LIST *bytes){ |
|
n=NEXT(BDY(zrange)); |
n=NEXT(BDY(zrange)); |
can->zmin=ToReal(BDY(n)); n=NEXT(n); can->zmax=ToReal(BDY(n)); |
can->zmin=ToReal(BDY(n)); n=NEXT(n); can->zmax=ToReal(BDY(n)); |
n=NEXT(n); |
n=NEXT(n); |
if(n) can->nzstep=QTOS((Q)BDY(n)); |
if(n) can->nzstep=ZTOS((Q)BDY(n)); |
else can->nzstep=MAXGC; |
else can->nzstep=MAXGC; |
can->mode=modeNO(CONPLOT); |
can->mode=modeNO(CONPLOT); |
} else |
} else |
Line 247 int memory_plot(NODE arg,LIST *bytes){ |
|
Line 247 int memory_plot(NODE arg,LIST *bytes){ |
|
if( !wsize ){ |
if( !wsize ){ |
can->width=DEFAULTWIDTH; can->height=DEFAULTHEIGHT; |
can->width=DEFAULTWIDTH; can->height=DEFAULTHEIGHT; |
} else { |
} else { |
can->width=QTOS((Q)BDY(BDY(wsize))); |
can->width=ZTOS((Q)BDY(BDY(wsize))); |
can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); |
can->height=ZTOS((Q)BDY(NEXT(BDY(wsize)))); |
} |
} |
can->wname=""; |
can->wname=""; |
can->formula=formula; |
can->formula=formula; |
if( can->mode==modeNO(PLOT)){ |
if( can->mode==modeNO(PLOT)){ |
can->prec = argc(arg)==6 ? QTOS((Q)ARG5(arg)) : 0; |
can->prec = argc(arg)==6 ? ZTOS((Q)ARG5(arg)) : 0; |
plotcalc(can); |
plotcalc(can); |
memory_print(can,&barray); |
memory_print(can,&barray); |
STOQ(can->width,qw); STOQ(can->height,qh); |
STOZ(can->width,qw); STOZ(can->height,qh); |
n=mknode(3,qw,qh,barray); |
n=mknode(3,qw,qh,barray); |
MKLIST(*bytes,n); |
MKLIST(*bytes,n); |
} else { |
} else { |
Line 266 int memory_plot(NODE arg,LIST *bytes){ |
|
Line 266 int memory_plot(NODE arg,LIST *bytes){ |
|
tabe[i]=(double *)ALLOCA(height*sizeof(double)); |
tabe[i]=(double *)ALLOCA(height*sizeof(double)); |
calc(tabe,can,1); |
calc(tabe,can,1); |
memory_if_print(tabe,can,&barray); |
memory_if_print(tabe,can,&barray); |
STOQ(width,qw); STOQ(height,qh); |
STOZ(width,qw); STOZ(height,qh); |
n=mknode(3,qw,qh,barray); |
n=mknode(3,qw,qh,barray); |
MKLIST(*bytes,n); |
MKLIST(*bytes,n); |
} |
} |
Line 280 int plotover(NODE arg){ |
|
Line 280 int plotover(NODE arg){ |
|
struct canvas *can; |
struct canvas *can; |
VL vl,vl0; |
VL vl,vl0; |
|
|
id=QTOS((Q)ARG0(arg)); |
id=ZTOS((Q)ARG0(arg)); |
formula=(P)ARG1(arg); |
formula=(P)ARG1(arg); |
can=canvas[id]; |
can=canvas[id]; |
orgcolor=can->color; |
orgcolor=can->color; |
if(argc(arg)==3) can->color=QTOS((Q)ARG2(arg)); |
if(argc(arg)==3) can->color=ZTOS((Q)ARG2(arg)); |
else can->color=0; |
else can->color=0; |
get_vars_recursive((Obj)formula,&vl); |
get_vars_recursive((Obj)formula,&vl); |
for(vl0=vl;vl0;vl0=NEXT(vl0)) |
for(vl0=vl;vl0;vl0=NEXT(vl0)) |
Line 296 int plotover(NODE arg){ |
|
Line 296 int plotover(NODE arg){ |
|
current_can=can; |
current_can=can; |
can->formula=formula; |
can->formula=formula; |
if(can->mode==modeNO(PLOT)){ |
if(can->mode==modeNO(PLOT)){ |
can->prec = argc(arg)==3 ? QTOS((Q)ARG2(arg)) : 0; |
can->prec = argc(arg)==3 ? ZTOS((Q)ARG2(arg)) : 0; |
plotcalc(can); |
plotcalc(can); |
plot_print(display,can); |
plot_print(display,can); |
} else ifplotmain(can); |
} else ifplotmain(can); |
Line 318 int drawcircle(NODE arg){ |
|
Line 318 int drawcircle(NODE arg){ |
|
Obj x,y,r; |
Obj x,y,r; |
struct canvas *can; |
struct canvas *can; |
|
|
index=QTOS((Q)ARG0(arg)); |
index=ZTOS((Q)ARG0(arg)); |
xyr=(LIST)ARG1(arg); |
xyr=(LIST)ARG1(arg); |
x=(Obj)ARG0(BDY(xyr)); y=(Obj)ARG1(BDY(xyr)); r=(Obj)ARG2(BDY(xyr)); |
x=(Obj)ARG0(BDY(xyr)); y=(Obj)ARG1(BDY(xyr)); r=(Obj)ARG2(BDY(xyr)); |
c=QTOS((Q)ARG2(arg)); |
c=ZTOS((Q)ARG2(arg)); |
can=canvas[index]; |
can=canvas[index]; |
if(!can->window)return -1; |
if(!can->window)return -1; |
else { |
else { |
Line 345 int draw_obj(NODE arg){ |
|
Line 345 int draw_obj(NODE arg){ |
|
RealVect *vect; |
RealVect *vect; |
struct canvas *can; |
struct canvas *can; |
|
|
index=QTOS((Q)ARG0(arg)); |
index=ZTOS((Q)ARG0(arg)); |
can=canvas[index]; |
can=canvas[index]; |
if(!can && closed_canvas[index]){ |
if(!can && closed_canvas[index]){ |
canvas[index]=closed_canvas[index]; |
canvas[index]=closed_canvas[index]; |
Line 359 int draw_obj(NODE arg){ |
|
Line 359 int draw_obj(NODE arg){ |
|
} |
} |
|
|
obj=BDY((LIST)ARG1(arg)); |
obj=BDY((LIST)ARG1(arg)); |
if(argc(arg)== 3) color=QTOS((Q)ARG2(arg)); |
if(argc(arg)== 3) color=ZTOS((Q)ARG2(arg)); |
else color=0; // black |
else color=0; // black |
switch(len=length(obj)){ |
switch(len=length(obj)){ |
case 2: // point |
case 2: // point |
Line 398 int draw_string(NODE arg){ |
|
Line 398 int draw_string(NODE arg){ |
|
NODE pos; |
NODE pos; |
struct canvas *can; |
struct canvas *can; |
|
|
index=QTOS((Q)ARG0(arg)); |
index=ZTOS((Q)ARG0(arg)); |
can=canvas[index]; |
can=canvas[index]; |
if(!can && closed_canvas[index]){ |
if(!can && closed_canvas[index]){ |
canvas[index]=closed_canvas[index]; |
canvas[index]=closed_canvas[index]; |
Line 413 int draw_string(NODE arg){ |
|
Line 413 int draw_string(NODE arg){ |
|
|
|
pos=BDY((LIST)ARG1(arg)); |
pos=BDY((LIST)ARG1(arg)); |
str=BDY((STRING)ARG2(arg)); |
str=BDY((STRING)ARG2(arg)); |
if(argc(arg)==4)color=QTOS((Q)ARG3(arg)); |
if(argc(arg)==4)color=ZTOS((Q)ARG3(arg)); |
else color=0; // black |
else color=0; // black |
x=(int)ToReal((Q)ARG0(pos)); |
x=(int)ToReal((Q)ARG0(pos)); |
y=(int)ToReal((Q)ARG1(pos)); |
y=(int)ToReal((Q)ARG1(pos)); |
Line 428 int clear_canvas(NODE arg){ |
|
Line 428 int clear_canvas(NODE arg){ |
|
int index; |
int index; |
struct canvas *can; |
struct canvas *can; |
|
|
index=QTOS((Q)ARG0(arg)); |
index=ZTOS((Q)ARG0(arg)); |
can=canvas[index]; |
can=canvas[index]; |
if(!can||!can->window) return -1; |
if(!can||!can->window) return -1; |
clear_pixmap(can); |
clear_pixmap(can); |
Line 461 int arrayplot(NODE arg){ |
|
Line 461 int arrayplot(NODE arg){ |
|
can->width=DEFAULTWIDTH; |
can->width=DEFAULTWIDTH; |
can->height=DEFAULTHEIGHT; |
can->height=DEFAULTHEIGHT; |
} else { |
} else { |
can->width=QTOS((Q)BDY(BDY(wsize))); |
can->width=ZTOS((Q)BDY(BDY(wsize))); |
can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); |
can->height=ZTOS((Q)BDY(NEXT(BDY(wsize)))); |
} |
} |
can->wname=wname; can->formula=0; can->mode=modeNO(PLOT); |
can->wname=wname; can->formula=0; can->mode=modeNO(PLOT); |
create_canvas(can); |
create_canvas(can); |
Line 538 void ifplot_resize(struct canvas *can,POINT spos,POINT |
|
Line 538 void ifplot_resize(struct canvas *can,POINT spos,POINT |
|
ncan->height=m; |
ncan->height=m; |
} |
} |
if(can->wide){ |
if(can->wide){ |
STOQ(10,ten); |
STOZ(10,ten); |
STOQ(2,two); |
STOZ(2,two); |
subq(can->qxmax,can->qxmin,&t); |
subq(can->qxmax,can->qxmin,&t); |
mulq(t,ten,&dx); |
mulq(t,ten,&dx); |
subq(can->qymax,can->qymin,&t); |
subq(can->qymax,can->qymin,&t); |
Line 562 void ifplot_resize(struct canvas *can,POINT spos,POINT |
|
Line 562 void ifplot_resize(struct canvas *can,POINT spos,POINT |
|
ymin=can->qymin; |
ymin=can->qymin; |
ymax=can->qymax; |
ymax=can->qymax; |
} |
} |
STOQ(XC(spos),sx); STOQ(YC(spos),sy); STOQ(XC(epos),ex); STOQ(YC(epos),ey); |
STOZ(XC(spos),sx); STOZ(YC(spos),sy); STOZ(XC(epos),ex); STOZ(YC(epos),ey); |
STOQ(can->width,cw); STOQ(can->height,ch); |
STOZ(can->width,cw); STOZ(can->height,ch); |
mulq(sx,dx,&t); divq(t,cw,&s); addq(xmin,s,&ncan->qxmin); |
mulq(sx,dx,&t); divq(t,cw,&s); addq(xmin,s,&ncan->qxmin); |
mulq(ex,dx,&t); divq(t,cw,&s); addq(xmin,s,&ncan->qxmax); |
mulq(ex,dx,&t); divq(t,cw,&s); addq(xmin,s,&ncan->qxmax); |
mulq(ey,dy,&t); divq(t,ch,&s); subq(ymax,s,&ncan->qymin); |
mulq(ey,dy,&t); divq(t,ch,&s); subq(ymax,s,&ncan->qymin); |
Line 616 void plot_resize(struct canvas *can,POINT spos,POINT e |
|
Line 616 void plot_resize(struct canvas *can,POINT spos,POINT e |
|
ncan->height=m; |
ncan->height=m; |
} |
} |
if( can->wide ){ |
if( can->wide ){ |
STOQ(10,ten); STOQ(2,two); |
STOZ(10,ten); STOZ(2,two); |
subq(can->qxmax,can->qxmin,&t); mulq(t,(Q)ten,&dx); |
subq(can->qxmax,can->qxmin,&t); mulq(t,(Q)ten,&dx); |
addq(can->qxmax,can->qxmin,&t); divq(t,(Q)two,&xmid); |
addq(can->qxmax,can->qxmin,&t); divq(t,(Q)two,&xmid); |
divq(dx,(Q)two,&dx2); subq(xmid,dx2,&xmin); addq(xmid,dx2,&xmax); |
divq(dx,(Q)two,&dx2); subq(xmid,dx2,&xmin); addq(xmid,dx2,&xmax); |
Line 631 void plot_resize(struct canvas *can,POINT spos,POINT e |
|
Line 631 void plot_resize(struct canvas *can,POINT spos,POINT e |
|
ymin=can->ymin; |
ymin=can->ymin; |
ymax=can->ymax; |
ymax=can->ymax; |
} |
} |
STOQ(XC(spos),sx); STOQ(XC(epos),ex); STOQ(can->width,cw); |
STOZ(XC(spos),sx); STOZ(XC(epos),ex); STOZ(can->width,cw); |
mulq((Q)sx,dx,&t); divq(t,(Q)cw,&s); addq(xmin,s,&ncan->qxmin); |
mulq((Q)sx,dx,&t); divq(t,(Q)cw,&s); addq(xmin,s,&ncan->qxmin); |
mulq((Q)ex,dx,&t); divq(t,(Q)cw,&s); addq(xmin,s,&ncan->qxmax); |
mulq((Q)ex,dx,&t); divq(t,(Q)cw,&s); addq(xmin,s,&ncan->qxmax); |
ncan->xmin=ToReal(ncan->qxmin); ncan->xmax=ToReal(ncan->qxmax); |
ncan->xmin=ToReal(ncan->qxmin); ncan->xmax=ToReal(ncan->qxmax); |
Line 733 int ifplotNG(NODE arg,int func){ |
|
Line 733 int ifplotNG(NODE arg,int func){ |
|
|
|
can=canvas[id=search_canvas()]; |
can=canvas[id=search_canvas()]; |
formula=(P)ARG0(arg); |
formula=(P)ARG0(arg); |
can->color=QTOS((Q)ARG1(arg)); |
can->color=ZTOS((Q)ARG1(arg)); |
xrange=(LIST)ARG2(arg); |
xrange=(LIST)ARG2(arg); |
yrange=(LIST)ARG3(arg); |
yrange=(LIST)ARG3(arg); |
zrange=(LIST)ARG4(arg); |
zrange=(LIST)ARG4(arg); |
Line 754 int ifplotNG(NODE arg,int func){ |
|
Line 754 int ifplotNG(NODE arg,int func){ |
|
if(zrange){ |
if(zrange){ |
n=BDY(zrange); can->zmin=ToReal(BDY(n)); |
n=BDY(zrange); can->zmin=ToReal(BDY(n)); |
n=NEXT(n); can->zmax=ToReal(BDY(n)); |
n=NEXT(n); can->zmax=ToReal(BDY(n)); |
n=NEXT(n); can->nzstep=QTOS((Q)BDY(n)); |
n=NEXT(n); can->nzstep=ZTOS((Q)BDY(n)); |
} |
} |
if(!wsize){ |
if(!wsize){ |
can->width=DEFAULTWIDTH; |
can->width=DEFAULTWIDTH; |
can->height=DEFAULTHEIGHT; |
can->height=DEFAULTHEIGHT; |
} else { |
} else { |
can->width=QTOS((Q)BDY(BDY(wsize))); |
can->width=ZTOS((Q)BDY(BDY(wsize))); |
can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); |
can->height=ZTOS((Q)BDY(NEXT(BDY(wsize)))); |
} |
} |
if(wname) can->wname=BDY(wname); |
if(wname) can->wname=BDY(wname); |
else can->wname=""; |
else can->wname=""; |
Line 783 int ifplotOP(NODE arg,int func){ |
|
Line 783 int ifplotOP(NODE arg,int func){ |
|
VL vl,vl0; |
VL vl,vl0; |
NODE n; |
NODE n; |
|
|
index=QTOS((Q)ARG0(arg)); |
index=ZTOS((Q)ARG0(arg)); |
formula=(P)ARG1(arg); |
formula=(P)ARG1(arg); |
color=QTOS((Q)ARG2(arg)); |
color=ZTOS((Q)ARG2(arg)); |
// set canvas data |
// set canvas data |
can=canvas[index]; |
can=canvas[index]; |
orgcolor=can->color; |
orgcolor=can->color; |
Line 923 int objcp(NODE arg){ |
|
Line 923 int objcp(NODE arg){ |
|
int idsrc, idtrg, op_code; |
int idsrc, idtrg, op_code; |
struct canvas *cansrc, *cantrg; |
struct canvas *cansrc, *cantrg; |
|
|
idsrc=QTOS((Q)ARG0(arg)); |
idsrc=ZTOS((Q)ARG0(arg)); |
idtrg=QTOS((Q)ARG1(arg)); |
idtrg=ZTOS((Q)ARG1(arg)); |
op_code=QTOS((Q)ARG2(arg)); |
op_code=ZTOS((Q)ARG2(arg)); |
cansrc=canvas[idsrc]; |
cansrc=canvas[idsrc]; |
cantrg=canvas[idtrg]; |
cantrg=canvas[idtrg]; |
obj_op(cansrc, cantrg, op_code); |
obj_op(cansrc, cantrg, op_code); |
Line 1030 int polarplotNG(NODE arg){ |
|
Line 1030 int polarplotNG(NODE arg){ |
|
can=canvas[id]; |
can=canvas[id]; |
can->mode=modeNO(POLARPLOTD); |
can->mode=modeNO(POLARPLOTD); |
can->formula=(P)ARG0(arg); |
can->formula=(P)ARG0(arg); |
can->color=QTOS((Q)ARG1(arg)); |
can->color=ZTOS((Q)ARG1(arg)); |
range=(LIST)ARG2(arg); |
range=(LIST)ARG2(arg); |
geom=(LIST)ARG3(arg); |
geom=(LIST)ARG3(arg); |
wname=(STRING)ARG4(arg); |
wname=(STRING)ARG4(arg); |
Line 1041 int polarplotNG(NODE arg){ |
|
Line 1041 int polarplotNG(NODE arg){ |
|
n=NEXT(n);can->zmax=ToReal(BDY(n)); |
n=NEXT(n);can->zmax=ToReal(BDY(n)); |
n=NEXT(n); |
n=NEXT(n); |
can->vx=VR((P)BDY(BDY(range))); |
can->vx=VR((P)BDY(BDY(range))); |
can->nzstep=n?QTOS((Q)BDY(n)):DEFAULTPOLARSTEP; |
can->nzstep=n?ZTOS((Q)BDY(n)):DEFAULTPOLARSTEP; |
} |
} |
if(geom){ |
if(geom){ |
can->width=width=QTOS((Q)BDY(BDY(geom))); |
can->width=width=ZTOS((Q)BDY(BDY(geom))); |
can->height=height=QTOS((Q)BDY(NEXT(BDY(geom)))); |
can->height=height=ZTOS((Q)BDY(NEXT(BDY(geom)))); |
} |
} |
if(wname)can->wname=BDY(wname); |
if(wname)can->wname=BDY(wname); |
else can->wname=""; |
else can->wname=""; |