Files
vsketch_playground/ocean.py

36 lines
1.1 KiB
Python

import numpy as np
import vsketch
from vpype import UNITS
class Ocean(vsketch.SketchClass):
num_line = vsketch.Param(100, 1)
y_offset = vsketch.Param(19.0)
x_freq = vsketch.Param(0.25)
y_freq = vsketch.Param(18)
tilt = vsketch.Param(-45, -90, 90)
move_x = vsketch.Param(200.0, -1000, 1000)
move_y = vsketch.Param(0.0, -1000, 1000)
move_z = vsketch.Param(60.0, -1000, 1000)
def draw(self, vsk: vsketch.Vsketch) -> None:
vsk.size("a4", landscape=True)
vsk.scale("cm")
#vsk.penWidth(0.1)
x_coords = np.linspace(0, 25, 1000)
perlin = vsk.noise(
x_coords * self.x_freq, np.arange(self.num_line) / self.num_line * self.y_freq
)
for i in range(self.num_line):
y_coords = perlin[:, i] + self.y_offset / self.num_line * i
vsk.polygon(x_coords, y_coords)
vsk.vpype(f"perspective --move {self.move_x} {self.move_y} {self.move_z} --tilt {self.tilt}")
def finalize(self, vsk: vsketch.Vsketch) -> None:
vsk.vpype("linemerge linesimplify reloop linesort")
if __name__ == "__main__":
Ocean.display()