主题:  从标准数据饼图初步看CD的另一种用法

离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#312004/3/15 11:53:33
一个饼图的数据如下:
X1,X2,X3......Xn
比例数据计算公式为:
0/(X1+X2+X3+......+Xn)*360
X1/(X1+X2+X3+......+Xn)*360
(X1+X2)/(X1+X2+X3+......+Xn)*360
(X1+X2+X3)/(X1+X2+X3+......+Xn)*360
.......
(X1+X2+X3+......+Xn)/(X1+X2+X3+......+Xn)*360
对于圆来说0度的位置和360度的位置是相等的。所以在这个公式不会存在误差问题。



离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#322004/3/15 12:25:03
to qin:
CD的Script可以绘制数学函数图形是肯定的。但这仅仅是一小部分。而且这一功能实现起来并不容易,因为数学函数在绘图的过程中要与贝塞尔曲线相挂勾,就无法避开复杂的贝塞尔曲线的计算公式。换句话说就是怎么把数学函数公式转换成贝塞尔曲线上节点句柄的值(我在以前的帖中曾经说过贝塞尔曲线的计算最基础就是节点数值的计算)。而这一点能够做到的人并不多。掌握这一技术的人理论上他也掌握了怎么将三维空间的形体的数据转成贝塞尔曲线上节点句柄的值,那么他完全有能力在CD中开发出与AI CS新增的3D滤镜一样的功能。

在这里我对“函数”说明一下。
Script中的函数不仅仅是数学意义上的函数。数学函数只是当中的一种。Script中的函数实际上是一组命令,包括逻辑判断、循环指令、运算公式......等等等等。一个完整、通用的Script是允许用户更改参数数值的,然后Script可以根据用户的数值做以判断,并最终算出用户想得到的结果。
再往下说我会谈到这一方面的内容,虽然我并不具备开发这么个完整、通用的Script(其实那就是一个插件了)的能力,但我可以尝试跟你说说它的工作原理。我手头上也有不少现成的例子,也可给你看看并尝试做以初步的分析。

5D中其实有不少VB高手,真希望他们也能关注这一内容。他们过来的话,我估计就只有聆听的份了(有什么说得不对的地方还请指正)。



OREZ

职务:普通成员
等级:8
金币:0.0
发贴:61
#332004/3/15 20:02:00
哇大开眼界!!!!!



SYT

职务:普通成员
等级:3
金币:6.0
发贴:1424
#342004/3/16 3:19:11
呵呵,已经知道这功能啦,只是想不到小刀兄会运用在这里,脑筋灵活啊!
我一般用来求某物件的黄金分割,把16K变8k,或拉出血位用到此功能,我管他叫自动计算功能。
我建议大家顺着此思路,再举一些实用性比较强的例子出来,互相启发(要不是看到小刀的帖子,我可能这辈子没想过这样做数据图) 赚翻啦!
PS:原来小刀已经来过广州,就应该CALL我啦,一起出来腐败一顿嘛! 下次要安排好时间啊



SYT

职务:普通成员
等级:3
金币:6.0
发贴:1424
#352004/3/16 3:26:39
我看过一片文章是写用VB开发一个插件,用于CD11中画矩形的,得出的矩形无论是怎么不按比例伸缩,矩形的圆角保持不变形,由于没有编程基础实在看不懂,也没有收藏起来,若有那位大大能发现此文,请转贴过来,好让大家讨论一下CD的高级应用。



花云

职务:普通成员
等级:1
金币:0.0
发贴:101

MINISUN

职务:普通成员
等级:2
金币:8.9
发贴:684
#372004/3/16 10:30:47
恩,很好的脚本,下次要定义圆角就很方便了!看来有必要学一下编程了!



离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#382004/3/16 15:53:41
呵呵,我原来想接着将我举的例子录制成Script然后分析其结构,既然已经有比这个例子更简单的实例,那就不妨拿来直接分析好了。

SYT:这样做数据图其实并不太好,因为工作量大。只有把这思路用Script方式弄出来,以后想要饼图只需要输入数据就能自动生成,那才是最好最省事的方法,所以我前面才说“这仅仅是开始”,之所以开始也花费这么多口舌,那是因为在Script的使用中,思路非常重要。



离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#392004/3/16 17:01:09

图片如下:



5D荣誉斑竹

职务:普通成员
等级:5
金币:22.0
发贴:2854
#402004/3/16 19:43:58
好好好,还以为写完了,原来精彩的在后面,继续继续!



离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#412004/3/17 14:48:25
在上面的例子中可以看到该脚本的关键处在于后半部分。这部分才是核心,实现条件判断,并根据值的不同执行不同命令。

