// Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team // //This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // println("ketcindylibbasic2[20191208] loaded"); //help:start(); ////%Drwfigs start//// 190530 Drwfigs(nm,figlist):=Drawfigures(nm,figlist,[]); Drwfigs(nm,figlist,optionlist):=Drawfigures(nm,figlist,optionlist,[]); Drwfigs(nm,figlist,optionlist,commonops):=Drawfigures(nm,figlist,optionlist,commonops); ////%Drwfigs end//// ////%Drawfigures start//// 190426 Drawfigures(nm,figlist):=Drawfigures(nm,figlist,[]); Drawfigures(nm,figlist,optionlist):=Drawfigures(nm,figlist,optionlist,[]); Drawfigures(nm,figlistorg,optionlistorg,commonops):=( //help:Drawfigures("1",["pt1","cr1"], [["Size=3"],[]],["Msg=n"]); //help:Drawfigures("","re1",[["Size=3"],[]],["Msg=n"]); regional(figlist,name,figL,optionlist,nn,kk,fig,eqL,msg,tmp,tmp1,tmp2); tmp=Divoptions(commonops); eqL=tmp_5; msg="Y"; forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="M", msg=Toupper(substring(tmp_2,0,1)); ); ); figlist=figlistorg; if(isstring(figlist), //190818from name=figlist+nm; figlist=parse(figlist); , name="figs"+nm; ); //190818to nn=length(figlist); optionlist=optionlistorg; if(length(optionlist)==0, //190531from optionlist=apply(1..nn,[]); ); if(!islist(optionlist_1), optionlist=apply(1..nn,optionlist); ); if(length(optionlist)0, if(isstring(figlistorg), tmp1=Measuredepth(fig); tmp2=append(optionlist_kk,"Msg=n"); tmp=fig; if(tmp1==2,tmp=tmp_1); if(length(tmp)>1, Listplot("-"+name+"n"+text(kk),fig,tmp2); , if(tmp1==2,fig=apply(fig,#_1)); Pointdata("-"+name+"n"+text(kk),fig,tmp2); ); figL=append(figL,name+"n"+text(kk)); , if(Measuredepth(fig)==0,fig=[fig]); //190531from if(Measuredepth(fig)==1,fig=[fig]); forall(1..(length(fig)), tmp1=fig_#; tmp2=name+"n"+text(kk)+"p"+text(#); if(length(tmp1)==1, Pointdata(tmp2,tmp1,optionlist_kk); figL=append(figL,"pt"+tmp2); , Listplot("-"+tmp2,tmp1,optionlist_kk); figL=append(figL,tmp2); //190427 ); ); //190531to tmp=apply(figL,Dqq(#)); tmp=name+"="+text(tmp)+";"; parse(tmp); ); ); if(msg=="Y", println("generate "+name+"="+text(figL)); ); ); figL; ); ////%Drawfigures end//// ////%Setarrow start//// Setarrow():=Setarrow([]); Setarrow(arglist):=( //help:Setarrow([-1,-1,-1,1,0.3]); //help:Setarrow([size(1),angle(18),position(1),cut(0),segstyle("dr,1")]); regional(tmp); tmp=select(arglist,isreal(#)); if(length(tmp)==0, println([YaSize,YaAngle,YaPosition,YaCut,YasenStyle]); ); if(length(tmp)>=1, if((tmp_1>0),YaSize=tmp_1); ); if(length(tmp)>=2, if(tmp_2<2.5,YaAngle=tmp_2*YaAngle,Yaangle=tmp_2); //191123 ); if(length(tmp)>=3, YaPosition=tmp_3; //191114 ); if(length(tmp)>=4, if((tmp_4>=0)&(tmp_4<1),YaCut=tmp_4); ); tmp=select(arglist,isstring(#)); if(length(tmp)>0, YasenStyle=tmp_1; ); [YaSize,YaAngle,YaPosition,YaCut,YasenStyle]; ); ////%Setarrow end//// ////%Arrowheaddata start//// Arrowheaddata(point,direction):= Arrowheaddata(point,direction,[YaSize,YaAngle,YaPosition,YaCut]); Arrowheaddata(point,direction,options):=( //191127remade // help:Arrowheaddata(A,B); // help:Arrowheaddata("1",A,"gr1"); // help:Arrowheaddata("1",A,gr1); // help:Arrowheaddata(options=[size(1),angle(18),pos(1),cut(0)]); regional(scaley,Eps,size,angle,segpos,cut, Houkou,hflg,Str,Ev,Nv, reL,pP,vec,pA,pB,pC,par,out,tmp,tmp1,tmp2); Eps=10^(-4); tmp=Divoptions(options); reL=tmp_6; size=0.2*YaSize*1/2.54*1000/MilliIn; angle=YaAngle*pi/180; segpos=YaPosition; cut=YaCut; if(length(reL)>=1, size=0.2*reL_1*1/2.54*1000/MilliIn; ); if(length(reL)>=2, if(reL_2<2.5,angle=reL_2*YaAngle,angle=reL_2); angle=angle*pi/180; ); if(length(reL)>=3, segpos=reL_3; ); if(length(reL)>=4, cut=reL_4; ); if(ispoint(point),pP=Lcrd(point),pP=point); hflg=0; out=[]; if(ispoint(direction), Houkou=direction.xy; hflg=2; ); if(hflg==0, //191203from if(!isstring(direction), //191207 if(Measuredepth(direction)==0, Houkou=direction; hflg=2; ); ); //191207to ); //191203to scaley=SCALEY; Setscaling(1); //191203(moved) if(hflg==0, if(isstring(direction),Houkou=parse(direction),Houkou=direction); if(!islist(pP), par=1+(length(Houkou)-1)*pP; //191207 pP=Ptcrv(par,Houkou); tmp=floor(tmp); //191203from , tmp=Nearestpt(pP,Houkou); pP=tmp_1; par=tmp_2; tmp=floor(par); //191203to ); if(tmp0, tmp=sort(tmp,[-#_2]); pC=tmp_1_1; , if(Norm(Ptend(direction)-Ptstart(direction))>Eps, tmp=sort(tmp1,[#_2]); pC=2*pP-tmp_1_1; , tmp=sort(tmp1,[-#_2]); pC=tmp_1_1; ); ); //191208to Houkou=pP-pC; hflg=1; ); ); if(hflg>=1, Ev=-Houkou/|Houkou|; Nv=[-Ev_2, Ev_1]; pA=pP+size*cos(angle)*Ev+size*sin(angle)*Nv; pB=pP+size*cos(angle)*Ev-size*sin(angle)*Nv; if(hflg==2, pC=(pA+pB)/2; ); pC=pC+cut*(pP-pC); tmp=(pP-(pA+pB)/2); tmp=(1-segpos)*tmp; pP=Translatepoint(pP,tmp); pA=Translatepoint(pA,tmp); pB=Translatepoint(pB,tmp); pC=Translatepoint(pC,tmp); Setscaling(scaley); out=apply([pA,pP,pB,pC,pA],LLcrd(#)); ); out; ); ////%Arrowheaddata end//// ////%Arrowhead start//// Arrowhead(point,Houkou):=Arrowhead(point,Houkou,[]); //181018from Arrowhead(Arg1,Arg2,Arg3):=( if(isstring(Arg1), Arrowhead(Arg1,Arg2,Arg3,[]); , Arrowhead(text(ArrowheadNumber),Arg1,Arg2,Arg3); ); ); Arrowhead(nm,point,direction,optionsorg):=(//191129remade //help:Arrowhead("1",B,B-A); //help:Arrowhead("1",[1,2],"gr1"); //help:Arrowhead("1",0.5,"gr1"); //help:Arrowhead(options=[size(1),angle(18),position(1),cut(0),"Line=n(y)"]); regional(Eps,name,Ltype,Noflg,opstr,opcindy,color,eqL,line, options,pP,Houkou,ptstr,hostr,tmp,tmp1,tmp2,list); Eps=10^(-4); name="arh"+nm; //181018 ArrowheadNumber=ArrowheadNumber+1; options=optionsorg; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; color=tmp_(length(tmp)-2); eqL=tmp_5; line="N"; forall(eqL, tmp=Strsplit(#,"="); tmp1=substring(tmp_1,0,1); tmp2=substring(tmp_2,0,1); if(Toupper(tmp1)=="L", line=Toupper(tmp2); options=remove(options,[#]); ); ); list=Arrowheaddata(point,direction,options); if((ispoint(point))%(islist(point)), if(!Inwindow(point),Noflg=2); ); if(Noflg<3, tmp=name+"="+Textformat(list,5)+";"; parse(tmp); if(isstring(Ltype), if(line=="N", fillpoly(apply(list,Pcrd(#)),color->color); if(Noflg==0, if((point==1)&(isstring(direction)), //191202from if(Norm(Ptend(direction)-Ptstart(direction))>Eps, //191203from tmp=select(GCLIST,#_1==direction); tmp=tmp_1; tmp1=Nearestpt(list_4,direction); tmp1=tmp1_2; Partcrv(direction,1,tmp1,direction,["Msg=n"]); //191207 Changestyle("part"+direction,[tmp_2,tmp_3]); Changestyle(direction,["nodisp"]); ); ); //191202to Listplot("-arh"+nm,list,["dr,0.1","Color="+text(color),"Msg=n"]);//191202 Shade(["arh"+nm],["Color="+text(color)]); ); , Listplot("-arh"+nm,list_(1..3),concat(options,["Msg=n"])); ); ); ); list; //191202 ); ////%Arrowhead end//// ////%Arrowdata start//// 191119 (Arrowdataseg,Arrowdatacrv) Arrowdata(ptlist):=Arrowdataseg(ptlist); Arrowdata(Arg1,Arg2):=Arrowdataseg(Arg1,Arg2); Arrowdata(nm,ptlistorg,optionsorg):=( //help:Arrowdata("1",[A,B]); //help:Arrowdata("1",[p1,p2]); //help:Arrowdata(options=[size(1),angle(18),pos(1),cut(0),"Cutend=0,0","Coord=p/l"]); //help:Arrowdata(optionsadded=["line"]); Arrowdataseg(nm,ptlistorg,optionsorg); ); ////%Arrowdata end//// ////%Oldarrowdata start//// Oldrrowdata(ptlist):=Oldarrowdata(ptlist,[]); //181110from Oldrrowdata(Arg1,Arg2):=( regional(name); if(isstring(Arg1), Oldarrowdata(Arg1,Arg2,[]); , name=""; forall(Arg1, if(ispoint(#), name=name+#.name; //190505 ); ); Oldarrowdata(name,Arg1,Arg2); ); ); //181110to Oldarrowdata(nm,ptlistorg,optionsorg):=( // help:Arrowdata("1",[A,B]); // help:Arrowdata("1",[pt1,pt2]); // help:Arrowdatacrv(options=[size(1),angle(18),pos(1),cut(0),"Cutend=0,0","Coord=p/l"]); // help:Arrowdatacrv(optionsadded=["line"]); regional(options,Ltype,Noflg,name,opstr,opcindy,eqL,reL,strL,color,size,coord, flg,lineflg,cutend,tmp,tmp1,tmp2,pA,pB,angle,segpos,cut,scaley,ptlist); name="ar"+nm; scaley=SCALEY; //190412 Setscaling(1); //190412 ptlist=[]; forall(ptlistorg, if(ispoint(#),tmp=[#.x, scaley*#.y], tmp=[#_1,scaley*#_2]); ptlist=append(ptlist,tmp); ); // ptlist=apply(ptlistorg,[#_1,scaley*#_2]); //190412 options=optionsorg; tmp=select(options,isstring(#)); //181214from tmp1=select(tmp,contains(["dr","da","do","id"],substring(#,0,2))); if(length(tmp1)==0,options=append(options,YasenStyle)); //181214to tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; reL=tmp_6; strL=tmp_7; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); tmp1=[YaSize,YaAngle,YaPosition,YaCut]; //181214from forall(1..(length(reL)), if(reL_#<0, reL_#=tmp1_#); ); forall((length(reL)+1)..4, reL=append(reL,tmp1_#); ); size=reL_1; angle=reL_2; segpos=reL_3; cut=reL_4; lineflg=0; if(contains(strL,"l")%contains(strL,"L"), lineflg=1; );//181018from options=remove(options,strL); cutend=[0,0];//180719 coord="P";//181018 forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,2)); tmp2=tmp_2; if(tmp1=="CU",//180719from tmp2=replace(tmp2,"[",""); tmp2=replace(tmp2,"]",""); cutend=tokenize(tmp2,","); if(length(cutend)==1,cutend=[cutend_1,cutend_1]); options=remove(options,[#]); ); if(tmp1=="CO",//181018from coord=Toupper(substring(tmp2,0,1)); options=remove(options,[#]); ); ); if(|cutend|>0,//181110from tmp=ptlist_2-ptlist_1; tmp=tmp/|tmp|; ptlist_1=ptlist_1+tmp*cutend_1; ptlist_2=ptlist_2-tmp*cutend_2; );//181110to if(coord=="P", pA=ptlist_1; pB=ptlist_2; if(ispoint(pA),pA=pA.xy); if(ispoint(pB),pB=pB.xy); , Setscaling(scaley); //190419 pA=Pcrd(ptlist_1); pB=Pcrd(ptlist_2); Setscaling(1); //190419 );//181018to if(Noflg<3, println("generate Arrowdata "+name); tmp=name+"="+Textformat([pA,pB],5)+";"; parse(tmp); if(lineflg==0, // 16.04.09 from tmp=pA-0.2*size/2*(pB-pA)/|pB-pA|; // 15.06.11 , tmp=pB; ); // 16.04.09 until tmp=format([LLcrd(pA),LLcrd(tmp)],6); ); if(Noflg<2, if(isstring(Ltype), Listplot("-ar"+nm,[LLcrd(pA),LLcrd(pB)],concat(options,["Msg=n"])); Arrowhead(nm,pA+segpos*(pB-pA),pB-pA,options); //181110 , if(Noflg==1,Ltype=0); ); ); Setscaling(scaley); //190412 [Lcrd(pA),Lcrd(pB)]; ); ////%Oldarrowdata end//// ////%Arrowdataseg start//// Arrowdataseg(ptlist):=Arrowdataseg(ptlist,[]); //181110from Arrowdataseg(Arg1,Arg2):=( regional(name); if(isstring(Arg1), Arrowdataseg(Arg1,Arg2,[]); , name=""; forall(Arg1, if(ispoint(#), name=name+#.name; //190505 ); ); Arrowdataseg(name,Arg1,Arg2); ); ); //181110from Arrowdataseg(nm,ptlistorg,optionsorg):=( //help:Arrowdataseg("1",[pt1,pt2]); //help:Arrowdataseg(options=[size(1),angle(18),pos(1),cut(0),"Cutend=0,0","Line=n(y)"]); regional(options,Ltype,Noflg,opstr,opcindy,eqL,reL,strL,color,size,lineflg, flg,cutend,tmp,tmp1,tmp2,pA,pB,pC,angle,segpos,cut,scaley,Ev,Nv,pP,ptlist); scaley=SCALEY; //190412 Setscaling(1); ptlist=[]; forall(ptlistorg, if(ispoint(#),tmp=[#.x, #.y], tmp=[#_1,scaley*#_2]); ptlist=append(ptlist,tmp); ); pA=ptlist_1; pB=ptlist_2; options=optionsorg; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; reL=tmp_6; strL=tmp_7; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); size=0.2*YaSize*1/2.54*1000/MilliIn; angle=YaAngle*pi/180; segpos=YaPosition; cut=YaCut; if(length(reL)>=1, size=0.2*reL_1*1/2.54*1000/MilliIn; ); if(length(reL)>=2, if(reL_2<2.5,angle=reL_2*YaAngle,angle=reL_2); angle=angle*pi/180; ); if(length(reL)>=3, segpos=reL_3; ); if(length(reL)>=4, cut=reL_4; ); options=remove(options,reL); //191202 cutend=[0,0];//180719 lineflg=0; forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,2)); tmp2=tmp_2; if(tmp1=="CU",//180719from tmp2=replace(tmp2,"[",""); tmp2=replace(tmp2,"]",""); cutend=tokenize(tmp2,","); if(length(cutend)==1,cutend=[cutend_1,cutend_1]); ); if(tmp1=="LI",//190504from tmp2=Toupper(substring(tmp2,0,1)); if(tmp2=="Y",lineflg=1); );//190504to ); tmp=pB-pA; tmp=tmp/|tmp|; pA=ptlist_1+tmp*cutend_1; pB=ptlist_2-tmp*cutend_2; pP=pA+segpos*(pB-pA); Ev=-1/|pB-pA|*(pB-pA); Nv=[-Ev_2, Ev_1]; tmp1=pP+size*cos(angle)*Ev+size*sin(angle)*Nv; tmp2=pP+size*cos(angle)*Ev-size*sin(angle)*Nv; pC=pP+(1-cut)*((tmp1+tmp2)/2-pP); ArrowheadNumber=ArrowheadNumber+1; if(Noflg<2, if(lineflg==1, Listplot("-arh"+nm,[tmp1,pP,tmp2],append(options,"Msg=n")); //191106 , Listplot("-arh"+nm,[tmp1,pP,tmp2,pC,tmp1],["dr,0.1","Color="+color,"Msg=n"]); //191106 Shade(["arh"+nm],[Ltype,"Color="+color]); ); if(lineflg==0, if(segpos==1,pB=pC); //191202 ); Listplot("-ar"+nm,[pA,pB],[Ltype,"Color="+color,"Msg=n"]); ); Setscaling(scaley); //190412 [LLcrd(pA),LLcrd(pB)]; ); ////%Arrowdataseg end//// ////%Anglemark start//// Anglemark(plist):=Anglemark(plist,[]); Anglemark(Arg1,Arg2):=( // 2015.04.28 from regional(nm,plist,options,tmp); if(isstring(Arg1), nm=Arg1; plist=Arg2; Anglemark(nm,plist,[]); , plist=Arg1; options=Arg2; tmp=Textformat(plist,5); tmp=replace(tmp,",",""); nm=substring(tmp,1,length(tmp)-1); Anglemark(nm,plist,options); ); ); // to Anglemark(nm,plist,options):=( //help([A,B,C],["E=\theta",2]); //help:Anglemark("1",[A,B,C],["E=1.2,\theta",2]); // help:Anglemark("1",[A,B,2*pi]); //help:Anglemark(options=[size,"E/L=(sep,)letter"]); regional(name,Out,pB,pA,pC,Ctr,ra,sab,sac,ratio,opstr,Bname,Bpos,color, Brat,tmp,tmp1,tmp2,Num,opcindy,Ltype,eqL,realL,Rg,Th,Noflg,Msg); name="ag"+nm; Bpos="md"+name; ra=0.5; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; color=tmp_(length(tmp)-2); opcindy=tmp_(length(tmp)); eqL=tmp_5; realL=tmp_6; Bname=""; Brat=1.2; //180530 Num=20; Msg="Y"; opstr=""; if(length(realL)>0, ra=realL_1*ra; opstr=","+text(realL_1);//180530 ); forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if((tmp1=="L")%(tmp1=="E"), if(tmp1=="L",Bname="Letter("); if(tmp1=="E",Bname="Expr("); Bname=Bname+Bpos+","+Dqq("c")+",";//16.10.29 tmp=tmp_2; //190524from tmp1=Indexall(tmp,","); if(length(tmp1)==0, Bname=Bname+Dqq(tmp); , if(length(tmp1)>1, Brat=parse(substring(tmp,0,tmp1_1-1)); tmp=substring(tmp,tmp1_1,length(tmp)); tmp1=Indexall(tmp,","); , if(substring(tmp,tmp1_1,tmp1_1+1)!="[", Brat=parse(substring(tmp,0,tmp1_1-1)); tmp=substring(tmp,tmp1_1,length(tmp))+",[]"; tmp1=Indexall(tmp,","); ); ); Bname=Bname+Dqq(substring(tmp,0,tmp1_1-1)); tmp=substring(tmp,tmp1_1+1,length(tmp)-1); tmp=Strsplit(tmp,","); tmp1=apply(tmp,Dqq(#)); Bname=Bname+","+text(tmp1); ); Bname=Bname+");"; //190524to ); if(tmp1=="M", //190206from Msg=Toupper(substring(tmp_2,0,1)); ); //190206to ); pB=Lcrd(plist_1); pA=Lcrd(plist_2); sab=pB-pA; Ctr=pA; if((length(plist_3)>1)%(ispoint(plist_3)), //180506from pC=Lcrd(plist_3); sac=pC-pA; Rg=[arctan2(sab)+0,arctan2(sac)+0]; , sac=pB-pA; Rg=[arctan2(sab)+0,arctan2(sab)+plist_3]; ); //180506to if(Rg_2min(|sab|,|sac|), // 16.12.29 println(" segments too short"); , forall(0..Num, Th=Rg_1+#*(Rg_2-Rg_1)/Num; Out=append(Out,Ctr+ra*[cos(Th),sin(Th)]); ); Th=(Rg_1+Rg_2)/2; //16.10.31from[moved] tmp1=Ctr+Brat*ra*[cos(Th),sin(Th)]; tmp="Defvar("+Dq+Bpos+"="; //no ketjs tmp=tmp+Textformat(tmp1,5)+Dq+")"; //no ketjs // tmp=Bpos+"="+Textformat(tmp1,5); ; //only ketjs parse(tmp+";");//16.10.31to[moved] if(length(Bname)>0, parse(Bname); ); if(Noflg<3, if(Msg=="Y", //190206 println("generate anglemark "+name+" and "+Bpos); ); tmp1=apply(Out,Pcrd(#)); tmp=name+"="+Textformat(tmp1,5)+";"; parse(tmp); tmp=Textformat(plist,5); //no ketjs on tmp1=substring(tmp,1,length(tmp)-1); tmp=name+"=Anglemark("+tmp1+opstr+")"; GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); ); Out; ); ////%Anglemark end//// ////%Paramark start//// Paramark(plist):=Paramark(plist,[]); Paramark(Arg1,Arg2):=( // 17.03.27 from regional(nm,plist,options,tmp); if(isstring(Arg1), nm=Arg1; plist=Arg2; Paramark(nm,plist,[]); , plist=Arg1; options=Arg2; tmp=Textformat(plist,5); tmp=replace(tmp,",",""); nm=substring(tmp,1,length(tmp)-1); Paramark(nm,plist,options); ); );// to Paramark(nm,plist,options):=( //help:Paramark([A,B,C],["E=\theta"]); //help:Paramark("1",[p1,p2,p3],["E=\theta"]); regional(name,Out,pB,pA,pC,ra,sab,sac,ratio,opstr,Bname,Bpos, Brat,tmp,tmp1,tmp2,Ltype,Noflg,eqL,realL,opcindy,color); name="pm"+nm; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); eqL=tmp_5; realL=tmp_6; ra=0.5; Bname=""; Brat=1.2; if(length(realL)>0, tmp=realL_1; ra=tmp*ra; opstr=opstr+","+text(tmp); ); forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if((tmp1=="L")%(tmp1=="E"), if(tmp1=="L",Bname="Letter("); if(tmp1=="E",Bname="Expr("); Bname=Bname+Bpos+","+Dqq("c")+",";//16.10.29 tmp=tmp_2; //190524from tmp1=Indexall(tmp,","); if(length(tmp1)==0, Bname=Bname+Dqq(tmp); , if(length(tmp1)>1, Brat=parse(substring(tmp,0,tmp1_1-1)); tmp=substring(tmp,tmp1_1,length(tmp)); tmp1=Indexall(tmp,","); , if(substring(tmp,tmp1_1,tmp1_1+1)!="[", Brat=parse(substring(tmp,0,tmp1_1-1)); tmp=substring(tmp,tmp1_1,length(tmp))+",[]"; tmp1=Indexall(tmp,","); ); ); Bname=Bname+Dqq(substring(tmp,0,tmp1_1-1)); tmp=substring(tmp,tmp1_1+1,length(tmp)-1); tmp=Strsplit(tmp,","); tmp1=apply(tmp,Dqq(#)); Bname=Bname+","+text(tmp1); ); Bname=Bname+");"; //190524to ); if(tmp1=="M", //190206from Msg=Toupper(substring(tmp_2,0,1)); ); //190206to ); pB=Lcrd(plist_1); pA=Lcrd(plist_2); pC=Lcrd(plist_3); Ctr=Lcrd(pA); Out=[]; Out=append(Out,pA+ra*(pB-pA)/|pB-pA|); Out=append(Out,pA+ra*(pB-pA)/|pB-pA|+ra*(pC-pA)/|pC-pA|); Out=append(Out,pA+ra*(pC-pA)/|pC-pA|); if(length(Bname)>0, tmp1=pA+Brat*ra*(pB-pA)/|pB-pA|+Brat*ra*(pC-pA)/|pC-pA|; tmp="Defvar("+Dq+Bpos+"="+Textformat(tmp1,5)+Dq+")";// no ketjs tmp=Bpos+"="+Textformat(tmp1,5);// only ketjs parse(tmp+";"); parse(Bname+";") //190415; ); if(Noflg<3, println("generate paramark "+name); tmp1=apply(Out,Pcrd(#)); tmp=name+"="+Textformat(tmp1,5)+";"; //190415 parse(tmp); tmp1=substring(Textformat(plist,5),1,length(Textformat(plist,5))-1); //no ketjs on tmp=name+"=Paramark("+tmp1+opstr+")"; GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); Out; ); ////%Paramark end//// ////%Makebowdata start//// Makebowdata(pA,pB,Hgt):=( regional(angle,pB2,pH2,pC2,pC,tmp,Th1,Th2,ra,dMA); angle=arctan2(pB-pA)+0; pB2=Rotatepoint(pB,-angle,pA); tmp=Lcrd(pA); pH2=[(tmp_1+pB2_1)/2,tmp_2-Hgt]; dMA=|tmp-pB2|/2; ra=(dMA^2+Hgt^2)/(2*Hgt); pC2=[pH2_1,pB2_2+(ra-Hgt)]; pC=Rotatepoint(pC2,angle,pA); Th1=arctan2(pA-pC2)+angle; Th2=arctan2(pB2-pC2)+angle; [pC,ra,Th1,Th2]; ); ////%Makebowdata end//// ////%Bowdata start//// Bowdata(plist):=Bowdata(plist,[]); Bowdata(plist,options):=( regional(nm,tmp); if(islist(plist), // 16.12.04from tmp=Textformat(plist,5); tmp=replace(tmp,",",""); nm=substring(tmp,1,length(tmp)-1); Bowdata(nm,plist,options); , nm=plist; tmp=options; Bowdata(nm,tmp,[]); ); // 16.12.04until ); Bowdata(nm,plist,options):=( //help:Bowdata([C,A],[2,1.2,"Expr=10","da"]); //help:Bowdata([A,B],["Expr=t0n3,a"]); //help:Bowdata([A,B],["Exprrot=t0n2r,a"]); regional(name,Out,pB,pA,pC,ra,tmp,tmp1,tmp2,Ltype,eqL,realL, Bname,Bpos,Th,Cut,Num,Hgt,opstr,opcindy,Ydata,pC,Msg, Th1,Th2,Noflg,Bops,Bmov,Tmov,Nmov,rev,color); name="bw"+nm; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); eqL=tmp_5; realL=tmp_6; pA=Lcrd(plist_1); pB=Lcrd(plist_2); Hgt=1/2*|pB-pA|*0.2; Cut=0; Num=24; Bname=""; Msg="Y"; //190206 Tmov=0;//161101from Nmov=0; Bmov=""; rev=0;//16.11.01until if(length(realL)>0, Hgt=realL_1*Hgt; // 15.04.12 if(length(realL)>1,Cut=realL_2); ); forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="L", if(indexof(#,"rot")>0, Bname="Letterrot("; , Bname="Letter("; ); Bops=tmp_2; ); if(tmp1=="E", if(indexof(#,"rot")>0, Bname="Exprrot("; , Bname="Expr("; ); Bops=tmp_2; ); if(tmp1=="M", //190206from Msg=Toupper(substring(tmp_2,0,1)); ); //190206to ); Ydata=Makebowdata(pA,pB,Hgt); pC=Ydata_1; ra=Ydata_2; Th=(Ydata_3+Ydata_4)*0.5; BOWMIDDLE=[pC_1+ra*cos(Th),pC_2+ra*sin(Th)]; Defvar("md"+name,BOWMIDDLE); //190415 Bpos=Textformat(BOWMIDDLE,5); //190415 if(length(Bname)>0, //16.11.01from tmp=indexof(Bops,","); if(tmp>0, tmp1=substring(Bops,0,tmp-1); if(length(tmp1)>=4 & substring(tmp1,0,1)=="t" & indexof(tmp1,"n")>0, Bmov=tmp1; Bops=substring(Bops,tmp,length(Bops)); ); ); if(length(Bmov)>0, tmp=indexof(Bmov,"t"); if(tmp>0, tmp1=indexof(Bmov,"n"); Tmov=parse(substring(Bmov,tmp,tmp1-1)); tmp=indexof(Bmov,"r"); if(tmp>0, Nmov=parse(substring(Bmov,tmp1,tmp-1)); rev=1; , Nmov=parse(substring(Bmov,tmp1,length(Bmov))); ); ); ); Bname=Bname+Bpos; //190415 if(abs(Tmov)+abs(Nmov)>0, tmp=Pcrd(pA)-Pcrd(pB); tmp1=1/Norm(tmp)*tmp; tmp2=[-tmp1_2,tmp1_1]; tmp=MARKLEN*(Tmov*tmp1+Nmov*tmp2); tmp=LLcrd(tmp); Bname=Bname+"+"+Textformat(tmp,5); ); Bname=Bname+","; if(indexof(Bname,"rot")>0, if(rev==1,tmp=pB-pA,tmp=pA-pB); Bname=Bname+Textformat(tmp,5)+","; , Bname=Bname+Dq+"c"+Dq+","; ); Bname=Bname+Dqq(Bops)+");"; //190415 parse(Bname); );//161101to if(Cut==0, Th1=Ydata_3; Th2=Ydata_4; Out=[]; forall(0..Num, tmp=Th1+#*(Th2-Th1)/Num; Out=append(Out,pC+ra*[cos(tmp),sin(tmp)]); ); , Th1=Ydata_3; Th2=Th-Cut/(2*ra); tmp1=[]; forall(0..Num/2, tmp=Th1+#*(Th2-Th1)/(Num/2); tmp1=append(tmp1,pC+ra*[cos(tmp),sin(tmp)]); ); Th1=Th+Cut/(2*ra); Th2=Ydata_4; tmp2=[]; forall(0..Num/2, tmp=Th1+#*(Th2-Th1)/(Num/2); tmp2=append(tmp2,pC+ra*[cos(tmp),sin(tmp)]); ); Out=[tmp1,tmp2]; ); if(Noflg<3, if(Msg=="Y", //190206 println("generate bowdata "+name+" and BOWMIDDLE="+Bpos);//16.10.31,190704 ); if(Measuredepth(Out)==1,Out=[Out]); tmp1=[]; forall(Out,tmp2, tmp=apply(tmp2,Pcrd(#)); tmp1=append(tmp1,tmp); ); tmp=name+"="+Textformat(tmp1,5)+";"; parse(tmp); tmp1=substring(Textformat(plist,5),1,length(Textformat(plist,5))-1); //no ketjs on tmp=name+"=Bowdata("+tmp1+opstr+")"; GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); ); ////%Bowdata end//// ////%Bowname start//// Bowname(str):=Bowname("c",str); Bowname(dir,str):=( Expr([BOWMIDDLE,dir,str]); ); ////%Bowname end//// ////%Bownamerot start//// Bownamerot(bwdata,str):=Bownamerot(bwdata,0,0,str,1); Bownamerot(bwdata,str,updown):=Bownamerot(bwdata,0,0,str,updown); Bownamerot(bwdata,tmov,nmov,str):=Bownamerot(bwdata,tmov,nmov,str,1); Bownamerot(bwdata,tmov,nmov,str,updown):=( regional(bdata,tmp); tmp=Measuredepth(bwdata); if(tmp==1,bdata=[bwdata],bdata=bwdata); if(length(bdata)>1, tmp=Ptend(bdata_2)-Ptstart(bdata_1); , tmp=Ptend(bdata_1)-Ptstart(bdata_1); ); if(updown<0,tmp=-tmp); Exprrot(BOWMIDDLE,tmp,tmov,nmov,str); ); ////%Bownamerot end//// ////%Deqdata start//// Deqdata(deq,rng,initt,initf,Num):=( //17.10.04 //help:Deqdata("[x1,...xn]`=[f1,...fn]","t=[0,20]",0,[...],50); regional(Eps,Inf,tname,Xname,func,t1,t2,dt,tt,X0,flg, kl1,kl2,kl3,kl4,pdL,tmp,tmp1,tmp2); Eps=10^(-3); Inf=10^3; tmp=tokenize(deq,"="); tmp1=replace(tmp_1,"`",""); tmp1=replace(tmp1,"'","");//190410 tmp1=substring(tmp1,1,length(tmp1)-1); Xname=tokenize(tmp1,","); func=tmp_2; forall(1..(length(Xname)), func=replace(func,Xname_#,"X_"+text(#)); ); tmp=tokenize(rng,"="); tname=tmp_1; tmp=parse(tmp_2); t1=tmp_1; t2=tmp_2; tmp="funP("+tname+",X):="+func+";"; parse(tmp); tmp="funN("+tname+",X):=-"+func+";"; parse(tmp); dt=(t2-t1)/Num; tt=initt; X0=Lcrd(initf); pdL=[flatten([tt,X0])]; flg=0; forall(1..(round((t2-initt)/dt)), //190523 if(flg==0, kl1=dt*funP(tt,X0); kl2=dt*funP(tt+dt/2,X0+kl1/2); kl3=dt*funP(tt+dt/2,X0+kl2/2); kl4=dt*funP(tt+dt,X0+kl3); X0=X0+(kl1+2*kl2+2*kl3+kl4)/6; tt=initt+#*dt; tmp=flatten([tt,X0]); pdL=append(pdL,tmp); if(|tmp|>Inf,flg=1); ); ); tt=initt; X0=Lcrd(initf); flg=0; forall(1..(round((initt-t1)/dt)), //190523 if(flg==0, kl1=dt*funN(tt,X0); kl2=dt*funN(tt+dt/2,X0+kl1/2); kl3=dt*funN(tt+dt/2,X0+kl2/2); kl4=dt*funN(tt+dt,X0+kl3); X0=X0+(kl1+2*kl2+2*kl3+kl4)/6; tt=initt-#*dt; tmp=flatten([tt,X0]); pdL=prepend(tmp,pdL); if(|tmp1|>Inf,flg=1); ); ); pdL; ); ////%Deqdata end//// ////%Deqplot start//// Deqplot(nm,deq,rng,initf):=Deqplot(nm,deq,rng,Lcrd(initf)_1,initf,[]); Deqplot(nm,deq,rng,Arg1,Arg2):=( regional(initt,initf,options); if(isreal(Arg1) & !islist(Arg1), initt=Arg1; initf=Arg2; options=[]; , initf=Lcrd(Arg1); initt=initf_1; options=Arg2; ); Deqplot(nm,deq,rng,initt,initf,options); ); Deqplot(nm,deqorg,rngorg,initt,initf,options):=( //17.10.06 //help:Deqplot("2","y'=y*(1-y)","x",0, 0.5,["Num=100"]); //help:Deqplot("1","y''=-y","x",0, [1,0]); //help:Deqplot("3","[x,y]'=[x*(1-y),0.3*y*(x-1)]","t=[0,20]",0,[1,0.5]); regional(deq,rng,Ltype,Noflg,eqL,opcindy,Num,name,nn,pdL,phase, sel,tmp,tmp1,tmp2,tmp3,color); name="de"+nm; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; color=tmp_(length(tmp)-2); opcindy=tmp_(length(tmp)); Num=50; forall(eqL, tmp=indexof(#,"="); tmp2=substring(#,0,1); tmp2=Toupper(tmp2); tmp1=substring(#,tmp,length(#)); if(Toupper(substring(#,0,1))=="N", Num=parse(tmp1); ); ); rng=rngorg; if(indexof(rng,"=")==0, rng=rng+"="+Textformat([XMIN,XMAX],6); ); deq=replace(deqorg,unicode("2018"),"`"); //190296//0416 deq=replace(deq,"'","`"); //180527 tmp3=indexof(deq,"="); tmp1=substring(deq,0,tmp3-1); tmp2=substring(deq,tmp3,length(deq)); if(indexof(tmp1,"[")==0, phase=0; sel=[1,2]; , phase=1; sel=[2,3]; ); nn=length(Indexall(tmp1,"`")); if(nn==0, //190211from println(" Lhs of equation has no single/back quotation "+tmp1); ); if(nn>0, tmp=Indexall(tmp1,"`"); if(tmp_(length(tmp))!=tmp3-1, nn=0; , forall(reverse(2..(length(tmp))), if((nn>0)&(!contains(tmp,tmp_#-1)), nn=0; ); ); ); if(nn==0, println(" Lhs of equation is not correct"); ); ); //190211to if(nn==1, if(indexof(tmp1,"[")==0, tmp1="["+replace(tmp1,"`","]`"); deq=tmp1+"="+tmp2; ); ); if(nn>1, tmp=indexof(tmp1,"`"); tmp1=substring(tmp1,0,tmp-1); deq="["; forall(1..nn, deq=deq+tmp1+"N"+text(#)+","; ); deq=substring(deq,0,length(deq)-1)+"]`=["; forall(1..(nn-1), deq=deq+tmp1+"N"+text(#+1)+","; ); forall(reverse(1..(nn)),jj, tmp=tmp1; forall(1..jj, tmp=tmp+"`"; tmp2=replace(tmp2,tmp,tmp1+"N"+text(#+1)); ); ); tmp2=tmp2+"]"; forall(1..(length(tmp2)-1), tmp=substring(tmp2,#-1,#); if(tmp!=tmp1, deq=deq+tmp; , tmp=substring(tmp2,#,#+1); if(tmp=="N", deq=deq+tmp1; , deq=deq+tmp1+"N1" ); ); ); deq=deq+"]"; ); if((nn>0)&(Noflg<3), //190211 pdL=Deqdata(deq,rng,initt,initf,Num); if(phase==1, pdL=apply(pdL,#_(2..3)); ); tmp1=apply(pdL,Pcrd(#)); tmp=name+"="+Textformat(tmp1,5)+";"; //190415 parse(tmp); ); if((nn>0)&(Noflg<1), //190211 //no ketjs on tmp=Assign(deq); tmp=replace(deq,"'","`"); tmp=name+"=Deqplot('"+tmp+"','"+rng+"',"; tmp=tmp+format(initt,6)+","+Textformat(initf,6); tmp=tmp+","+text(sel)+",'Num="+text(Num)+"')"; tmp=RSform(tmp); GLIST=append(GLIST,tmp); ); //no ketjs off if((nn>0)&(Noflg<3), //190211 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); ); ////%Deqplot end//// ////%Enclosing start//// Enclosing(nm,plist):=Enclosing2(nm,plist,[]);//180706[2lines] Enclosing(nm,plistorg,options):=Enclosing2(nm,plistorg,options); Enclosing2(nm,plist):=Enclosing2(nm,plist,[]); Enclosing2(nm,plistorg,options):=( //help:Enclosing("1",["sg2","gr1","Invert(sg2)"]); //help:Enclosing(options=[startpoint,epspara(1)]); regional(name,plist,AnsL,Start,Eps,Eps1,Eps2,flg,Fdata,Gdata,KL, t1,t2,tst,ss,ii,nn,nxtno,Ltype,Noflg,realL,eqL,opstr,opcindy, tmp,tmp1,tmp2,color,p1,p2); name="en"+nm; plist=plistorg; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; realL=tmp_6; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); Eps=10^(-5); // 16.12.05 Eps1=0.01; Eps2=0.1; Start=[]; flg=0; forall(realL, if(isList(#) % ispoint(#), Start=Lcrd(#); // 18.02.02 , if(flg==1,Eps1=#); if(flg==2,Eps2=#); flg=flg+1; ); ); flg=0; AnsL=[]; if(length(plist)==1, Fdata=parse(plist_1); tmp1=Fdata_1; tmp2=Fdata_(length(Fdata)); if(|tmp1-tmp2|1, KL=sort(KL,[#_2]); if(Start==[], tst=KL_1_2; Start=Pointoncurve(tst,Fdata); , tmp=apply(KL,|#_1-Start|); tmp=min(tmp); tmp1=select(KL,|#_1-Start|tmp1)%((#_2>t1)&(|#_1-p1|>Eps1))); //180713,16 t2=KL_1_2; ss=KL_1_3; if(abs(t2-t1)1, t2=KL_2_2; ss=KL_2_3; , println(text(nn)+" and "+text(nxtno)+" not intersect"); flg=1; ); ); ); if(flg==0, tmp=Partcrv("",t1,t2,Fdata,["nodata"]); if(nn==1, AnsL=tmp; , AnsL=concat(AnsL,tmp_(2..(length(tmp)))); ); ); t1=ss;//180706 p1=Pointoncurve(t1,Gdata); //180713 ); ); if(flg==0, AnsL=apply(AnsL,Pcrd(#)); ); if(Noflg<3, println("generate Enclosing "+name); tmp=name+"="+Textformat(AnsL,5)+";"; //190415 parse(tmp); tmp=name+"=Enclosing2(";//16.11.07from tmp1="list"+PaO(); forall(plistorg, //18.02.02 tmp1=tmp1+#+","; ); tmp=tmp+substring(tmp1,0,length(tmp1)-1)+")";//18.0706from //no ketjs on if(length(Start)>0,tmp=tmp+","+Textformat(Start,6)); tmp=tmp+","+text(Eps1)+")";//18.0706to,180707 GLIST=append(GLIST,tmp);//16.11.07to //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); tmp=apply(AnsL,LLcrd(#));//16.10.20 tmp; ); ////%Enclosing end//// /////////// new Hatchdata(cindy) /////////// ////%Makehatch start//// Makehatch(iolistorg,pt,vec,bdylist):=( regional(Eps,iolist,sg,bdy,out,nb,tenL,ns,ne,ioL, ii,jj,kk,nvec,nbdy,sgn1,sgn2,flg,rmL,p0,p1,p2,pL, Scalebkup,tmp,tmp1,tmp2); Eps=10^(-5); nvec=[-vec_2,vec_1]; nvec=nvec/|nvec|; if(!islist(iolistorg),iolist=[iolistorg],iolist=iolistorg); forall(1..(length(iolist)), tmp=replace(iolist_#,"i","1,"); tmp=replace(tmp,"o","0,"); tmp="["+substring(tmp,0,length(tmp)-1)+"]"; iolist_#=parse(tmp); ); Scalebkup=[SCALEX,SCALEY];//181020[2lines] SCALEX=1; SCALEY=1; sg=Lineplot("",[pt,pt+vec],["nodata"]); nb=length(bdylist); if(nb>0, tenL=[]; forall(1..nb,ii, rmL=[]; bdy=bdylist_ii; nbdy=length(bdy)-1; pL=[]; forall(1..nbdy,jj, p1=bdy_jj; p2=bdy_(mod(jj+1-1,nbdy)+1); tmp=Intersectseg(sg,[p1,p2],Eps); if(abs(tmp_1)0, pL=sort(pL,[#_2]); pL=apply(1..(length(pL)),append(pL_#,mod(#,2))); tenL=concat(tenL,pL); ); ); tenL=sort(tenL,[#_2]); if(length(tenL)>0, //180619from tmp1=tenL; tenL=[tmp1_1]; forall(2..(length(tmp1)),ii, //180717from tmp=tmp1_ii; flg=0; forall(tenL, if((Norm(tmp_1-#_1)0,tmp=tenL_1_1,tmp=sg_2); if(|sg_1-tmp|>Eps, tmp=[sg_1,-1,1,ioL]; tenL=prepend(tmp,tenL); ns=ns+1; ne=ne+1; ); if(|sg_2-tenL_(length(tenL))_1|>Eps, tmp=[sg_2,-1,2,ioL]; tenL=append(tenL,tmp); ); forall(ns..(ne-1),ii, //180619 ne=>ne-1 tmp=tenL_ii; tmp1=tmp_4; tmp2=tmp_5; ioL_tmp1=tmp2; tmp=[tmp_1,tmp_2,tmp_4,ioL]; tenL_ii=tmp; ); out=[]; forall(1..(length(tenL)-1),ii, tmp1=tenL_ii; if(contains(iolist,tmp1_4), tmp2=tenL_(ii+1); tmp=Listplot("",[tmp1_1,tmp2_1],["nodata"]); out=append(out,tmp); ); ); ); SCALEX=Scalebkup_1; //181020 SCALEY=Scalebkup_2; out; ); ////%Makehatch end//// ////%Anyselected start//// Anyselected(ptL):=( regional(tmp,out); out=false; forall(ptL, if(isstring(#),tmp=parse(#),tmp=#); out=(out)%(isselected(tmp)); ); out; ); ////%Anyselected end//// ////%Hatchdata start//// Hatchdata(nm,iostr,bdylist):=Hatchdatacindy(nm,iostr,bdylist,[]);//180619 Hatchdata(nm,iostr,bdylist,optionsorg):=( //181003from regional(options,tmp,tmp1,tmp2,eqL,strL,chkL,outflg); options=optionsorg; tmp=Divoptions(options); eqL=tmp_5; strL=tmp_7; outflg=0; forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(tmp_1); if(substring(tmp1,0,1)=="O", tmp2=tmp_2; if(tmp2!="n", outflg=1; option=remove(options,[#]); if((tmp2=="m")%(tmp2=="r"), options=append(options,tmp2);; ); ); ); ); if(outflg==0, options=remove(options,strL); Hatchdatacindy(nm,iostr,bdylist,options); , HatchdataR(nm,iostr,bdylist,options); ); ); //181003to Hatchdatacindy(nm,iostr,bdylist):=Hatchdata(nm,iostr,bdylist,[]); Hatchdatacindy(nm,iostr,bdylistorg,optionsorg):=( //help:Hatchdata("1",["ii"],[["ln1","Invert(gr1)"],["gr2","n"]]); //help:Hatchdata(options=["Not=pointlist","File=y(/m/n)","Max=50","Check=",angle,width]); regional(name,bdylist,bdynameL,bname,Ltype,Noflg,opstr,opcindy,reL, options,eqL,maxnum,startP,angle,interval,vec,nvec,ctr,pt,kk,delta,sha,AnsL, color,tmp,tmp1,tmp2,tmp3,namep,x1,y1,x2,y2,p1,p2, //180717 fname,fileflg,mkflg,vaL,pL,nL,nn,str,is,ie); //181102 name="ha"+nm; fname=Fhead+name+".txt"; bdylist=[]; bdynameL=[]; forall(1..(length(bdylistorg)),kk, tmp1=bdylistorg_kk; if(length(tmp1)==1, bname=tmp1_1; , tmp=tmp1_(length(tmp1)); if(contains(["n","s","e","w"],tmp), namep=tmp1_1;//180717from tmp2=parse(namep); if(substring(namep,0,2)=="ln", //180717from if(contains(["n","s"],tmp), x1=tmp2_1_1; y1=tmp2_1_2; x2=tmp2_2_1; y2=tmp2_2_2; p1=[NE.x,(y2-y1)/(x2-x1)*(NE.x-x1)+y1]; p2=[SW.x,(y2-y1)/(x2-x1)*(SW.x-x1)+y1]; Listplot(name+text(kk),[p1,p2],["nodisp"]); namep="sg"+name+text(kk); tmp2=parse(namep); ); if(contains(["e","w"],tmp), x1=tmp2_1_1; y1=tmp2_1_2; x2=tmp2_2_1; y2=tmp2_2_2; p1=[(x2-x1)/(y2-y1)*(NE.y-y1)+x1,NE.y]; p2=[(x2-x1)/(y2-y1)*(SW.y-y1)+x1,SW.y]; Listplot(name+text(kk),[p1,p2],["nodisp"]); namep="sg"+name+text(kk); tmp2=parse(namep); ); );//180717to if(tmp=="s", Listplot(name,[LLcrd(tmp2_1),[tmp2_1_1,2*YMIN-YMAX], //180717[2lines] [tmp2_(length(tmp2))_1,2*YMIN-YMAX],LLcrd(tmp2_(length(tmp2)))], ["nodisp"]); Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);//180717 bname="join"+text(kk)+name; ); if(tmp=="n", Listplot(name,[LLcrd(tmp2_1),[tmp2_1_1,2*YMAX-YMIN], //180717[2lines] [tmp2_(length(tmp2))_1,2*YMAX-YMIN],LLcrd(tmp2_(length(tmp2)))], ["nodisp"]); Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]); bname="join"+text(kk)+name; ); if(tmp=="e", Listplot(name,apply([tmp2_1,[XMAX,tmp2_1_2], [XMAX,tmp2_(length(tmp2))_2],tmp2_(length(tmp2))],LLcrd(#)),["nodisp"]); Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);//180717 bname="join"+text(kk)+name; ); if(tmp=="w", Listplot(name,apply( [tmp2_1,[XMIN,tmp2_1_2], [XMIN,tmp2_(length(tmp2))_2],tmp2_(length(tmp2))],LLcrd(#)),["nodisp"]); Joincrvs(text(kk)+name,[namep,"sg"+name],["nodisp"]);//180717 bname="join"+text(kk)+name; ); , Enclosing2(text(kk)+name,tmp,["nodisp"]);//180619[2lines] bname="en"+text(kk)+name; ); ); bdylist=append(bdylist,parse(bname)); bdynameL=append(bdynameL,bname); ); options=optionsorg; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; reL=tmp_6; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); angle=45; // interval=0.125*1000/2.54/MilliIn; interval=0.25*1000/2.54/MilliIn; //180706 startP=[(XMIN+XMAX)/2, (YMIN+YMAX)/2]; maxnum=[50,0]; //181109changed [first,second] fileflg="N";//181102from mkflg=1; chkL=[]; //181109 forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="M", maxnum=parse(tmp_2); if(!islist(maxnum), maxnum=[maxnum,0]; ); options=remove(options,[#]); ); if(tmp1=="F", //181102from fileflg=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); //181102to if(tmp1=="N", //181103from tmp=parse(tmp_2); if(Anyselected(tmp), mkflg=-1; ); options=remove(options,[#]); ); if(tmp1=="C", chkL=parse(tmp_2); options=remove(options,[#]); ); );//181102,03to tmp1=1; forall(reL, if(islist(#), startP=#; , if(tmp1==1, angle=#; tmp1=tmp1+1; , interval= interval*#; ); ); ); if((fileflg=="Y")%(fileflg=="M")&(mkflg>-1), //181102from wflg=1; varL=flatten(bdylistorg); varL=select(varL,length(#)>1); varL=sort(varL); pL=[]; forall(1..(length(varL)),nn, tmp1=varL_nn; tmp=select(GLIST,substring(#,0,length(tmp1))==tmp1); str=tmp_1; varL_nn=str; tmp1=Bracket(str,"()"); tmp2=max(apply(tmp1,#_2)); nL=select(1..(length(tmp1)),tmp1_#_2==tmp2); forall(nL,nn, is=tmp1_nn_1; ie=tmp1_(nn+1)_1; tmp=substring(str,is,ie-1); tmp=replace(tmp,"'",Dq); tmp=parse("["+tmp+"]"); tmp2=flatten(tmp); tmp2=flatten(tmp2); tmp2=flatten(tmp2); forall(tmp2, if(ispoint(#), if(!contains(pL,#.name), //190505 pL=append(pL,#.name); //190505 ); ); ); ); ); forall(chkL, if(!contains(pL,#),pL=append(pL,#)); ); forall(pL, tmp=#+"="+Textformat(parse(#+".xy"),5); varL=append(varL,tmp); ); tmp="reL="+Textformat(reL,5); varL=append(varL,tmp); if(fileflg=="M", fileflg="Y"; , tmp1="hatch"+nm+".txt"; if(isexists(Dirwork,tmp1), tmp2=load(tmp1); tmp2=tokenize(tmp2,"//"); tmp2=tmp2_(1..(length(tmp2)-1)); if(tmp2==varL, wflg=0; if(isexists(Dirwork,fname), mkflg=0; ReadOutData(fname); tmp=name+"="+Textformat(parse(name),5)+";"; //190415 parse(tmp); ); ); ); ); ); if(mkflg==1, //181102to angle=angle*pi/180; vec=[cos(angle),sin(angle)]; nvec=[-sin(angle),cos(angle)]; AnsL=[]; ctr=0;//181005[2lines] forall(0..(maxnum_1), kk, pt=startP+kk*interval*nvec; sha=Makehatch(iostr,pt,vec,bdylist); if((sha!=-1)&(length(sha)>0), AnsL=concat(AnsL,sha); ctr=ctr+1; //181005 ); ); maxnum_2=maxnum_2+(maxnum_1-ctr); //181005 forall(1..(maxnum_2),kk, //181005 pt=startP-kk*interval*nvec; sha=Makehatch(iostr,pt,vec,bdylist); if((sha!=-1)&(length(sha)>0), AnsL=concat(AnsL,sha); ); ); tmp1=apply(AnsL,Textformat(#,5)); tmp=name+"="+tmp1+";"; //190415 parse(tmp); ); if((Noflg<3)&(mkflg>-1), if(fileflg!="Y", //181102 println("generate Hatchdata "+name); tmp=name+"="+Textformat(AnsL,5)+";"; //190415 parse(tmp); if(!islist(iostr),tmp1=[iostr],tmp1=iostr); //no ketjs on tmp="c"+PaO(); forall(tmp1, tmp=tmp+Dq+#+Dq+","; ); tmp=substring(tmp,0,length(tmp)-1)+")"; tmp2=name+"=Hatchdata("+tmp; forall(bdynameL, tmp2=tmp2+",list"+PaO()+#+")"; ); tmp2=tmp2+opstr+")"; GLIST=append(GLIST,tmp2); //no ketjs off , GLIST=append(GLIST,"ReadOutData("+Dq+fname+Dq+")");//181102 //no ketjs ); ); if((Noflg<3)&(mkflg>-1), //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); if(mkflg>-1, if((fileflg=="Y")&(wflg==1), //181102from tmp1="hatch"+nm+".txt"; SCEOUTPUT = openfile(tmp1); forall(varL, println(SCEOUTPUT,#+"//"); ); closefile(SCEOUTPUT); WriteOutData(fname,[name,parse(name)]); ); //181102to tmp2=[]; forall(AnsL,tmp1, tmp=apply(tmp1,LLcrd(#)); tmp2=append(tmp2,tmp); ); tmp2; ); ); ////%Hatchdata end//// ////%Shadein start//// Shadein(pstrorg):=( //190220 regional(pstr,ptL,pL,crv,nn, tmp,tmp1,tmp2,pm1,pm2,p1,p2,flg); if(islist(pstrorg),pstr=pstrorg_1,pstr=pstrorg); crv=[]; Framedata(["nodisp"]); ptL=Intersectcurvespp(pstr,frwin); if(length(ptL)>0, pL=apply(ptL,#_2); forall(1..(length(pL)),nn, if(nnpm1,pm2=pm2-4); tmp=[tmp1]; pm1=floor(pm1); flg=0; forall(1..3, if(flg==0, if(pm1>pm2, p1=Pointoncrv(mod(pm1-1,4)+1,"frwin"); tmp=append(tmp,p1); pm1=pm1-1; , flg=1; ); ); ); if(pm1+1>pm2,tmp=append(tmp,tmp2)); ); //190223to ); ); if(length(crv)==0, crv=tmp; , crv=Joincrvs("",[crv,tmp],["nodata"]); ); ); , if(Inwindow(parse(pstr+"_1")),crv=pstr,crv=frwin); ); crv; ); ////%Shadein end//// ////%Shade start//// Shade(plist):=Shade(plist,[]); Shade(Arg1,Arg2):=( if(!isstring(Arg1), Shade(text(SHADECTR),Arg1,Arg2); //190222 , Shade(Arg1,Arg2,[]); ); ); Shade(nm,plistorg,options):=( //help:Shade(["gr1"]); // help:Shade(options=["Trim=(n)","Enc=(n)",Rirst=(n)","Color=",Startpoint]); //help:Shade(["gr2","Invert(sg1)"],["Enc=y",(Startpoint)]); regional(name,plist,jj,nn,trim,first,tmp,tmp1,tmp2, opstr,opcindy,eqL,reL,Str,G2,flg,encflg,startpt,color,ctr); name="shade"+nm; plist=plistorg; if(isstring(plist_1), // 16.01.24 // println("output Shade of "+plist); , // println("output Shade of lists"); ); tmp=Divoptions(options); eqL=tmp_5; reL=tmp_6; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); tmp=select(plist,indexof(#,"Invert")>0); //180929from if(length(tmp)>0,encflg=1,encflg=0); trim="N"; first="N"; //191007 forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(tmp_1); tmp2=Toupper(tmp_2); if(substring(tmp1,0,1)=="E", if(substring(tmp2,0,1)=="Y", encflg=1; ); if(substring(tmp2,0,1)=="N", encflg=0; ); ); if(substring(tmp1,0,1)=="T", trim=substring(tmp2,0,1); ); if(substring(tmp1,0,1)=="F", first=substring(tmp2,0,1); ); ); startpt=[]; forall(reL, if(islist(#), startpt=#; ); ); //180929to if(length(color)==4, //180602from tmp=Colorcmyk2rgb(color); ); flg=0; ctr=1; if(encflg==1, //180929from if(length(startpt)==2, Enclosing(nm,plist,[startpt,"nodisp"]); , Enclosing(nm,plist,["nodisp"]); ); plist=["en"+nm]; ); //180929to if((length(plist)==1)&(trim=="Y"), //190220from,109224 plist=[Shadein(plist)]; ); //190220to forall(1..(length(plist)),jj, //180613from if(flg==0, tmp1=plist_jj; if(isstring(tmp1),tmp=parse(tmp1),tmp=tmp1); if(!islist(tmp), flg=1; , if(!isstring(tmp1), tmp2=[]; forall(tmp1,if(ispoint(#),tmp=#.xy,tmp=#); tmp2=append(tmp2,tmp); ); Listplot("-"+name+text(ctr),tmp2,["nodisp"]); //190520 // tmp1=Dqq("-"+name+text(ctr)); // tmp2=Textformat(tmp2,6)+",["+Dqq("nodisp")+"]"; // tmp=name+text(ctr)+"=Listplot("+tmp1+","+tmp2+");";parse(tmp); plist_jj=name+text(ctr); ctr=ctr+1; ); ); ); );//180613to if(flg==1, println(" some data not defined properly"); , G2=Joincrvs("1",plist,["nodata"]); G2=apply(G2,Pcrd(#)); tmp1="fillpoly("+Textformat(G2,5)+opcindy+");"; parse(tmp1); ); Str="Shade("; //no ketjs on tmp1="list"+PaO(); forall(plist, if(isstring(#), // from 16.01.24 if(length(#)>1, tmp1=tmp1+#+","; , tmp1=tmp1+Dq+#+Dq+","; ); , tmp1=tmp1+"Listplot("+Textformat(#,5)+"),"; ); //16.01.24to ); Str=Str+substring(tmp1,0,length(tmp1)-1)+")"+")"; //180929 nn=length(COM2ndlist); //190311from if(first=="Y", //191007from jj=1; , jj=nn; forall(plist,tmp1, tmp=select(1..nn,indexof(COM2ndlist_#,tmp1)>0); jj=min(append(tmp,jj)); ); if(jj==0, jj=1); //191008 ); //191007to tmp1=["Texcom("+Dqq("{")+")","Setcolor("+color+")",Str,"Texcom("+Dqq("}")+")"]; tmp2=COM2ndlist_(1..(jj-1)); tmp=COM2ndlist_(jj..(length(COM2ndlist))); if(!islist(tmp),tmp=[tmp]); COM2ndlist=concat(tmp2,tmp1); COM2ndlist=concat(COM2ndlist,tmp); //190311to //no ketjs off SHADECTR=SHADECTR+1; ); ////%Shade end//// ////%Rotatepoint start//// Rotatepoint(point,Theta,ctr):=( //help:Rotatepoint(A,2*pi/3,B); regional(X1,X2,Y1,Y2,Cx,Cy,tmp); tmp=Lcrd(point); X1=tmp_1; Y1=tmp_2; tmp=Lcrd(ctr); Cx=tmp_1; Cy=tmp_2; X2=Cx+(X1-Cx)*cos(Theta)-(Y1-Cy)*sin(Theta); Y2=Cy+(X1-Cx)*sin(Theta)+(Y1-Cy)*cos(Theta); [X2,Y2]; ); ////%Rotatepoint end//// ////%Translatepoint start//// Translatepoint(point,mov):=( //help:Translatepoint(A,[2,3]); regional(X1,X2,Y1,Y2,Cx,Cy,tmp); tmp=Lcrd(point); X1=tmp_1; Y1=tmp_2; tmp=Lcrd(mov); Cx=tmp_1; Cy=tmp_2; X2=X1+Cx; Y2=Y1+Cy; [X2,Y2]; ); ////%Translatepoint end//// ////%Scalepoint start//// Scalepoint(point,ratio,center):=( //help:Scalepoint(A,[3,2],[0,0]); regional(X1,X2,Y1,Y2,Cx,Cy,tmp); tmp=Lcrd(point); X1=tmp_1; Y1=tmp_2; tmp=Lcrd(center); Cx=tmp_1; Cy=tmp_2; X2=Cx+ratio_1*(X1-Cx); Y2=Cy+ratio_2*(Y1-Cy); [X2,Y2]; ); ////%Scalepoint end//// ////%Reflectpoint start//// Reflectpoint(point,symL):=( //help:Reflectpoint(A,B); //help:Reflectpoint(A,[[2,3]]); //help:Reflectpoint(A,[C,E]); regional(X1,X2,Y1,Y2,Us,Vs,Pt1,Pt2,Cx,Cy,tmp); tmp=Lcrd(point); X1=tmp_1; Y1=tmp_2; Pt1=Lcrd(symL_1); if(length(symL)==1, Pt2=Pt1; , Pt2=Lcrd(symL_2); ); Us=Pt2_1-Pt1_1; Vs=Pt2_2-Pt1_2; if(Pt1==Pt2, X2=2*Pt1_1-X1; Y2=2*Pt1_2-Y1; , X2=(Us^2-Vs^2)/(Us^2+Vs^2)*X1+2*Us*Vs/(Us^2+Vs^2)*Y1 -2*Vs*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2); Y2=2*Us*Vs/(Us^2+Vs^2)*X1-(Us^2-Vs^2)/(Us^2+Vs^2)*Y1 +2*Us*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2); ); [X2,Y2]; ); ////%Reflectpoint end//// ////%Rotatedata start//// Rotatedata(nm,plist,Theta):=Rotatedata(nm,plist,Theta,[]); Rotatedata(nm,plist,angle,optionorg):=( //help:Rotatedata("1",["crAB","pt1"],pi/3,[[1,5],"dr,2"]); //help:Rotatedata("1",[[A.xy],[B.xy]],pi/3,[[1,5],"dr,2"]); regional(tmp,tmp1,tmp2,pdata,Theta,Pt,Cx,Cy,PdLL,PdL,options, opcindy,eqL,msgflg,Nj,Njj,Kj,Mj,X1,Y1,X2,Y2,Ltype,Noflg,name,color); name="rt"+nm; options=optionorg; Pt=[0,0]; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; color=tmp_(length(tmp)-2); opcindy=tmp_(length(tmp)); tmp1=tmp_6; if(length(tmp1)>0,Pt=Lcrd(tmp1_1)); msgflg="Y"; //190425from forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="M", msgflg=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); ); //190425to pdata=plist; if(isstring(pdata),pdata=[pdata]); if(!isstring(pdata_1) & Measuredepth(pdata)==1, pdata=[pdata]; ); if(isstring(angle),Theta=parse(angle),Theta=angle); Cx=Pt_1; Cy=Pt_2; PdL=[]; forall(pdata,Njj, if(isstring(Njj),Kj=parse(Njj),Kj=Njj); if(Measuredepth(Kj)==0,Kj=[Kj]); //17.11.24 if(Measuredepth(Kj)==1,Kj=[Kj]); tmp2=[]; forall(Kj,Nj, tmp1=[]; forall(Nj, tmp=LLcrd(#); X1=tmp_1; Y1=tmp_2; X2=Cx+(X1-Cx)*cos(Theta)-(Y1-Cy)*sin(Theta); Y2=Cy+(X1-Cx)*sin(Theta)+(Y1-Cy)*cos(Theta); tmp1=concat(tmp1,[[X2,Y2]]); ); tmp2=concat(tmp2,[tmp1]); ); PdL=concat(PdL,tmp2); ); if(Noflg<3, if(msgflg=="Y", println("generate Rotatedata "+name); ); tmp1=[]; forall(PdL,tmp2, tmp=apply(tmp2,Pcrd(#)); tmp1=append(tmp1,tmp); ); if(length(tmp1)==1,tmp1=tmp1_1); tmp=name+"="+Textformat(tmp1,5)+";"; //190415 parse(tmp); tmp1=text(plist); //no ketjs on tmp1=RSform(tmp1,1);// 180602 tmp=name+"=Rotatedata("+tmp1+"," +Textformat(angle,5)+","+RSform(Textformat(Pt,5))+")"; //17.12.23 GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); PdL; ); ////%Rotatedata end//// ////%Translatedata start//// Translatedata(nm,plist,mov):=Translatedata(nm,plist,mov,[]); Translatedata(nm,plist,mov,optionorg):=( //help:Translatedata("1",["gr1","pt1"],[1,2]); regional(options,tmp,tmp1,tmp2,pdata,Cx,Cy,PdL,Nj,Njj,Kj,eqL, opcindy,X2,Y2,Ltype,Noflg,name,color,leveL,msgflg); name="tr"+nm; options=optionorg; //190425 tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; //190424 color=tmp_(length(tmp)-2); opcindy=tmp_(length(tmp)); msgflg="Y"; //190425from forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="M", msgflg=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); ); //190425to pdata=plist; if(isstring(pdata),pdata=[pdata]); if(!isstring(pdata_1) & Measuredepth(pdata)==1, pdata=[pdata]; ); tmp=Lcrd(mov); Cx=tmp_1; Cy=tmp_2; PdL=[]; forall(pdata,Njj, if(isstring(Njj),Kj=parse(Njj),Kj=Njj); if(Measuredepth(Kj)==1,Kj=[Kj]); tmp2=[]; forall(Kj,Nj, tmp1=[]; forall(Nj, tmp=LLcrd(#); X2=tmp_1+Cx; Y2=tmp_2+Cy; tmp1=concat(tmp1,[[X2,Y2]]); ); tmp2=concat(tmp2,[tmp1]); ); PdL=concat(PdL,tmp2); ); if(Noflg<3, if(msgflg=="Y", //190425 println("generate Translatedata "+name); ); tmp1=[]; forall(PdL,tmp2, tmp=apply(tmp2,Pcrd(#)); tmp1=append(tmp1,tmp); ); if(length(tmp1)==1,tmp1=tmp1_1); tmp=name+"="+Textformat(tmp1,5)+";"; //190415 parse(tmp); tmp1=text(plist); //no ketjs on tmp1=RSform(tmp1,1);// 180602 tmp=name+"=Translatedata("+tmp1+","+RSform(Textformat(mov,5))+")"; GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); PdL; ); ////%Translatedata end//// ////%Scaledata start//// Scaledata(nm,plist,ratioV):=( regional(tmp); tmp=ratioV; //180603from if(!islist(tmp),tmp=[tmp,tmp]); tmp=Lcrd(tmp);//180603to Scaledata(nm,plist,tmp_1,tmp_2,[]); ); Scaledata(nm,plist,Arg1,Arg2):=( //help:Scaledata("1",["crAB","pt1"],3,2,[[0,0]]); //help:Scaledata("1",["crAB","pt1"],2,[[0,0]]); regional(tmp,options); if(islist(Arg2), tmp=Arg1;//180603[2lines] if(!islist(tmp),tmp=[tmp,tmp]); tmp=Lcrd(tmp); options=Arg2; Scaledata(nm,plist,tmp_1,tmp_2,options); , Scaledata(nm,plist,Arg1,Arg2,[]); ); ); Scaledata(nm,plist,rx,ry,optionorg):=( regional(tmp,tmp1,tmp2,pdata,Theta,Pt,Cx,Cy,PdL,options,eqL, opcindy,Nj,Njj,Kj,X2,Y2,Ltype,Noflg,name,color,msgflg); name="sc"+nm; options=optionorg; Pt=[0,0]; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; color=tmp_(length(tmp)-2); opcindy=tmp_(length(tmp)); tmp1=tmp_6; if(length(tmp1)>0, Pt=Lcrd(tmp1_1); ); msgflg="Y"; //190425from forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="M", msgflg=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); ); //190425to pdata=plist; if(isstring(pdata),pdata=[pdata]); if(!isstring(pdata_1) & Measuredepth(pdata)==1, pdata=[pdata]; ); Cx=Pt_1; Cy=Pt_2; PdL=[]; forall(pdata,Njj, if(isstring(Njj),Kj=parse(Njj),Kj=Njj); if(Measuredepth(Kj)==1,Kj=[Kj]); tmp2=[]; forall(Kj,Nj, tmp1=[]; forall(Nj, tmp=LLcrd(#); X2=Cx+rx*(tmp_1-Cx); Y2=Cy+ry*(tmp_2-Cy); tmp1=concat(tmp1,[[X2,Y2]]); ); tmp2=concat(tmp2,[tmp1]); ); PdL=concat(PdL,tmp2); ); if(Noflg<3, if(msgflg=="Y", println("generate Scaledata "+name); ); tmp1=[]; forall(PdL,tmp2, tmp=apply(tmp2,Pcrd(#)); tmp1=append(tmp1,tmp); ); if(length(tmp1)==1,tmp1=tmp1_1); tmp=name+"="+Textformat(tmp1,5)+";"; //190415 parse(tmp); tmp1=text(plist); //no ketjs on tmp1=RSform(tmp1,1); // 180602 tmp=name+"=Scaledata("+tmp1+"," +Textformat(rx,5)+","+Textformat(ry,5)+","+RSform(Textformat(Pt,5))+")"; GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); PdL; ); ////%Scaledata end//// ////%Reflectdata start//// Reflectdata(nm,plist,symL):=Reflectdata(nm,plist,symL,[]); Reflectdata(nm,plist,symL,optionorg):=( //help:Reflectdata("1",["crAB"],[C]); regional(tmp,tmp1,tmp2,pdata,Us,Vs,Pt1,Pt2,Cx,Cy,PdL,options,eqL, opcindy,Nj,Njj,Kj,X1,Y1,X2,Y2,Ltype,Noflg,name,color); name="re"+nm; options=optionorg; Pt=[0,0]; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; eqL=tmp_5; color=tmp_(length(tmp)-2); opcindy=tmp_(length(tmp)); msgflg="Y"; //190425from forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="M", msgflg=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); ); //190425to pdata=plist; if(isstring(pdata),pdata=[pdata]); if(!isstring(pdata_1) & Measuredepth(pdata)==1, pdata=[pdata]; ); Pt1=Lcrd(symL_1); if(length(symL)==1, Pt2=Pt1; , Pt2=Lcrd(symL_2); ); Us=Pt2_1-Pt1_1; Vs=Pt2_2-Pt1_2; PdL=[]; forall(pdata,Njj, if(isstring(Njj),Kj=parse(Njj),Kj=Njj); if(Measuredepth(Kj)==1,Kj=[Kj]); tmp2=[]; forall(Kj,Nj, tmp1=[]; forall(Nj, tmp=LLcrd(#); X1=tmp_1; Y1=tmp_2; if(Pt1==Pt2, X2=2*Pt1_1-X1; Y2=2*Pt1_2-Y1; , X2=(Us^2-Vs^2)/(Us^2+Vs^2)*X1+2*Us*Vs/(Us^2+Vs^2)*Y1 -2*Vs*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2); Y2=2*Us*Vs/(Us^2+Vs^2)*X1-(Us^2-Vs^2)/(Us^2+Vs^2)*Y1 +2*Us*(Us*Pt1_2-Vs*Pt1_1)/(Us^2+Vs^2); ); tmp1=concat(tmp1,[[X2,Y2]]); ); tmp2=concat(tmp2,[tmp1]); ); PdL=concat(PdL,tmp2); ); if(Noflg<3, if(msgflg=="Y", println("generate Reflectdata "+name); ); tmp1=[]; forall(PdL,tmp2, tmp=apply(tmp2,Pcrd(#)); tmp1=append(tmp1,tmp); ); if(length(tmp1)==1,tmp1=tmp1_1); tmp=name+"="+Textformat(tmp1,5)+";"; //190415 parse(tmp); tmp1=text(plist); //no ketjs on tmp1=RSform(tmp1,1);// 180602 tmp=name+"=Reflectdata("+tmp1+","+RSform(Textformat(symL,5))+")";//17.12.23 GLIST=append(GLIST,tmp); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); PdL; ); ////%Reflectdata end//// // 180800 revised ////%Mksegments start//// Mksegments():=Mksegments([]); Mksegments(options):=( //help:Mksegments(); regional(ctr,segstr,p,q,r,tmp1,tmp2,tmp3); ctr=1;//180809 forall(allsegments(),seg, str=text(inspect(seg,"definition")); tmp1=indexof(str,"("); tmp2=indexof(str,";"); tmp3=indexof(str,")"); p=substring(str,tmp1,tmp2-1); q=substring(str,tmp2,tmp3-1); Listplot("all"+text(ctr),[parse(p),parse(q)]);//180800 ctr=ctr+1; ); ); ////%Mksegments end//// // 180809 revised ////%Mkcircles start//// Mkcircles():=Mkcircles([]); Mkcircles(options):=( //help:Mkcircles(): regional(str,ctr,tmp,tmp1,tmp2); ctr=1; forall(allcircles(),cir, str=text(inspect(cir,"definition")); tmp1=indexof(str,"("); tmp2=indexof(str,")"); str=substring(str,tmp1,tmp2-1); tmp=Strsplit(str,";"); tmp1=parse(tmp_1); tmp2=parse(tmp_2); if(ispoint(tmp2), Circledata("all"+text(ctr),[tmp1,tmp2],options); , tmp=cir.radius; Circledata("all"+text(ctr),[tmp1,tmp1+[tmp2,0]],options); ); ctr=ctr+1; ); ); ////%Mkcircles end//// ////%MakeRarg start//// MakeRarg(arglist):=( regional(str,tmpstr); str=""; forall(arglist, if(isstring(#), tmpstr=Dq+RSslash(#)+Dq; , tmpstr=Textformat(#,6); ); str=str+tmpstr+","; ); str=substring(str,0,length(str)-1); str; ); ////%MakeRarg end//// ////%Htickmark start//// Htickmark(arglist):=Htickmark(arglist,[]); //190203 Htickmark(arglist,options):=( //190203 //help:Htickmark([1,"1",2,"sw","2"]); regional(nn,tmp,tmp1,tmp2,mark); mark=MARKLEN/SCALEY; tmp1=select(1..(length(arglist)),!isstring(arglist_#)); //180710from forall(tmp1,nn, Listplot("ht"+text(nn), [[arglist_nn,mark],[arglist_nn,-mark]],append(options,"Msg=n"));//191101 if(nn+2<=length(arglist), tmp=arglist_(nn+2); if(!isstring(tmp), Expr([[arglist_nn,0],"s1",arglist_(nn+1)],options); //190203 , Expr([[arglist_nn,0],arglist_(nn+1),arglist_(nn+2)],options); //190203 ); , Expr([[arglist_nn,0],"s1",arglist_(nn+1)],options); //190203 ); );//180710to // tmp=""; // tmp=MakeRarg(arglist); // Com2nd("Htickmark("+tmp+")"); ); ////%Htickmark end//// ////%Vtickmark start//// Vtickmark(arglist):=Vtickmark(arglist,[]); //190203 Vtickmark(arglist,options):=( //190203 //help:Vtickmark([1,"1",2,"sw","2"]); regional(nn,tmp,tmp1,tmp2,mark); mark=MARKLEN/SCALEX; tmp1=select(1..(length(arglist)),!isstring(arglist_#)); //180710from forall(tmp1,nn, Listplot("vt"+text(nn), [[mark,arglist_nn],[-mark,arglist_nn]],append(options,"Msg=n")); //191101 if(nn+2<=length(arglist), tmp=arglist_(nn+2); if(!isstring(tmp), Expr([[0,arglist_nn],"w1",arglist_(nn+1)],options); //190203 , Expr([[0,arglist_nn],arglist_(nn+1),arglist_(nn+2)],options); //190203 ); , Expr([[0,arglist_nn],"w1",arglist_(nn+1)],options); //190203 ); );//180710to// tmp=MakeRarg(arglist); // Com2nd("Vtickmark("+tmp+")"); ); ////%Vtickmark end//// ////%Vtick start//// Vtick(py):=Vtick(py,MARKLEN,[]); Vtick(py,len):=Vtick(py,len,[]); Vtick(py,len,options):=( //help:Vtick(1,0.1,options); regional(tmp,tmp1,tmp2); tmp="v"+text(round(py*100)); tmp=replace(tmp,"-","m"); tmp1=[0-len/2,py]; tmp2=[0+len/2,py]; Listplot(tmp,[tmp1,tmp2],options); ); ////%Vtick end//// ////%Htick start//// Htick(px):=Htick(px,MARKLEN,[]); Htick(px,len):=Htick(px,len,[]); Htick(px,lenorg,options):=( //help:Htick(-1,0.1,options); regional(len,tmp,tmp1,tmp2); tmp=LLcrd([0,lenorg]); len=tmp_2; tmp="h"+text(round(px*100)); tmp=replace(tmp,"-","m"); tmp1=[px,0-len/2]; tmp2=[px,0+len/2]; Listplot(tmp,[tmp1,tmp2],options); ); ////%Htick end//// ////%Setax start//// Setax(arglistorg):=( //help:Setax(["l","x","e","y","n","O","sw","Size=1.5"]); //help:Setax([7,"nw"]); //help:Setax([8,linestyle,colorax,colorlabel]); regional(arglist,st,nn,tmp,eqL); tmp=Divoptions(arglistorg); //190901from eqL=tmp_5; arglist=remove(arglistorg,eqL); if(length(arglist)==0, arglist=["l","x","e","y","n","O","sw"]; ); //190901to st=1; nn=1; if(isreal(arglist_1), st=2; nn=arglist_1; ); forall(st..(length(arglist)), tmp=arglist_#; if(length(tmp)>0,AXSTYLE_1_nn=tmp); nn=nn+1; ); AXSTYLE=[AXSTYLE_1,eqL]; //190901,02 // tmp=MakeRarg(arglist); // Com1st("Setax("+tmp+")"); ); ////%Setax end//// ////%Drwxy start//// Drwxy():=Drwxy(0,[]); Drwxy(Arg):=( //190901from if(islist(Arg), Drwxy(0,Arg); , Drwxy(Arg,[]); ); //190901to ); Drwxy(add,optionsorg):=( //help:Drwxy(); //help:Drwxy(1[the last axis will be drawn],oprions); //help:Drwxy(options); //help:Drwxy(options=["Xrng=","Yrng=","Ax=l,x,e,...","Size="]); regional(options,color,eqL,strL,org,xrng,yrng,ax,st,nn,size,labelsize, linesty,colorax,colorla,tmp,tmp1,tmp2); options=optionsorg; tmp=Divoptions(options); color=tmp_(length(tmp)-2); eqL=tmp_5; org=GENTEN; //tmp1=max([org_1+XMIN,XMIN]); //tmp2=min([org_1+XMAX,XMAX]); xrng=[XMIN,XMAX]; //190103 //tmp1=max([org_2+YMIN,YMIN]); //tmp2=min([org_2+YMAX,YMAX]); yrng=[YMIN,YMAX]; //190103 ax=AXSTYLE_1; //190901from labelsize="Size=1"; forall(AXSTYLE_2, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(contains(["S","L"],tmp1), labelsize="Size="+tmp_2; options=remove(options,[#]); ); ); //190901to linesty=ax_8; if(length(ax_9)>0, //190427 if(isstring(ax_9),colorax=ax_9,colorax=text(ax_9)); , colorax=KCOLOR; //190427 ); colorax="Color="+colorax; //190427[if removed] if(isstring(ax_10),colorla=ax_10,colorla=text(ax_10)); if(length(colorla)>0, //181217from colorla="Color="+colorla; , if(length(colorax)>0, colorla=colorax; ); ); //181217to forall(eqL, if(tmp1=="O", //190103from org=parse(tmp_2); options=remove(options,[#]); ); //190103to if(tmp1=="X", xrng=parse(tmp_2); options=remove(options,[#]); ); if(tmp1=="Y", yrng=parse(tmp_2); options=remove(options,[#]); ); if(tmp1=="A", tmp2=tokenize(tmp_2,","); st=1; nn=1; if(isreal(tmp2_1), st=2; nn=tmp2_1; ); forall(st..(length(tmp2)), tmp=tmp2_#; if(length(tmp)>0,ax_nn=tmp); nn=nn+1; ); options=remove(options,[#]); ); ); options=append(options,linesty); //181216 if(substring(ax_1,0,1)=="a", strL=select(options,isstring(#)); //181216 tmp=select(strL,contains(["dr","da","do","id"],substring(#,0,2))); if(length(tmp)==0,options=append(options,YasenStyle)); tmp=substring(ax_1,1,length(ax_1)); //181216[2lines] if(length(tmp)>0,size=parse(tmp),size=YaSize); tmp1=concat(options,[size,YaAngle,YaPosition,YaCut,colorax]);//181216 tmp=[[xrng_1,org_2],[xrng_2,org_2]]; Arrowdataseg("axx"+text(AXCOUNT),tmp,tmp1); tmp=[[org_1,yrng_1],[org_1,yrng_2]]; Arrowdataseg("axy"+text(AXCOUNT),tmp,tmp1); //190419 , tmp=[[xrng_1,org_2],[xrng_2,org_2]]; tmp1=concat(options,[colorax,"Msg=n"]);//181216,190325 Listplot("-axx"+text(AXCOUNT),tmp,tmp1); tmp=[[org_1,yrng_1],[org_1,yrng_2]]; Listplot("-axy"+text(AXCOUNT),tmp,tmp1); ); AXCOUNT=AXCOUNT+1; tmp=[colorla,labelsize]; //190901from Expr([[xrng_2,org_2],ax_3,ax_2],tmp); Expr([[org_1,yrng_2],ax_5,ax_4],tmp); Letter([org,ax_7,ax_6],tmp); //190901to if(add==0, //190103 Addax(0); ); ); ////%Drwxy end//// ////%Drwpt start//// Drwpt(pstr):=Drwpt(pstr,1); //181231 Drwpt(ptlist,nn):=( // 16.03.05 from //help:Drwpt(A); //help:Drwpt([1,2],0); if(!isreal(DrwPtCtr), //181231from DrwPtCtr=1; ); Pointdata(text(DrwPtCtr),ptlist,["Inside="+text(nn)]); DrwPtCtr=DrwPtCtr+1; //181231to ); ////%Drwpt end//// ////%Drawpoint start//// Drawpoint(pstr):=( if(isstring(pstr), println("Drwpt : "+pstr); Com2nd("Drwpt("+pstr+")"); , Drawpoint(pstr,1); ); ); Drawpoint(ptlistorg,nn):=( regional(ptlist,thick,tmp,tmp1); println("Drwpt : "+text(ptlistorg)); if(islist(ptlistorg), if(Measuredepth(ptlistorg)==1, ptlist=ptlistorg , ptlist=[ptlistorg] ); , ptlist=[ptlistorg] ); thick=PenThick/PenThickInit;// 16.04.09 from tmp1=max(TenSize/TenSizeInit,1)/8; Setpen(tmp1); // 16.04.09 until forall(ptlist, tmp=Textformat(#,5)+","+text(nn); Com2nd("Drwpt("+tmp+")"); // 16.04.09 ); Setpen(thick); // 16.04.09 );// 16.03.05 until ////%Drawpoint end//// ////%Addax start//// Addax(param):=( //help:Addax(0); ADDAXES=text(param); ); ////%Addax end//// ////%Expr start//// Expr(Pt,Dr,St):=Expr([Pt,Dr,St]); Expr(list):=Expr(list,[]); Expr(Pt,Dr,St,options):=Expr([Pt,Dr,St],options); //190409 Expr(listorg,options):=( //16.10.09 //help:Expr([A,"e","f(x)=x^2"]); //help:Expr([A,"e","f(x)=x^2"],["size->24"]); regional(list,str,tmp,tmp1,tmp2); list=listorg; forall(1..round(length(list)/3), str=list_(3*#); if(!isstring(str),str=format(str,5)); str="$"+str+"$"; list_(3*#)=str; ); Letter(list,options); ); ////%Expr end//// ////%Letter start//// Letter(Pt,Dr,St):=Letter([Pt,Dr,St]); Letter(list):=Letter(list,[]); Letter(Pt,Dr,St,options):=Letter([Pt,Dr,St],options);//181218 Letter(list,options):=( //help:Letter([C,"c","Graph of $f(x)$"]); //help:Letter([C,"c","xy"],["size->30"]); regional(Nj,Pos,Dir,Str,Off,Dmv,Xmv,Ymv,Noflg,opcindy, opL,aln,sz,clr,bld,ita,tmp,tmp1,tmp2,color,eqL); tmp=Divoptions(options); eqL=tmp_5; //190209 Noflg=tmp_2; color=tmp_(length(tmp)-2); opL=select(options,indexof(#,"->")>0); //16.10.09from tmp=select(opL,indexof(#,"color")); sz=12; bld=false; ita=false; aln="left"; forall(opL, tmp=indexof(#,"->"); tmp1=Removespace(substring(#,0,tmp-1)); tmp2=substring(#,tmp+1,length(#)); if(tmp1=="size",sz=parse(tmp2)); if(tmp1=="color",clr=parse(tmp2)); if(tmp1=="bold",bld=parse(tmp2)); if(tmp1=="ita",ita=parse(tmp2)); );//16.10.09to forall(eqL, //190209from tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="S", sz=round(parse(tmp_2)*12); ); ); //190209to Off=-4; Dmv=8; Nj=1; // if(Ketcindyjsfigure>0,sz=round(sz*Ketcindyjsscale) ); // only ketjs while(Nj+2<=length(list), Pos=list_Nj; Dir=list_(Nj+1); tmp=indexof(Dir,"s")+indexof(Dir,"n");//16.10.19from if(tmp>0, tmp=indexof(Dir,"w")+indexof(Dir,"e"); if(tmp==0, Dir="c"+Dir;//16.10.08 ); );//16.10.19until Str=list_(Nj+2); if(!isstring(Str),Str=format(Str,5)); // 16.09.30,10.09 tmp=replace(Str,".xy",""); tmp=replace(tmp,".x","(1)"); Str=replace(tmp,".y","(2)"); Str=RSslash(Str); // 17.09.24 Str=replace(Str,"`","'");//180303 tmp=Dq+","+Dq+Str+Dq+")"; if(Noflg==0, //no ketjs on if((Noflg==0)&(color!=KCOLOR), //180904 Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); Com2nd("Letter("+Lcrd(Pos)+","+Dq+Dir+tmp);//16.10.10 if((Noflg==0)&(color!=KCOLOR), //180904 Texcom("}");//180722 ); ); //no ketjs off if(Noflg<2, Xmv=0;//16.10.13 Ymv=-4; if(indexof(Dir,"n")>0, Ymv=Dmv/2; ); if(indexof(Dir,"s")>0, Ymv=-Dmv*3/2;//16.10.13 ); if(indexof(Dir,"e")>0, Xmv=Dmv/2; Off=0; aln="left"; ); if(indexof(Dir,"w")>0, Xmv=-Dmv/2; Off=0; // 16.09.30from aln="right"; ); if(indexof(Dir,"c")>0, Xmv=0;//16.10.13 Off=0; if(Ymv==0,Ymv=-4);//16.10.08 aln="mid"; // 16.09.30until ); // if(Ketcindyjsfigure>0, // only ketjs on // Off=round(Off*Ketcindyjsscale); // Xmv=round(Xmv*Ketcindyjsscale); // Ymv=round(Ymv*Ketcindyjsscale); // ); // only ketjs off Str=list_(Nj+2); //17.10.17 drawtext(Pcrd(Pos),Str,offset->[Off+Xmv,Off+Ymv], size->sz,color->color,align->aln,bold->bld,italics->ita);//16.10.09 ); Nj=Nj+3; ); ); ////%Letter end//// ////%Letterrot start//// Letterrot(pt,dir,str):=Letterrot(pt,dir,0,0,str,[]); Letterrot(pt,dir,Arg1,Arg2):=( if(islist(Arg2), Letterrot(pt,dir,"t0n0",Arg1,Arg2); , Letterrot(pt,dir,Arg1,Arg2,[]); ); ); Letterrot(pt,dir,movstr,str,options):=( // help:Letterrot(C,B-A,"AB"); // help:Letterrot(C,B-A,0,5,"AB"); //help:Letterrot(C,B-A,AB",["Size=20"]); //help:Letterrot(C,B-A,"t0n5","AB"); regional(tmov,nmov,tmp,tmp1,tmp2,color); tmp1=indexof(movstr,"t"); tmp2=indexof(movstr,"n"); if(tmp1>0, if(tmp2>0,tmp=tmp2-1,tmp=length(movstr)); tmov=parse(substring(movstr,tmp1,tmp)); , tmov=0; ); if(tmp2>0, nmov=parse(substring(movstr,tmp2,length(movstr))); , nmov=0; ); Letterrot(pt,dir,tmov,nmov,str,options); ); Letterrot(pt,dir,tmov,nmov,str,options):=( regional(tmp,color); tmp=Divoptions(options); color=tmp_(length(tmp)-2); Letter([pt,"c",str],append(options,"notex")); tmp=replace(str,"\","\\"); //17.10.18 if(color!=KCOLOR, //180904 Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); Com2nd("Letterrot("+pt+","+dir+","+tmov+","+nmov+","+Dqq(tmp)+")");//180805 if(color!=KCOLOR, //180904 Texcom("}");//180722 ); ); ////%Letterrot end//// ////%Exprrot start//// Exprrot(pt,dir,str):=Exprrot(pt,dir,0,0,str,[]); Expr(pt,dir,str,options):=Expr([pt,dir,str],options);//181218 Exprrot(pt,dir,Arg1,Arg2):=( if(islist(Arg2), Exprrot(pt,dir,"t0n0",Arg1,Arg2); , Exprrot(pt,dir,Arg1,Arg2,[]); ); ); Exprrot(pt,dir,movstr,str,options):=( // help:Exprrot(C,B-A,"d"); // help:Exprrot(C,B-A,0,5,"d"); //help:Exprrot(C,B-A,"d",["Color=red"]); //help:Exprrot(C,B-A,"t0n5","d"); regional(tmov,nmov,tmp,tmp1,tmp2,color); tmp1=indexof(movstr,"t"); tmp2=indexof(movstr,"n"); if(tmp1>0, if(tmp2>0,tmp=tmp2-1,tmp=length(movstr)); tmov=parse(substring(movstr,tmp1,tmp)); , tmov=0; ); if(tmp2>0, nmov=parse(substring(movstr,tmp2,length(movstr))); , nmov=0; ); Exprrot(pt,dir,tmov,nmov,str,options); ); Exprrot(pt,dir,tmov,nmov,str,options):=( regional(tmp,color); tmp=Divoptions(options); color=tmp_(length(tmp)-2); Expr([pt,"c",str],append(options,"notex")); tmp=replace(str,"\","\\"); //17.10.18 if(color!=KCOLOR, //180904 Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); Com2nd("Exprrot("+pt+","+dir+","+tmov+","+nmov+","+Dqq(tmp)+")");//180802 if(color!=KCOLOR, //180904 Texcom("}");//180722 ); ); ////%Exprrot end//// ////%Ptpos start//// 190906 Ptpos(pt):=Ptpos(pt,[]); Ptpos(ptorg,pos):=( //help:Ptpos(A); //help:Ptpos(A, [3,2]); regional(pt,out,tmp); if(ispoint(ptorg),pt=ptorg,pt=parse(ptorg)); if(length(pos)==0, tmp=pt.name+"position"; out=parse(tmp); if(!islist(out), tmp=tmp+"="+Textformat(pt.xy,6)+";"; parse(tmp); ); , pt.xy=pos; tmp=pt.name+"position="+Textformat(pt.xy,6)+";"; parse(tmp); out=pt.xy; ); out; ); ////%Ptpos end//// ////%Strictmove start//// Strictmove(pC):=Strictmove(pC,StrictSep); //190831 Strictmove(pCorg,sep):=( regional(pC,tmp,tmp1,tmp2); pC=pCorg; if(ispoint(pC),pC=pC.name); tmp1=pC+"position"; if(!islist(parse(tmp1)), tmp=tmp1+"="+textformat(parse(pC).xy,6)+";"; parse(tmp); , tmp=parse(pC).xy; tmp2=mouse().xy; if(|tmp-tmp2|>sep, tmp=pC+".xy="+pC+"position"; parse(pC).xy=parse(pC+"position"); , tmp=tmp1+"="+Textformat(parse(pC).xy,6)+";"; parse(tmp); ); ); ); ////%Strictmove end//// ////%Slider start//// Slider(ptstr,p1,p2):=Slider(ptstr,p1,p2,[]); Slider(ptstr,p1,p2,options):=(//190120 //help:Slider("A-C-B",[-3,0],[3,0]); //help:Slider("C",[-3,0],[3,0]); //help:Slider(options=["Color=[0,0,0.6]","Thick=2"]); //help:Slider(options2=["Sep=0.3"]); //190824 regional(pA,pB,pC,color,thick,sep,tmp,tmp1,tmp2); color="Color=0.6*[0,0,1]"; //190120from thick="size->2"; sep=0.3; //190824 forall(options, tmp=Toupper(substring(#,0,1)); if(tmp=="C", color=#; ); if(tmp=="T", tmp=Strsplit(#,"="); thick="size->"+tmp_2; ); if(tmp=="S",//190824from tmp=Strsplit(#,"="); sep=parse(tmp_2); ); //190824to ); tmp=Indexall(ptstr,"-"); if(length(tmp)>0, pA=substring(ptstr,0,tmp_1-1); //190824from pC=substring(ptstr,tmp_1,tmp_2-1); pB=substring(ptstr,tmp_2,length(ptstr)); parse(pA).xy=p1; parse(pB).xy=p2; //190824to tmp1=pC+"position"; //190827from if(!islist(parse(tmp1)), tmp2=parse(pC).xy; if(|tmp2-p1|<0.1,tmp2=p1+0.1*(p2-p1)/|p2-p1|); if(|tmp2-p2|<0.1,tmp2=p2+0.1*(p1-p2)/|p1-p2|); tmp=tmp1+"="+textformat(tmp2,6)+";"; parse(tmp); parse(pC).xy=tmp2; ); //190827to PTEXCEPTION=concat(TEXCEPTION,[pA,pC,pB]); , pC=ptstr; pA=pC+"l"; pB=pC+"r"; PTEXCEPTION=concat(PTEXCEPTION,[pC]); ); Listplot(pA+pB,[p1,p2],["Msg=n","notex",color,thick]); Putonseg(pC,parse("sg"+pA+pB)); ); ////%Slider end//// ////%Putpoint start//// Putpoint(name,Pt):=Putpoint(name,Pt,Pt); Putpoint(name,Ptinit,Pt):=( //help:Putpoint("A",[1,2],[1,A.y]); regional(ptstr); ptstr=apply(allpoints(),#.name); //no ketjs on //191030 if(!contains(ptstr,name), createpoint(name,Pcrd([Ptinit_1,Ptinit_2])); Ptpos(name,Pcrd([Ptinit_1,Ptinit_2])); //191005 , //no ketjs off //191030 ptstr=name+".xy="+Textformat(Pcrd(Pt),5)+";"; parse(ptstr); ); //no ketjs //191030 ); ////%Putpoint end//// ////%Bezierpt start//// Bezierpt(t,ptlist,ctrlist):=( regional(flg3,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9); p0=ptlist_1; p3=ptlist_2; p1=ctrlist_1; if(length(ctrlist)==1, p2=p3; flg3=0; , p2=ctrlist_2; flg3=1; ); if(length(p0)<3, // 15.02.08 p0=Lcrd(p0); p3=Lcrd(p3); p1=Lcrd(p1); p2=Lcrd(p2); ); p4=(1-t)*p0+t*p1; p5=(1-t)*p1+t*p2; p6=(1-t)*p2+t*p3; p7=(1-t)*p4+t*p5; p8=(1-t)*p5+t*p6; p9=(1-t)*p7+t*p8; if(flg3==0,p7,p9); ); ////%Bezierpt end//// ////%Bezier start//// Bezier(ptctrlist):=Beziercurve(ptctrlist_3,ptctrlist_1,ptctrlist_2,[]); Bezier(Arg1,Arg2):=( //190202from regional(nm,ptctrlist,options); if(islist(Arg1), ptctrlist=Arg1; options=Arg2; Beziercurve(ptctrlist_3,ptctrlist_1,ptctrlist_2,options); , nm=Arg1; ptctrlist=Arg2; Beziercurve(nm,ptctrlist_1,ptctrlist_2,[]); ); ); //190202to Bezier(nm,ptlist,ctrlist):=Beziercurve(nm,ptlist,ctrlist,[]); Bezier(nm,ptlist,ctrlist,options):=Beziercurve(nm,ptlist,ctrlist,options); ////%Bezier end//// ////%Beziercurve start//// Beziercurve(nm,ptlist,ctrlist):=Beziercurve(nm,ptlist,ctrlist,[]); Beziercurve(nm,ptlistorg,ctrlistorg,options):=( //help:Bezier("1",[A,D],[B,C]); //help:Bezier(options=["Num=10"]); regional(name,Ltype,Noflg,opstr,opcindy,Num, ptlist,ctrlist,tmp,tmp1,tmp2,ii,st,out,list,color); name="bz"+nm; tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); Num=10; tmp1=tmp_5; forall(tmp1, // 14.12.31 if(substring(#,0,1)=="N", tmp2=indexof(#,"="); Num=parse(substring(#,tmp2,length(#))); opstr=opstr+","+Dq+#+Dq; ); ); ptlist=apply(ptlistorg,Lcrd(#)); // 16.08.16 ctrlist=[]; // 14.12.31 if(length(ctrlistorg)==length(ptlist)-1, forall(1..(length(ctrlistorg)),ii, //190202 tmp1=apply(ctrlistorg_ii,Lcrd(#)); //190202 if(Measuredepth(tmp1)==0,tmp=[tmp1],tmp=tmp1); ctrlist=append(ctrlist,tmp); ); , forall(1..(length(ptlist)-1),ii, tmp=ctrlistorg_((2*ii-1)..(2*ii)); tmp=apply(tmp,Lcrd(#)); // 16.08.16 ctrlist=append(ctrlist,tmp); ); ); if(!islist(Num), Num=apply(ctrlist,Num); ); list=[]; forall(1..(length(ptlist)-1),ii, tmp1=ptlist_(ii..(ii+1)); tmp2=ctrlist_ii; if(ii==1,st=0,st=1); forall(st..Num_ii, tmp=Bezierpt(#/Num_ii,tmp1,tmp2); list=append(list,tmp); ); ); if(Noflg<3, println("generate Bezier "+name); out=apply(list,Pcrd(#)); tmp=name+"="+Textformat(out,5)+";"; //190415 parse(tmp); tmp1=Textformat(ptlist,5); //no ketjs on tmp1=RSform(tmp1,2); //17.12.23 tmp2=Textformat(ctrlist,5); tmp2=RSform(tmp2,3); //17.12.23 GLIST=append(GLIST,name+"=Bezier("+tmp1+","+tmp2+opstr+")"); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); BezierCtrL=ctrlist; //181001 list; ); ////%Beziercurve end//// ////%Putbezierdata start//// Putbezierdata(name,ptL):=Putbezierdata(name,ptL,[]); Putbezierdata(name,ptL,options):=( regional(psize,Deg,tmp,tmp1,tmp2,p1,p2,pts,ctrs); tmp=Divoptions(options); psize=3; //no ketjs Deg=3; tmp1=tmp_5; forall(tmp1, if(substring(#,0,1)=="D", //no ketjs on tmp=indexof(#,"="); Deg=parse(substring(#,tmp,length(#))); ); if(substring(#,0,1)=="S", tmp=indexof(#,"="); psize=parse(substring(#,tmp,length(#))); ); //no ketjs off ); pts=[]; ctrs=[]; forall(1..length(ptL), p2=ptL_#; // 16.08.16 if(ispoint(p2), tmp1=p2.name; //190505 , tmp1=name+text(#); Putpoint(tmp1,p2,Lcrd(parse(tmp1))); // 16.08.16 ); inspect(parse(tmp1),"ptsize",psize); pts=append(pts,parse(tmp1)); inspect(parse(tmp1),"color",4); if(#>1, p1=Lcrd(ptL_(#-1)); // 16.08.16 p2=Lcrd(ptL_#); // 16.08.16 if(Deg==3, tmp=(2*p1+p2)/3; tmp1=name+"p"+text(#-1); Putpoint(tmp1,tmp,Lcrd(parse(tmp1))); // 16.08.16 inspect(parse(tmp1),"labeled",false); //15.01.22 Letter([parse(tmp1),"ne",tmp1],["notex"]); //15.01.22 inspect(parse(tmp1),"ptsize",psize); inspect(parse(tmp1),"color",3); tmp=(p1+2*p2)/3; tmp2=name+"q"+text(#-1); Putpoint(tmp2,tmp,Lcrd(parse(tmp2))); // 16.08.16 inspect(parse(tmp2),"labeled",false); //15.01.22 Letter([parse(tmp2),"ne",tmp2],["notex"]); //15.01.22 inspect(parse(tmp2),"ptsize",psize); inspect(parse(tmp2),"color",3); ctrs=append(ctrs,[parse(tmp1),parse(tmp2)]); , tmp=(p1+p2)/2; tmp1=name+"p"+text(#-1); Putpoint(tmp1,tmp,Lcrd(parse(tmp1))); // 16.08.16 inspect(parse(tmp1),"labeled",false); //15.01.22 Letter([parse(tmp1),"ne",tmp1],["notex"]); //15.01.22 inspect(parse(tmp1),"ptsize",psize); inspect(parse(tmp1),"color",3); ctrs=append(ctrs,[parse(tmp1)]); ); ); ); [pts,ctrs,name]; ); ////%Putbezierdata end//// ////%Bezierstart start//// Bezierstart(n):=( // 2016.02.26 BezierNumber=n; ); ////%Bezierstart end//// ////%Mkbezierptcrv start//// Mkbezierptcrv(ptdata):=Mkbezierptcrv(ptdata,[]); Mkbezierptcrv(ptdata,options):=( //help:Mkbezierptcrv([A,B,C,D]); //help:Mkbezierptcrv([[A,B],[C,D]]); //help:Mkbezierptcrv(options=["Num=10"]); // global BezierNumber regional(ptlist,Out,tmp,tmp1,tmp2); if(isstring(ptdata), //no ketjs on ptlist=Readcsvsla(ptdata,options); , //no ketjs off ptlist=ptdata; ); //no ketjs if(Measuredepth(ptlist)==1,ptlist=[ptlist]); Out=[]; forall(1..length(ptlist), tmp=floor((BezierNumber-1)/26);// 15.02.23 if(tmp==0,tmp="",tmp=text(tmp)); tmp2=mod(BezierNumber,26); if(tmp2==0,tmp2=26); tmp1=unicode(text(96+tmp2),base->10)+tmp;// 15.03.11 tmp2=Putbezierdata(tmp1,ptlist_#,options); Bezier(tmp2,options); BezierNumber=BezierNumber+1; Out=append(Out,tmp2_(1..2)); ); Out; ); ////%Mkbezierptcrv end//// ////%Mkbeziercrv start//// Mkbeziercrv(nm,ptctrL):=Mkbeziercrv(nm,ptctrL,[]); Mkbeziercrv(nm,ptctrL,options):=( //help:Mkbeziercrv("1",[[A,B,C,D],[[P,Q],[R,S],T]]); regional(ptctrLL,name,ptlist,ctrlist,tmp,tmp1,tmp2); if(Measuredepth(ptctrL)==2,ptctrLL=[ptctrL],ptctrLL=ptctrL); forall(1..length(ptctrLL), name=nm+text(#); ptlist=ptctrLL_#_1; ctrlist=ptctrLL_#_2; Bezier(nm,ptlist,ctrlist,options); // 17.01.06 ); ); ////%Mkbeziercrv end//// ////%Ospline start//// Ospline(nm,ptlist):=Ospline(nm,ptlist,[]); Ospline(nm,ptlist,options):=( //help:Ospline("1",ptlist,[options]); //help:Ospline(options=["Num=10"]); regional(tmp,tmp1,tmp2,list,ptL,ctrL,name,closed,flg, p0,p1,p2,p3,pQ,pR,cc,p01,p02,p11,p12,p21,p22,p31,p32); name="o"+nm; if(isstring(ptlist),list=parse(ptlist),list=ptlist); if(|list_1-list_(length(list))|<10^(-6),closed=1,closed=0); // list=apply(list,LLcrd(#)); ctrL=[]; forall(1..(length(list)-1), flg=0; p1=Lcrd(list_#); // 16.08.16 p2=Lcrd(list_(#+1)); // 16.08.16 if(#==1 % #==length(list)-1, flg=1; if(closed==0, pQ=(p1+2*p2)/3; // 15.09.21 // 16.08.16 pR=(2*p1+p2)/3; // 16.08.16 ctrL=append(ctrL,[pQ,pR]); flg=2; , if(#==1, p0=Lcrd(list_(length(list)-1)); // 16.08.16 p3=Lcrd(list_(#+2)); // 16.08.16 , p0=Lcrd(list_(#-1)); // 16.08.16 p3=Lcrd(list_2); // 16.08.16 ); ); ); if(flg<=1, if(flg==0, p0=Lcrd(list_(#-1)); // 16.08.16 p3=Lcrd(list_(#+2)); // 16.08.16 ); tmp=1+sqrt((1+Dotprod(p2-p0,p3-p1)/|p2-p0|/|p3-p1|)/2); cc=4*|p2-p1|/3/(|p2-p0|+|p3-p1|)/tmp; pQ=p1+cc*(p2-p0); // 15.09.21 // 16.08.16 pR=p2+cc*(p1-p3); // 16.08.16 ctrL=append(ctrL,[pQ,pR]); ); ); // list=apply(list,LLcrd(#)); // 16.08.16 // ctrL=apply(ctrL,LLcrd(#)); if(closed==0, // 15.09.21 p1=ctrL_2_1; p2=Lcrd(list_2); // 16.08.16 pQ=p2+(p2-p1); ctrL_1=[pQ]; tmp=length(ctrL); tmp1=ctrL_(tmp-1); p1=ctrL_(tmp-1)_2; p2=Lcrd(list_(tmp)); // 16.08.16 pQ=p2+(p2-p1); ctrL_tmp=[pQ]; ); Bezier("o"+nm,list,ctrL,options); ); ////%Ospline end//// ////%CRspline start//// CRspline(nm,ptL):=CRspline(nm,ptL,[]); CRspline(nm,ptL,options):=( //180822 // Catmull-Rom spline //help:CRspline("1",[A,B,C,A]); //help:CRspline(options=["Num=10"]); regional(name,Eps,ptlist,cc,nv,pm,p0,p1,p2,p3, ctrlist,cflg,qq,rr,tmp); name="CR"+nm; ptlist=apply(ptL,Lcrd(#)); Eps=10^(-5); cflg=0; if(dist(ptlist_1,ptlist_(length(ptlist)))1 % cflg==1, tmp1="c"+text(#); inspect(parse(tmp1),"alpha",0.3); ); tmp1="C"+text(#)+"p"; tmp2="C"+text(#)+"q"; inspect(parse(tmp1),"ptsize",3); inspect(parse(tmp1),"color",3); inspect(parse(tmp2),"ptsize",3); inspect(parse(tmp2),"color",3); tmp=[parse(tmp1),parse(tmp2)]; ctrlist=append(ctrlist,tmp); ); Bezier(nm,ptL,ctrlist,options); [ptL,ctrlist]; ); ////%Beziersmooth end//// ////%Beziersym start//// Beziersym(nm,ptL):=Bzsspline(nm,ptL,[]); Beziersym(nm,ptL,options):=Bzsspline(nm,ptL,options); Bzsspline(nm,ptL):=Bzsspline(nm,ptL,[]); Bzsspline(nm,ptLorg,options):=( // smooth bezier with symmetric control points regional(name,Eps,ptL,pt,pt1,pt2,pt3,npt,lstr, tmp,tmp1,tmp2,cflg,ctrlist); name="bzssp"+nm; Eps=10^(-3); ptL=apply(ptLorg,Lcrd(#)); // 16.08.16 if(|ptL_1-ptL_(length(ptL))|Eps, pcl=list; pcl_1=2*list_1-list_2; pcl_k=2*list_k-list_(k-1); , pcl=concat(list,[list_2]); ); ctrl=apply(2..(length(pcl)-1),[pcl_#]); ptl=apply(1..(length(pcl)-1),(pcl_#+pcl_(#+1))/2); [ptl,ctrl]; ); ////%Listbspline2bz end//// ////%Bspline start//// Bspline(nm,ctrL):=Bspline(nm,ctrL,[]); Bspline(nm,ctrL,options):=( //help:Bspline("",[A,B,C]); //help:Bspline(options=["Num=10"]); regional(list,tmp); list=Listbspline2bz(ctrL); tmp=BezierCurve("b"+nm,list_1,list_2,options); tmp; ); ////%Bspline end//// ////%Meetcurve start//// Meetcurve(Crv,Xorg,Yorg):=( regional(Cv,tmp,tmp1,tmp2,X0,Y0,x1,x2,y1,y2,Ylist,Ban,Tate); if(isstring(Crv),Cv=parse(Crv),Cv=Crv); if(Measuredepth(Cv)==2,Cv=Cv_1); Cv=apply(Cv,LLcrd(#)); // 14.12.18 while(length(Cv)==1, Cv=Cv_1; ); Cv=apply(Cv,Lcrd(#)); tmp1=min(apply(Cv,#_1)); tmp2=max(apply(Cv,#_1)); if(isstring(Xorg),X0=parse(Xorg),X0=Xorg); if(isstring(Yorg),Y0=parse(Yorg),Y0=Yorg); if(X0tmp2, X0=tmp2; ); ); tmp1=select( 1..(length(Cv)-1),Cv_#_1<=X0 & X0<=Cv_(#+1)_1); tmp2=select( 1..(length(Cv)-1),Cv_#_1>=X0 & X0>=Cv_(#+1)_1); tmp2=remove(tmp2,common(tmp2,tmp1)); Ban=concat(tmp1,tmp2); Tate=select(Ban, abs(Cv_#_1-Cv_(#+1)_1)<= 10^(-2)*abs(Cv_#_2-Cv_(#+1)_2) ); Ban=remove(Ban,Tate); Ylist=[]; forall(Ban, tmp=Cv_#; x1=tmp_1; y1=tmp_2; tmp=Cv_(#+1); x2=tmp_1; y2=tmp_2; tmp=((x2-X0)*y1+(X0-x1)*y2)/(x2-x1); Ylist=append(Ylist,tmp); ); forall(Tate, tmp=Cv_#; x1=tmp_1; y1=tmp_2; tmp=Cv_(#+1); x2=tmp_1; y2=tmp_2; tmp1=min([y1,y2]); tmp2=max([y1,y2]); if(Y0tmp2, tmp=tmp2; , tmp=Y0; ); ); Ylist=append(Ylist,tmp); ); tmp=sort(Ylist,abs(#_1-Y0)); [X0,tmp_1]; ); ////%Meetcurve end//// ////%Putonline start//// Putonline(name,linestr):=Putonline(name,linestr,[]); //190216from Putonline(name,Arg1,Arg2):=( regional(line,options); if(isstring(Arg1), line=parse(Arg1); options=Arg2; Putonseg(name,LLcrd(line_1),LLcrd(line_2),options); , Putonline(name,LLcrd(Arg1),LLcrd(Arg2),[]); ); ); Putonline(name,p1,p2,options):=( //help:Putonline("C","lnAB"); //help:Putonline("C",pA,pB); regional(line); line=Lineplot("",[p1,p2],["nodata"]); // tmp1=name+"1"; // tmp2=name+"2"; // Putpoint(tmp1,line_1); // 190216 // Putpoint(tmp22,line_2); // 190216 Putonseg(name,line_1,line_2,options); ); //190216to ////%Putonline end//// ////%Putonseg start//// Putonseg(name,sgstr):=( regional(seg,p1,p2); if(isstring(sgstr),seg=parse(sgstr),seg=sgstr); Putonseg(name,LLcrd(seg_1),LLcrd(seg_2)); ); Putonseg(name,p1,p2):=Putonseg(name,p1,p2,[]); Putonseg(name,p1org,p2org,options):=( //help:Putonseg("C","sgAB"); //help:Putonseg("C",pA,pB); regional(Eps,par,p1,p2,dx,dy,p,tmp,tmp1,tmp2); Eps=10^(-5); par=0.5; tmp=Divoptions(options); if(length(tmp_6)>0, par=tmp_6_1; ); p1=Lcrd(p1org);//16.10.11from p2=Lcrd(p2org); Putpoint(name,(p1+p2)/2,parse(name+".xy")); //190216 //no ketjs p1=Pcrd(p1); p2=Pcrd(p2); //190120 dx=p2_1-p1_1; dy=p2_2-p1_2; p=parse(name+".xy"); if(abs(dx)>abs(dy), //190120from if(p1_1>p2_1,tmp=p1;p1=p2;p2=tmp); if(p_1p2_1,parse(name+".xy="+Textformat(p2,5));p=p2); tmp=(p2_2-p1_2)/(p2_1-p1_1)*(p_1-p1_1)+p1_2; parse(name+".y="+tmp+";"); //190415 , if(p1_2>p2_2,tmp=p1;p1=p2;p2=tmp); if(p_2p2_2,parse(name+".xy="+Textformat(p2,5));p=p2); tmp=(p2_1-p1_1)/(p2_2-p1_2)*(p_2-p1_2)+p1_1; parse(name+".x="+tmp+";"); //190415 ); //190120to ); ////%Putonseg end//// ////%Putoncurve start//// Putoncurve(pn,crv):=putoncurve(pn,crv,[]); Putoncurve(pn,crvorg,options):=( //help:Putoncurve("A","gr1"); regional(eps,crv,close,nn,p1,p2,tmp,tmp1); eps=10^(-3); crv=crvorg; if(isstring(crv),crv=parse(crv)); close=false; if(|crv_1-crv_(length(crv))|0 & df2>0) % (df1<0 & df2<0), Mx1=Mx3; , Mx2=Mx3; ); ); Putpoint(name,Crs1); ); ////%Crosspoint end//// ////%Periodfun start//// Periodfun(defL,rng):=Periodfun(defL,rng,[]); Periodfun(Arg1,Arg2,Arg3):=( //190419from regional(nm,defL,,rng,options); if(isstring(Arg1), nm=Arg1; defL=Arg2; rng=Arg3; Periodfun(nm,defL,rng,[]); , defL=Arg1; rng=Arg2; options=Arg3; Periodfun("",defL,rng,options); //190421 ); ); Periodfun(nm,defL,rng,optionorg):=( //190420[new] //help:Periodfun("1",defL,"x=range",options); //help:Periodfun(defL=[function string,range(with equal option),devision number,...]); //help:Periodfun(equal option "l","r","b","n"); //help:Periodfun(options=["Connect)=da,Color=red"]);//180725 regional(name,range,nr,nn,eqL,options,connect,Eps,fun,scaley,interval, mxfun,var,left,right,period,cL,crL,sL,sdL,flg,equal,tmp,tmp1,tmp2); Eps=10^(-2); name="pe"+nm; var="x"; nr=3*floor(length(defL)/3); left=defL_2_1; if(isstring(left),left=parse(left)); //190505 right=defL_(nr-1)_2; if(isstring(right),right=parse(right)); ///190505 period=right-left; if(isstring(rng), tmp=Strsplit(rng,"="); var=tmp_1; if(length(tmp)>1, range=parse(tmp_2); , range=[XMIN,XMAX]; ); , range=[left-rng*period,right+rng*period]; //190421 ); options=optionorg; tmp=Divoptions(options); eqL=tmp_5; connect="da"; forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,3)); tmp2=tmp_2; if(tmp1=="CON", tmp1=Toupper(substring(tmp2,0,1)); if(tmp1=="N", connect=""; , if(tmp1!="Y", connect=tmp2; ); ); options=remove(options,[#]); ); ); scaley=SCALEY; Setscaling(1); mxfun=""; cL=[]; forall(1..(nr/3),nn, nst=text(nn); fun=defL_(3*nn-2); interval=defL_(3*nn-1); //190505from equal="l"; if(length(interval)>2, equal=substring(interval_3,0,1); interval=interval_(1..2); ); tmp=apply(interval,if(isstring(#),parse(#),#)); tmp1=var+"="+Textformat(tmp,5); tmp2="Num="+text(defL_(3*nn)); tmp=Plotdata("",fun,tmp1,[tmp2,"nodata","Msg=n"]); cL=append(cL,tmp); if(equal=="l",equal=["<=","<"]); if(equal=="r",equal=["<","<="]); if(equal=="b",equal=["<=","<="]); if(equal=="n",equal=["<","<"]); mxfun=mxfun+"elseif ("+interval_1+ equal_1+var+" and "+var+equal_2+interval_2+") then "+fun+" "; ); crL=cL; flg=0; forall(1..10,nn, if(flg==0, if(crL_1_1_1<=range_1, flg=1; , tmp=Translatedata("",cL,[-nn*period,0],["nodata","Msg=n"]); crL=concat(tmp,crL); ); ); ); flg=0; forall(1..10,nn, if(flg==0, tmp1=crL_(length(crL)); tmp2=tmp1_(length(tmp1)); if(range_2<=tmp2_1, flg=1; , tmp=Translatedata("",cL,[nn*period,0],["nodata","Msg=n"]); crL=concat(crL,tmp); ); ); ); Setscaling(scaley); sL=[]; sdL=[]; forall(1..(length(crL)),nn, tmp=concat(options,["Msg=n"]); Listplot("-"+name+text(nn),crL_nn,tmp); sL=append(sL,name+text(nn)); if(nnEps, tmp=concat(options,[connect,"Msg=n"]); Listplot("-"+name+"dc"+text(nn),[tmp1,tmp2],tmp); sdL=append(sdL,name+"dc"+text(nn)); ); ); ); tmp=name+"="+Textformat(sL,5)+";"; parse(tmp); tmp=name+"dc="+Textformat(sdL,5)+";"; parse(tmp); println(" generate "+name+","+name+"dc"); mxfun=substring(mxfun,4,length(mxfun)-1); println(" return [mxfun,period]"); [mxfun,period]; ); ////%Periodfun end//// ////%Mkcstable start//// Mkcstable(nterm,num):=( //190523 //help:Mkcstable(number of terms, division number) regional(cosL,sinL,dL,jj,x,tmp); cosL=[]; sinL=[]; forall(0..num,jj, x=-pi+2*pi/num*jj; dL=apply(1..nterm,cos(#*x)); cosL=append(cosL,dL); dL=apply(1..nterm,sin(#*x)); sinL=append(sinL,dL); ); tmp="Costable="+Textformat(cosL,6); parse(tmp); tmp="Sintable="+Textformat(sinL,6); parse(tmp); ); ////%Mkcstable end//// ////%Fourierseries start//// Fourierseries(nm,coeff,per,nterm):= Fourierseries(nm,coeff,per,nterm,[]); // 16.11.24 Fourierseries(nm,coeff,per,nterm,Arg1):=( //190420from if(isstring(Arg1), Fourierseries(nm,coeff,per,nterm,Arg1,[]); , Fourierseries(nm,coeff,per,nterm,"x=[XMIN,XMAX]",Arg1); ); ); Fourierseries(nm,coefforg,per,nterm,range,optionorg):=( //help:Fourierseries("1",[c0,cn,sn],period,numterm,"x=range",options); //help:Fourierseries("1","[c0,cn,sn]",period,numterm,"x=range",options); //help:Fourierseries(options2=["Table=n/y"]); regional(options,eqL,num,coeff,c0,cn,sn,fs,tbflg,jj,dL, tmp,tmp1,tmp2); options=optionorg; //190523from tmp=Divoptions(options); eqL=tmp_5; tbflg="N"; num=100; forall(eqL, tmp=Strsplit(#,"="); tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="T", tbflg=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); if(tmp1=="N", num=parse(tmp_2); options=remove(options,[#]); ); ); //190523to coeff=coefforg; if(isstring(coeff), tmp=substring(coeff,1,length(coeff)-1); coeff=tokenize(tmp,","); ); coeff=apply(coeff, if(isstring(#),replace(#,"%pi","pi"),format(#,5)) ); c0=coeff_1; cn=coeff_2; sn=coeff_3; fs=c0; fn="(cn)*cos(n*2*pi/per*x)+(sn)*sin(n*2*pi/per*x)"; fn=Assign(fn,["cn",cn,"sn",sn,"per",per]); if(tbflg=="N", //190523 forall(1..nterm, fs=fs+"+"+Assign(fn,["n",#]); ); Deffun("four(x)",[fs]); Plotdata("-four"+nm,"four(x)",range,append(options,"Num="+num)); , c0=parse(c0); //190523from cn=apply(1..nterm,parse(Assign(cn,["n",#]))); sn=apply(1..nterm,parse(Assign(sn,["n",#]))); dL=[]; //1900523from forall(0..num,jj, x=-per/2+per/num*jj; fs=c0; forall(1..nterm, fs=fs+cn_#*Costable_(jj+1)_#+sn_#*Sintable_(jj+1)_#; ); dL=append(dL,[x,fs]); ); Listplot("-four"+nm,dL,options); ); //190523to ); ////%Fourierseries end//// ////%Tabledata start//// //190428from Tabledata(xLst,yLst,rmvL):=Tabledata("",xLst,yLst,rmvL); Tabledata(Arg1,Arg2,Arg3,Arg4):=( if(isstring(Arg1), Tabledata(Arg1,Arg2,Arg3,Arg4,[]); , Tabledata("",Arg1,Arg2,Arg3,Arg4); ); ); //190428to Tabledata(nm,xL,yL,rmvL,optionorg):=( //help:Tabledata(xL,yL,rmvL,["Geo=y(n)"]); //help:Tabledata(options=[2(tick,0 for no tick),"Setwin=y","Move=[0,0]"]); //190428 regional(options,geo,tmp,tmp1,tmp2); options=optionorg; tmp=Divoptions(options); eqL=tmp_5; geo="N"; //191008from forall(eqL, tmp=Strsplit(#,"="); //191023 tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="G", geo=Toupper(substring(tmp_2,0,1)); options=remove(options,#); ); ); if(geo=="Y", //191008to Tabledatageo(nm,xL,yL,rmvL,options); , Tabledatalight(nm,xL,yL,rmvL,options); ); ); ////% Tabledata end//// ////%Tabledatalight start//// Tabledatalight(xLst,yLst,rmvL):=Tabledatalight("",xLst,yLst,rmvL); //190428from Tabledatalight(Arg1,Arg2,Arg3,Arg4):=( if(isstring(Arg1), Tabledatalight(Arg1,Arg2,Arg3,Arg4,[]); , Tabledatalight("",Arg1,Arg2,Arg3,Arg4); ); ); //190428to Tabledatalight(nm,xLst,yLst,rmvL,optionorg):=( //help:Tabledatalight(xLst,yLst,rmvL,[0(notick)]); //help:Tabledatalight(xLst,yLst,rmvL,[2,"Setwindow=y","Move=[0,0]"]); //190428 regional(options,rng,name,upleft,ul,flg,tick,eqL,reL,n,m,xsize,ysize, rlist,clist,Tb,jj,kk,tmp,tmp1,tmp2,tmp3,Eps,tbstr); // TableMove is global for Table TABLECOUNT=TABLECOUNT+1; //190428from TableMove=GENTEN; //190428to name="tb"+text(TABLECOUNT); //190428to options=optionorg; tmp=Divoptions(options); eqL=tmp_5; //16.12.16from reL=tmp_6; rng="Y"; forall(eqL, tmp=Strsplit(#,"="); //190428from tmp1=Toupper(substring(tmp_1,0,2)); if(tmp1=="RN", rng=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); if(tmp1=="MO", TableMove=parse(tmp_2); rng="N"; //190429 options=remove(options,[#]); ); if(tmp1=="SE", rng=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); ); ); //190428to tick=1; flg=0; //190424 forall(reL, if(flg==0, tick=#; flg=flg+1; , upleft=tmp_6_1; ); ); tmp=sum(yLst); upleft=[0,tmp]; TableOptions=options; // 16.11.28 println("generate Tabledatalight "+name); //190428 ul=upleft/10; m=length(xLst); n=length(yLst); xsize=sum(xLst); ysize=sum(yLst); clist=[ul]; rlist=[ul]; forall(1..m, tmp1=clist_(#)_1+xLst_#/10; clist=append(clist,[tmp1,clist_1_2]); ); forall(1..n, tmp1=rlist_(#)_2-yLst_#/10; rlist=append(rlist,[0,tmp1]); ); Tb=[clist,rlist]; //190427 tmp=name+"="+Tb+";"; //190415 parse(tmp); tbstr="["; //191008 forall(0..m,jj, //190507from tmp3="c"+text(jj); if(length(rmvL)>=0, tmp1="r"+text(0); tmp2="r"+text(n); Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp3+tmp1,tmp3+tmp2],options); tbstr=tbstr+Dqq(name+tmp3+tmp1+tmp2)+"," //191008 , forall(0..(n-1), tmp1="r"+text(#); tmp2="r"+text(#+1); Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp3+tmp1,tmp3+tmp2],options); tbstr=tbstr+Dqq(name+tmp3+tmp1+tmp2)+"," //191008 ); ); //190507to if(tick!=0, //190421 if(mod(jj,tick)==0 % #==m, drawtext(clist_(jj+1)+TableMove-[0.04,-0.1],"c"+text(jj)); //190428 ); ); ); //190507 forall(0..n,jj, tmp3="r"+text(jj); if(length(rmvL)>=0, tmp1="c"+text(0); tmp2="c"+text(m); Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp1+tmp3,tmp2+tmp3],options); tbstr=tbstr+Dqq(name+tmp3+tmp1+tmp2)+"," //191008 , forall(0..(m-1), tmp1="c"+text(#); tmp2="c"+text(#+1); Tlistplot("-"+name+tmp3+tmp1+tmp2,[tmp1+tmp3,tmp2+tmp3],options); tbstr=tbstr+Dqq(name+tmp3+tmp1+tmp2)+"," //191008 ); ); if(tick!=0, //190421 if(mod(jj,tick)==0 % #==n, drawtext(rlist_(jj+1)+TableMove-[0.4,0.1],"r"+text(jj)); //190428 ); ); ); tbstr=substring(tbstr,0,length(tbstr)-1)+"]"; //101008from tmp1=parse(tbstr); tmp=name+"str="+tbstr+";"; parse(tmp); //101008to Changetablestyle(rmvL,["nodisp"]); //190428 Addax(0); Eps=10^(-3); tmp1=clist_(length(clist)); tmp2=rlist_1; tmp3=rlist_(length(rlist)); if(rng=="Y", // 16.12.16 Setwindow([0-Eps,tmp1_1+Eps],[tmp3_2-Eps,tmp2_2+Eps]); ); Tb; ); ////%Tabledatalight end//// ////%Tabledatageo start//// //190428(renamed) Tabledatageo(nm,xLstorg,yLstorg,rmvL,options):=( regional(eqL,ul,n,m,Tb,xLst,yLst, rlist,clist,tmp,tmp1,tmp2); xLst=xLstorg; yLst=yLstorg; tmp=Divoptions(options); eqL=tmp_5; TableMove=[0,0]; forall(eqL, tmp=Strsplit(#,"=");; tmp1=Toupper(substring(tmp_1,0,2)); tmp2=Toupper(substring(tmp_2,0,1)); if(tmp1=="MO", TableMove=parse(tmp_2); ); ); tmp=sum(yLst); ul=[0,tmp]/10; m=length(xLst); n=length(yLst); clist=[ul]; rlist=[ul]; forall(1..m, tmp1=clist_(#)_1+xLst_#/10; clist=append(clist,[tmp1,clist_1_2]); ); forall(1..n, tmp1=rlist_(#)_2-yLst_#/10; rlist=append(rlist,[0,tmp1]); ); forall(0..m, tmp="C"+text(#); tmp1=TableMove+clist_(#+1); if(#==0, Putpoint(tmp,tmp1); , Putpoint(tmp,tmp1,[parse(tmp+".x"),tmp1_2]); ); inspect(parse(tmp),"ptsize",3); inspect(parse(tmp),"labeled",false); ); forall(1..n, tmp="R"+text(#); tmp1=TableMove+rlist_(#+1); Putpoint(tmp,tmp1,[tmp1_1,parse(tmp+".y")]); inspect(parse(tmp),"ptsize",3); inspect(parse(tmp),"labeled",false); ); tmp1=0; forall(1..m, tmp=parse("C"+text(#)+".x")-TableMove_1; tmp=tmp*10; xLst_#=tmp-tmp1; tmp1=tmp; ); tmp1=C0.y*10; forall(1..n, tmp=parse("R"+text(#)+".y")-TableMove_2; tmp=tmp*10; yLst_#=tmp1-tmp; tmp1=tmp; ); Tb=Tabledatalight(nm,xLst,yLst,rmvL,options); Tb; ); ////%Tabledatageo end//// ////%Tgrid start//// Tgrid(ptstr):=( //help:Tgrid("c2r5"); regional(tb,tmp,tmp1,tmp2); tmp=parse(ptstr); if(islist(tmp), tmp; , tmp=indexof(ptstr,"r"); tmp1=substring(ptstr,1,tmp-1); tmp1=parse(tmp1); tmp2=substring(ptstr,tmp,length(ptstr)); tmp2=parse(tmp2); tb=parse("tb"+text(TABLECOUNT)); //190428 [tb_1_(tmp1+1)_1,tb_2_(tmp2+1)_2]+TableMove; //190428 ); ); ////%Tgrid end//// ////%Tlistplot start//// Tlistplot(ptL):=Tlistplot(ptL,[]); Tlistplot(Ag1,Ag2):=( regional(nm,ptL,options); if(isstring(Ag1), nm=Ag1; ptL=Ag2; options=[]; , ptL=Ag1; options=Ag2; nm=ptL_1+ptL_2; ); Tlistplot(nm,ptL,options); ); Tlistplot(nm,ptL,options):=( //help:Tlistplot(["c0r0","c0r4"]); //help:Tlistplot("1",["c0r0","c0r4"]); //help:Tlistplot([options2="Msg=y"]); regional(tmp,tmp1); tmp1=divoptions(options);//180404from tmp1=tmp1_5; tmp1=apply(tmp1,Toupper(substring(#,0,1))); if(contains(tmp1,"M"), tmp1=options; , tmp1=append(options,"Msg=n"); );//180404to tmp=apply(ptL,Tgrid(#)); // 15.06.03 Listplot(nm,tmp,tmp1); ); ////%Tlistplot end//// ////%Changetablestyle start//// Changetablestyle(nameL,style):=( //help:Changetablestyle(["r0c0c3"],["da"]); regional(nmL,nametb, name,grid,head,sb,tmp,tmp1,tmp2,tmp3, tsg,pts,p1,p2,names,name,name1,nn,mm,gname,flg); nametb="tb"+text(TABLECOUNT); //190428 if(islist(nameL),nmL=nameL,nmL=[nameL]); forall(nmL,grid, if(substring(grid,0,1)=="r",sb="c",sb="r"); tmp=indexof(grid,sb); head=substring(grid,0,tmp-1); if(sb=="r", //190507from pts=head+sb+"x"; , pts=sb+"x"+head; ); names=nametb+head+sb+"x"+sb+"y";//190507to tmp3=apply(GCLIST,#_1); // 161206from tmp3=select(tmp3,indexof(#,nametb)>0); tmp3=apply(tmp3,substring(#,length(nametb),length(#))); //190507from tmp3=select(tmp3,substring(#,0,length(head))==head); tmp=Indexall(grid,sb); tmp1=substring(grid,tmp_1,tmp_2-1); tmp2=substring(grid,tmp_2,length(grid)); tsg=apply([tmp1,tmp2],parse(#)); flg=0; forall(tmp3,gname, if(flg==0, tmp=Indexall(gname,sb); tmp1=parse(substring(gname,tmp_1,tmp_2-1)); tmp2=parse(substring(gname,tmp_2,length(gname))); if((tmp1<=tsg_1)&(tsg_2<=tmp2), flg=1; if(tmp1==tsg_1, if(tsg_2==tmp2, name=Replaceall(names,["x",tsg_1,"y",tsg_2]); Changestyle(name,style); , name=Replaceall(names,["x",tsg_2,"y",tmp2]); name1=Replaceall(names,["x",tmp1,"y",tmp2]); //190508from p1=Replaceall(pts,["x",tsg_2]); p2=Replaceall(pts,["x",tmp2]); Tlistplot("-"+name,[p1,p2],["notex"]); GCLIST=GCLIST_(1..(length(GCLIST)-1)); nn=select(1..(length(GCLIST)),indexof(GCLIST_#_1,name1)>0); nn=nn_1; tmp=GCLIST_nn; tmp=tmp_[2,3]; GCLIST_nn=prepend(name,tmp); nn=select(1..(length(GLIST)),indexof(GLIST_#,name1)>0); nn=nn_1; GLIST_nn=replace(GLIST_nn,name1,name); mm=select(1..(length(COM2ndlist)),indexof(COM2ndlist_#,name1)>0); mm=mm_1; COM2ndlist_mm=replace(COM2ndlist_mm,name1,name); //190508to ); , name=Replaceall(names,["x",tmp1,"y",tsg_1]); name1=Replaceall(names,["x",tmp1,"y",tmp2]); //190508from p1=Replaceall(pts,["x",tmp1]); p2=Replaceall(pts,["x",tsg_1]); Tlistplot("-"+name,[p1,p2],["notex"]); nn=select(1..(length(GCLIST)),indexof(GCLIST_#_1,name1)>0); GCLIST=GCLIST_(1..(length(GCLIST)-1)); nn=nn_1; tmp=GCLIST_nn; tmp=tmp_[2,3]; GCLIST_nn=prepend(name,tmp); nn=select(1..(length(GLIST)),indexof(GLIST_#,name1)>0); nn=nn_1; GLIST_nn=replace(GLIST_nn,name1,name); mm=select(1..(length(COM2ndlist)),indexof(COM2ndlist_#,name1)>0); mm=mm_1; COM2ndlist_mm=replace(COM2ndlist_mm,name1,name); //190508to if(tsg_20, posdir_2=posdir_2-dy; posstr=replace(posstr,"b","n"); ); if(indexof(dir,"t")>0, posdir_2=posdir_2+dy; posstr=replace(posstr,"t","s"); ); if(indexof(dir,"l")>0, posdir_1=posdir_1-dx; posstr=replace(posstr,"l","e"); ); if(indexof(dir,"r")>0, posdir_1=posdir_1+dx; posstr=replace(posstr,"r","w"); ); Letter([posdir,posstr,text(lttr)],options); ); //190228to ////%Putcell end//// ////%Putcellexpr start//// Putcellexpr(pos1,pos2,dir,ex):=Putcellexpr("",pos1,pos2,dir,ex,[]); //190228from Putcellexpr(Arg1,Arg2,Arg3,Arg4,Arg5):=( if(islist(Arg5), Putcellexpr("",Arg1,Arg2,Arg3,Arg4,Arg5); , Putcellexpr(Arg1,Arg2,Arg3,Arg4,Arg5,[]); ); ); Putcellexpr(Tbdata,pos1,pos2,dir,ex,options):=( //help:Putcellexpr("c0r0","c2r1","lt","abc"); //help:Putcellexpr(2,3,"c","\sin x"); Putcell(Tbdata,pos1,pos2,dir,"$"+text(ex)+"$",options); ); //190228to ////%Putcellexpr end//// ////%Putrow start//// Putrow(nrow,dir,lttrL):=Putrow("",nrow,dir,lttrL,[]); //190228from Putrow(Arg1,Arg2,Arg3,Arg4):=( if(islist(Arg4), Putrow("",Arg1,Arg2,Arg3,Arg4); , Putcellrow(Arg1,Arg2,Arg3,Arg4,[]); ); ); Putrow(Tbdata,nrow,dir,lttrL,options):=( //help:Putrow(1,"c",["x","y","z"]); regional(tmp,tmp1,mcol); mcol=length(lttrL); forall(1..mcol, Putcell(Tbdata,#,nrow,dir,lttrL_#,options); ); ); //190228to ////%Putrow end//// ////%Putrowexpr start//// Putrowexpr(nrow,dir,exL):=Putrowexpr("",nrow,dir,exL,[]); //190228from Putrowexpr(Arg1,Arg2,Arg3,Arg4):=( if(islist(Arg4), Putrowexpr("",Arg1,Arg2,Arg3,Arg4); , Putrowexpr(Arg1,Arg2,Arg3,Arg4,[]); ); ); Putrowexpr(Tbdata,nrow,dir,exL,options):=( //help:Putrowexpr(2,"r",["x","y","z"]); regional(lttrL); lttrL=apply(exL,"$"+#+"$"); Putrow(Tbdata,nrow,dir,lttrL,options); ); //190228to ////%Putrowexpr end//// ////%Putcol start//// Putcol(mcol,dir,lttrL):=Putcol("",mcol,dir,lttrL,[]); //190228from Putcellexpr(Arg1,Arg2,Arg3,Arg4):=( if(islist(Arg4), Putcellexpr("",Arg1,Arg2,Arg3,Arg4); , Putcellexpr(Arg1,Arg2,Arg3,Arg4,[]); ); ); Putcol(Tbdata,mcol,dir,lttrL,options):=( //help:PutcoL(1,"c",["x","y","z"]); regional(tmp,tmp1,nrow); nrow=length(lttrL); forall(1..nrow, Putcell(Tbdata,mcol,#,dir,lttrL_#,options); ); ); //190228to ////%Putcol end//// ////%Putcolexpr start//// Putcolexpr(mcol,dir,exL):=Putcolexpr("",mcol,dir,exL,[]); //190228from Putcellexpr(Arg1,Arg2,Arg3,Arg4):=( if(islist(Arg4), Putcellexpr("",Arg1,Arg2,Arg3,Arg4); , Putcellexpr(Arg1,Arg2,Arg3,Arg4,[]); ); ); Putcolexpr(Tbdata,mcol,dir,exL,options):=( //help:Putcolexpr(2,"r",["x","y","z"]); regional(lttrL); lttrL=apply(exL,"$"+#+"$"); Putcol(Tbdata,mcol,dir,lttrL,options); ); //190228to ////%Putcolexpr end//// ////%Setrange start//// Setrange():=( //help:Setrange(); SW.xy=Pcrd([XMIN,YMIN]); NE.xy=Pcrd([XMAX,YMAX]); drawpoly([Pcrd([XMIN,YMIN]), Pcrd([XMAX,YMIN]), Pcrd([XMAX,YMAX]),Pcrd([XMIN,YMAX])],color->[1,1,1]); ); ////%Setrange end//// ////%Inwindow start//// Inwindow(point):=Inwindow(point,[XMIN,XMAX],[YMIN,YMAX]); Inwindow(point,xrng,yrng):=( //help:Inwindow(point); //help:Inwindow(point,xrange,yrange); regional(Eps,pt,x,y,xmin,xmax,ymin,ymax,tmp); Eps=10.0^(-6); if(ispoint(point),pt=point.xy,pt=point); x=pt_1; y=pt_2; xmin=xrng_1; xmax=xrng_2; ymin=yrng_1; ymax=yrng_2; tmp=(x>xmin-Eps)&(xymin-Eps)&(y0, kari=(sen+gap)*0.1;naga=sen*0.1;tobi=gap*0.1; if(|data_1-data_dtall|0,hajime=flg-1); flg=0; forall(hajime..dtall,jj, if(flg==0, if(len+naga0,owari=flg-1); tt=len-lenlist_hajime; tt=tt/(lenlist_(hajime+1)-lenlist_hajime); tmp=data_hajime+tt*(data_(hajime+1)-data_hajime); ptL=[tmp]; forall((hajime+1)..owari,jj, ptL=append(ptL,data_jj); ); tt=(len+naga-lenlist_owari); tt=tt/(lenlist_(owari+1)-lenlist_owari); tmp=data_owari+tt*(data_(owari+1)-data_owari); ptL=append(ptL,tmp); out=append(out,ptL); ); ); out; ); ////%Dashlinedata end//// ////%Windispg start//// Windispg():=( if(ADDAXES=="1", //181215from Drwxy(); ADDAXES="0"; ); //181215to Windispg(GCLIST); //190125 ); Windispg(gcLorg):=( //190125 regional(gcL,Nj,Nk,Dt,Vj,tmp,tmp1,tmp2,tmp3,tmp4,opcindy); gcL=gcLorg; //190125from if(length(gcL)>0, if(!islist(gcL_1),gcL=[gcL]); ); //190125to gcL=select(gcL,#_2_1>=0); //190818 gsave(); layer(KETPIClayer); forall(gcL,Nj, if(isstring(Nj_1),Dt=parse(Nj_1),Dt=Nj_1); // 11.17 if(islist(Dt) & length(Dt)>0, // 12.19,12.22 tmp=Measuredepth(Dt); if(tmp==1,Dt=[Dt]); opcindy=Nj_3; tmp=Nj_2; //190119from if(!islist(tmp),tmp=[tmp,""]); //190123 if(tmp_1<0,tmp1=0,tmp1=tmp_1); //190119from if(tmp1<10, forall(Dt,Nk, if(length(Nk)>1, tmp3=""; if(indexof(opcindy,"color")==0, //190122from tmp3=tmp3+",linecolor->"+KCOLOR; ); tmp3=tmp3+opcindy; if(tmp1==0, //190126from if((length(tmp_2)>0)&(indexof(opcindy,"size")==0), tmp3=tmp3+",size->"+tmp_2; ); //190124to tmp="connect("+Textformat(Nk,5)+tmp3+");";//190125 parse(tmp); , if(tmp1==1, tmp=tokenize(Nj_2_2,",");tmp4=Dashlinedata(Nk,tmp_1,tmp_2,0); //190512 forall(tmp4, tmp="connect("+Textformat(#,5)+tmp3+");"; parse(tmp); ); , tmp3=",dashtype->"+text(tmp1)+tmp3; forall(1..(length(Nk)-1), tmp="draw("+Textformat([Nk_#,Nk_(#+1)],5)+tmp3+");"; parse(tmp); ); ); ); , if(indexof(opcindy,"size")==0, //190425from opcindy=opcindy+",size->"+text(TenSize/TenSizeInit); ); //190425to tmp="draw("+text(Nk_1)+opcindy+");"; parse(tmp); ); //190126to ); ); ); ); grestore(); layer(0); ); ////%Windispg end//// ////%Extractdata start//// Extractdata(name):=Extractdata(1,name,[]); Extractdata(Arg1,Arg2):=( if(isstring(Arg1), Extractdata(1,Arg1,Arg2); , Extractdata(Arg1,Arg2,[]); ); ); Extractdata(number,name,options):=( //help:ExtractData("ha1"); // help:ExtractData(1,"ha1"); regional(dlist,tmp,tmp1,tmp2,tmp3,File,Ltype,Noflg,opstr,opcindy,color); tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); tmp1=[]; forall(1..length(GOUTLIST), if(contains(GOUTLIST_#_2,name), tmp1=append(tmp1,#); ); ); if(length(tmp1)==0, println(name+" not found"); , tmp1=tmp1_number; tmp2=GOUTLIST_tmp1; tmp=remove(tmp2_2,[name]); GOUTLIST_tmp1=[tmp2_1,tmp]; File=tmp2_1; ); if(Noflg<3, println("extract outdata "+name); tmp1=parse(name); tmp3=[ //17.09.18 //no ketjs on "Tmpout=ReadOutData("+Dq+File+Dq+")" ]; GLIST=concat(GLIST,tmp3); //no ketjs off ); if(Noflg<3, //190818 if(isstring(Ltype), if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("{");Com2nd("Setcolor("+color+")");//180722 ); //no ketjs off Ltype=Getlinestyle(text(Noflg)+Ltype,name); if((Noflg==0)&(color!=KCOLOR), //180904 //no ketjs on Texcom("}");//180722 ); //no ketjs off , if(Noflg==1,Ltype=0); ); GCLIST=append(GCLIST,[name,Ltype,opcindy]); ); tmp2; ); ////%Extractdata end//// ////%Removeout start//// Removeout(pltlist):=( regional(name,tmp,tmp1,tmp2); forall(pltlist,name, tmp1=[]; forall(GOUTLIST, tmp=remove(#_2,[name]); tmp1=append(tmp1,[#_1,tmp]); ); GOUTLIST=tmp1; ); ); ////%Removeout end//// ////%Makecmdlist start//// Makecmdlist(libname):=( //help:Makecmdlist("ketcindylib"); regional(cmdall,cmd,flg,tmp,tmp1,tmp2,out); setdirectory(Dirlib); tmp=load(libname+".cs"); cmdall=tokenize(tmp,":="); out=[]; forall(cmdall,cmd, tmp=max([0,length(cmd)-50]); tmp1=";"+substring(cmd,tmp,length(cmd)); flg=0; forall(reverse(1..length(tmp1)), if(flg==0, if(substring(tmp1,#-1,#)==";", tmp=substring(tmp1,#,length(tmp1)); tmp2=substring(tmp,0,1); if(length(tmp)>0, if(!contains([" ","/"],tmp2), out=append(out,tmp); flg=1; ); ); ); ); ); ); setdirectory(Dirwork); tmp=length(out)-1; out=out_(2..tmp); out=sort(out); ); ////%Makecmdlist end//// ////%Savecmdlist start//// Savecmdlist(cmdlist,cmdfile):=( SCEOUTPUT=openfile(cmdfile+".cs"); forall(cmdlist, println(SCEOUTPUT,#); ); closefile(SCEOUTPUT); ); ////%Savecmdlist end//// ////%Quicksort start//// Quicksort(seq):=( regional(pivot,left,right,out); if(length(seq)<2, out=seq; , pivot = max(seq_1,seq_2); left = []; right = []; forall(seq, if(#< pivot, left=append(left,#); , right=append(right,#); ); ); left = Quicksort(left); right = Quicksort(right); out=concat(left,right); ); out; ); ////%Quicksort end//// ////%Lessstr start//// Lessstr(st1,st2):=( regional(tmp,tmp1,tmp2,out); tmp=min(length(st1),length(st2)); flg=0; forall(1..tmp, if(flg==0, tmp1=substring(st1,#-1,#); tmp2=substring(st2,#-1,#); if(tmp1tmp2, out=(1>2); flg=1; ); ); ); ); if(flg==0, if(length(st1)2); ); ); out; ); ////%Lessstr end//// ////%Makehelplist start//// Makehelplist(libname):=( regional(cmdall,cmd,flg,lev,tmp,tmp1,out); tmp=load(libname); cmdall=tokenize(tmp,"//help:"); cmdall=select(cmdall,substring(#,1,3)!=");"); flg=0; forall(1..3, if(flg==0, if(substring(cmdall_#,0,7)=="start"+PPa(""), cmdall=cmdall_((#+1)..length(cmdall)); flg=1; ); ); ); flg=0; tmp=length(cmdall); forall(0..2, if(flg==0, if(substring(cmdall_(tmp-#),0,5)=="end"+PPa(""), cmdall=cmdall_(1..(tmp-#-1)); flg=1; ); ); ); out=[]; forall(cmdall,cmd, tmp1=indexof(cmd,"("); lev=1; flg=0; forall((tmp1+1)..length(cmd), if(flg==0, tmp=substring(cmd,#-1,#); if(tmp=="(",lev=lev+1); if(tmp==")", lev=lev-1; if(lev==0, flg=1; out=append(out,substring(cmd,0,#)+";"); ); ); ); ); ); sort(out); ); ////%Makehelplist end//// ////%Helplist start//// Helplist():=Helplist(Dirlib,["+","+3d"],"helpJ"); // 15.05.22 Helplist(Arg):=( if(islist(Arg), Helplist(Dirlib,Arg,"helpJ"); // 15.06.20 , if(indexof(Arg,"help")>0, Helplist(Dirlib,["+","+3d"],Arg); , Helplist(Arg,["+","+3d"],"helpJ"); ); ); ); Helplist(Arg1,Arg2):=( if(islist(Arg1), Helplist(Dirlib,Arg1,Arg2); , if(indexof(Arg2,"help")>0, Helplist(Dirlib,Arg1,Arg2); , Helplist(Arg,["+","+3d"],Arg2); ); ); ); Helplist(dir,files,help):=( //help:Helplist(); //help:Helplist("helpE"); regional(ketfiles,tmp,tmp1,tmp2); setdirectory(dir); if(contains(files,"+"), tmp=remove(files,["+"]); ketfiles=concat(["+basic1","+basic2","+basic3","+out"],tmp); //190414 , ketfiles=files; ); ketfiles=apply(ketfiles,replace(#,"+","ketcindylib")); ketfiles=apply(ketfiles,#+"r.cs"); // 15.11.05 from tmp=apply(files,replace(#,"+","ketcindylib")); // tmp=apply(files,replace(#,"r.cs","")); // tmp=remove(tmp,["ketcindylibout"]); // tmp=apply(tmp,replace(#,"basic","")); tmp=apply(tmp,#+help+".txt"); ketfiles=concat(ketfiles,tmp);// 15.11.05 until tmp1=[]; forall(ketfiles, tmp=Makehelplist(#); tmp1=concat(tmp1,tmp); ); if(!islist(HLIST), // 16.12.31from HLIST=sort(tmp1); , HLIST=sort(concat(HLIST,tmp1)); ); // 16.12.31until setdirectory(Dirwork); ); ////%Helplist end//// ////%Help start//// Help():=( forall(HLIST, println(#); ); ); Help(strorg):=( //help:Help("Plot"); //help:Help("*"); regional(str,sel,tmp,tmp1,tmp2,flg,Endflg); if(length(HLIST)>0,flg=0,flg=-1); str=replace(strorg,"'",Dq); // 15.11.25 if(length(str)==0, forall(HLIST, if(indexof(#,"*")>0, println(#); ); flg=1; ); , if(str=="*", sel=HLIST; , sel=select(HLIST,substring(#,0,length(str))==str); ); if(length(sel)>0,flg=1); forall(sel, tmp=indexof(#,"("); if(substring(#,tmp-2,tmp-1)!="*", println(#); , // println(substring(#,0,tmp-1)); tmp1=substring(#,tmp,length(#)-2); tmp2=indexof(tmp1,"//"); Endflg=0; forall(1..4, if(Endflg==0, tmp2=indexof(tmp1,"//"); if(tmp2==0, println(" "+tmp1); Endflg=1; , println(" "+substring(tmp1,0,tmp2-1)); tmp1=substring(tmp1,tmp2+1,length(tmp1)); ); ); ); ); ); ); if(flg==-1,println(" Help not read in")); if(flg==0,println(" no example")); ); ////%Help end//// ////%Helpkey start//// Helpkey(str):=( regional(tmp,tmp1,tmp2); tmp1=select(HLIST,indexof(#,str)>0); forall(tmp1, tmp=substring(#,0,indexof(#,"*")-1); Help(tmp); ); ); Helpkey(str1,str2):=( //help:Helpkey(keyword); //help:Helpkey(keyword1,keyword2); regional(tmp,tmp1,tmp2); tmp1=select(HLIST,indexof(#,str1)>0); tmp1=select(tmp1,indexof(#,str2)>0); forall(tmp1, tmp=substring(#,0,indexof(#,"*")-1); Help(tmp); ); ); ////%Helpkey end//// ////%Example start//// Example(exorg):=Example(exorg,""); Example(exorg,suborg):=( //help:Example("Mxfun","diff"); regional(ex,tmp,tmp1,tmp2); ex=replace(exorg,"'",Dq); sub=replace(suborg,"'",Dq); setdirectory(Dirlib); tmp=load("examples.txt"); setdirectory(Dirwork); tmp=tokenize(tmp,"//"); tmp=tmp_(1..(length(tmp)-1)); tmp1=select(tmp,substring(#,0,length(ex))==ex); tmp1=sort(tmp1); if(length(sub)>0, tmp1=select(tmp1,indexof(#,sub)>0); ); forall(tmp1, if((indexof(#,"##")>0) % (indexof(#,"~#")>0), tmp=indexof(#,","); println(substring(#,tmp,length(#))); , println(#); ); ); ); ////%Example end//// //help:end();