示例#1
0
    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)
示例#2
0
    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)
示例#4
0
    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)
示例#5
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)
示例#6
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)
示例#7
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)
示例#8
0
    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)