Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions src/common_options.jl
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ function parse_R(d::Dict, cmd::String, O::Bool=false, del::Bool=true, RIr::Bool=
(opt_R != " -Rtight" && opt_R !== nothing && limits != zeros(4) && all(CTRL.limits[1:4] .== 0)) &&
(CTRL.limits[1:length(limits)] = limits) # And this makes data = plot limits, IF data is empty.
if (istilename(opt_R)) # A XYZ or quadtree tile address (like "7829,6374,14")
opt_R = sprintf(" -R%.12g/%.12g/%.12g/%.12g", limits[1], limits[2], limits[3], limits[4])
opt_R = @sprintf(" -R%.12g/%.12g/%.12g/%.12g", limits[1], limits[2], limits[3], limits[4])
elseif contains(opt_R, "+r")
CTRL.limits[13] = 1.0 # To know that -R...+r was used.
end
Expand Down Expand Up @@ -217,7 +217,7 @@ function merge_R_and_xyzlims(d::Dict, opt_R::String)::String
xlim, ylim, zlim = parse_lims(d, 'x'), parse_lims(d, 'y'), parse_lims(d, 'z')
=#
function fetch_xyz_lims(d::Dict, symbs)::String
return ((val = find_in_dict(d, symbs, false)[1]) !== nothing) ? sprintf("%.15g/%.15g", val[1], val[2]) : ""
return ((val = find_in_dict(d, symbs, false)[1]) !== nothing) ? @sprintf("%.15g/%.15g", val[1], val[2]) : ""
end

xlim::String = fetch_xyz_lims(d, [:xlim :xlims :xlimits])
Expand Down Expand Up @@ -282,7 +282,7 @@ function build_opt_R(val, symb::Symbol=Symbol())::String # Generic function tha
R = " -R" * arg2str(val)
end
elseif (isa(val, GItype))
R = sprintf(" -R%.15g/%.15g/%.15g/%.15g", val.range[1], val.range[2], val.range[3], val.range[4])
R = @sprintf(" -R%.15g/%.15g/%.15g/%.15g", val.range[1], val.range[2], val.range[3], val.range[4])
elseif (isa(val, GDtype))
bb::Vector{<:Float64} = isa(val, GMTdataset) ? val.bbox : val[1].ds_bbox
R = (symb ∈ (:region_llur, :limits_llur, :limits_diag, :region_diag)) ?
Expand Down Expand Up @@ -332,7 +332,7 @@ function build_opt_R(arg::NamedTuple, symb::Symbol=Symbol())::String
if (isa(val, String) || isa(val, Real))
t::String = string(val)
elseif (isa(val, VecOrMat{<:Real}) || isa(val, Tuple))
t = join([sprintf("%.15g/", Float64(x)) for x in val])
t = join([@sprintf("%.15g/", Float64(x)) for x in val])
t = rstrip(t, '/') # and remove last '/'
else
error("Increments for limits must be a String, a Number, Array or Tuple")
Expand Down Expand Up @@ -819,12 +819,12 @@ function parse_proj(p::NamedTuple)::Tuple{String, Bool}
center::String = ""
if ((val = find_in_dict(d, [:center])[1]) !== nothing)
if (isa(val, String)) center = val
elseif (isa(val, Real)) center = sprintf("%.12g", val)
elseif (isa(val, Real)) center = @sprintf("%.12g", val)
elseif (isa(val, Array) || isa(val, Tuple) && length(val) == 2)
if (isa(val, Array)) center = sprintf("%.12g/%.12g", val[1], val[2])
if (isa(val, Array)) center = @sprintf("%.12g/%.12g", val[1], val[2])
else # Accept also strings in tuple (Needed for movie)
center = (isa(val[1], String)) ? val[1]::String * "/" : sprintf("%.12g/", val[1])
center *= (isa(val[2], String)) ? val[2]::String : sprintf("%.12g", val[2])
center = (isa(val[1], String)) ? val[1]::String * "/" : @sprintf("%.12g/", val[1])
center *= (isa(val[2], String)) ? val[2]::String : @sprintf("%.12g", val[2])
end
end
end
Expand All @@ -834,9 +834,9 @@ function parse_proj(p::NamedTuple)::Tuple{String, Bool}
parallels::String = ""
if ((val = find_in_dict(d, [:parallel :parallels])[1]) !== nothing)
if (isa(val, String)) parallels = "/" * val
elseif (isa(val, Real)) parallels = sprintf("/%.12g", val)
elseif (isa(val, Real)) parallels = @sprintf("/%.12g", val)
elseif (isa(val, Array) || isa(val, Tuple) && (length(val) <= 3 || length(val) == 6))
parallels = join([sprintf("/%.12g",x)::String for x in val])
parallels = join([@sprintf("/%.12g",x)::String for x in val])
end
end

Expand Down Expand Up @@ -2685,28 +2685,28 @@ function get_cpt_set_R(d::Dict, cmd0::String, cmd::String, opt_R::String, got_fn
cpt_opt_T = ""
if ((val = find_in_dict(d, [:clim])[1]) !== nothing)
(!isa(val, StrSymb) && length(val) != 2) && error("The clim option is neither = 'zscale' nor a two elements with z_min, z_max")
cpt_opt_T = (isa(val, StrSymb)) ? sprintf(" -T%.12g/%.12g/256+n -D", zscale(arg1)...) : sprintf(" -T%.12g/%.12g/256+n -D", val[1], val[2])
cpt_opt_T = (isa(val, StrSymb)) ? @sprintf(" -T%.12g/%.12g/256+n -D", zscale(arg1)...) : @sprintf(" -T%.12g/%.12g/256+n -D", val[1], val[2])
end

if (isa(arg1, GItype) || (cmd0 != "" && cmd0[1] != '@'))
if (isempty(CURRENT_CPT[1]) && (val = find_in_dict(d, CPTaliases, false)[1]) === nothing)
# If no cpt name sent in, then compute (later) a default cpt
if (isa(arg1, GMTgrid) && ((val = find_in_dict(d, [:percent :pct])[1])) !== nothing)
lh = quantile(any(!isfinite, arg1) ? skipnan(vec(arg1)) : vec(arg1), [(100 - val)/200, (1 - (100 - val)/200)])
cpt_opt_T = sprintf(" -T%.12g/%.12g/256+n -D", lh[1], lh[2]) # Piggyback -D
cpt_opt_T = @sprintf(" -T%.12g/%.12g/256+n -D", lh[1], lh[2]) # Piggyback -D
elseif ((val = find_in_dict(d, [:percent :pct])[1]) !== nothing) # Case of a grid file
range = vec(grdinfo(cmd0 * " -C -T+a$(100-val)"::String).data);
cpt_opt_T = sprintf(" -T%.12g/%.12g/256+n -D", range[5], range[6])
cpt_opt_T = @sprintf(" -T%.12g/%.12g/256+n -D", range[5], range[6])
elseif (cpt_opt_T == "")
drange = range[6] - range[5]
(drange > 1e6) && @warn("The z range expands to more then 6 orders of magnitude. Missed to replace the nodatavalues?\n\n")
loc_eps = (drange > 1e-8) ? 1e-8 : 1e-15 # Totally ad hoc condition
cpt_opt_T = sprintf(" -T%.12g/%.12g/256+n", range[5] - loc_eps, range[6] + loc_eps)
cpt_opt_T = @sprintf(" -T%.12g/%.12g/256+n", range[5] - loc_eps, range[6] + loc_eps)
end
(range[5] > 1e100) && (cpt_opt_T = "") # cmd0 is an image name and now grdinfo does not compute its min/max
end
if (opt_R == "" && (!IamModern[1] || (IamModern[1] && FirstModern[1])) ) # No -R ovewrite by accident
cmd *= sprintf(" -R%.14g/%.14g/%.14g/%.14g", range[1], range[2], range[3], range[4])
cmd *= @sprintf(" -R%.14g/%.14g/%.14g/%.14g", range[1], range[2], range[3], range[4])
end
elseif (cmd0 != "" && cmd0[1] == '@') # No reason not to let @grids use clim=[...]
if (any(contains.(cmd0, ["_01d", "_30m", "_20m", "_15m", "_10m", "_06m"])) && (val = find_in_dict(d, [:percent :pct])[1]) !== nothing)
Expand Down Expand Up @@ -2886,7 +2886,7 @@ function get_color(val::Tuple)::String
if (isa(val[k], Tuple) && (length(val[k]) == 3))
s = 1.0
if (val[k][1] <= 1 && val[k][2] <= 1 && val[k][3] <= 1) s = 255.0 end # colors in [0 1]
out *= sprintf("%.0f/%.0f/%.0f,", val[k][1]*s, val[k][2]*s, val[k][3]*s)
out *= @sprintf("%.0f/%.0f/%.0f,", val[k][1]*s, val[k][2]*s, val[k][3]*s)
elseif (isa(val[k], Symbol) || isa(val[k], String) || isa(val[k], Real))
out *= string(val[k],",")::String
else
Expand Down Expand Up @@ -4415,7 +4415,7 @@ function finish_PS_module(d::Dict, cmd::Vector{String}, opt_extra::String, K::Bo
if (!isgeog(proj4))
opt_J = replace(proj4, " " => "")
isoblique = any(contains.(opt_J, ["=utm", "=lcc", "=omerc", "=tmerc", "=laea"])) # <== ADD OTHER OBLIQUES HERE
opt_R::String = isoblique ? sprintf(" -R%f/%f/%f/%f+r", WESN[1],WESN[3],WESN[2],WESN[4]) : sprintf(" -R%f/%f/%f/%f", WESN...)
opt_R::String = isoblique ? @sprintf(" -R%f/%f/%f/%f+r", WESN[1],WESN[3],WESN[2],WESN[4]) : @sprintf(" -R%f/%f/%f/%f", WESN...)
size_::String = (J1[1] == 'x') ? "+scale=" * J1[2:end] : (J1[1] == 'X') ? "+width=" * J1[2:end] : ""
(size_ == "") && @warn("Could not find the right fig size used. Result will be wrong")
cmd[k] = replace(cmd[k], " -J" => " -J" * opt_J * size_)
Expand All @@ -4425,7 +4425,7 @@ function finish_PS_module(d::Dict, cmd::Vector{String}, opt_extra::String, K::Bo
if (J2 != "") # Case where J2 wasn't simply "-J"
@warn("If $J1 is a cylindrical projection, second set of coordinates will likely be wrong.")
D = mapproject([WESN[1] WESN[3]; WESN[1] WESN[4]; WESN[2] WESN[4]; WESN[2] WESN[3]], J=J2)
opt_R = sprintf(" -R%.12g/%.12g/%.12g/%.12g", D.ds_bbox...)
opt_R = @sprintf(" -R%.12g/%.12g/%.12g/%.12g", D.ds_bbox...)
W = (CTRL.pocket_J[2] != "") ? CTRL.pocket_J[2] : string(split(DEF_FIG_SIZE, "/")[1])
fig_size = W * "/" * string(mapproject([WESN[1] WESN[4]], R=[WESN...], J=J1).data[2])::String
cmd[k] = replace(cmd[k], J2 => islowercase(J2[1]) ? "x" * fig_size : "X" * fig_size) # Fails for scales
Expand Down
8 changes: 4 additions & 4 deletions src/gmtbegin.jl
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ function inset_nested(GI::GItype, n; kwargs...)
CTRL.pocket_d[1][:J] = opt_J[4:end]

if (opt_R == "")
opt_R = sprintf(" -R%.12g/%.12g/%.12g/%.12g", GI.range[1], GI.range[2], GI.range[3], GI.range[4]) # Get the current GI
opt_R = @sprintf(" -R%.12g/%.12g/%.12g/%.12g", GI.range[1], GI.range[2], GI.range[3], GI.range[4]) # Get the current GI
CTRL.pocket_d[1][:R] = opt_R[4:end]
end
(opt_B == " -B0") && (opt_B = " -Bnone") # No frame border so that the inset box pen (-F) may take effect.
Expand All @@ -175,7 +175,7 @@ function inset_nested(D::GDtype, n; kwargs...)
(opt_J == "") && (d[:J] = "X?/?"; IamInset[2] = true) # IamInset[2] is to help avoid GMT bug #7005
if (opt_R == "")
bb = getbb(D)
opt_R = sprintf(" -R%.12g/%.12g/%.12g/%.12g", bb...)
opt_R = @sprintf(" -R%.12g/%.12g/%.12g/%.12g", bb...)
end
d[:R] = opt_R[4:end]
(opt_B != "") && (d[:B] = opt_B[4:end])
Expand Down Expand Up @@ -262,7 +262,7 @@ function helper1_inset_nested(d; iscoast=false, isplot=false, imgdims=tuple())
inset_H = inset_W * aspect_zoom
if ((val = find_in_dict(d, [:pzoom])[1]) !== nothing) # A pseudo-zoom from a single point.
val_f::Vector{Float64} = [Float64(val[1]), Float64(val[2])]
d[:R] = sprintf("%.15g/%.15g/%.15g/%.15g", val_f[1], val_f[1]*1.001, val_f[2], val_f[2]*1.001)
d[:R] = @sprintf("%.15g/%.15g/%.15g/%.15g", val_f[1], val_f[1]*1.001, val_f[2], val_f[2]*1.001)
delete!(d, :pzoom)
end
(opt_J != "" && !contains(opt_J, '?')) && (opt_J = replace(opt_J, CTRL.pocket_J[2] => "?")) # Replace the fig's default size
Expand Down Expand Up @@ -493,7 +493,7 @@ function zoom2inset(d, center)
CTRL.pocket_call[4] = (nDS == 1) ? D[1] : D
CTRL.limits[7:end] = bak # Reset the backed up values
end
d[:R] = sprintf("%.15g/%.15g/%.15g/%.15g", zoom_lims...)
d[:R] = @sprintf("%.15g/%.15g/%.15g/%.15g", zoom_lims...)
d[:Rzoom_num] = zoom_lims
return nothing
end
Expand Down
2 changes: 1 addition & 1 deletion src/grdimage.jl
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ function common_insert_R!(d::Dict, O::Bool, cmd0, I_G; is3D=false)
d[:R] = val
end
try # Can't risk to error here
opt_R = sprintf("%.15g/%.15g/%.15g/%.15g", d[:R][1], d[:R][2], d[:R][3], d[:R][4])
opt_R = @sprintf("%.15g/%.15g/%.15g/%.15g", d[:R][1], d[:R][2], d[:R][3], d[:R][4])
catch
end
delete!(d, [:region, :limits])
Expand Down
10 changes: 5 additions & 5 deletions src/grdlandmask.jl
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ function grdlandmask_helper(cmd0::String, arg1; kwargs...)
prj = getproj(arg1, proj4=true)
(contains(prj, "=lon") || contains(prj, "=lat")) && (prj = "") # Cool, it's geog, no proj needed.
if (prj == "")
d[:R] = sprintf("%.12g/%.12g/%.12g/%.12g", arg1.range[1:4]...)
d[:I] = sprintf("%.12g/%.12g", arg1.inc[1:2]...)
d[:R] = @sprintf("%.12g/%.12g/%.12g/%.12g", arg1.range[1:4]...)
d[:I] = @sprintf("%.12g/%.12g", arg1.inc[1:2]...)
else
t = xy2lonlat([arg1.range[1] 0; arg1.range[2] 0; 0 arg1.range[3]; 0 arg1.range[4]], s_srs=prj, t_srs="+proj=longlat +datum=WGS84")
d[:R] = sprintf("%.12g/%.12g/%.12g/%.12g", t[1, 1], t[2, 1], t[3, 2], t[4, 2])
d[:R] = @sprintf("%.12g/%.12g/%.12g/%.12g", t[1, 1], t[2, 1], t[3, 2], t[4, 2])
height, width = dims(arg1)
d[:I] = "$(width)" * "+n/" * "$(height)" * "+n"
end
Expand All @@ -69,7 +69,7 @@ function grdlandmask_helper(cmd0::String, arg1; kwargs...)
r = common_grd(d, "grdlandmask " * cmd, nothing) # Finish build cmd and run it
if (arg1 !== nothing && prj != "") # project the mask grid to be compatible with the original grid.
r.z = reshape(r.z, width, height)
r = gdalwarp(r, ["-of","MEM","-t_srs",prj,"-ts","$(width)", "$(height)", "-te", sprintf("%.12g", arg1.range[1]), sprintf("%.12g", arg1.range[3]), sprintf("%.12g", arg1.range[2]), sprintf("%.12g", arg1.range[4])], layout=r.layout) # Many things can go wrong here.
r = gdalwarp(r, ["-of","MEM","-t_srs",prj,"-ts","$(width)", "$(height)", "-te", @sprintf("%.12g", arg1.range[1]), @sprintf("%.12g", arg1.range[3]), @sprintf("%.12g", arg1.range[2]), @sprintf("%.12g", arg1.range[4])], layout=r.layout) # Many things can go wrong here.
end
if (isa(arg1, GMTgrid))
if (r.hasnans == 2 || opt_N == "") r *= arg1 # If clipping val is NaN or 0
Expand All @@ -88,4 +88,4 @@ function grdlandmask_helper(cmd0::String, arg1; kwargs...)
return I
end
return r
end
end
18 changes: 1 addition & 17 deletions src/libgmt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -427,22 +427,6 @@ function gmt_free_mem(API::Ptr{Cvoid}, mem)
ccall((:gmt_free_func, libgmt), Cvoid, (Cstring, Ptr{Cvoid}, Bool, Cstring), GMT_, mem, true, "Julia")
end

function sprintf(format::String, x...)
strp = Ref{Ptr{Cchar}}(0)
if (length(x) == 1)
len = ccall(:asprintf, Cint, (Ptr{Ptr{Cchar}}, Cstring, Cdouble...), strp, format, x[1])
elseif (length(x) == 2)
len = ccall(:asprintf, Cint, (Ptr{Ptr{Cchar}}, Cstring, Cdouble, Cdouble...), strp, format, x[1], x[2])
elseif (length(x) == 3)
len = ccall(:asprintf, Cint, (Ptr{Ptr{Cchar}}, Cstring, Cdouble, Cdouble, Cdouble...), strp, format, x[1], x[2], x[3])
elseif (length(x) == 4)
len = ccall(:asprintf, Cint, (Ptr{Ptr{Cchar}}, Cstring, Cdouble, Cdouble, Cdouble, Cdouble...), strp, format, x[1], x[2], x[3], x[4])
end
str = unsafe_string(strp[],len)
Libc.free(strp[])
return str
end

#=
function get_common_R(API::Ptr{Cvoid})
R = COMMON_R((false,false,false,false), false, 0, 0, 0, (0., 0., 0., 0., 0., 0.), (0., 0., 0., 0.), (0., 0.), map(UInt8, (string(repeat(" ",256))...,)))
Expand All @@ -462,4 +446,4 @@ fix_mercator(data, detail, nrows, ncols, lat1, lat2) =
ccall((:fix_mercator, libgmt), Cvoid, (Ptr{Cfloat}, Cdouble, Cint, Cint, Cdouble, Cdouble), data, nrows, ncols, detail, lat1, lat2)

fix_polar_stereographic(data, detail, nrows, ncols, center_res) =
ccall((:fix_polar_stereographic, libgmt), Cvoid, (Ptr{Cfloat}, Cdouble, Cint, Cint, Cdouble), data, nrows, ncols, detail, center_res)
ccall((:fix_polar_stereographic, libgmt), Cvoid, (Ptr{Cfloat}, Cdouble, Cint, Cint, Cdouble), data, nrows, ncols, detail, center_res)
2 changes: 1 addition & 1 deletion src/rasterpolygonfuns.jl
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ function maskgdal(D::GDtype, nx, ny; region=Float64[], touches=false, layout::St
local mask
opts = ["-of", "MEM", "-ts","$(nx)","$(ny)", "-burn", "1", "-ot", "Byte"]
(touches == 1) && append!(opts, ["-at"])
!isempty(region) && append!(opts, ["-te", sprintf("%.12g", region[1]), sprintf("%.12g", region[3]), sprintf("%.12g", region[2]), sprintf("%.12g", region[4])])
!isempty(region) && append!(opts, ["-te", @sprintf("%.12g", region[1]), @sprintf("%.12g", region[3]), @sprintf("%.12g", region[2]), @sprintf("%.12g", region[4])])
try
mk = gdalrasterize(D, opts, layout=layout) # This may fail if the polygon is degenerated.
mask = reinterpret(Bool, mk.image)
Expand Down
4 changes: 0 additions & 4 deletions test/test_common_opts.jl
Original file line number Diff line number Diff line change
Expand Up @@ -432,8 +432,4 @@
GMT.parse_opt_S(Dict(:size => (exp, [1 2])), rand(4))
GMT.parse_opt_S(Dict(:size => ((pow,2), [1 2])), rand(4))

GMT.sprintf("%f", 0.1)
GMT.sprintf("%f,%f", 0.1, 0.2)
GMT.sprintf("%f/%f/%f", 0.1, 0.2, 0.3)
GMT.sprintf("%f/%f/%f/%f", 0.1, 0.2, 0.3, 0.4)
end
Loading