Skip to content

Commit 0e6f3ed

Browse files
committed
fix up stff, docs broken
1 parent 5072fb5 commit 0e6f3ed

File tree

8 files changed

+324
-126
lines changed

8 files changed

+324
-126
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Distances = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
99
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
1010
Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
1111
KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
12-
MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
12+
Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
1313
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1414

1515
[compat]
@@ -18,6 +18,6 @@ Distances = "0.10.12"
1818
Distributions = "0.25.117"
1919
Interpolations = "0.15.1"
2020
KernelAbstractions = "0.9.33"
21-
MakieCore = "0.9.0"
21+
Makie = "0.22.1"
2222
Random = "1.11.0"
2323
julia = "1.10"

docs/Project.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
[deps]
22
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
33
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
4+
ColorSchemeTools = "d3e213a1-5e82-5c18-bb32-2a58a99f8c46"
5+
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
46
DiscreteVoronoi = "01fd5c3e-b3b7-45fb-9d19-e82518019796"
57
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
8+
ImageTransformations = "02fcd773-0e25-5acc-982a-7f6622650795"
9+
Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0"
610
LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589"
711
MakieStippling = "a2bd6b23-9ae5-5b43-94df-c047a0516ae5"
812
MeshGrid = "ebf956a0-ef5e-43be-9fb1-27952996e635"

docs/src/01-stippling.md

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,21 @@ using CUDA
55
using Random
66

77
using CairoMakie
8-
using MeshGrid
8+
using WGLMakie
9+
#using MeshGrid
910
```
1011

11-
create random data
12+
create an arbitrary density function
1213

1314
```julia
14-
n_sites = 5000
15-
n_conditions = 2
16-
sites_grouping = rand(1:n_conditions,n_sites)
17-
18-
19-
grid = Int.(zeros(500,500))
20-
grid_combined = CuArray(grid)
21-
sites = CartesianIndices(size(grid))[rand(1:length(grid),n_sites)]
22-
nothing #hide
15+
include("../simulate_densities.jl")
16+
grid_densities = simulate_densities(timepoints = 10,grid_sz = (500,500),n_conditions=2)
2317
```
2418

25-
create an arbitrary density function
26-
2719
```julia
28-
include("../simulate_densities.jl")
29-
grid_densities = simulate_densities(timepoints = 5,grid_sz = size(grid_combined),n_conditions=2)
20+
trig = Observable(0)
21+
stipplemap(grid_densities,axis=(;aspect=1,limits=((0,500),(0,500)));one_more_iteration=trig)
22+
# [trig[] = k for k in 1:10] # funny way to run 10 iterations
3023
```
3124

3225
```julia

docs/src/03_stippling_interactive.md

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,86 @@ n_conditions = 2
1717
sites_grouping = rand(1:n_conditions,n_sites)
1818

1919

