header_v0.7.6

【共享插件020迷宫】

9天前发布

原创文章 / 平面 / 教程
阿摩那 原创,如需商业用途或转载请与阿摩那联系,谢谢配合。

自动生成超超超超超超超超超复杂的迷宫。

插件见附件,内嵌在文档Plugin-020-Labrynth.cdr中。


软件功能

基于一幅给定的图片……设计迷宫。提供了两个简单的参数可以定义迷宫的尺寸(格子数)和难度(疏密程度)。

插件加载方法

本插件内嵌在CorelDraw的.cdr文档中,不需要安装。打开.cdr文件,用户界面就会自动跳出来,就算没跳出来我们也有办法把它弄出来。

插件是在CorelDraw X3上使用VBA开发的。事实上,“创意之代码”发布的所有插件都是在X3开发的,因为旧版插件可以在新版CorelDraw使用,而反过来不行。基于X3以前的版本开发的插件拿到高级版本上使用会出很多错,估计是X3对VBA模块做了大量改动造成的。所以X3就成了最佳选择。

尽量避免在X4使用本插件,因为X4的VBA与其他版本兼容性比较差,易出错。我没有装X4,也懒得专门为X4准备一个特别版本。

 

打开文档“Plugin-020-Labrynth.cdr”,正常情况下,应该出现如下警告对话框(以X3为例):

 

                                               

0ea5598d73c4a801215603004c01.jpg

 

选“启用宏”,cdr文档打开,正常情况下,插件的用户界面应该跳出。

如果用户界面成功调出,可以忽略下面的内容直接跳到“功能说明”部分了。否则继续往下看。

 

如果没出现上述警告对话框而是直接把.cdr文档打开了,并且没有出现用户界面,那是因为安全设置太高,把宏屏蔽了(插件以宏的形式运行)。解决方法:工具>>Visual Basic>>安全性:

 

adc3598d73e200000021299ba66a.jpg

 

572b598d73f7a8012156031439be.jpg

 

安全级别选“中”,然后点确定。重新打开.cdr文档。

 

尽量不要从资源浏览器中直接把本.cdr文档拖到CorelDraw界面中打开,因为有可能会造成警告对话框被隐藏到界面背后无法点击,从而造成死机假象。出了这种情况,一般资源管理器也会处于假死状态。有个解决方式是,把CorelDraw切换到最前端,然后打开一个其他软件(比如Excel),点右上角最小化按钮将其最小化,多试几次,可以把警告对话框带到前面来。

 

插件在X7上运行的情况稍有不同。

在我的X7上,.cdr文档打开后没有跳出用户界面。这时可以通过两个步骤调出用户界面:

1)  工具>>宏>>宏管理器:

 

24d2598d740ea801215603bda767.jpg

 

宏管理器加载后出现在界面右侧的泊坞窗位置:

 

8e86598d742100000021294c5ba6.jpg

 

2)  在宏管理器中双击打开“VBAProject”条目,找到ThisDocument下面的Document_Open,双击,打开用户界面。

 

a2bf598d74300000002129595606.jpg

 

功能说明

插件界面一如既往的简单:

 

1327598d74410000002129f34f4d.jpg

 

考虑到国际化需求,从No.020号插件开始改为英文界面了。好在没有太难懂的单词。

除了左下角的开发者广告,界面上总共有两个功能按钮和两个参数框。

 

选中一幅图像(不一定是位图,矢量图也行),然后点击“Load Picture”按钮,图像被加载到界面上,显示在按钮下方的图片框里,显示为黑白位图。

 

ddde598d74530000002129602e4b.jpg

 

图像正确加载后,右下角的执行按钮“Go!”变为可用状态。

点击执行按钮“Go!”,CorelDraw会创建一个新页面,并在上面画一个迷宫给你。

 

aa4b598d7465a801215603cb6011.jpg

 

是不是超简单?

 

下面解释一下两个参数的用法:

Segments参数是指迷宫的尺寸,即横向格子数,默认值是30。这个数字是近似的,有时会不足数,如上面这个实际的格子数是27。

给你看一个Segments=150的迷宫:

 

1994598d747fa801215603a524f3.jpg

 

迷宫的“墙”厚可以通过设置线宽来修改,是CorelDraw的自带功能。

Continuity参数用于定义迷宫的难度,通过线的疏密程度实现,默认值为100,最大值为255。这个参数越小,迷宫中的“墙”的平均尺寸就越短,看起来就越琐碎。以下是Continuity=10和150的两个迷宫,明显可以看到前者短线较多。

 

ece4598d7496000000212923a744.jpg

 

55a8598d74a9a8012156031010dc.jpg

 

有时执行完一个任务后,用户界面会消失不见(不是你自己关掉的),这时可以点击任意一个主菜单,用户界面就会重新出现(奇葩)。

人要多无聊才会去设计迷宫玩

这个插件设计的迷宫没有设定入口和出口,随便指定一个入口和出口也不一定都能走得通。它只是画了一个看起来像迷宫的图案而已。

这个插件的原理其实就是图形学里最简单的像素填充算法:

先把图像划分成格子(根据Segments参数确定格子数),然后把色彩距离在一定范围内的格子划为一组,然后一个挨着一个格子遍历过去,每走过一个格子就画一条线段,直到无路可走(周围的格子要么已走过不能重复走,要么色彩距离超标不是同一组)。然后找一个没走过的新格子作为起点重新一格一格走,直到所有格子都走过,结束。

“色彩距离”可以由用户指定,就是Continuity参数了。这个参数设置得越小,色彩分组就越多,迷宫的“墙线”就越短。

为了看起来更像迷宫,算法上定了一些规则,如允许出现丁字形墙角,但不允许出现十字形墙角。

肯定会有人用这个插件做些更无聊的事,作者先开个头吧——

 





 

迷宫的设计思路可以归纳为几个固定的类型。我把这种迷宫称为“正交迷宫”,因为所有的墙都是横的或竖的,十分规整。迷宫的种类花样繁多,正交迷宫是最简单的一种。

预设通路的迷宫也很简单。以本插件的正交迷宫为例,打好格子后先把预设通路做出来,对通路所经过的格子做好标记,记录为“已走过”状态,这样在遍历画线时就不会经过这些做过标记的格子,通路就被预留出来了。

上述方法是一种基于“加法”的迷宫设计方法,即从空无一物的场景开始“筑墙”;也可以使用减法方式,即事先把所有能画的线都画满,然后“拆墙”,把通路拆出来,再随机拆掉一些线以制造混乱隐藏通路。

 

下图是尝试用画迷宫的思路制作青铜器饕餮图案背景中的“云雷纹”,程序的算法内核与刚介绍的迷宫插件略有不同:为了产生线的回旋效果做了一些小调整,并取消了迷宫中大量出现的丁字形墙角。当然,要生成云雷纹还有很多后续工作要做,比如云雷纹并不都是正交形状,基于自由曲线边界的云雷纹填充也有办法实现,不过思路上需要很大突破。

 



 

下图是正交云雷纹的一种装饰性应用。

 

 

这个标志也是使用迷宫插件做出来的。

 

e2dc598d75410000002129e7b0c9.jpg

 

这个标志里还使用了一些其他的技巧,如分区绘制、生成圆角,以及在迷宫的路径线上排布图形元素(树叶)等。这些小模块集中起来将会有一个更丰富的迷宫设计插件版本推出,不过要看我们的时间了。


Enjoy.


32

    文章信息

    意见反馈
    没有新消息

    提示文案

    提示文案

    提示失败
    提示成功