def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size(self.page_size, landscape=self.landscape) vsk.penWidth("0.5mm") # obtain the datafile file_name = self.category + ".bin" file_path = pathlib.Path(file_name) url = "https://storage.googleapis.com/quickdraw_dataset/full/binary/" url += file_name.replace(" ", "%20") if not file_path.exists(): urllib.request.urlretrieve(url, file_name) # extract some drawings drawing_set = unpack_drawings(file_name) drawing_subset = list(islice(drawing_set, 10000)) # draw stuff width = vsk.width - 2 * self.margins height = vsk.height - 2 * self.margins n = self.columns * self.rows samples = random.sample(drawing_subset, n) for j in range(self.rows): with vsk.pushMatrix(): for i in range(self.columns): idx = j * self.columns + i with vsk.pushMatrix(): vsk.scale(self.scale_factor * min(1 / self.columns, 1 / self.rows)) drawing = quickdraw_to_linestring(samples[idx]) vsk.stroke((idx % self.layer_count) + 1) vsk.geometry(drawing) vsk.translate(width / self.columns, 0) vsk.translate(0, height / self.rows)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size(self.width, self.height, landscape=self.landscape, center=False) delta = (vsk.height - vsk.width) / (self.M - self.N) margin = (self.M * vsk.width - self.N * vsk.height) / 2 / (self.M - self.N) vsk.stroke(1) vsk.vpype( f"text -p 10 20 -s 25 'cell size = {delta*PX_TO_CM:0.2f}cm / " f"margin = {margin*PX_TO_CM:0.2f}cm' penwidth -l1 3") if delta < 0: vsk.vpype( "text -p 10 55 -s 25 'negative cell size, adjust M and N!!!'") else: vsk.stroke(2) vsk.translate(margin, margin) for i in range(self.N + 1): vsk.line(i * delta, 0, i * delta, self.M * delta) for j in range(self.M + 1): vsk.line(0, j * delta, self.N * delta, j * delta) vsk.vpype("color -l2 #ccc") vsk.stroke(3) vsk.penWidth(3, 3) for i, j in itertools.product(range(self.N + 1), range(self.M + 1)): vsk.point(i * delta, j * delta) vsk.vpype("color -l3 red")
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size(self.page_size, landscape=False) vsk.scale("cm") vsk.scale(self.scale_factor) prob = { # modifiers "+": self.prob_plus, "-": self.prob_minus, "O": self.prob_bigger, "o": self.prob_smaller, "^": self.prob_raise, "v": self.prob_lower, " ": self.prob_segsep, "\n": self.prob_ringsep, # primitives "d": self.prob_dot, "D": self.prob_dotbar, "c": self.prob_circle, "b": self.prob_bar, "p": self.prob_cross, "s": self.prob_spring, "r": self.prob_box, "S": self.prob_sine, "C": self.prob_carbon, "l": self.prob_line, "L": self.prob_multiline, } for j in range(self.ny): for i in range(self.nx): # noinspection SpellCheckingInspection drawing = "".join( random.choices(list(prob.keys()), list(prob.values()), k=self.letter_count)) lc = make_drawing(drawing) vsk.stroke((i + j * self.nx) % self.nlayer + 1) with vsk.pushMatrix(): vsk.translate(i * self.dx, j * self.dy) for line in lc: vsk.polygon(line)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a5", landscape=True) vsk.scale("1.5cm") vsk.detail(self.detail_value) vsk.circle(0, 0, 1) vsk.circle(0, 0, 2) with vsk.pushMatrix(): vsk.scale(4) # the scale is taken into account to compute details vsk.circle(0, 0, 1) vsk.translate(4, 0) for i in range(-4, 5): with vsk.pushMatrix(): vsk.translate(0, i * 0.4) vsk.bezier(0, 0, 1, -2, 2, 2, 3, 0)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a4", landscape=True) vsk.scale("cm") # create a stick figure sub = vsketch.Vsketch() sub.detail(0.01) sub.rect(0, 0, 1, 2) sub.circle(0.5, -0.5, 1) sub.line(0, 0, -0.5, 1) sub.line(1, 0, 1.5, 1) sub.line(0, 2, -0.3, 4) sub.line(1, 2, 1.3, 4) for i in range(8): with vsk.pushMatrix(): vsk.scale(0.95**i) vsk.rotate(8 * i, degrees=True) vsk.sketch(sub) vsk.translate(3, 0)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a4", landscape=True) vsk.scale("2cm") # build a star angles = np.linspace(0, 2 * np.pi, 5, endpoint=False) idx = [0, 2, 4, 1, 3, 0] x = np.cos(angles[idx] - np.pi / 2) y = np.sin(angles[idx] - np.pi / 2) with vsk.pushMatrix(): for i in range(5): with vsk.pushMatrix(): vsk.scale(0.8**i) vsk.polygon(x, y) vsk.translate(2, 0) vsk.translate(0, 4) for i in range(5): with vsk.pushMatrix(): vsk.rotate(i * 4, degrees=True) vsk.polygon(x, y) vsk.translate(2, 0)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a4", landscape=False) vsk.scale("cm") for j in range(self.rows): with vsk.pushMatrix(): for i in range(self.columns): with vsk.pushMatrix(): vsk.rotate(self.fuzziness * 0.03 * vsk.random(-j, j)) vsk.translate( self.fuzziness * 0.01 * vsk.randomGaussian() * j, self.fuzziness * 0.01 * vsk.randomGaussian() * j, ) vsk.rect(0, 0, 1, 1) vsk.translate(1, 0) vsk.translate(0, 1)
def draw(self, vsk: vsketch.Vsketch) -> None: vsk.size("a4", landscape=True) vsk.scale("1cm") vsk.penWidth("0.5mm") p = translate( Polygon( [(-3, -1), (1.5, -2), (1.4, 2), (0, 1.5), (-1, 2.3)], holes=[[(-0.5, -0.5), (0.5, -0.5), (0.5, 0.5), (-0.5, 0.5)]], ), 2.5, 14, ) # the default is no fill and stroke to layer 1 vsk.square(0, 0, 4) vsk.circle(2, 8, 4) vsk.geometry(p) vsk.translate(7, 0) # add some fill to layer 2 vsk.fill(2) vsk.penWidth("1mm", 2) vsk.square(0, 0, 4) vsk.circle(2, 8, 4) vsk.geometry(p) vsk.translate(7, 0) # with thick stroke vsk.fill(2) vsk.penWidth("1mm", 2) vsk.strokeWeight(4) vsk.square(0, 0, 4) vsk.circle(2, 8, 4) vsk.geometry(p) vsk.translate(7, 0) # remove stroke and set fill to layer 3 with a thicker pen vsk.fill(3) vsk.penWidth("2mm", 3) vsk.noStroke() vsk.square(0, 0, 4) vsk.circle(2, 8, 4) vsk.geometry(p)