2010-06-10 25 views
0

我有一個類網格,它在繪圖區域生成一個像網格一樣的圖紙。然後我有5個不同形狀的課程可以繪製;線,多邊形,橢圓,曲線,弧如果在不同的課程中更改了某些內容,您將如何更新100多個變量?

現在,這5個類使用一個網格的實例,因爲網格有一個分辨率和一個比例尺。內網我有:

public function set resolution(x:Number):void { 
    _gap = (modBy10(x)/10); 
    _scale = (modBy10(x)/(this.resolution * _scale)); 

    draw(); 
} 

public function get resolution():Number { 
    return (_gap * 10); 
} 

public function set scale(x:Number):void { 
    _scale = (this.resolution/x); 
} 

public function get scale():Number { 
    return _scale; 
} 

/**/ 

public function scaleLength(x:Number):Number { 
    return (x * this.scale); 
} 

public function scaleLengthDown(x:Number):Number { 
    return (x/this.scale); 
} 

public function scaleArea(x:Number):Number { 
    return (x/Math.pow(this.scale, 2)); 
} 

我只是失去了對電網時改變如何更新我的5個繪圖類的每個實例的解決方案。例如,Polygon由Line,Line(length,angle)的多個實例組成,其中「length」位於in,ft,cm或m中。如果用戶希望將比例從每100px分辨率的10英尺更改爲每80px20英尺的比例。是否有比重新繪製多邊形內每條線更簡單的方法?

回答

1

我不會有所有其他對象依賴於電網的規模。

相反,我會有一個名爲ScaledDrawingSurface的容器,它包含所有形狀對象和網格對象。

該容器將會有一個可以改變的規模優惠。

你就必須對付的規模屬性的變化兩個選項:

  1. 有由ScaledDrawingSurface更改比例時分派的事件。所有的形狀和網格會監聽這個事件並相應地更新自己。如果您這樣做,您將需要創建一個包含新比例屬性的自定義ScaleChangedEvent。

  2. ScaledDrawingSurface是否已遍歷所有子級適當地設置其比例。如果你這樣做,你會想要一個具有SetScale方法的IScalable接口,這些方法可以實現形狀和網格。

在這兩種情況下,您都可以使用事件派發或迭代處理來製作負責更新其子對象的組合對象(例如多邊形)。

這種方法的一個不錯的好處是它會很容易有多個覆蓋的網格(如方格紙)更新到表面的比例尺 - 您只需要一個Grid類的屬性來設置間距每個網格相對於全球尺度(以及可能的顏色和厚度屬性)

相關問題