Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(17)

Side by Side Diff: source/blender/bmesh/operators/primitiveops.c

Issue 4959056: fix weld vertices and primitive normal directions (Closed) Base URL: https://svn.blender.org/svnroot/bf-blender/branches/bmesh/blender/
Patch Set: Created 13 years, 7 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | source/blender/bmesh/operators/removedoubles.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | source/blender/bmesh/operators/removedoubles.c » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b