CD在以前的版本(版本6以前)中是帶有表格功能的,叫CorelChart,支持的格式遠(yuǎn)比現(xiàn)在的AI CS和FH MX要多,我記憶中共有十三種之多,只是不支持中文,真的需要中文只能先做好表格后再將問題替換掉。現(xiàn)在的CD沒有工具直接生成表格了,所以不少人覺得 CD沒有辦法精確生成表格比例圖了。然而,有一點(diǎn)是大家忽略的地方,CD是一個(gè)充分考慮端口開放的軟件(這一點(diǎn)其它軟件都很難做到),我們可以通過這個(gè)特性來做出自己的算法,以CD能接受的方式將數(shù)據(jù)傳遞過去。
我以下就以精確比例餅圖做為例子,對(duì)CD的另一種使用方法——Action Script做以最初步的窺探。
這個(gè)樣例的數(shù)據(jù)如下:
對(duì)于矢量軟件來說,一個(gè)矢量圖形必然有一段與之對(duì)應(yīng)的、唯一的描述,這些描述就是軟件執(zhí)行計(jì)算所用到的公式中必不可少的參數(shù)。在用戶使用矢量軟件的工具繪制或更改一個(gè)圖形的時(shí)候,其實(shí)就是在更改這些數(shù)。——如果用戶使用的矢量軟件提供可視化數(shù)值功能的話,在你繪圖或更改圖形的過程中你會(huì)看到這些參數(shù)的數(shù)值會(huì)根據(jù)你的光標(biāo)操作而改變,如:
在這一點(diǎn)上,使用什么矢量軟件并無差別。
需要有Excel一樣的輸入界面——這么個(gè)界面就是所謂的“人機(jī)對(duì)話”。之所以要有人機(jī)對(duì)話,因?yàn)槿瞬欢畽C(jī)器的語(yǔ)言,機(jī)器不懂人的語(yǔ)言。所以繪圖軟件就設(shè)立了很多可視性的界面。隱藏在“人機(jī)對(duì)話”后面的就是機(jī)器聽得懂的語(yǔ)言。
CD之所以說它端口開放,因?yàn)樗暮瘮?shù)是開放的,遵循VB的格式。也因?yàn)樗膮?shù)是開放的,是一個(gè)支持VB格式表達(dá)式的變量。換句話說,只要是VB支持的計(jì)算方式,CD就支持——這就包括了VB的系統(tǒng)函數(shù)、自定義函數(shù)、數(shù)組等等?! ?BR>
比較成熟的矢量軟件數(shù)值輸入框的數(shù)值都接受簡(jiǎn)單的運(yùn)算公式例如:
3+2、20/5........
FH和AI都支持。
但是CD的數(shù)值支持更多,你可以在CD的輸入框中輸入具有優(yōu)先運(yùn)算的表達(dá)式,CD就能按你的意思計(jì)算出正確的數(shù)值,如:
(50+20+10+5+2)/360*50
但你在FH和AI中,你做不到。CD甚至還直接支持sin、tag等系統(tǒng)定義的數(shù)學(xué)函數(shù)。感興趣的不妨一試。只是CD的數(shù)據(jù)輸入框太小,無法看完輸入的字符,得比較小心操作,以免誤留殘余字符導(dǎo)致計(jì)算出的值并非你想要的數(shù)值而已。
在前面我說到CD支持運(yùn)算公式例如——50/(50+20+10+5+2)*360。這個(gè)公式就是餅圖中計(jì)算數(shù)據(jù)比例的公式,計(jì)算出的值就是qin走在街頭15-20歲PLMM回頭率(為了滿足Qin的奢望,呵呵,把年齡段給放寬了),這是很簡(jiǎn)單的數(shù)學(xué)計(jì)算,就此帶過。
既然懂得計(jì)算公式了就可以開始繪圖了。
先將公式打好。Crtl+C拷貝。
在“扇形終點(diǎn)”中輸入“0”,在“扇形起點(diǎn)”輸入“50/”,然后Crtl+V,實(shí)際上“扇形起點(diǎn)”中的輸入值為“50/(50+20+10+5+2)*360”。然后你得到下面圖形:
第二個(gè)物體的終點(diǎn)為第一個(gè)物體的起點(diǎn),所以是“50/(50+20+10+5+2)*360”,起點(diǎn)是“(20+50)/(50+20+10+5+2)*360”,依此類推,就得到了所有的物體。
這是一個(gè)很笨的方法,每次都直接手動(dòng)告訴CD要算什么。但這只是開始。
我在這個(gè)例子中頻繁的使用計(jì)算公式,這個(gè)繪圖的過程是完全可以以Script的形式寫出來的,因?yàn)镃D9的Script是純文本格式的。
一個(gè)餅圖的數(shù)據(jù)如下:
X1,X2,X3......Xn
比例數(shù)據(jù)計(jì)算公式為:
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
對(duì)于圓來說0度的位置和360度的位置是相等的。所以在這個(gè)公式不會(huì)存在誤差問題。
在這里我對(duì)“函數(shù)”說明一下。
Script中的函數(shù)不僅僅是數(shù)學(xué)意義上的函數(shù)。數(shù)學(xué)函數(shù)只是當(dāng)中的一種。Script中的函數(shù)實(shí)際上是一組命令,包括邏輯判斷、循環(huán)指令、運(yùn)算公式......等等等等。一個(gè)完整、通用的Script是允許用戶更改參數(shù)數(shù)值的,然后Script可以根據(jù)用戶的數(shù)值做以判斷,并最終算出用戶想得到的結(jié)果。
在上面的例子中可以看到該腳本的關(guān)鍵處在于后半部分。這部分才是核心,實(shí)現(xiàn)條件判斷,并根據(jù)值的不同執(zhí)行不同命令。
該腳本中調(diào)用到的命令有:
.CreateRectangle .SetCornerRoundess .ApplyOutline
這三個(gè)命令就是CD內(nèi)核執(zhí)行繪圖和修改的命令函數(shù),分別功能為:建立方形、設(shè)置物體圓角值、應(yīng)用外框線(從字面上都能讀出來,命名相當(dāng)直觀)。由于在. CreateRectangle函數(shù)中的參數(shù)嵌有計(jì)算公式,而該公式中包含有能讓用戶設(shè)置數(shù)值的變量,因而就能繪制出用戶指定數(shù)據(jù)的方形。
這個(gè)腳本是一個(gè)相當(dāng)簡(jiǎn)單的例子,可以做為學(xué)習(xí)CD script的入門教程。
有關(guān)CD內(nèi)核執(zhí)行繪圖和修改的命令函數(shù),可以參閱CD自帶的函數(shù)說明,該文件默認(rèn)是C:\Program Files\Corel\Graphics9\Programs\Draw_scr.hlp,根據(jù)你安裝路徑找到對(duì)應(yīng)目錄即可找到。
CD的Script功能強(qiáng)大之處不在錄制,在于編寫。
如果不能用得到CD就沒必要花這么大的工夫預(yù)留這個(gè)接口了,這會(huì)增加CD的開發(fā)難度——在編寫每一功能的時(shí)候都要考慮讓用戶可以通過Script來直接調(diào)用它。完全不考慮這點(diǎn)要簡(jiǎn)單得多。
貼近實(shí)際應(yīng)用的例子都不會(huì)簡(jiǎn)單。因?yàn)樵椒奖愕墓δ芫托枰蕉嗟目紤],用Script寫出來就會(huì)結(jié)構(gòu)更復(fù)雜、調(diào)用的命令函數(shù)更多。這種例子不適宜當(dāng)為入門教程。即便舉出來也會(huì)讓入門者摸不著頭腦,甚至?xí)樛撕芏嗳恕K院芏嗑幊痰慕坛潭紡?#8220;Hello world”教起,出個(gè)對(duì)話框說“Hello world”有什么實(shí)際用途?在實(shí)際的應(yīng)用中我沒見過有誰(shuí)這么做過。但它是入門教程,它教你怎么控制一個(gè)對(duì)話框。——這是個(gè)學(xué)習(xí)方法的問題。在 Script的使用中思維是很重要的,如果你不能做到分析、歸類和推測(cè)的應(yīng)用,就無法觸類旁通,那么你就想不出來通過Script來組合CD的命令和物體能做些什么。
通過Script來組合CD的命令和物體能做些什么?——這是門檻較低的Scrip使用方式。高級(jí)的Scrip使用方式是自己編寫自己的命令函數(shù),例如我前面提到的3d濾鏡,用戶只需要輸入數(shù)值就在后臺(tái)調(diào)用自己定義的命令函數(shù)來計(jì)算并生成3D物體,然后將物體數(shù)據(jù)折算成矢量圖形的節(jié)點(diǎn)數(shù)據(jù),這一數(shù)據(jù)CD能支持,因而CD就能將之繪制在屏幕上。然而這種方法門檻很高,對(duì)于大多數(shù)人來說可望不可及。所以我對(duì)這種使用方法稍帶而過,而把“通過 Script來組合CD的命令和物體能做些什么”做為重點(diǎn)。
組合CD命令能做什么?——用戶在使用CD 繪圖時(shí)都在使用CD的命令。你如果不能總結(jié)出來平時(shí)繪圖的過程(某些命令+某些命令=某種效果,例如AI的陰影濾鏡,其實(shí)就是拷貝多一個(gè)物體+更改顏色+ 調(diào)換圖層+稍微移位。而拷貝、更換顏色、換圖層順序、移位都是Script能調(diào)用的命令函數(shù)。依此類推。),那么誰(shuí)都幫不了了。
共有 網(wǎng)友評(píng)論