(20200401)
Memory problem is sure, and easily solve it and hit the rate of it.
I changed the below:
1. If this_calc is still static,
2. If Screen->C is still static,
3. Program doesn't free any other vPoint on the vScreen::calculation_up_UV ();
4. Use (vPoint *) in the calculation steps.
-----
Compilations:
1:
2:
3:
4:
5:
----
---
(20200401)
We consider, remove "put_memories( vPoint* p);".
---
(20200410)
vPoints Calculations:
All functions return not as (vPoint) as (vPoint*):
vPoint* vIntersection::Intersect ( vTriangle tri, vPoint eye, vPoint ray ) { vCalculation *cal = nullptr; cal = new vCalculation (); log_msg_003("eye= "); eye.print(); log_msg_003("ray= "); ray.print(); vPoint* n = tri.getNormal (); double d = -n->x*tri.p1.x - n->y*tri.p1.y - n->z * tri.p1.z; double depth = ( -d - n->x*eye.x - n->y*eye.y - n->z*eye.z ) / ( n->x*ray.x + n->y*ray.y + n->z*ray.z ); vPoint scale_ray = cal->scale( ray, depth); vPoint* intersection = cal->add( eye, scale_ray); log_msg_003("depth=%f\r\n", depth); delete( cal ); return intersection; }
----
(20200411)
All we changed is return vPoint* not vPoint:
Hard work and we found double line again: (clipboard-20200410-001.png)
Memory-Allocation was printed well but Program Stopped suddenly.
https://github.com/WaitrudWeber/source_zip/blob/master/analyzer_20200410-001.zip .\vCalculation.cpp Sat Apr 11 01:31:51 2020 1 :#include2 :#include 3 :#include 4 :#include // ADD: 20200125 5 : 6 :#include "array_counter.h" // ADD: 20200125 7 :#include "sender.h" // ADD: 20200125 8 :#include "Print.h" // ADD: 20200125 9 : 10 :#include "vPoint.h" 11 :#include "vLine.h" 12 : 13 :#include "vCalculation.h" 14 : 15 : 16 :int dummy_vPoint_max = 0; 17 :int dummy_vPoint_index = 0; 18 :vPoint** dummy_vPoint = nullptr; 19 :vPoint* dummy_p = nullptr; 20 :vPoint* dummy_pp = nullptr; 21 :int once_memorized = 0; 22 : 23 :void put_memories( vPoint* dummy_vPoint ); 24 :vPoint* memorizevPoint( float a, float b, float c ); 25 :void print_point_memories (); 26 :void put_points( vPoint* p ); 27 :void garbage_memories () ; 28 :void free_point ( vPoint* p ) ; 29 :void free_point_001 ( vPoint* p ) ; 30 : 31 :// 32 :// 33 :// 34 :// 35 :// 36 :void free_point ( vPoint* p ) { 37 : printf("free_point starts. |%p| dummy_vPoint_index|%d|\r\n", p, dummy_vPoint_index); 38 : 39 : dummy_vPoint_index--; 40 : for( int i=dummy_vPoint_index; i>=0; i-- ) { 41 : if ( dummy_vPoint[i] == p ) { 42 : // flip 43 : vPoint* w_p = dummy_vPoint[dummy_vPoint_index]; 44 : dummy_vPoint[i] = dummy_vPoint[dummy_vPoint_index]; 45 : dummy_vPoint[dummy_vPoint_index] = w_p; 46 : } 47 : } 48 : 49 : printf("free_point ends. |%p| dummy_vPoint_index{%d}\r\n", p, dummy_vPoint_index); 50 : // exit(-1); 51 :} 52 : 53 :// 54 :// 55 :// 56 :// 57 :// 58 :void free_point_001 ( vPoint* p ) { 59 : printf("point |%p|\r\n", p); 60 : delete( p ); 61 : printf("delete |%p|\r\n", p); 62 : // debug 20200213 63 : //if ( p == nullptr ) exit(-1); 64 : //exit(-1); 65 : vPoint *pp = new vPoint(); 66 : printf("point |%p|\r\n", pp); 67 : delete(pp); 68 : printf("point |%p|\r\n", pp); 69 : // exit(-1); 70 : 71 : if ( once_memorized ) delete(dummy_pp); 72 : 73 : if ( dummy_pp == nullptr && once_memorized ) { 74 : printf("dummy_pp=%p\r\n", dummy_pp); 75 : exit(-1); 76 : } 77 : 78 : dummy_pp = new vPoint(); 79 : once_memorized = 1; 80 :} 81 : 82 :// 83 :// int dummy_vPoint_max = 0; 84 :// int dummy_vPoint_index = 0; 85 :// vPoint** dummy_vPoint = nullptr; 86 :// vPoint* dummy_p = nullptr; 87 :// 88 :void put_points( vPoint* p ) { 89 : 90 : if ( dummy_vPoint_index >= dummy_vPoint_max ) { 91 : if ( dummy_vPoint_index == 0 ) dummy_vPoint_max = 8; // initialization 92 : dummy_vPoint_index *= 2; 93 : dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max ); 94 : printf("dummy_vPoint_max = %d \r\n", dummy_vPoint_max ); 95 : } 96 : 97 : dummy_vPoint[ dummy_vPoint_index ] = (vPoint*)p; 98 : dummy_vPoint_index++; 99 :} 100 : 101 :// 102 :float vCalculation::dot ( vPoint p1, vPoint p2) { 103 : float dot; 104 : 105 : this->dot( p1.x,p1.y,p1.z, p2.x,p2.y,p2.z, &dot ); 106 : 107 : return dot; 108 :} 109 : 110 : 111 :// 112 :// 113 :// 114 :// 115 :// 116 :void vCalculation::dot ( float x1, float y1, float z1, float x2, float y2, float z2, float* dot ) { 117 : 118 : *dot = x1*x2 + y1*y2 + z1*z2; 119 :} 120 : 121 :// 122 :// 123 :// 124 :// 125 :// 126 :vPoint* vCalculation::add ( vPoint* p1, vPoint* p2) { 127 : printf("vCalculation::add starts\r\n"); 128 : vPoint* p3 = memorizevPoint( 0.0f, 0.0f, 0.0f); 129 : add( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) ); 130 : 131 : // comment out at 20191217 132 : // put_memories( p3 ); 133 : 134 : printf("vCalculation::add returns |%p| \r\n", p3); 135 : return p3; 136 :} 137 : 138 :// 139 :// 140 :// 141 :// 142 :// 143 :void vCalculation::add ( vPoint* p1, vPoint* p2, vPoint* p3) { 144 : add( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) ); 145 :} 146 : 147 : 148 :// 149 :// 150 :// 151 :// 152 :// 153 :void vCalculation::cross ( vPoint* p1, vPoint* p2, vPoint* p3) { 154 : cross( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) ); 155 :} 156 : 157 :// 158 :// 159 :// 160 :// 161 :// 162 :vPoint* vCalculation::cross ( vPoint p1, vPoint p2) { 163 : 164 : vPoint* p3 = memorizevPoint( 0.0f, 0.0f, 0.0f ); 165 : 166 : cross( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(p3->x), &(p3->y), &(p3->z) ); 167 : 168 : return p3; 169 :} 170 : 171 :// 172 :// 173 :// 174 :vPoint* vCalculation::cross ( vPoint* p1, vPoint* p2) { 175 : 176 : vPoint* p3 = memorizevPoint( 0.0f, 0.0f, 0.0f ); 177 : 178 : cross( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &(p3->x), &(p3->y), &(p3->z) ); 179 : 180 : return p3; 181 :} 182 : 183 :// 0, 0, 1 x 1, 0, 0 = 0, -1, 0 -> -z1*x2 184 :// 1, 0, 0 x 0, 0, 1 = 0, 1, 0 -> x1*z2 185 : 186 :// 0, 1, 0 x 1, 0, 0 = 0, 0, 1 187 :// 1, 0, 0 x 0, 1, 0 = 0, 0, -1 188 :// 189 :void vCalculation::cross ( float x1, float y1, float z1, float x2, float y2, float z2, float* x3, float* y3, float* z3) { 190 : 191 : *x3 = z1*y2 - y1*z2; 192 : *y3 = x1*z2 - z1*x2; 193 : *z3 = y1*x2 - x1*y2; 194 : 195 :} 196 : 197 :// 198 :// 199 :// 200 :// 201 :vPoint* vCalculation::subtract ( vPoint* p1, vPoint* p2) { 202 : printf("vPoint* vCalculation::subtract starts p1|%p| p2|%p|\r\n", p1, p2); 203 : 204 : vPoint* result = nullptr; 205 : result = memorizevPoint( 0.0f, 0.0f, 0.0f); 206 : subtract( p1->x, p1->y, p1->z, p2->x, p2->y, p2->z, &result->x, &result->y, &result->z ); 207 : 208 :// commented out 20200410 209 :// put_memories ( (vPoint*)result ); 210 : 211 : printf("vPoint* vCalculation::subtract ends and returns |%P|\r\n", result); 212 : return result; 213 :} 214 : 215 :// 216 :// 217 :// 218 :// 219 :// 220 :void vCalculation::Print_Point_Memories () { 221 : 222 : print_point_memories (); 223 :} 224 : 225 :// Qualfied: we could use %p on printf. 226 :// 227 :// 228 :// 229 :// 230 :void print_point_memories () { 231 : 232 : vPoint* p = nullptr; 233 : 234 : for( int i=0; i<dummy_vPoint_index; i++ ) { 235 : p = dummy_vPoint[ i ]; 236 : printf ("i: %3d p: %p\r\n", i, p ); 237 : } 238 : 239 :} 240 : 241 : 242 :// Recreated: 20200218 243 :// 244 :// 245 :// 246 :// 247 :vPoint* memorizevPoint( float a, float b, float c ) { 248 : printf("memorizevPoint starts: %f %f %f dummy_vPoint_index %d dummy_vPoint_max %d\r\n", a, b, c, dummy_vPoint_index, dummy_vPoint_max); 249 : 250 : if ( dummy_vPoint_index < dummy_vPoint_max ) { 251 : if ( dummy_vPoint[dummy_vPoint_index] != nullptr ) { 252 : dummy_vPoint_index++; 253 : if ( dummy_vPoint_index >= dummy_vPoint_max - 1 ) { 254 : dummy_vPoint_max = dummy_vPoint_max * 2; 255 : dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max ); 256 : } 257 : printf("aReuse: %d/%d dummy_vPoint=%p\r\n", dummy_vPoint_index, dummy_vPoint_max, dummy_vPoint[dummy_vPoint_index - 1]); 258 : //exit(-1); 259 : return dummy_vPoint[dummy_vPoint_index - 1]; 260 : } 261 : } 262 : 263 : // Mallocation: 264 : if ( dummy_vPoint_index == 0 ) { 265 : dummy_vPoint_max = 8; 266 : dummy_vPoint = (vPoint**) malloc ( sizeof(vPoint*) * dummy_vPoint_max ); 267 : } 268 : 269 : // Rallocation: 270 : if ( dummy_vPoint_index >= dummy_vPoint_max - 1 ) { 271 : dummy_vPoint_max = dummy_vPoint_max * 2; 272 : dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max ); 273 : } 274 : 275 : 276 : if ( dummy_vPoint[dummy_vPoint_index] == nullptr ) { 277 : dummy_vPoint[dummy_vPoint_index] = new vPoint ( a, b, c ); 278 : } 279 : dummy_vPoint_index++; 280 : 281 : printf("memorizevPoint returns: %p: dummy_vPoint_index %d dummy_vPoint_max %d\r\n", dummy_vPoint[dummy_vPoint_index - 1], dummy_vPoint_index, dummy_vPoint_max ); 282 : return dummy_vPoint[dummy_vPoint_index - 1]; 283 :} 284 : 285 :// 286 :// 287 :// 288 :// 289 :void put_memories ( vPoint* result ) { 290 : 291 : printf("Do not use: put_memories\r\n"); 292 : exit(-1); 293 : 294 : 295 : if ( dummy_vPoint_index == 0 ) { 296 : dummy_vPoint_max = 8; 297 : dummy_vPoint = (vPoint**) malloc ( sizeof(vPoint*) * dummy_vPoint_max ); 298 : } 299 : 300 : if ( dummy_vPoint_index >= dummy_vPoint_max - 1 ) { 301 : dummy_vPoint_max = dummy_vPoint_max * 2; 302 : dummy_vPoint = (vPoint**) realloc ( dummy_vPoint, sizeof(vPoint*) * dummy_vPoint_max ); 303 : } 304 : 305 : dummy_vPoint[ dummy_vPoint_index ] = result; 306 : dummy_vPoint_index++; 307 :} 308 : 309 :// 310 :// 311 :// 312 :// 313 :// 314 :void garbage_memories () { 315 : for( int i=0; i<dummy_vPoint_index; i++ ) { 316 : log_msg_003("|%3d|%p|\r\n", i, dummy_vPoint[i] ); 317 : if ( dummy_vPoint[i] == nullptr ) { 318 : log_msg_003("we found freed memory.\r\n"); 319 : exit(-1); 320 : } 321 : } 322 : 323 : // 20200126 temporalily we quit. 324 : if ( dummy_vPoint_index > 0 ) { 325 : printf("dummy_vPoint_index=|%3d|\r\n", dummy_vPoint_index ); 326 : //exit(-1); 327 : } 328 :} 329 : 330 :// 331 :// 332 :// 333 :// 334 :vPoint* vCalculation::subtract ( vPoint p1, vPoint p2) { 335 : vPoint *result; 336 : printf("vPoint vCalculation::subtract:\r\n" ); 337 :// vPoint* a_result = nullptr; 338 :// result = (vPoint*) memorizevPoint( 0.0f, 0.0f, 0.0f); 339 :// subtract( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(result->x), &(result->y), &(result->z) ); 340 : 341 :// printf("vPoint vCalculation::subtract ends: \r\n" ); 342 :// return *result; 343 : 344 : result = memorizevPoint ( 0.0f, 0.0f, 0.0f ); 345 : subtract(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(result->x), &(result->y), &(result->z)); 346 :// return *(memorizevPoint( 0.0f, 0.0f, 0.0f)); 347 : 348 : printf("vPoint vCalculation::subtract ends: %p\r\n", result ); 349 : return result; 350 :} 351 : 352 :// 353 :// 354 :// 355 :// 356 :void vCalculation::subtract ( float x1, float y1, float z1, float x2, float y2, float z2, float* x3, float* y3, float* z3) { 357 : 358 : *x3 = x1 - x2; 359 : *y3 = y1 - y2; 360 : *z3 = z1 - z2; 361 : 362 :} 363 : 364 :// 365 :// 366 :// 367 :// 368 :// 369 :void vCalculation::add ( vPoint p1, vPoint p2, vPoint* p3 ) { 370 : printf("vPoint vCalculation::add: starts. |%p| |%p| |%p|\r\n", &p1, &p2, p3); 371 : 372 : add( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(p3->x), &(p3->y), &(p3->z) ); 373 : 374 : printf("vPoint vCalculation::add: sets |%p|.\r\n", p3); 375 :} 376 : 377 :// 378 :// 379 :// 380 :// 381 :// 382 :vPoint* vCalculation::add ( vPoint p1, vPoint p2) { 383 : printf("vPoint vCalculation::add: starts. |%p| |%p|\r\n", &p1, &p2); 384 : 385 : vPoint* result = memorizevPoint( 0.0f, 0.0f, 0.0f); 386 : 387 : add( p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, &(result->x), &(result->y), &(result->z) ); 388 : 389 : printf("vPoint vCalculation::add: returns |%p|.\r\n", result); 390 : return result; 391 :} 392 : 393 :// 394 :// 395 :// 396 :// 397 :// 398 :void vCalculation::add ( float x1, float y1, float z1, float x2, float y2, float z2, float* x3, float* y3, float* z3) { 399 : 400 : *x3 = x2 + x1; 401 : *y3 = y2 + y1; 402 : *z3 = z2 + z1; 403 : 404 :} 405 : 406 :// expand 407 :// scale 408 :// strech 409 :// enlarge 410 :// magnification 411 :vPoint* vCalculation::scalize ( vPoint* p1, float w_scale) { 412 : 413 :// vPoint* result = (vPoint*) malloc (sizeof(vPoint) * 1 ); 414 : vPoint* result = memorizevPoint( 0.0f, 0.0f, 0.0f); 415 : 416 : scale ( p1->x, p1->y, p1->z, w_scale, &(result->x), &(result->y), &(result->z) ); 417 : 418 : put_memories ( result ); 419 : 420 : return result; 421 :} 422 : 423 :// 424 :// 425 :// 426 :// 427 :// 428 :vPoint* vCalculation::scale ( vPoint* p1, float w_scale, vPoint* result ) { 429 : printf("vPoint* vCalculation::scale |%p| |%f| |%p|\r\n", p1, w_scale, result); 430 : 431 : scale ( p1->x, p1->y, p1->z, w_scale, &(result->x), &(result->y), &(result->z) ); 432 : 433 : put_memories ( result ); 434 : 435 : printf("vPoint* vCalculation::scale |%p|\r\n", result); 436 : return result; 437 :} 438 : 439 : 440 :// 441 :// 442 :// 443 :// 444 :// 445 :// 446 :void vCalculation::scale ( vPoint* p1, float w_scale ) { 447 : printf("vCalculation::scale starts.\r\n"); 448 : 449 : p1->x *= w_scale; 450 : p1->y *= w_scale; 451 : p1->z *= w_scale; 452 : 453 : printf("vCalculation::scale ends.\r\n"); 454 :} 455 : 456 :// 457 :// 458 :// 459 :// 460 :// 461 :vPoint* vCalculation::scale ( vPoint p1, float w_scale ) { 462 : printf("vCalculation::scale starts. |%p| %f\r\n", &p1, w_scale); 463 : 464 : vPoint* result = memorizevPoint( 0.0f, 0.0f, 0.0f ); 465 : 466 : 467 : scale ( p1.x, p1.y, p1.z, w_scale, &(result->x), &(result->y), &(result->z) ); 468 : 469 : printf("vCalculation::scale ends. return |%p|\r\n", &result); 470 : return result; 471 :} 472 : 473 :// 474 :// 475 :// 476 :// 477 :void vCalculation::scale ( float x1, float y1, float z1, float scale, float* x3, float* y3, float* z3) { 478 : 479 : *x3 = scale * x1; 480 : *y3 = scale * y1; 481 : *z3 = scale * z1; 482 : 483 :} 484 : 485 :// 486 :// 487 :// 488 :// 489 :// 490 :void vCalculation::normal ( vPoint* p1 ) { 491 : 492 : double scale = p1->x*p1->x + p1->y*p1->y + p1->z*p1->z; 493 : scale = sqrt( scale ); 494 : 495 : p1->x = (( double ) p1->x) / scale; 496 : p1->y = (( double ) p1->y) / scale; 497 : p1->z = (( double ) p1->z) / scale; 498 :} 499 : 500 :// 501 :// 502 :// 503 :// 504 :vPoint* vCalculation::normal ( vPoint p1 ) { 505 : 506 : vPoint* p2 = memorizevPoint( 0.0f, 0.0f, 0.0f ); 507 : // double scal = 0.0; 508 : // scal = normal( p1.x, p1.y, p1.z, &p2.x, &p2.y, &p2.z ); 509 : 510 : normal( p1.x, p1.y, p1.z, &(p2->x), &(p2->y), &(p2->z) ); 511 : 512 : return p2; 513 :} 514 : 515 :// 516 :// 517 :// 518 :// 519 :double vCalculation::normal ( float x1, float y1, float z1, float* x2, float* y2, float* z2 ) { 520 : 521 : double scale = x1*x1 + y1*y1 + z1*z1; 522 : scale = sqrt( scale ); 523 : 524 : double x3 = (( double ) x1) / scale; 525 : double y3 = (( double ) y1) / scale; 526 : double z3 = (( double ) z1) / scale; 527 : 528 : *x2 = x3; 529 : *y2 = y3; 530 : *z2 = z3; 531 : 532 : return scale; 533 :} 534 : 535 :// 536 :// 537 :// 538 :// 539 :double vCalculation::length ( vPoint lp ) { 540 : 541 : return length ( lp.x, lp.y, lp.z ); 542 :} 543 : 544 :// 545 :// 546 :// 547 :// 548 :double vCalculation::length ( vPoint* lp ) { 549 : 550 : return length ( lp->x, lp->y, lp->z ); 551 :} 552 : 553 :// 554 :// 555 :// 556 :// 557 :double vCalculation::length ( float x1, float y1, float z1) { 558 : 559 : double scale = x1*x1 + y1*y1 + z1*z1; 560 : scale = sqrt( scale ); 561 : 562 : return scale; 563 :} 564 : 565 :// 566 :// 567 :// 568 :// 569 :// 570 :vLine* vCalculation::put_line( vLine* be_set, vLine* l1 ) { 571 : be_set = l1; 572 : // the below error 573 : // l1->p1->print(); 574 : // the below error 575 : // be_set->p1->print(); 576 : 577 : return l1; 578 :} 579 : 580 :// 581 :// 582 :// copy all points and would liket to refer to points at 20190213 583 :// 584 :vLine** vCalculation::Lines_from_Mesh ( vPoint* points, int** numbering, int num_patches, int base_num_patches) { 585 : vLine** p_result = nullptr; 586 : vLine** result = nullptr; 587 : //20180214 588 : int c = num_patches; 589 : int d_number = 0; 590 : vPoint* end_to_start = nullptr; 591 : 592 : printf("num_patches %d base_num_patches %d\r\n", num_patches, base_num_patches); 593 : 594 : for( int i=0; i<c; i++ ) { 595 : int* num_p = *( numbering + i ); 596 : //20180214 597 :// int d = sizeof( num_p ) / sizeof( int* ); 598 : int d = base_num_patches; 599 : 600 : p_result = ( vLine** ) malloc ( sizeof(vLine**) * d ); 601 : d_number += d; 602 : result = ( vLine** ) realloc ( result, sizeof( vLine** ) * d_number ); 603 : 604 : for( int j=0; j<d; j++ ) { 605 : int number = *( num_p + j ); 606 : vLine* p_line = *( p_result + j ); 607 : put_point( p_line->p1, points + number ); 608 : 609 : if ( j == 0 ) { 610 : end_to_start = points + number; 611 : } else { 612 : put_point( p_line->p2, points + number - 1 ); 613 : } 614 : } 615 : 616 : vLine* last = *( p_result + d - 1 ); 617 : put_point( last->p2, end_to_start ); 618 : 619 : for( int j= d_number - d; j<d_number; j++ ) { 620 : put_line( *(result + j), *(p_result + j - d_number + d) ); 621 : } 622 : } 623 : 624 : Print_Lines ( result, d_number ); 625 : printf("end of Lines_from_Mesh d_number %d\r\n", d_number); 626 : 627 : // cast vPoint** -> vPoint* 628 : put_memories( (vPoint*) result ); 629 : 630 : return result; 631 :} 632 : 633 :// 634 :// 635 :// 636 :// 637 :// 638 :void vCalculation::Print_Lines ( vLine** array, int num ) { 639 : 640 : for ( int i=0; i<num; i++ ) { 641 : vLine* line = *( array + i ); 642 : line->print(); 643 : } 644 : 645 :} 646 : 647 :// 648 :// 649 :// 650 :// 651 :// 652 :void vCalculation::put_point( vPoint* lp1, vPoint* points_number ) { 653 : printf( "start of put_point\r\n" ); 654 : points_number->print(); 655 : lp1 = points_number; 656 : lp1->print(); 657 : printf( "end of put_point\r\n" ); 658 : // exit(-1); 659 :} 660 : 661 : ---- void wButtonController::drawButtons ( HDC hdc ): Starts AryButton 0 = 0 AryButton 1 = 0 AryButton 2 = 1 AryButton 3 = 0 AryButton 4 = 0 AryButton 5 = 0 AryButton 6 = 0 AryButton 7 = 0 AryButton 8 = 0 void wButtonController::drawButtons ( HDC hdc ): Ends wmpaint_display_threeD_proc_002: memorized_CurveLines=0 memorized_CurveLines=0 WM_MESSG 004: 15 *(p_evt->uMsg):1999084584 uMsg:15 p_evt->uMsg: 2685472 &uMsg: 2686020 WM_PAINT 005: 15 *(p_evt->uMsg):1999084584 uMsg: 15 WM_PAINT 006: 15 *(p_evt->uMsg):1999084584 uMsg: 15 WM_MESSG 000: hWnd 459572: uMsg 257: wParam 13: lParam -1071906815: canvas 4366736: btc 4366752: *(p_evt->uMsg) 257: WM_MESSG 003: 257 *(p_evt->uMsg):257 wButtonController::Process: 257 / 15<-WM_PAINT wParam 13 lParam -1071906815 this->event->uMsg:2686208 *(this->event->uMs g)=257 wButtonController::ProcessWmKeyup: Starts:initialize 2 003: vScreen::calculation_up_UV () starts. this->eye= p( 500.000000, 500.000000, -500.000000) lookat= p( 0.000000, 0.000000, 0.000000) vPoint vCalculation::subtract: memorizevPoint starts: 0.000000 0.000000 0.000000 dummy_vPoint_index 0 dummy_vPoint_max 0 memorizevPoint returns: 03A61230: dummy_vPoint_index 1 dummy_vPoint_max 8