2012-08-29 16 views
0

我目前正在處理一個3d bin包裝問題,我想將其結果表示爲圖像。代表3d對象asp.net c#使用圖形庫

我有如下

public class LoadedPackage 
{ 
    private PackingObject packingObject; 
    private int xloc, yloc, zloc; 
    private bool flipped = false; 
} 

public class PackingObject 
{ 
    private int ID, checkerMaster, height, width, depth, number; 
} 

我想用XLOC,yloc,zloc和尺寸繪製包1在時間來建立一個圖像存儲爲打包對象的列表結果。是否有某種圖像庫的方式來做到這一點,或者我將被迫使用openGL解決方案,這對我來說只是一個簡單的圖像似乎有點矯枉過正。

我想也許使用利用2D GDI等距方法LIB

回答

0

在我選擇的等距方法和加入的方法以使每個包裝從3D座標到等距於自身轉換結束。我希望以下代碼可以幫助其他類似困境的人!

等距立方體有6個點,所以我返回一個6點數組。實際上,我使用3個子方法來返回GDI庫中的3個等距多邊形,但爲了這個答案,我只會發布更一般的6點方法。

public PointF[] convertCoords() 
    { 
     float x; 
     float y; 
     PointF p; 
     PointF[] pointFs = new PointF[7]; 
     int x1 = 0; 
     int y1 = 0; 
     int z1 = 0; 

     double rads = Helpers.DegreeToRadian(30); 

     //point 0 in iso 
     x = ((float)Math.Cos(rads) * xloc) + ((float)Math.Cos(rads) * yloc); 
     y = ((float)Math.Sin(rads) * yloc) + zloc - ((float)Math.Sin(rads) * xloc); 
     y = (-y) + 250; 

     p = new PointF(x,y); 
     pointFs[0] = new PointF(p.X,p.Y); 
     //point 1 in iso 
     x1 = xloc + packingObject.Depth; 
     y1 = yloc; 
     z1 = zloc; 

     x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1); 
     y = ((float)Math.Sin(rads) * y1) + z1 - ((float)Math.Sin(rads) * x1); 
     y = (-y) + 250; 

     p = new PointF(x, y); 
     pointFs[1] = new PointF(p.X, p.Y); 
     //point 2 in iso 
     x1 = xloc + packingObject.Depth; 
     y1 = yloc; 
     z1 = zloc + packingObject.Height; 

     x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1); 
     y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1; 
     y = (-y) + 250; 

     p = new PointF(x, y); 
     pointFs[2] = new PointF(p.X, p.Y); 
     //point 3 in iso 
     x1 = xloc; 
     y1 = yloc; 
     z1 = zloc + packingObject.Height; 

     x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1); 
     y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1; 
     y = (-y) + 250; 

     p = new PointF(x, y); 
     pointFs[3] = new PointF(p.X, p.Y); 
     //point 4 in iso 
     x1 = xloc; 
     y1 = yloc + packingObject.Width; 
     z1 = zloc + packingObject.Height; 

     x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1); 
     y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1; 
     y = (-y) + 250; 

     p = new PointF(x, y); 
     pointFs[4] = new PointF(p.X, p.Y); 
     //point 5 in iso 
     x1 = xloc + packingObject.Depth; 
     y1 = yloc + packingObject.Width; 
     z1 = zloc + packingObject.Height; 

     x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1); 
     y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1; 
     y = (-y) + 250; 

     p = new PointF(x, y); 
     pointFs[5] = new PointF(p.X, p.Y); 
     //point 6 in iso 
     x1 = xloc + packingObject.Depth; 
     y1 = yloc + packingObject.Width; 
     z1 = zloc; 

     x = ((float)Math.Cos(rads) * x1) + ((float)Math.Cos(rads) * y1); 
     y = (-((float)Math.Sin(rads) * x1)) + ((float)Math.Sin(rads) * y1) + z1; 
     y = (-y) + 250; 

     p = new PointF(x, y); 
     pointFs[6] = new PointF(p.X, p.Y); 

     return pointFs; 
    }