房雪玲
(遼寧宏圖創展測繪勘察有限公司,遼寧 沈陽 110169)
CorelDRAW憑借對圖形文字強大的編輯功能、兼容數據格式多源化、內嵌宏編輯器及Type Library控件便于用戶的二次開發,尤其是符號化功能強大,可完成線要素的可控性漸變。河流幾何漸變表達是制圖難點重點之一,CorelDRAW X5中河流漸變的傳統方法分為3種:藝術筆觸法、分段設置法、編程法。考慮到CorelDRAW X5中傳統河流漸變方法存在的局限性,本文對單、雙線河流漸變模型進行了改進,同時基于等長模型、等差模型以及制圖模型,引用CorelDRAW 15.0 Type Library控件進行二次開發,實現了單雙線河流的智能漸變,為今后地圖編輯效率提升與圖面要素藝術性表達提供了參考。
傳統河流漸變繪制大致有三種方法:一是藝術筆觸法,即利用CorelDRAW X5中“藝術筆”工具,根據河流的流向繪制粗細漸變的河流;二是分段設置法,即利用現有的繪圖工具繪制河流弧段,然后對弧段作漸變處理;三是編程法,即從程序設計角度,利用臺階式平行線算法和加以改進的角平分線漸粗線算法實現河流漸變。
“藝術筆”工具中預置型曲線工具可以用來繪制粗細漸變的河流和水系。首先在繪線工具的展開欄中選擇“藝術筆”工具,根據河流的流向在形狀框中選取契形畫筆;然后在【最大寬度】數據框內輸入河流起始段的最大寬度,終端最小寬度則默認為0;最后確定河流的填充色和輪廓色,以區分單、雙線河流。藝術筆觸法方便快捷、線條平滑流暢,但可控性差、不方便編輯。分段設置法彌補了藝術筆觸法的缺憾,可對每個弧段都進行漸變處理,但是人工干預多、效率低下。
臺階式平行線算法以及加以改進的角平分線漸粗線算法是在程序設計中對漸變河流的特征點加以控制,通過改變節點左右兩邊線端點與定位線的間距,或使左右平行線的端點在定位線角平分線上變化實現河流的漸粗變化。雖然都實現了河流的可控漸變,但是前者在河流節點處很容易造成階梯變化,表現的河流不夠自然,后者避免了河流的階梯變化,但繪制的漸變符號比較平直,同樣不能逼真地表現河流形態。
考慮到CorelDRAW X5中傳統河流漸變方法存在的局限性,本文對單、雙線河流漸變模型進行了改進,并基于等長模型、等差模型和制圖模型,引用CorelDRAW 15.0 Type Library控件進行二次開發,實現了單、雙線河流的自動化漸變,兩種方法人工干預少、漸變符號平滑,能夠生動地表現河流的形態。
地圖的河流要素大多用漸粗線來表示,起始段與結束段的寬度確定以后,中間一段的變化包括3種情況,一是線段粗線的變化一致,即等長模型;二是線段均勻變化,即等差模型;三是起始部分的變化快,中間部分的變化較慢,而終端部分的變化再次較快,即制圖模型。
將河流起始段的寬度定義為D1,結束段的寬度定義為D2,河流總長度定義為S,所分段數定義為N,中間各段的寬度定義為di(i=2,3…,N-1)、長度定義為sj(j=1,2…,N),那么3種漸變模型如式(1)~式(5)所示:
(1)等長模型
(1)
(2)等差模型
(2)
等差模型將2S/3N定義為各段的基本長度,之后將剩余S/3分割成N(N-1)/2份,那么sj等于基本長度加上S/3等分后小段長度的(k-1)倍。
(3)制圖模型
①段數N是偶數
(3)
②段數N是奇數
(4)
制圖模型是將S/2N定義為各段基本長度,之后將剩余S/2等分為兩部分,每一部分均分割成((N-2)/2+…+2+1)小段,那么sj等于基本長度加上S/4等分后小段長度的(k-1)倍。
3種模型完成河流中間段的長度分配以后,利用式(5)的模型逐一將各小段賦以漸變寬度,假定d1=D1,dN=D2,那么:
(5)
基于3種幾何模型,本文在CorelDRAW X5 Micro Editor中創建了“單線河流的幾何漸變”窗體,如圖1所示。文本框用于控制河流的起始段、結束段寬度以及被打斷的段數,“改變流向”功能用于調整河流的流向,考慮到河流漸變的美觀性和CorelDRAW恢復操作次數的局限性,作者添加了“撤銷漸變”命令按鈕,用于將漸變后的河流恢復到初始樣式。以某條單線河的漸變為例,具體實現流程如下:

