R/rgl.sphgrid.R

Defines functions .draw .skip

.skip=function(){par3d(skipRedraw=TRUE)}
.draw=function(){par3d(skipRedraw=FALSE)}

rgl.sphgrid = function (radius = 1, axis.val=TRUE, col.long='red', col.lat='blue', col.rad='darkgreen',
                        col.axes='grey50', col.grid='grey', deggap = 15, longtype='H', add=FALSE, 
                        radaxis=TRUE, radlab='Radius',col.radlab='black'){
    if(add==FALSE){open3d()}
  .skip()
    for(lat in seq(-90,90,by=deggap)){
      if(lat==0){col=col.axes}else{col=col.grid}
      plot3d(sph2car(long=seq(0,360,len=100),lat=lat,radius=radius,deg=T),col=col,add=T,type='l')
    }
    for(long in seq(0,360-deggap,by=deggap)){
      if(long==0){col=col.axes}else{col=col.grid}
      plot3d(sph2car(long=long,lat=seq(-90,90,len=100),radius=radius,deg=T),col=col,add=T,type='l')
    }
    if(longtype=='H'){scale=15}
    if(longtype=='D'){scale=1}
    if(axis.val){
      rgl.sphtext(long=0,lat=seq(-90,90,by=deggap), radius=radius*1.05, text = seq(-90,90,by=deggap), deg=TRUE, col = col.lat)
      rgl.sphtext(long=seq(0,360-deggap,by=deggap),lat=0, radius=radius*1.05, text = seq(0,360-deggap,by=deggap)/scale, deg=TRUE, col = col.long)
    }

    if(radaxis){
      .skip()
        radpretty=pretty(c(0,radius))
        radpretty=radpretty[radpretty<=radius]
        lines3d(c(0,0),c(0,max(radpretty)),c(0,0),col=col.axes)
        for(i in 1:length(radpretty)){
            lines3d(c(0,0),c(radpretty[i],radpretty[i]),c(0,0,radius/50),col=col.axes)
            text3d(0,radpretty[i],radius/15,radpretty[i],col=col.rad)
        }
        if(axis.val){
          text3d(0,radius/2,-radius/25,radlab,col=col.radlab)
        }
    }
    .draw()
}
asgr/sphereplot documentation built on Sept. 5, 2023, 4:58 a.m.