依比例
使打印出來的圖形按照圖面標記的比例放大後,地物或實體的長度與實際長度一致(在量測誤差範圍內),稱之為“依比例”。
如下圖所示:
列印後的圖紙量算長度(單位:釐米)及列印比例尺(右下角)
房屋邊長圖面實際長度(單位:米)
在傾斜模型上量取的邊長(單位:米)
透過以上三張圖的對比可以看出,列印後圖紙的長度和實際長度基本符合給定比例尺的縮放比例(考慮尺子的精度及人眼分辨的精度)。
計算比例尺
那麼,我們如何才能精確計算出需要列印到多大的比例尺呢?
1、首先要確定我們出圖的紙張大小,以A4紙為例,紙張大小為:210。00 x 297。00 (mm)。
2、如果列印需要製作一個圖框,那我們就需要按照A4紙張的大小製作一個列印圖框(後面章節會介紹如何製作圖框),我們假定出圖列印的時候預設比例尺為1:1000,那麼按照A4紙張的大小,我們的圖框大小應該為:寬:210*1000=210000mm=210m;高:297*1000=297000mm=297m。
3、為了確保圖紙列印後能以一個適中的大小佔滿紙張的區域,那麼我們就需要計算圖面的地物實體(比如“房屋、道路”等)放到圖紙上的縮放比例。我們剛才假定了,如果不縮放,直接將圖形放到圖框內列印到圖紙上的預設比例是:1:1000。如下圖:
按照1:1000的比例將圖形直接放到圖紙後的效果
4、為了保證圖面美觀,我們需要將列印後的圖形調整到圖紙填充相對飽滿的程度,現在有兩種方法可以使用
(1):放大圖形,以將圖面填充飽滿;
(2):縮小圖框,以將圖框大小適合圖形大小。
這個教程中,我們選擇方法(2),對圖框大小進行縮放。
5、計算縮放比例將是我們在縮放圖框之前需要進行的關鍵工作:
(1):先獲取到列印圖形的外包矩形,並獲取矩形的寬和高;
(2):分別計算scaleW=圖形寬/圖紙寬;scaleH=圖形高/圖紙高;
(3):取scaleW和scaleH兩個值中的大值作為圖紙縮放的比例;
(4):為了確保我們輸出的圖形比例尺分母為特定數字的整數倍(比如:50的整數倍,比例尺分別為“1:50,1:100,1:150,1:200……”)我們將比例尺引數與想要的數字相除之後向上取整(以確保所有圖形都能列印到圖紙空間,不至於超出圖紙);
(5):輸出計算後的比例尺。
程式實現
///
/// 獲取列印縮放比例尺
///
/// 泛型類
/// 左下角最小點
/// 右上角最大點
/// 紙張空間寬度
/// 紙張空間高度
/// 縮放倍數
/// 最大縮放比例尺
public static void GetScaleValue(T minpt, T maxpt,double paperW,double paperH,double ScalePar,double maxScale)
{
double L = 0, W = 0;
if (typeof(T) == typeof(Point3d))
{
Point3d minPoint = (Point3d)Convert。ChangeType(minpt, typeof(Point3d));
Point3d maxPoint = (Point3d)Convert。ChangeType(maxpt, typeof(Point3d));
L = maxPoint。Y - minPoint。Y;
W = maxPoint。X - minPoint。X;
}
else if (typeof(T) == typeof(double[]))
{
double[] minPoint = (double[])Convert。ChangeType(minpt, typeof(double[]));
double[] maxPoint = (double[])Convert。ChangeType(maxpt, typeof(double[]));
L = maxPoint[1] - minPoint[1];
W = maxPoint[0] - minPoint[0];
}
double hPar = L / paperH;
double wPar = W / paperW;
double max = maxScale/ 1000。0;
double sPar = ScalePar / 1000。0;
if(hPar
{
ScaleVal = max ;
BLCStr = $“1:”;
}
else
{
if (hPar > wPar)
{
ScaleVal=Math。Ceiling(hPar / sPar) * sPar;
BLCStr = $“1:”;
}
else
{
ScaleVal = Math。Ceiling(wPar / sPar) * sPar;
BLCStr = $“1:”;
}
}
}