13 #include "msdevstudio/MSconfig.h"
31 using namespace hippodraw;
78 namespace dp = hippodraw::DataPoint3DTuple;
89 double high = range.
high();
90 double low = range.
low();
96 bt -> transformZ ( high );
97 bt -> transformZ ( low );
99 Range newrange ( low, high );
101 const Rect & user_rect = view -> getUserRect ();
103 const Rect & raw_rect = view -> getRawRect();
105 bool isLinear = bt -> isLinearInXY ();
106 bool surpress_zero = low == 0.0;
108 unsigned int size = ntuple -> rows ();
115 bool isPeriodic = bt -> isPeriodic();
125 beta = pbt -> xOffset ();
126 gamma = pbt -> yOffset ();
127 max_x = pbt -> limitX().high();
133 for (
unsigned int i = 0; i <
size; i++ ) {
134 const vector < double > & row = ntuple -> getRow ( i );
136 double value = row [
dp::Z ];
137 if ( surpress_zero && value == 0.0 )
continue;
139 double half_xwidth = row [
dp::XERR ];
140 double half_ywidth = row [
dp::YERR ];
142 double x = row [
dp::X ];
143 double y = row [
dp::Y ];
151 rotate ( x, y, 0.0, beta, gamma, (max_x==180) );
155 double x1 = x - half_xwidth;
156 double y1 = y - half_ywidth;
157 double x2 = x + half_xwidth;
158 double y2 = y + half_ywidth;
175 if ( isLinear ==
false ) {
176 bt -> transform ( xtl, ytl );
177 bt -> transform ( xbl, ybl );
178 bt -> transform ( xtr, ytr );
179 bt -> transform ( xbr, ybr );
184 if ( isLinear ==
false ) {
185 std::vector <double> xx;
190 std::vector <double> yy;
196 view -> drawPolygon ( xx, yy, black, black );
198 const int gray = 256;
199 view -> drawSquare ( x1, y1, x2, y2, gray, gray, gray );
205 bt -> transformZ ( value );
209 if ( value > user_rect.
getZ() ) {
222 if ( isLinear ==
false ) {
224 std::vector <double> xx;
229 std::vector <double> yy;
235 view -> drawPolygon ( xx, yy, color,
m_box_edge?black:color );
242 view -> drawSquare ( xtl, ytl, xbr, ybr,
247 std::vector<double> x;
254 std::vector<double> y;
281 double alpha,
double beta,
double gamma,
bool negative )
283 if ( !negative ) lat-=180.0;
286 lat = M_PI * lat / 180.0;
287 lon = M_PI * lon / 180.0;
288 alpha = M_PI * alpha / 180.0;
289 beta = M_PI * beta / 180.0;
290 gamma = M_PI * gamma / 180.0;
294 double x = cos( lat ) * cos( lon );
295 double y = sin( lat ) * cos( lon );
296 double z = sin( lon );
300 double ry = y * cos( alpha ) + z * sin( alpha );
301 double rz = - y * sin( alpha ) + z * cos( alpha );
303 x = rx; y = ry; z = rz;
306 rx = x * cos( beta ) - z * sin( beta );
308 rz = x * sin( beta ) + z * cos( beta );
310 x = rx; y = ry; z = rz;
313 rx = x * cos( gamma ) + y * sin( gamma );
314 ry = - x * sin( gamma ) + y * cos( gamma );
317 x = rx; y = ry; z = rz;
320 lon = ( 180.0 / M_PI ) * asin( z );
321 lat = ( 180.0 / M_PI ) * atan2( y, x );
323 if ( !negative ) lat+=180.0;