圖1 單線河流的幾何漸變窗體
(1)建立riverchange。首先基于河流漸變模型,根據預設的各項河流參數,代入式(1)~式(4)分別計算單線河流每一小段的長度,然后引用SubPaths的AddNodeAt方法,逐一在第j小段的結尾處添加節點(j=1,2,…,N-1),然后引用ShapeRange和NodeRange的BreakApart方法,將河流拆分成N段,最后根據CheckBox確定的河流方向代入式(5),計算單線河流第j小段輪廓線的寬度,并引用Shape.Outline的Width屬性,依次對每小段河流的輪廓線寬度進行賦值;
(2)引用ShapeRange的Group方法,首先將N小段河流群組,然后引用Shape.Outline的LineCaps屬性,將線條端頭形式調整為節點在內的圓頭形狀,使河流在拐彎處的漸變更加平滑;
(3)“恢復漸變”用于將漸變后的河流恢復到最初樣式,首先利用ActiveSelectionRange的UngroupEx方法將群組的N段河流解組,然后利用Node的GetDistanceFrom及Jointwith方法,依次將相鄰小段河流的相鄰節點進行連接,直至將N小段河流合并為一條單線河流,最后恢復單線河流的折線角度形式(選擇cdrOutlineMiterLineJoin)以及線條端頭形式(選擇cdrOutlineButtLineCaps)。
圖2對流向改變前后的單線河流漸變進行了成果展示。

圖2 單線河流漸變成果圖
基于3種幾何模型,本文在CorelDRAW X5 Micro Editor中創建了“雙線河流的幾何漸變”窗體,如圖3所示。文本框用于控制設置河流參數,即河流的起始段、結束段寬度以及分段數,“改變流向”功能用于調整河流的流向。以某條雙線河的漸變為例,具體步驟如下:

圖3 雙線河流的幾何漸變窗體
(1)建立riverchange。首先基于河流漸變模型,根據預設的各項河流參數,代入式(1)~式(4)分別計算雙線河流每一小段的長度,然后引用SubPaths的AddNodeAt方法,逐一在第j小段的結尾處添加節點(j=1,2,…,N-1),然后引用ShapeRange和NodeRange的BreakApart方法,將河流拆分成N段,最后根據CheckBox確定的河流方向代入式(5),計算單線河流第j小段輪廓線的寬度,計算雙線河流第j小段輪廓線的寬度,并引用Shape.Outline的Width屬性,依次對每小段河流的輪廓線寬度賦值;
(2)引用ShapeRange的Group方法,首先將N小段河流群組,然后引用Shape.Outline的LineCaps屬性,將線條的端頭形式調整為節點在內的圓頭形狀,使河流在拐彎處的漸變更加平滑;
(3)首先引用Shape.Outline的ConvertToObject方法,將群組后的N小段河流依次由輪廓轉化為對象,然后調用Shape的Weld方法,將N小段河流焊接為單條的雙線河,最后可調用Shape的Outline和Fill屬性,調整雙線河的輪廓色與填充色。
雙線河流漸變成果如圖4所示。

圖4雙線河漸變成果圖
線條流暢、粗細變化均勻的河流漸變符號的繪制一直都是制圖人員研究的重要課題。圖形、文字及矢量線劃編輯功能強大的CorelDRAW軟件,在河流要素漸變中扮演著重要的角色。本文總結并分析了CorelDRAW X5進行河流漸變的方法及存在的缺陷,對單、雙線河流漸變模型進行了改進,同時基于等長模型、等差模型以及制圖模型,引用CorelDRAW 15.0 Type Library控件進行二次開發,實現了單雙線河流的智能漸變,可為今后地圖編輯效率提升與圖面要素藝術性表達提供了參考。