Left: | ||
Right: |
OLD | NEW |
---|---|
1 #include "MEM_guardedalloc.h" | 1 #include "MEM_guardedalloc.h" |
2 | 2 |
3 #include "DNA_meshdata_types.h" | 3 #include "DNA_meshdata_types.h" |
4 #include "DNA_mesh_types.h" | 4 #include "DNA_mesh_types.h" |
5 #include "DNA_object_types.h" | 5 #include "DNA_object_types.h" |
6 #include "DNA_scene_types.h" | 6 #include "DNA_scene_types.h" |
7 | 7 |
8 #include "BLI_utildefines.h" | 8 #include "BLI_utildefines.h" |
9 | 9 |
10 #include "BLI_math.h" | 10 #include "BLI_math.h" |
(...skipping 23 matching lines...) Expand all Loading... | |
34 {144.72f,105.144f,-89.443f}, | 34 {144.72f,105.144f,-89.443f}, |
35 {55.277f,-170.128f,89.443f}, | 35 {55.277f,-170.128f,89.443f}, |
36 {-144.72f,-105.144f,89.443f}, | 36 {-144.72f,-105.144f,89.443f}, |
37 {-144.72f,105.144f,89.443f}, | 37 {-144.72f,105.144f,89.443f}, |
38 {55.277f,170.128f,89.443f}, | 38 {55.277f,170.128f,89.443f}, |
39 {178.885f,0.0f,89.443f}, | 39 {178.885f,0.0f,89.443f}, |
40 {0.0f,0.0f,200.0f} | 40 {0.0f,0.0f,200.0f} |
41 }; | 41 }; |
42 | 42 |
43 static short icoface[20][3] = { | 43 static short icoface[20][3] = { |
44 » {1,0,2}, | 44 » {0,1,2}, |
45 {1,0,5}, | 45 {1,0,5}, |
46 » {2,0,3}, | 46 » {0,2,3}, |
47 » {3,0,4}, | 47 » {0,3,4}, |
48 » {4,0,5}, | 48 » {0,4,5}, |
49 {1,5,10}, | 49 {1,5,10}, |
50 {2,1,6}, | 50 {2,1,6}, |
51 {3,2,7}, | 51 {3,2,7}, |
52 {4,3,8}, | 52 {4,3,8}, |
53 {5,4,9}, | 53 {5,4,9}, |
54 » {10,1,6}, | 54 » {1,10,6}, |
55 » {6,2,7}, | 55 » {2,6,7}, |
56 » {7,3,8}, | 56 » {3,7,8}, |
57 » {8,4,9}, | 57 » {4,8,9}, |
58 » {9,5,10}, | 58 » {5,9,10}, |
59 {6,10,11}, | 59 {6,10,11}, |
60 {7,6,11}, | 60 {7,6,11}, |
61 {8,7,11}, | 61 {8,7,11}, |
62 {9,8,11}, | 62 {9,8,11}, |
63 {10,9,11} | 63 {10,9,11} |
64 }; | 64 }; |
65 | 65 |
66 // HACK: these can also be found in cmoview.tga.c, but are here so that they can be found by linker | 66 // HACK: these can also be found in cmoview.tga.c, but are here so that they can be found by linker |
67 // this hack is only used so that scons+mingw + split-sources hack works | 67 // this hack is only used so that scons+mingw + split-sources hack works |
68 // ------------------------------- start copied code | 68 // ------------------------------- start copied code |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
289 | 289 |
290 BMO_Get_Mat4(op, "mat", mat); | 290 BMO_Get_Mat4(op, "mat", mat); |
291 | 291 |
292 phid= 2.0f*(float)M_PI/tot; | 292 phid= 2.0f*(float)M_PI/tot; |
293 phi= .25f*(float)M_PI; | 293 phi= .25f*(float)M_PI; |
294 | 294 |
295 /* one segment first */ | 295 /* one segment first */ |
296 phi= 0;· | 296 phi= 0;· |
297 phid/=2; | 297 phid/=2; |
298 for(a=0; a<=tot; a++) { | 298 for(a=0; a<=tot; a++) { |
299 » » vec[0]= dia*sinf(phi); | 299 » » /* Going in this direction, then edge extruding, makes normals f ace outward */ |
300 » » vec[0]= -dia*sinf(phi); | |
Ender79
2011/09/03 12:55:53
Since it seems essentially random which direction
| |
300 vec[1]= 0.0; | 301 vec[1]= 0.0; |
301 vec[2]= dia*cosf(phi); | 302 vec[2]= dia*cosf(phi); |
302 eve= BM_Make_Vert(bm, vec, NULL); | 303 eve= BM_Make_Vert(bm, vec, NULL); |
303 BMO_SetFlag(bm, eve, VERT_MARK); | 304 BMO_SetFlag(bm, eve, VERT_MARK); |
304 | 305 |
305 if(a==0) v1= eve; | 306 if(a==0) v1= eve; |
306 else { | 307 else { |
307 e = BM_Make_Edge(bm, preveve, eve, NULL, 0); | 308 e = BM_Make_Edge(bm, preveve, eve, NULL, 0); |
308 BMO_SetFlag(bm, e, EDGE_ORIG); | 309 BMO_SetFlag(bm, e, EDGE_ORIG); |
309 } | 310 } |
310 | 311 |
311 phi+= phid; | 312 phi+= phid; |
312 preveve = eve; | 313 preveve = eve; |
313 } | 314 } |
314 | 315 |
315 » /* extrude and rotate */ | 316 » /* extrude and rotate; negative phi to make normals face outward */ |
316 » phi= M_PI/seg; | 317 » phi= -M_PI/seg; |
317 q[0]= cos(phi); | 318 q[0]= cos(phi); |
318 q[3]= sin(phi); | 319 q[3]= sin(phi); |
319 q[1]=q[2]= 0; | 320 q[1]=q[2]= 0; |
320 quat_to_mat3(cmat, q); | 321 quat_to_mat3(cmat, q); |
321 | 322 |
322 for(a=0; a<seg; a++) { | 323 for(a=0; a<seg; a++) { |
323 if (a) { | 324 if (a) { |
324 BMO_InitOpf(bm, &bmop, "extrude_edge_only edges=%s", &pr evop, "geomout"); | 325 BMO_InitOpf(bm, &bmop, "extrude_edge_only edges=%s", &pr evop, "geomout"); |
325 BMO_Exec_Op(bm, &bmop); | 326 BMO_Exec_Op(bm, &bmop); |
326 BMO_Finish_Op(bm, &prevop); | 327 BMO_Finish_Op(bm, &prevop); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
462 | 463 |
463 if (cap_ends) { | 464 if (cap_ends) { |
464 vec[0] = vec[1] = 0.0f; | 465 vec[0] = vec[1] = 0.0f; |
465 vec[2] = 0.0; | 466 vec[2] = 0.0; |
466 mul_m4_v3(mat, vec); | 467 mul_m4_v3(mat, vec); |
467 ················ | 468 ················ |
468 cent1 = BM_Make_Vert(bm, vec, NULL); | 469 cent1 = BM_Make_Vert(bm, vec, NULL); |
469 } | 470 } |
470 | 471 |
471 for (a=0; a<segs; a++, phi+=phid) { | 472 for (a=0; a<segs; a++, phi+=phid) { |
472 » » vec[0]= dia*sinf(phi); | 473 » » /* Going this way ends up with normal(s) upward */ |
474 » » vec[0]= -dia*sinf(phi); | |
473 vec[1]= dia*cosf(phi); | 475 vec[1]= dia*cosf(phi); |
474 vec[2]= 0.0f; | 476 vec[2]= 0.0f; |
475 mul_m4_v3(mat, vec); | 477 mul_m4_v3(mat, vec); |
476 v1 = BM_Make_Vert(bm, vec, NULL); | 478 v1 = BM_Make_Vert(bm, vec, NULL); |
477 | 479 |
478 BMO_SetFlag(bm, v1, VERT_MARK); | 480 BMO_SetFlag(bm, v1, VERT_MARK); |
479 ················ | 481 ················ |
480 if (lastv1) | 482 if (lastv1) |
481 BM_Make_Edge(bm, v1, lastv1, NULL, 0); | 483 BM_Make_Edge(bm, v1, lastv1, NULL, 0); |
482 ················ | 484 ················ |
(...skipping 11 matching lines...) Expand all Loading... | |
494 } | 496 } |
495 | 497 |
496 if (!a) | 498 if (!a) |
497 return; | 499 return; |
498 | 500 |
499 BM_Make_Edge(bm, lastv1, firstv1, NULL, 0); | 501 BM_Make_Edge(bm, lastv1, firstv1, NULL, 0); |
500 | 502 |
501 if (cap_ends) { | 503 if (cap_ends) { |
502 BMFace *f; | 504 BMFace *f; |
503 ················ | 505 ················ |
504 » » f = BM_Make_QuadTri(bm, cent1, firstv1, v1, NULL, NULL, 0); | 506 » » f = BM_Make_QuadTri(bm, cent1, v1, firstv1, NULL, NULL, 0); |
Ender79
2011/09/03 12:55:53
All these quadtri swaps look right for sure. The i
| |
505 BMO_SetFlag(bm, f, FACE_NEW); | 507 BMO_SetFlag(bm, f, FACE_NEW); |
506 } | 508 } |
507 ········ | 509 ········ |
508 if (!cap_tris) { | 510 if (!cap_tris) { |
509 BMO_CallOpf(bm, "dissolvefaces faces=%ff", FACE_NEW); | 511 BMO_CallOpf(bm, "dissolvefaces faces=%ff", FACE_NEW); |
510 } | 512 } |
511 ········ | 513 ········ |
512 BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT); | 514 BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT); |
513 } | 515 } |
514 | 516 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
564 | 566 |
565 BMO_SetFlag(bm, v1, VERT_MARK); | 567 BMO_SetFlag(bm, v1, VERT_MARK); |
566 BMO_SetFlag(bm, v2, VERT_MARK); | 568 BMO_SetFlag(bm, v2, VERT_MARK); |
567 | 569 |
568 if (a) { | 570 if (a) { |
569 if (cap_ends) { | 571 if (cap_ends) { |
570 BMFace *f; | 572 BMFace *f; |
571 ································ | 573 ································ |
572 f = BM_Make_QuadTri(bm, cent1, lastv1, v1, NULL, NULL, 0); | 574 f = BM_Make_QuadTri(bm, cent1, lastv1, v1, NULL, NULL, 0); |
573 BMO_SetFlag(bm, f, FACE_NEW); | 575 BMO_SetFlag(bm, f, FACE_NEW); |
574 » » » » f = BM_Make_QuadTri(bm, v2, lastv2, cent2, NULL, NULL, 0); | 576 » » » » f = BM_Make_QuadTri(bm, cent2, v2, lastv2, NULL, NULL, 0); |
575 BMO_SetFlag(bm, f, FACE_NEW); | 577 BMO_SetFlag(bm, f, FACE_NEW); |
576 } | 578 } |
577 BM_Make_QuadTri(bm, lastv1, lastv2, v2, v1, NULL, 0); | 579 BM_Make_QuadTri(bm, lastv1, lastv2, v2, v1, NULL, 0); |
578 } else { | 580 } else { |
579 firstv1 = v1; | 581 firstv1 = v1; |
580 firstv2 = v2; | 582 firstv2 = v2; |
581 } | 583 } |
582 | 584 |
583 lastv1 = v1; | 585 lastv1 = v1; |
584 lastv2 = v2; | 586 lastv2 = v2; |
585 } | 587 } |
586 | 588 |
587 if (!a) | 589 if (!a) |
588 return; | 590 return; |
589 | 591 |
590 if (cap_ends) { | 592 if (cap_ends) { |
591 BMFace *f; | 593 BMFace *f; |
592 ················ | 594 ················ |
593 » » f = BM_Make_QuadTri(bm, cent1, firstv1, v1, NULL, NULL, 0); | 595 » » f = BM_Make_QuadTri(bm, cent1, v1, firstv1, NULL, NULL, 0); |
594 BMO_SetFlag(bm, f, FACE_NEW); | 596 BMO_SetFlag(bm, f, FACE_NEW); |
595 » » f = BM_Make_QuadTri(bm, v2, firstv2, cent2, NULL, NULL, 0); | 597 » » f = BM_Make_QuadTri(bm, cent2, firstv2, v2, NULL, NULL, 0); |
596 BMO_SetFlag(bm, f, FACE_NEW); | 598 BMO_SetFlag(bm, f, FACE_NEW); |
597 } | 599 } |
598 ········ | 600 ········ |
599 if (!cap_tris) { | 601 if (!cap_tris) { |
600 BMO_CallOpf(bm, "dissolvefaces faces=%ff", FACE_NEW); | 602 BMO_CallOpf(bm, "dissolvefaces faces=%ff", FACE_NEW); |
601 } | 603 } |
602 ········ | 604 ········ |
603 » BM_Make_QuadTri(bm, firstv1, firstv2, v2, v1, NULL, 0); | 605 » BM_Make_QuadTri(bm, v1, v2, firstv2, firstv1, NULL, 0); |
604 | 606 |
605 BMO_CallOpf(bm, "removedoubles verts=%fv dist=%f", VERT_MARK, 0.000001); | 607 BMO_CallOpf(bm, "removedoubles verts=%fv dist=%f", VERT_MARK, 0.000001); |
606 BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT); | 608 BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT); |
607 } | 609 } |
608 | 610 |
609 void bmesh_create_cube_exec(BMesh *bm, BMOperator *op) | 611 void bmesh_create_cube_exec(BMesh *bm, BMOperator *op) |
610 { | 612 { |
611 BMVert *v1, *v2, *v3, *v4, *v5, *v6, *v7, *v8; | 613 BMVert *v1, *v2, *v3, *v4, *v5, *v6, *v7, *v8; |
612 float vec[3], mat[4][4], off = BMO_Get_Float(op, "size") / 2.0f; | 614 float vec[3], mat[4][4], off = BMO_Get_Float(op, "size") / 2.0f; |
613 | 615 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
676 BM_Make_QuadTri(bm, v6, v7, v3, v2, NULL, 0); | 678 BM_Make_QuadTri(bm, v6, v7, v3, v2, NULL, 0); |
677 BM_Make_QuadTri(bm, v7, v8, v4, v3, NULL, 0); | 679 BM_Make_QuadTri(bm, v7, v8, v4, v3, NULL, 0); |
678 BM_Make_QuadTri(bm, v8, v5, v1, v4, NULL, 0); | 680 BM_Make_QuadTri(bm, v8, v5, v1, v4, NULL, 0); |
679 ········ | 681 ········ |
680 /*top/bottom*/ | 682 /*top/bottom*/ |
681 BM_Make_QuadTri(bm, v1, v2, v3, v4, NULL, 0); | 683 BM_Make_QuadTri(bm, v1, v2, v3, v4, NULL, 0); |
682 BM_Make_QuadTri(bm, v8, v7, v6, v5, NULL, 0); | 684 BM_Make_QuadTri(bm, v8, v7, v6, v5, NULL, 0); |
683 | 685 |
684 BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT); | 686 BMO_Flag_To_Slot(bm, op, "vertout", VERT_MARK, BM_VERT); |
685 } | 687 } |
OLD | NEW |