svg助你画turtle画~2

 上一篇文章:

svg助你画turtle画~ icon-default.png?t=N7T8https://blog.csdn.net/Elanx4/article/details/137694061

 我完成了代码自动输出的版本,这样svg就能快速转化为python,turtle代码了。

直接上代码: 

import turtle
import xml.etree.ElementTree as ET
print('自动输出svg转python_turtle脚本(©Elan_x)\n'
      'import turtle')

def draw_svg(svg_file):
    # 创建turtle画布
    screen = turtle.Screen()
    screen.setup(800, 600)
    screen.bgcolor("white")

    # 创建turtle对象
    t = turtle.Turtle()
    t.speed(0)  # 设置速度为最快,如果想要慢慢欣赏可以调节速度
    print('''
screen = turtle.Screen()
screen.setup(800, 600)
screen.bgcolor("white")

t = turtle.Turtle()
t.speed(0)
    ''')
    # 解析SVG文件
    tree = ET.parse(svg_file)
    root = tree.getroot()

    # 绘制SVG元素
    for element in root.iter():
        tag = element.tag.split('}')[-1]
        if tag == 'circle':
            draw_circle(t, element.attrib)
        elif tag == 'rect':
            draw_rect(t, element.attrib)
        elif tag == 'line':
            draw_line(t, element.attrib)
            # 可以继续添加其他元素的绘制函数

    # 隐藏turtle并显示绘制结果
    t.hideturtle()
    turtle.done()
    print('''
t.hideturtle()
turtle.done() 
    ''')

def draw_circle(t, attribs):
    cx = 0 - (float(attribs['cx']) - 400)
    cy = 0 - (float(attribs['cy']) - 300)
    r = float(attribs['r'])
    t.penup()
    t.goto(cx, cy)
    t.pendown()
    t.circle(r)
    print(f'''
t.penup()
t.goto({cx}, {cy})
t.pendown()
t.circle({r})
    ''')


def draw_rect(t, attribs):
    x = float(attribs['x']) - 400
    y = 0 - (float(attribs['y']) - 300)
    width = float(attribs['width'])
    height = float(attribs['height'])
    t.penup()
    t.goto(x, y)
    t.pendown()
    for _ in range(2):
        t.forward(width)
        t.right(90)
        t.forward(height)
        t.right(90)
    print(f'''
t.penup()
t.goto({x}, {y})
t.pendown()
for _ in range(2):
    t.forward({width})
    t.right(90)
    t.forward({height})
    t.right(90)
    ''')


def draw_line(t, attrib):
    x1 = float(attrib['x1']) - 400
    y1 = 0 - (float(attrib['y1']) - 300)
    x2 = float(attrib['x2']) - 400
    y2 = 0 - (float(attrib['y2']) - 300)
    t.penup()
    t.goto(x1, y1)
    t.pendown()
    t.goto(x2, y2)
    print(f'''
t.penup()
t.goto({x1}, {y1})
t.pendown()
t.goto({x2}, {y2})
    ''')

# 可以继续添加其他元素的绘制函数

if __name__ == "__main__":
    svg_file = r"svg_path"
    draw_svg(svg_file)
    print('输出完毕')

原理很简单,turtle绘画时每执行一部就把那一步 所执行的脚本print出来。

以上次“Elan”的svg图片为例,输出效果如下:

import turtle

screen = turtle.Screen()
screen.setup(800, 600)
screen.bgcolor("white")

t = turtle.Turtle()
t.speed(0)

t.penup()
t.goto(-264.0, 168.0)
t.pendown()
t.goto(-249.0, -82.0)

t.penup()
t.goto(-189.0, 167.0)
t.pendown()
t.goto(-261.0, 164.0)

t.penup()
t.goto(-178.0, 86.0)
t.pendown()
t.goto(-248.0, 61.0)

t.penup()
t.goto(-179.0, -38.0)
t.pendown()
t.goto(-245.0, -65.0)

t.penup()
t.goto(-134.0, 149.0)
t.pendown()
t.goto(-139.0, -42.0)

t.penup()
t.goto(-135.0, -60.0)
t.pendown()
t.goto(-78.0, -29.0)

t.penup()
t.goto(-20.0, 169.0)
t.pendown()
for _ in range(2):
    t.forward(39.0)
    t.right(90)
    t.forward(301.0)
    t.right(90)

t.penup()
t.goto(-23.0, 209.0)
t.pendown()
for _ in range(2):
    t.forward(142.0)
    t.right(90)
    t.forward(37.0)
    t.right(90)

t.penup()
t.goto(75.0, 155.0)
t.pendown()
for _ in range(2):
    t.forward(41.0)
    t.right(90)
    t.forward(291.0)
    t.right(90)

t.penup()
t.goto(28.0, 59.0)
t.pendown()
for _ in range(2):
    t.forward(36.0)
    t.right(90)
    t.forward(46.0)
    t.right(90)

t.hideturtle()
turtle.done()

完美运行。

  • 18
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elanx4

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值