20-
grid = Int.(zeros(500,500))
21-
grid_combined = CuArray(grid)
22-
sites = CartesianIndices(size(grid))[rand(1:length(grid),n_sites)]
20+
21+
grid_combined, grid_singles, sites =
22+
setup(grid_densities, 100)
23+
2324
```
2425

2526
```julia
2627
include("../simulate_densities.jl")
27-
n_conditions = 2
28-
grid_densities = simulate_densities(;timepoints = 10,grid_sz = size(grid_combined),n_conditions)
28+
n_conditions = 3
29+
grid_densities = CuArray.(simulate_densities(;timepoints = 10,grid_sz = (500,500),n_conditions))
30+
colors = [:red,:green,:blue]
31+
#---
32+
#using TestImages
33+
grid_densities = [CuArray(Float32.(1 .-rotr90(testimage("cameraman")))),CuArray(Float32.(rotr90(testimage("cameraman"))))]
34+
colors = [:black,:white]
35+
36+
#---
37+
_X = testimage("toucan")
38+
using ImageTransformations
39+
percentage_scale = 5
40+
new_size = trunc.(Int, size(_X) .* percentage_scale)
41+
X = rotr90(imresize(_X, new_size))
42+
43+
# exract a colorscheme
44+
n = tempname()*".jpg";save(n,X)
45+
colors = extract(n,5,25,0.1)
46+
using Colors
47+
function extract_color(X,color)
48+
out = Colors.colordiff.(color,RGB.(X))
49+
50+
#out = out ./ maximum(out)
51+
return Float32.(out)
52+
end
53+
colordiffs = extract_color.(Ref(X),colors)
54+
m = maximum(maximum.(colordiffs))
55+
X_cd = map(x->1 .-x./m,colordiffs)
56+
X_cd = map(x-> (alpha.(X)).*x,X_cd)
57+
grid_densities = CuArray.(X_cd)
58+
59+
60+
#grid_densities = [CuArray(Float32.(rotr90(getproperty.(X,:r)))),
61+
# CuArray(Float32.(rotr90(getproperty.(X,:g)))),
62+
# CuArray(Float32.(rotr90(getproperty.(X,:b))))]
63+
```
2964

30-
#grid_densities = [testimage("cameraman")]
65+
```julia
66+
trig = Observable(20)
67+
stipplemap(grid_densities;
68+
colors=colors[end:-1:1],
69+
density_factor=0.2,
70+
hysteresis=0.95,
71+
markersize=5,
72+
73+
axis=(;aspect=1,limits=((0,size(grid_densities[1],1)),(0,size(grid_densities[1],2)))),
74+
one_more_iteration=trig)
3175
```
3276

3377
run setup without iterations
3478

3579
```julia
36-
grid_singles,sites_sets = MakieStippling.run_iterations!(grid_combined,sites,sites_grouping,grid_densities;
37-
n_iter=0)
80+
81+
grid_combined, grid_singles, sites =
82+
MakieStippling.setup(grid_densities, 100)
83+
MakieStippling.jfa_voronoi_gpu!(grid_combined, collect(reduce(union, to_value.(sites))))
84+
n_groups = length(grid_densities)
85+
[MakieStippling.jfa_voronoi_gpu!(grid_singles[k], collect(to_value(sites[k]))) for k = 1:n_groups]
86+
87+
88+
_sites = Set.(MakieStippling.linearized_sites.(collect.(to_value.(sites)), Ref(size(grid_combined))))
89+
90+
@run MakieStippling.one_iteration!(
91+
grid_combined,
92+
grid_singles,
93+
_sites,
94+
to_value(grid_densities);
95+
markersize = 5,
96+
hysteresis_a = 0.8
97+
)
98+
99+
38100
```
39101

40102
setup `Observables.jl` to quickly update the plot

src/MakieStippling.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ using KernelAbstractions
99

1010
using Atomix
1111

12-
using MakieCore
12+
using Makie
1313

1414
include("jfa_voronoi.jl")
1515
include("grid_features.jl")
1616
include("density.jl")
1717
include("stippling.jl")
18+
include("stipplemap.jl")
1819

20+
export stipplemap, stipplemap!
1921
end

src/grid_features.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ function grid_features(A::AbstractMatrix{<:Integer}, sites_set)
8383
)
8484
KernelAbstractions.synchronize(device)
8585

86-
return Vector(hist_counts), #./ *(size(A)...), # uncomment to normalize
86+
return (hist_counts), #./ *(size(A)...), # uncomment to normalize
8787
vec2tuple.(Vector(centroids_x), Vector(centroids_y))
8888
end
8989
vec2tuple(x, y) = (x, y)

src/stipplemap.jl

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,95 @@
11
@recipe(StippleMap, densities) do scene
2-
Attributes(markersize = 10, hysteresis = 0.6)
2+
Attributes(
3+
markersize = 10.0,
4+
hysteresis = 0.6,
5+
density_factor = 0.5,
6+
n_initial_sites = 1000,
7+
n_iter = 10,
8+
one_more_iteration = 0,
9+
colors = nothing,
10+
)
311
end
412

5-
function MakieCore.plot!(sm::StippleMap)
13+
function setup(grid_densities, initial_sites)
14+
n_groups = length(grid_densities)
15+
grid_combined = similar(grid_densities[1], Int)
16+
grid_singles = [similar(grid_combined) for _ = 1:n_groups]
17+
18+
sites = [
19+
Observable(
20+
Set(
21+
CartesianIndices(size(grid_combined))[rand(
22+
1:length(grid_combined),
23+
initial_sites,
24+
)],
25+
),
26+
) for _ = 1:n_groups
27+
]
28+
29+
return grid_combined, grid_singles, sites
30+
end
31+
32+
function Makie.plot!(sm::StippleMap; kwargs...)
33+
634
grid_densities = sm.densities
35+
n_groups = length(to_value(grid_densities))
36+
37+
grid_combined, grid_singles, sites =
38+
setup(to_value(grid_densities), to_value(sm.n_initial_sites))
39+
40+
# init the grids
41+
jfa_voronoi_gpu!(grid_combined, collect(reduce(union, to_value.(sites))))
42+
[jfa_voronoi_gpu!(grid_singles[k], collect(to_value(sites[k]))) for k = 1:n_groups]
43+
744

8-
scatter!.(sm, sites, markerspace = :data, markersize = sm.markersize)
45+
on(sm.one_more_iteration; update = true) do trg
46+
_sites =
47+
Set.(linearized_sites.(collect.(to_value.(sites)), Ref(size(grid_combined))))
48+
@show trg
49+
for t = 1:trg
50+
one_iteration!(
51+
grid_combined,
52+
grid_singles,
53+
_sites,
54+
to_value(grid_densities);
55+
markersize = to_value(sm.markersize),
56+
hysteresis_a = to_value(sm.hysteresis),
57+
density_factor = to_value(sm.density_factor),
58+
)
59+
end
60+
for k = 1:n_groups
61+
sites[k][] =
62+
Set(linearized_sites.(collect(_sites[k]), Ref(size(grid_combined))))
63+
end
64+
#notify.(sites)
65+
66+
end
67+
68+
69+
70+
71+
for k = 1:n_groups
72+
order = @lift(.-Matrix($(grid_densities)[k])[collect($(sites[k]))])
73+
site_obs = @lift(convert.(Point3, (collect($(sites[k]))), $order))
74+
#@debug typeof(site_obs) typeof(to_value(site_obs[1]))
75+
c = sm.colors
76+
kw = try
77+
(; color = @lift($c[k]))
78+
catch
79+
(;)
80+
end
81+
scatter!(
82+
sm,
83+
site_obs;
84+
markerspace = :data,
85+
markersize = sm.markersize,
86+
fxaa = true,
87+
kw...,
88+
)
89+
90+
end
991
return sm
1092
end
93+
94+
Base.convert(Point2, x::CartesianIndex) = Point2(x[1], x[2])
95+
Base.convert(Point3, x::CartesianIndex, y) = Point3(x[1], x[2], y)

0 commit comments

Comments
 (0)