From f2aeac4da421a2e438d8c5ce1ffc44f861caea48 Mon Sep 17 00:00:00 2001 From: grimsace Date: Tue, 19 May 2026 11:39:09 -0500 Subject: [PATCH] added ability to scale noise --- .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 233 bytes .../__pycache__/solid_noise.cpython-313.pyc | Bin 0 -> 18995 bytes .../__pycache__/solid_noise.cpython-314.pyc | Bin 0 -> 19677 bytes solid_noise/solid_noise.py | 51 ++++++++++++------ 4 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 solid_noise/__pycache__/__init__.cpython-313.pyc create mode 100644 solid_noise/__pycache__/solid_noise.cpython-313.pyc create mode 100644 solid_noise/__pycache__/solid_noise.cpython-314.pyc diff --git a/solid_noise/__pycache__/__init__.cpython-313.pyc b/solid_noise/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0af84668501cd29555ec894cb78d47a2b23145d GIT binary patch literal 233 zcmYjLOA5j;5KUT;q7-@rx7j2Y5D%bIlpY{d8*1n$VcH5kh==G6JWIEN;7;fToS=el z@qP?5Glk)tAfn->cc^z4e(=6#iqKq1LK3iZ!ESl$cUyvC)m%mtC&w zn0e!(aiy$X3qB4GWI`t6L7Yvc#Hl|j$U#?vUs4dMwZcHoi%jtXbeoDSMfzCVfAnvq ikW$yWm6F?j3|5uNx>BtnzzgoH#+jE-DSZ$IGYoHll|PdJ literal 0 HcmV?d00001 diff --git a/solid_noise/__pycache__/solid_noise.cpython-313.pyc b/solid_noise/__pycache__/solid_noise.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9029cac33f73fe350d7ca4071b6279a8b100dd9 GIT binary patch literal 18995 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 literal 0 HcmV?d00001 diff --git a/solid_noise/solid_noise.py b/solid_noise/solid_noise.py index 82680f9..2df5230 100644 --- a/solid_noise/solid_noise.py +++ b/solid_noise/solid_noise.py @@ -43,7 +43,7 @@ def _grad(h, x, y): return -x - y -def generate(width, height, octaves, scale, seed, invert, progress_cb): +def generate(width, height, octaves, base_scale, zoom, seed, invert, progress_cb): perms = [] for i in range(octaves): rng = random.Random(seed + i) @@ -56,10 +56,14 @@ def generate(width, height, octaves, scale, seed, invert, progress_cb): max_a = sum(amps) acc = [0.0] * (width * height) + # Effective scale: less zoom = smaller fs = zoomed in (larger features) + # More zoom = larger fs = zoomed out (smaller features) + effective_scale = base_scale * zoom + for oi in range(octaves): p = perms[oi] amp = amps[oi] - fs = scale * freqs[oi] + fs = effective_scale * freqs[oi] inv_h = fs / height inv_w = fs / width for y in range(height): @@ -122,12 +126,13 @@ class NoiseWorker(QObject): finished = pyqtSignal(bytes, int, int) error = pyqtSignal(str) - def __init__(self, width, height, octaves, scale, seed, invert): + def __init__(self, width, height, octaves, base_scale, zoom, seed, invert): super().__init__() self.width = width self.height = height self.octaves = octaves - self.scale = scale + self.base_scale = base_scale + self.zoom = zoom self.seed = seed self.invert = invert @@ -137,7 +142,8 @@ class NoiseWorker(QObject): self.width, self.height, self.octaves, - self.scale, + self.base_scale, + self.zoom, self.seed, self.invert, self.progress.emit, @@ -190,15 +196,29 @@ class SolidNoiseDock(DockWidget): ol.addWidget(hint) layout.addWidget(og) - # Scale - sg = QGroupBox("Scale") - sl = QHBoxLayout(sg) - sl.addWidget(QLabel("Zoom:")) - self._scale_spin = QDoubleSpinBox() - self._scale_spin.setRange(0.1, 32.0) - self._scale_spin.setSingleStep(0.5) - self._scale_spin.setValue(4.0) - sl.addWidget(self._scale_spin) + # Zoom + sg = QGroupBox("Zoom") + sl = QVBoxLayout(sg) + + # Zoom Slider + row = QHBoxLayout() + row.addWidget(QLabel("Factor:")) + self._zoom_slider = QSlider(Qt.Horizontal) + self._zoom_slider.setRange(10, 1000) # 0.1 to 10.0 + self._zoom_slider.setValue(100) # 1.0 + self._zoom_lbl = QLabel("1.00x") + self._zoom_lbl.setMinimumWidth(40) + self._zoom_lbl.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + self._zoom_slider.valueChanged.connect( + lambda v: self._zoom_lbl.setText(f"{v / 100:.2f}x") + ) + row.addWidget(self._zoom_slider) + row.addWidget(self._zoom_lbl) + sl.addLayout(row) + + hint = QLabel("Zoom < 1.0 zooms in, > 1.0 zooms out") + hint.setStyleSheet("color: palette(mid); font-size: 10px;") + sl.addWidget(hint) layout.addWidget(sg) # Seed @@ -267,7 +287,8 @@ class SolidNoiseDock(DockWidget): w, h, self._oct_slider.value(), - self._scale_spin.value(), + 4.0, # Default base scale + self._zoom_slider.value() / 100.0, self._seed_spin.value(), self._invert_chk.isChecked(), )