00001
00002 #ifndef __JBXL_CPP_WINDOW_H_
00003 #define __JBXL_CPP_WINDOW_H_
00004
00005
00006
00016 #include "Graph.h"
00017
00018
00019
00020
00021 namespace jbxl {
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00052 template <typename T> void wSetPixel(MSGraph<T> vp, double x, double y, int cc)
00053 {
00054 int i = (int)((x - vp.wZeroX)*vp.wRateX);
00055 int j = (int)((vp.wZeroY - y)*vp.wRateY);
00056
00057 if (i>=0 && i<vp.xs && j>=0 && j<vp.ys) vp.point(i, j) = (T)cc;
00058 }
00059
00060
00061
00073 template <typename T> void wSetPixel3D(MSGraph<T> vp, double x, double y, double z, int cc)
00074 {
00075 int i = (int)((vp.wZeroX - x)*vp.wRateX);
00076 int j = (int)((y - vp.wZeroY)*vp.wRateY);
00077 int k = (int)((vp.wZeroZ - z)*vp.wRateZ);
00078
00079 if (i>=0 && i<vp.xs && j>=0 && j<vp.ys && k>=0 && k<vp.zs) vp.point(i, j, k) = (T)cc;
00080 }
00081
00082
00083
00093 template <typename T> T wGetPixel(MSGraph<T> vp, double x, double y)
00094 {
00095 int i = (int)((x - vp.wZeroX)*vp.wRateX);
00096 int j = (int)((vp.wZeroY - y)*vp.wRateY);
00097
00098 if (i>=0 && i<vp.xs && j>=0 && j<vp.ys) return vp.point(i, j);
00099 else return vp.zero;
00100 }
00101
00102
00103
00114 template <typename T> T wGetPixel3D(MSGraph<T> vp, double x, double y, double z)
00115 {
00116 int i = (int)((vp.wZeroX - x)*vp.wRateX);
00117 int j = (int)((y - vp.wZeroY)*vp.wRateY);
00118 int k = (int)((vp.wZeroZ - z)*vp.wRateZ);
00119
00120 if (i>=0 && i<vp.xs && j>=0 && j<vp.ys && k>=0 && k<vp.zs) return vp.point(i, j, k);
00121 else return vp.zero;
00122 }
00123
00124
00125
00138 template <typename T> void wLine(MSGraph<T> vp, double x1, double y1, double x2, double y2, int cc)
00139 {
00140 int i1, j1, i2, j2;
00141
00142 i1 = (int)((x1 - vp.wZeroX)*vp.wRateX);
00143 i2 = (int)((x2 - vp.wZeroX)*vp.wRateX);
00144 j1 = (int)((vp.wZeroY - y1)*vp.wRateY);
00145 j2 = (int)((vp.wZeroY - y2)*vp.wRateY);
00146
00147 MSGraph_Line<T>(vp, i1, j1, i2, j2, cc);
00148 }
00149
00150
00151
00166 template <typename T> void wLine3D(MSGraph<T> vp, double x1, double y1, double z1, double x2, double y2, double z2, int cc)
00167 {
00168 int i1, j1, k1, i2, j2, k2;
00169
00170 i1 = (int)((vp.wZeroX - x1)*vp.wRateX);
00171 i2 = (int)((vp.wZeroX - x2)*vp.wRateX);
00172 j1 = (int)((y1 - vp.wZeroY)*vp.wRateY);
00173 j2 = (int)((y2 - vp.wZeroY)*vp.wRateY);
00174 k1 = (int)((vp.wZeroZ - z1)*vp.wRateZ);
00175 k2 = (int)((vp.wZeroZ - z2)*vp.wRateZ);
00176
00177 MSGraph_Line3D<T>(vp, i1, j1, k1, i2, j2, k2, cc);
00178 }
00179
00180
00181
00182 template <typename T> void wCircle3D(MSGraph<T> vp, Vector<double> ox, Vector<double> ex, double rr, int cc, int mode)
00183 {
00184 double rate = Max(vp.wRateX, vp.wRateY);
00185 rate = Max(rate, vp.wRateZ);
00186 int r = (int)(rr*rate);
00187
00188 ox.x = (vp.wZeroX - ox.x)*vp.wRateX;
00189 ox.y = (ox.y - vp.wZeroY)*vp.wRateY;
00190 ox.z = (vp.wZeroZ - ox.z)*vp.wRateZ;
00191
00192 ex.x = -ex.x*vp.wRateX;
00193 ex.y = ex.y*vp.wRateY;
00194 ex.z = -ex.z*vp.wRateZ;
00195
00196 MSGraph_Circle3D(vp, ox, ex, r, cc, mode);
00197 }
00198
00199
00200
00211 template <typename T> void wDraw(MSGraph<T>* vp, double x, double y, int cc)
00212 {
00213 wLine<T>(*vp, vp->wNowX, vp->wNowY, x, y, cc);
00214 vp->wMove(x, y);
00215 }
00216
00217
00218
00230 template <typename T> void wDraw3D(MSGraph<T>* vp, double x, double y, double z, int cc)
00231 {
00232 wLine3D<T>(*vp, vp->wNowX, vp->wNowY, vp->wNowZ, x, y, z, cc);
00233 vp->wMove(x, y, z);
00234 }
00235
00236
00237
00248 template <typename T> void wDraw_rel(MSGraph<T>* vp, double x, double y, int cc)
00249 {
00250 double x2 = vp->wNowX + x;
00251 double y2 = vp->wNowY + y;
00252
00253 wLine<T>(*vp, vp->wNowX, vp->wNowY, x2, y2, cc);
00254 vp->wMove(x2, y2);
00255 }
00256
00257
00258
00270 template <typename T> void wDraw_rel3D(MSGraph<T>* vp, double x, double y, double z, int cc)
00271 {
00272 double x2 = vp->wNowX + x;
00273 double y2 = vp->wNowY + y;
00274 double z2 = vp->wNowZ + z;
00275
00276 wLine3D<T>(*vp, vp->wNowX, vp->wNowY, vp->wNowZ, x2, y2, z2, cc);
00277 vp->wMove(x2, y2, z2);
00278 }
00279
00280
00281
00282 }
00283
00284
00285 #endif