该脚本中调用到的命令有:
.CreateRectangle .SetCornerRoundess .ApplyOutline
这三个命令就是CD内核执行绘图和修改的命令函数,分别功能为:建立方形、设置物体圆角值、应用外框线(从字面上都能读出来,命名相当直观)。由于在.CreateRectangle函数中的参数嵌有计算公式,而该公式中包含有能让用户设置数值的变量,因而就能绘制出用户指定数据的方形。

这个脚本是一个相当简单的例子,可以做为学习CD script的入门教程。
有关CD内核执行绘图和修改的命令函数,可以参阅CD自带的函数说明,该文件默认是C:\Program Files\Corel\Graphics9\Programs\Draw_scr.hlp,根据你安装路径找到对应目录即可找到。

我曾经在对SYT关于Script录制问题的帖子中说:“CD的Script功能强大之处不在录制,在于编写”。接着我来对这句话做以说明。



MINISUN

职务:普通成员
等级:2
金币:8.9
发贴:684
#422004/3/17 16:24:06
在平常应用中用的到吗?能否再举两个直观的例子啊(作为入门教程)!要贴近实际应用的!



离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#432004/3/17 17:59:40
如果不能用得到CD就没必要花这么大的工夫预留这个接口了,这会增加CD的开发难度——在编写每一功能的时候都要考虑让用户可以通过Script来直接调用它。完全不考虑这点要简单得多。

贴近实际应用的例子都不会简单。因为越方便的功能就需要越多的考虑,用Script写出来就会结构更复杂、调用的命令函数更多。这种例子不适宜当为入门教程。即便举出来也会让入门者摸不着头脑,甚至会吓退很多人。所以很多编程的教程都从“Hello world”教起,出个对话框说“Hello world”有什么实际用途?在实际的应用中我没见过有谁这么做过。但它是入门教程,它教你怎么控制一个对话框。——这是个学习方法的问题。在Script的使用中思维是很重要的,如果你不能做到分析、归类和推测的应用,就无法触类旁通,那么你就想不出来通过Script来组合CD的命令和物体能做些什么。

通过Script来组合CD的命令和物体能做些什么?——这是门槛较低的Scrip使用方式。高级的Scrip使用方式是自己编写自己的命令函数,例如我前面提到的3d滤镜,用户只需要输入数值就在后台调用自己定义的命令函数来计算并生成3D物体,然后将物体数据折算成矢量图形的节点数据,这一数据CD能支持,因而CD就能将之绘制在屏幕上。然而这种方法门槛很高,对于大多数人来说可望不可及。所以我对这种使用方法稍带而过,而把“通过Script来组合CD的命令和物体能做些什么”做为重点。
组合CD命令能做什么?——用户在使用CD 绘图时都在使用CD的命令。你如果不能总结出来平时绘图的过程(某些命令+某些命令=某种效果,例如AI的阴影滤镜,其实就是拷贝多一个物体+更改颜色+调换图层+稍微移位。而拷贝、更换颜色、换图层顺序、移位都是Script能调用的命令函数。依此类推。),那么谁都帮不了了。

如果确实想看实际例子的话,后面我会放一些上来,但我不会具体谈某个东西某一行是什么,下一行是什么。我只会在思路上做以阐述。思路是最重要的。



SYT

职务:普通成员
等级:3
金币:6.0
发贴:1424
#442004/3/18 4:36:38
matrixct在上个帖子中说
引用:
在平常应用中用的到吗?能否再举两个直观的例子啊(作为入门教程)!要贴近实际应用的!

此贴的性质上已经不是入门的教程,也不是教程,是讨论,只有书呆子才会喜欢教程的,中国的学校造就不少!
只有讨论交流才能有无穷无尽的思想创意。



离弦小刀

职务:普通成员
等级:3
金币:7.0
发贴:1413
#452004/3/18 12:30:02
matrixct:
我希望以上的话没打击到你。事实上,从实例来学习也是一种有效的学习方式之一。我刚开始学编程的时候抱的观念和你差不多。
然而编程和绘图不同。学绘图大可以看别人怎么画,把别人的步骤拿过来参考。编写Script的目的是能重复智能使用,所以你拿别人的过程是没有多大意义的,因为别人既然已经写成通用的Script了,那就意味着能反复使用啦,你再做一个和别人一样的,犯得着么?不如直接使用别人的代码省事。

我在这个帖里之所以一开始花很多篇幅来说怎么手动画一个标准数据饼图(关键在于算法),再接下来分析Script为何能够实现智能化计算(关键也在于算法),就是希望看帖的人能注重思路,培养起这个思路,学用Script就事半功倍了。