美文网首页
[Skill]记录第一次让virtuoso卡死

[Skill]记录第一次让virtuoso卡死

作者: YEUNGCHIE | 来源:发表于2020-03-08 19:20 被阅读0次

    卡死了,甚至还没法正常退出,只能去kill掉。。。

    周末写了一个小功能,想让两段接近的垂直path能够自己自动snap,并且希望这个功能能够循环调用。这样当我有一堆path需要操作的时候,就不需要每次snap都要按一下按键了。

    • 最开始我是这样写的:
    procedure(AutoSnapLoop()    ;绑定给一个快捷键,让它循环调用下面的AutoSnap()。
        prog(()
            while(t
                AutoSnap()
            )
        )
    )
    procedure(AutoSnap()
        prog((/*省略一堆变量*/)
            ep = enterPoint()   ;能够让这个循环终止的关键点就是这里。
            ;省略一堆代码。
        )
    )
    

    这么用不会让软件卡死,但按下esc试图退出编辑状态的时候会让ep的值为空,因此后续的程序会报出error,总之不是一个正常的操作。

    • 因此我又这么写:
    procedure(AutoSnapLoop()    ;绑定给一个快捷键,让它循环调用下面的AutoSnap()。
        prog(()
            while(t
                AutoSnap()
            )
        )
    )
    procedure(AutoSnap()
        prog((/*省略一堆变量*/)
            unless(ep = enterPoint()    ;当按下esc的时候enterPoint()会返回nil,因此程序得以正常的return出去。
                return("esc")
            )
            ;省略一堆代码。
        )
    )
    

    就是这一步让virtuoso卡死了,因为上面的AutoSnapLoop死循环了,因为AutoSnapLoop中while的条件始终是t,它就不会停止。必须让它发生一些事情return出去。

    • 因此最终修改为:
    procedure(AutoSnapLoop()    ;绑定给一个快捷键,让它循环调用下面的AutoSnap()。
        prog(()
            while(t
                if(AutoSnap() == "esc" then
                    return(nil)
                )
            )
        )
    )
    procedure(AutoSnap()
        prog((/*省略一堆变量*/)
            unless(ep = enterPoint()    ;当按下esc的时候enterPoint()会返回nil,因此程序得以正常的return出去。
                return("esc")
            )
            ;省略一堆代码。
        )
    )
    

    相关文章

      网友评论

          本文标题:[Skill]记录第一次让virtuoso卡死

          本文链接:https://www.haomeiwen.com/subject/qarjdhtx.html