# 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 ######################################### ThisVersion<- "2ev5_2_4(191106)" # 20191106 # Drwline debugged ( Thick) # 20191104 # Dottedline changed ( Ookisa 2->1) # 20190405 # Drwpt debugged/changed ( Incolor ) # 20181230 # Drwpt changed ( Inside ) # 20180930 # Drwpt debugged ( the last newline added) # 20180929 # Shade changed (Kyoukai => Joincrvs) # 2017.10.28 # Drwpt debugged ( Flattenlist ) # 2017.10.07 # Dottedline,Drwline,Drwpt,Makehasen,Beginpicture,Setpen,Shade ############################################# Dottedline<- function(...) { varargin <- list(...) Nall <- length(varargin) Nagasa <- 0.1 Ookisa <- PenThick*1 #2 #17.10.07,191104(*1) I <- Nall Tmp <- varargin[[I]] while (mode(Tmp)=="numeric" && length(Tmp)==1 ) { I <- I-1 Tmp <- varargin[[I]] } if (I==Nall-1) { Nagasa<-Nagasa*varargin[[Nall]] Nall <- Nall-1 } if (I==Nall-2) { Nagasa <- Nagasa*varargin[[Nall-1]] Ookisa <- round(Ookisa*varargin[[Nall]]) Nall <- Nall-2 } Nagasa <- 1000/2.54/MilliIn*Nagasa Ra=Ookisa/MilliIn for (N in 1:Nall) { Pdata <- varargin[[N]] if (mode(Pdata)=="numeric") { Pdata <- list(Pdata) } for (II in 1:length(Pdata)) { Clist <- MakeCurves(Op(II,Pdata)) DinM <- Dataindex(Clist) Mojisu=0 for (n in Looprange(1,Nrow(DinM))) { Tmp <- DinM[n,] Data <- Clist[Tmp[1]:Tmp[2],] Len <- 0 Lenlist <- c(0) for (I in Looprange(2,Nrow(Data))) { Len <- Len+Norm(Data[I,]-Data[I-1,]) Lenlist <- c(Lenlist,Len) } Lenall <- Lenlist[length(Lenlist)] if (Lenall==0) { next } Naga <- Nagasa Nten <- round(Lenall/Naga)+1 if (Nten > 1) { Seg <- Lenall/(Nten-1) } else { Seg <- Lenall } Eps <- 10^(-6)*Seg PPd<-c() Hajime <- 1 for (I in Looprange(0,Nten-1)) { Len <- Seg*I if (I>0) { J <- Hajime while( Len>=Lenlist[J]+Eps) { J <- J+1 } Hajime <- J-1 } T <- (Len-Lenlist[Hajime])/ (Lenlist[Hajime+1]-Lenlist[Hajime]) P <- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,]) PPd<-Appendrow(PPd,P) if (I==Nten-1) { if (Norm(P-Data[1,])80){ cat("\n",file=Wfile,append=TRUE) Mojisu=0 } } } } if(Mojisu>0){ cat("\n",file=Wfile,append=TRUE) } } Tmp<-PenThick/PenThickInit Setpen(Tmp) } ########################################### Drwline<-function(...) { varargin<-list(...) Nall<-length(varargin) Thick<- 0 Tmp<-varargin[[Nall]] if (mode(Tmp)=="numeric" && length(Tmp)==1){ Thick<- PenThick/PenThickInit #191106 Setpen(Tmp) Nall<-Nall-1 } for (N in 1:Nall){ Pdata<-varargin[[N]] if (length(Pdata)==0) next if (mode(Pdata)!="list") Pdata<-list(Pdata) while(Mixtype(Pdata)==3){ Tmp1<- list() for(II in Looprange(1,length(Pdata))){ Tmp1<- Mixjoin(Tmp1,Pdata[[II]]) } Pdata<- Tmp1 } for (II in Looprange(1,length(Pdata))){ Clist<-MakeCurves(Pdata[[II]]) DinM<-Dataindex(Clist) for (n in Looprange(1,Nrow(DinM))){ Tmp<-DinM[n,] Data<-Clist[Tmp[1]:Tmp[2],] Mojisu<-0 for (I in Looprange(1,Nrow(Data))){ Tmp<-Data[I,] X=sprintf('%5.5f',Tmp[1]) Y=sprintf('%5.5f',Tmp[2]) Pt=paste('(',X,',',Y,')',sep="") if(I==1){ Str=paste('\\polyline',Pt,sep="") }else{ Str=Pt } cat(Str,file=Wfile,append=TRUE) Mojisu<-Mojisu+nchar(Str) if (Mojisu>80){ cat("%\n",file=Wfile,append=TRUE) Mojisu<-0 } } if (Mojisu!=0){ cat("%\n",file=Wfile,append=TRUE) } cat("%\n",file=Wfile,append=TRUE) } } } if (Thick>0){ Setpen(Thick) #191106 } } ########################################### Drwpt<-function(...) #190405 { varargin<-list(...) Nargs<-length(varargin) All=Nargs Same="y" Incolor="" Tmp=varargin[[All]] if((is.numeric(Tmp))&&(length(Tmp)>2)){ #190405from if(Tmp[1]==-1){ Same="no" }else{ Tmp1=sapply(Tmp,as.character) Incolor=paste("{",Tmp1[1],",",Tmp1[2],",",Tmp1[3],"}",sep="") Same="n" } All=All-1 }#190405to Ra=TenSize*1000/2.54/MilliIn for (II in Looprange(1,All)){ MS<- varargin[[II]] MS=Flattenlist(MS) #17.10.28 if (mode(MS)=="numeric"){ MS<- list(MS) } for (I in Looprange(1,length(MS))){ P<- MS[[I]] if (InWindow(P)!="i") next P<- Doscaling(P) X=sprintf('%5.5f',P[1]) Y=sprintf('%5.5f',P[2]) if(Same!="no"){ #190405from Str=paste("{\\linethickness{0 in}%\n",sep="") cat(Str,file=Wfile,append=TRUE) if(Same=="n"){ #190405 Str1<- paste("{\\color[rgb]",Incolor,"%\n",sep="") cat(Str1,file=Wfile,append=TRUE) } Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}%\n',sep="") cat(Str,file=Wfile,append=TRUE) if(Same=="n"){ cat("}%\n",file=Wfile,append=TRUE) } cat("}%\n",file=Wfile,append=TRUE) } Str=paste('\\put(',X,',',Y,'){\\circle{',sprintf('%6.6f',Ra),'}}%\n',sep="") cat(Str,file=Wfile,append=TRUE) } } # 190405to cat("\n",file=Wfile,append=TRUE) } ###################################### Makehasen<- function(Figdata,Sen,Gap,Ptn) { Eps<- 10.0^(-6) Clist<- MakeCurves(Figdata) DinM<- Dataindex(Clist) for (N in Looprange(1,Nrow(DinM))){ Tmp<- DinM[N,] Data<- Clist[Tmp[1]:Tmp[2],] Dtall<- Nrow(Data) Len<- 0 Lenlist<- c(0) for (I in Looprange(2,Dtall)){ Len<- Len+Norm(Data[I,]-Data[I-1,]) Lenlist<- c(Lenlist,Len) } Lenall<- Lenlist[Dtall] if (Lenall==0){ next } Kari<- (Sen+Gap)*0.1 Naga<- Sen*0.1 Tobi<- Gap*0.1 if (Norm(Data[1,]-Data[Dtall,])=Lenlist[J]-Eps){ if (J==Dtall){ break } J<- J+1 } Hajime<- J-1 J<- Hajime while (Len+Naga>Lenlist[J]-Eps){ if (J==Dtall){ break } J<- J+1 } Owari<- J-1 T<- (Len-Lenlist[Hajime]) T<- T/(Lenlist[Hajime+1]-Lenlist[Hajime]) P<- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,]) X0=sprintf('%5.5f',P[1]) Y0=sprintf('%5.5f',P[2]) Pt0=paste('(',X0,',',Y0,')',sep="") Str=paste('\\polyline',Pt0,sep="") cat(Str,file=Wfile,append=TRUE) Mojisu<- Mojisu+nchar(Str) for (J in Looprange(Hajime+1,Owari)){ P=Data[J,] X=sprintf('%5.5f',P[1]) Y=sprintf('%5.5f',P[2]) Pt=paste('(',X,',',Y,')',sep="") Str=Pt cat(Str,file=Wfile,append=TRUE) Pt0=Pt Mojisu=Mojisu+nchar(Str) } T<- (Len+Naga-Lenlist[Owari]) T<- T/(Lenlist[Owari+1]-Lenlist[Owari]) P<- Data[Owari,]+T*(Data[Owari+1,]-Data[Owari,]) X=sprintf('%5.5f',P[1]) Y=sprintf('%5.5f',P[2]) Pt=paste('(',X,',',Y,')',sep="") Str=Pt cat(Str,file=Wfile,append=TRUE) Mojisu<- Mojisu+nchar(Str) if (Mojisu>80){ cat("%\n",file=Wfile,append=TRUE) Mojisu<- 0 } } } cat("%\n%\n",file=Wfile,append=TRUE); } ######################################### Beginpicture<-function(ul) { ## Scaling is implemented Tmp<- Doscaling(c(XMIN,YMIN)) Xm<- Tmp[1] Ym<- Tmp[2] Tmp<- Doscaling(c(XMAX,YMAX)) XM<- Tmp[1] YM<- Tmp[2] Dx<- XM-Xm Dy<- YM-Ym Sym<-".0123456789 +-*/" SL<-Sym OL<-"+-*/" if (ul!=""){ ULEN<<-ul; } Is<-1; VL<-""; Ucode<-ULEN for (I in Looprange(1,nchar(Ucode))){ C<-substring(Ucode,I,I); if (length(grep(C,SL,fixed=TRUE))>0){ if (length(grep(C,OL,fixed=TRUE))>0){ Tmp<-substring(Ucode,Is,I-1); Str<-paste(VL,Tmp,C,sep="") VL<-Str Is<-I+1; } } else{ Unit<-substring(Ucode,I,I+1); Str<-substring(Ucode,Is,I-1); VL<-paste(VL,Str,sep="") break; } } Valu<-eval(parse(text=VL)); Str<-as.character(Valu); ULEN<<- paste(Str,Unit,sep=""); if (Unit=="cm") MilliIn<<-1000/2.54*Valu if (Unit=="mm") MilliIn<<-1000/2.54*Valu/10 if (Unit=="in") MilliIn<<-1000*Valu if (Unit=="pt") MilliIn<<-1000/72.27*Valu if (Unit=="pc") MilliIn<<-1000/6.022*Valu if (Unit=="bp") MilliIn<<-1000/72*Valu if (Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu if (Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu; if (Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10 MARKLEN<<- MARKLENNow*1000/2.54/MilliIn; Str<-paste("{\\unitlength=",ULEN,"%\n",sep=""); cat(Str,file=Wfile,append=TRUE); cat("\\begin{picture}%\n",file=Wfile,append=TRUE); Str<-"("; Tmp<-as.character(round(Dx,digits=6)); Str<-paste(Str,Tmp,",",sep=""); Tmp<-as.character(round(Dy,digits=6)); Str<-paste(Str,Tmp,")(",sep=""); Tmp<-as.character(round(Xm,digits=6)); Str<-paste(Str,Tmp,",",sep=""); Tmp<-as.character(round(Ym,digits=6)); Str<-paste(Str,Tmp,")%\n",sep=""); cat(Str,file=Wfile,append=TRUE); Str=paste('\\linethickness{',as.character(PenThickInit/1000),'in}%',sep="") cat(Str,file=Wfile,append=TRUE) cat("%\n",file=Wfile,append=TRUE) } ######################################### Setpen<-function(Width) { PenThick<<-round(PenThickInit*Width) Str=paste('\\linethickness{',as.character(PenThick/1000),'in}%',sep="") cat(Str,file=Wfile,append=TRUE) cat("%\n",file=Wfile,append=TRUE) } ######################################### Shade<- function(...) { ## Scaling is implemented varargin<- list(...) Nargs<- length(varargin) Iroflg=0 if(Nargs>1){ Iro=varargin[[Nargs]] if(is.character(Iro)){ Iroflg=1 if(length(grep("{",Iro,fixed=TRUE))>0){ Str=paste("{\\color",Iro,sep="") } else{ Str=paste("{\\color{",Iro,"}",sep="") } } else{ if(length(Iro)==1){ Kosa=Iro } else{ Iroflg=1 if(length(Iro)==4){ Str="{\\color[cmyk]{" } else{ if(length(Iro)==3){ Str="{\\color[rgb]{" } } for(J in 1:length(Iro)){ Str=paste(Str,as.character(Iro[J]),sep="") if(J80){ cat("%\n",file=Wfile,append=TRUE) Mojisu<- 0 } } } if(Iroflg==1){ Str='}%' if(Mojisu>0){ Str=paste('\n',Str,'\n',sep="") }else{ Str=paste(Str,'\n') } cat(Str,file=Wfile,append=TRUE) } }