Skip to content

Commit d32c33b

Browse files
committed
fix objects not being completely stateless
1 parent 76e9856 commit d32c33b

File tree

6 files changed

+33
-49
lines changed

6 files changed

+33
-49
lines changed

model/cylinder/cylinder.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@
1414
class Cylinder(Manifold):
1515
def __init__(self, resolution=100, r=1):
1616
self.xyz = self.generate_xyz(resolution, 0.998, r_height=1)
17-
self.mesh = np.array([])
18-
self.samples = np.array([])
19-
self.samples_2d = np.array([])
17+
2018
self.distributions = DistributionLoader(CylinderDistribution, "model.distributions.cylinder").get_distributions()
2119

2220
self.r = r
@@ -66,13 +64,16 @@ def update_sample(self, selected_distribution, selected_sampling_method, sample_
6664
new_sample = sampling_method.sample(sample_options, distribution_options)
6765

6866
if (new_sample is None) or new_sample.size == 0:
69-
self.samples = np.empty((0, 3), dtype=float)
70-
return
67+
samples = np.empty((0, 3), dtype=float)
68+
samples_2d = np.empty((0, 2), dtype=float)
69+
return (samples, samples_2d)
7170

7271
x, y, z = self.p_z_to_xyz(new_sample[:,0], new_sample[:,1], self.r)
7372

74-
self.samples = np.column_stack((x, y, z))
75-
self.samples_2d = new_sample
73+
samples = np.column_stack((x, y, z))
74+
samples_2d = new_sample
75+
76+
return (samples, samples_2d)
7677

7778

7879
@staticmethod
@@ -145,16 +146,6 @@ def _init_mesh(self, resolution=3000):
145146
simplices_merged = np.vstack((simplices, simplices_2))
146147
simplices_merged = np.unique(simplices_merged, axis=0)
147148

148-
# throw away points at bottom so they dont stretch across
149-
# eps = 1e-2
150-
# ok_mask_no_across = (pz[:, 1] > 0 + eps) & (pz[:, 1] < (2 * np.pi - eps))
151-
# ok_idx_no_across = np.where(ok_mask_no_across)[0]
152-
# good_vertices_no_across = np.isin(simplices_merged, ok_idx_no_across)
153-
# good_triangles_no_across = good_vertices_no_across.all(axis=1)
154-
# simplices_merged = simplices_merged[good_triangles_no_across]
155-
156-
157-
158149
def cf(xi, yi, zi, zmin=np.min(z), zmax=np.max(z)):
159150
if zi > zmax:
160151
zi = np.nextafter(zmax, zmin)

model/manifold.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def plot_settings_2d(self, value):
2424
def generate_xyz(self, *args, **kwargs):
2525
pass
2626

27-
# updates self.sample based on selected distribution and sample options
27+
# returns samples based on selected distribution and sample options
28+
# samples are returned as a tuple (saples_xyz, samples_2d | None)
2829
# also converts the sample output type to xyz coordinates
2930
@abstractmethod
3031
def update_sample(self, selected_distribution, sample_options):

model/sphere/sphere.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
class Sphere(Manifold):
1313
def __init__(self, resolution=200, radius=0.999):
1414
self.xyz = self.generate_xyz(resolution, radius)
15-
self.mesh = np.array([])
16-
self.samples = np.array([])
15+
1716
self.distributions = DistributionLoader(SphereDistribution, "model.distributions.sphere").get_distributions()
1817

1918

@@ -35,7 +34,7 @@ def generate_xyz(self, resolution=50, radius=1):
3534
def update_sample(self, selected_distribution, selected_sampling_method, sample_options, distribution_options):
3635
dist = self.distributions[selected_distribution]
3736
sampling_method = dist.sampling_method_dict[selected_sampling_method]
38-
self.samples = sampling_method.sample(sample_options, distribution_options)
37+
return (sampling_method.sample(sample_options, distribution_options), None)
3938

4039

4140
def generate_mesh(self, pdf, alpha=1):

model/torus/torus.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212
class Torus(Manifold):
1313
def __init__(self, resolution=100, r=1, R=3):
1414
self.xyz = self.generate_xyz(resolution, r - 0.01, R - 0.01) # slightly smaller to avoid artifacts from mesh
15-
self.mesh = np.array([])
16-
self.samples = np.array([])
17-
self.samples_2d = np.array([])
15+
1816
self.distributions = DistributionLoader(TorusDistribution, "model.distributions.torus").get_distributions()
1917

2018
self.r = r
@@ -59,13 +57,15 @@ def update_sample(self, selected_distribution, selected_sampling_method, sample_
5957
new_sample = sampling_method.sample(sample_options, distribution_options)
6058

6159
if (new_sample is None) or new_sample.size == 0:
62-
self.samples = np.empty((0, 3), dtype=float)
63-
return
60+
samples = np.empty((0, 3), dtype=float)
61+
samples_2d = np.empty((0, 2), dtype=float)
62+
return (samples, samples_2d)
6463

6564
x, y, z = self.t_p_to_xyz(new_sample[:,0], new_sample[:,1], self.r, self.R)
6665

67-
self.samples = np.column_stack((x, y, z))
68-
self.samples_2d = new_sample
66+
samples = np.column_stack((x, y, z))
67+
samples_2d = new_sample
68+
return (samples, samples_2d)
6969

7070

7171
@staticmethod

renderer/Object3DAnd2DRenderer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,13 @@ def update_plot_sample_2d(self, values_dist, ids_dist, values_samp, ids_samp, se
194194
opt.update_state(new_state)
195195

196196
# samples
197-
self.object.update_sample(selected_distribution, selected_sampling, sampling_options, dist_options)
197+
samples, samples_2d = self.object.update_sample(selected_distribution, selected_sampling, sampling_options, dist_options)
198198

199199
patched_figure = Patch()
200-
tp = self.object.samples_2d
200+
tp = samples_2d
201201

202202
# marker size scaling
203-
sample_count = self.object.samples.shape[0]
203+
sample_count = samples.shape[0]
204204
if sample_count == 0:
205205
marker_size = 0 # no samples, no size
206206
else:

renderer/Object3DRenderer.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,8 @@ def __init__(self, object_3D, id, register_3d_callbacks=True):
2727
"scale": 4,
2828
}
2929
}
30-
if self.object.samples.size and self.object.samples.shape[0] != 0:
31-
sample_count = self.object.samples.shape[0]
32-
if sample_count == 0:
33-
marker_size = 4 # default
34-
else:
35-
marker_size = (10 * (sample_count / 100) ** (-0.35)) / self.device_pixel_ratio
36-
marker_size = np.minimum(10,marker_size)
37-
else:
38-
marker_size = 4
30+
31+
marker_size = 4 # initial size, will be updated based on samples
3932

4033
self.fig = go.Figure(
4134
data=[
@@ -48,9 +41,9 @@ def __init__(self, object_3D, id, register_3d_callbacks=True):
4841
),
4942
go.Scatter3d(
5043
name="Samples",
51-
x=self.object.samples[:, 0] if self.object.samples.size else [],
52-
y=self.object.samples[:, 1] if self.object.samples.size else [],
53-
z=self.object.samples[:, 2] if self.object.samples.size else [],
44+
x=[],
45+
y=[],
46+
z=[],
5447
mode="markers",
5548
marker=dict(
5649
size=marker_size,
@@ -284,21 +277,21 @@ def update_plot_sample(self, values_dist, ids_dist, values_samp, ids_samp, selec
284277
opt.update_state(new_state)
285278

286279
# samples
287-
self.object.update_sample(selected_distribution, selected_sampling, sampling_options, dist_options)
280+
samples, _ = self.object.update_sample(selected_distribution, selected_sampling, sampling_options, dist_options)
288281

289282

290283
patched_figure = Patch()
291284

292285

293-
patched_figure["data"][1].x = self.object.samples[:, 0]
294-
patched_figure["data"][1].y = self.object.samples[:, 1]
295-
patched_figure["data"][1].z = self.object.samples[:, 2]
286+
patched_figure["data"][1].x = samples[:, 0]
287+
patched_figure["data"][1].y = samples[:, 1]
288+
patched_figure["data"][1].z = samples[:, 2]
296289

297290
# set size based on number of samples
298-
if self.object.samples.size == 0:
291+
if samples.size == 0:
299292
marker_size = 0
300293
else:
301-
sample_count = self.object.samples.shape[0]
294+
sample_count = samples.shape[0]
302295
marker_size = (10 * (sample_count / 100) ** (-0.35)) / dpr
303296
marker_size = np.minimum(10,marker_size)
304297

0 commit comments

Comments
 (0)