Hi<div><br></div><div><div>You can not use the fileš
stdbool.hššin all compilers, for that reason in Blender using integers or other data type to store the Boolean.</div><div><br></div><div>The changes you made cause problems in the compilation.</div><div><br></div><div>Att</div>
<div>Alexander Pinzon Fernandez</div><div><br></div><br><div class="gmail_quote">2012/7/6 Alexander Mokhov <span dir="ltr"><<a href="mailto:alexander.mokhov@gmail.com" target="_blank">alexander.mokhov@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Revision: 48699<br>
š š š š š <a href="http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48699" target="_blank">http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48699</a><br>

Author: š redtriangle<br>
Date: š š 2012-07-07 00:26:50 +0000 (Sat, 07 Jul 2012)<br>
Log Message:<br>
-----------<br>
first version of bevel algorithm<br>
<br>
Modified Paths:<br>
--------------<br>
š š branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c<br>
<br>
Modified: branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c<br>
===================================================================<br>
--- branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c š2012-07-07 00:17:46 UTC (rev 48698)<br>
+++ branches/soc-2012-sushi/source/blender/bmesh/operators/bmo_bevel.c š2012-07-07 00:26:50 UTC (rev 48699)<br>
@@ -26,6 +26,8 @@<br>
<br>
š#include "MEM_guardedalloc.h"<br>
<br>
+//#include "BLI_heap.h"<br>
+#include "BLI_listbase.h"<br>
š#include "BLI_array.h"<br>
š#include "BLI_math.h"<br>
š#include "BLI_smallhash.h"<br>
@@ -35,7 +37,9 @@<br>
š#include "bmesh.h"<br>
<br>
š#include "intern/bmesh_operators_private.h" /* own include */<br>
+#include "intern/bmesh_private.h"<br>
<br>
+#include <stdbool.h><br>
š#define BEVEL_FLAG š š 1<br>
š#define BEVEL_DEL š š š2<br>
š#define FACE_NEW š š š 4<br>
@@ -45,6 +49,8 @@<br>
š#define FACE_SPAN š š š64<br>
š#define FACE_HOLE š š š128<br>
<br>
+#define EDGE_SELECTED 6<br>
+<br>
štypedef struct LoopTag {<br>
š š š š BMVert *newv;<br>
š} LoopTag;<br>
@@ -53,6 +59,29 @@<br>
š š š š BMVert *newv1, *newv2;<br>
š} EdgeTag;<br>
<br>
+// Item in the list of vertices<br>
+typedef struct VertexItem{<br>
+ š šstruct VertexItem *next, *prev;<br>
+ š šBMVert *v;<br>
+ š šbool onEdge; // štrue if new vertex located on edge; edge1 = edge, edge2 = NULL<br>
+ š // false, new vert located betwen edge1 and edge2<br>
+ š šBMEdge *edge1;<br>
+ š šBMEdge *edge2;<br>
+}VertexItem;<br>
+<br>
+// list of new vertices formed around v<br>
+typedef struct AdditionalVert{<br>
+ š šstruct AdditionalVert *next, *prev;<br>
+ š šBMVert *v;<br>
+ š šListBase vertices;<br>
+} AdditionalVert;<br>
+<br>
+<br>
+typedef struct BevelParams{<br>
+ š šListBase vertList;<br>
+ š šfloat offset;<br>
+} BevelParams;<br>
+<br>
šstatic void calc_corner_co(BMLoop *l, const float fac, float r_co[3],<br>
š š š š š š š š š š š š š š const short do_dist, const short do_even)<br>
š{<br>
@@ -178,8 +207,241 @@<br>
š š š š š š š š (etags[BM_elem_index_get((e))].newv2) š š š š š š š š š š š š š š š š \<br>
š š š š )<br>
<br>
+// build point on edge<br>
+// todo rename function<br>
+BMVert* bevel_calc_aditional_vert(BMesh *bm, BevelParams *bp, BMEdge* edge, BMVert* vert)<br>
+{<br>
+ š š// TODO ÄÏÂÁ×ÉÔØ ÐÒÏ×ÅÒËÕ ÎÁ ÔÏ ÞÔÏ ÜÄÖ ÓÏÄÅÒÖÉÔ ×ÅÒÛÉÎÕ<br>
+ š šfloat vect[3], normV[3];<br>
+<br>
+ š šBMVert *new_Vert = NULL;<br>
+<br>
+ š šsub_v3_v3v3(vect, BM_edge_other_vert(edge, vert)->co, vert->co);<br>
+ š šnormalize_v3_v3(normV, vect);<br>
+ š šmul_v3_fl(normV, bp->offset);<br>
+<br>
+ š šadd_v3_v3(normV, vert->co);<br>
+<br>
+ š šnew_Vert = BM_vert_create(bm, normV, NULL);<br>
+ š šreturn new_Vert;<br>
+}<br>
+<br>
+// build point between edges<br>
+BMVert* bevel_middle_vert(BMesh *bm, BevelParams *bp, BMEdge *edge_a, BMEdge *edge_b, BMVert *vert)<br>
+{<br>
+ š šfloat offset, v_a[3], v_b[3], v_c[3], norm_a[3], norm_b[3],norm_c[3], šangel;<br>
+ š šBMVert* new_vert = NULL;<br>
+ š šoffset = bp->offset;<br>
+ š š// calc vectors<br>
+ š š// TODO: äïâá÷éôø ðòï÷åòëõ îá ðáòáìåìøîïóôø<br>
+ š šsub_v3_v3v3(v_a, BM_edge_other_vert(edge_a, vert)->co, vert->co);<br>
+ š šsub_v3_v3v3(v_b, BM_edge_other_vert(edge_b, vert)->co, vert->co);<br>
+ š šnormalize_v3_v3(norm_a, v_a);<br>
+ š šnormalize_v3_v3(norm_b, v_b);<br>
+ š šadd_v3_v3v3(v_c, norm_a, norm_b);<br>
+ š šmul_v3_fl(v_c, 0.5);<br>
+ š šnormalize_v3_v3(norm_c, v_c);<br>
+<br>
+ š š// v_c ^ edge_a<br>
+ š š//cos = (v_c[0]*v_a[0] + v_c[1]*v_a[1] + v_c[2]*v_a[0]) / (len_v3(v_c)*len_v3(v_a));<br>
+ š šangel = angle_normalized_v3v3(norm_c, norm_a);<br>
+ š š//offset = offset / (sqrt(1-cos*cos));<br>
+ š šoffset = offset / sin(angel);<br>
+<br>
+ š šmul_v3_fl(norm_c, offset);<br>
+ š šadd_v3_v3(norm_c, vert->co);<br>
+ š šnew_vert = BM_vert_create(bm, norm_c, NULL);<br>
+ š šreturn new_vert;<br>
+}<br>
+<br>
+// additional construction arround the vertex<br>
+void bevel_aditional_construction_by_vert(BMesh *bm, BevelParams *bp, BMOperator *op, BMVert *v)<br>
+{<br>
+ š šBMOIter siter;<br>
+ š šBMIter iter;<br>
+ š šBMEdge *e, **edges = NULL;<br>
+ š šBLI_array_declare(edges);<br>
+<br>
+ š š// calc count input edges<br>
+ š šBMO_ITER (e, &siter, bm, op, "geom", BM_EDGE) {<br>
+ š š š šif ((e->v1 == v)|| (BM_edge_other_vert(e, e->v1) == v))<br>
+ š š š š{<br>
+ š š š š š šBMO_elem_flag_enable (bm, e, EDGE_SELECTED);<br>
+ š š š š š šBLI_array_append(edges, e);<br>
+ š š š š}<br>
+ š š}<br>
+<br>
+ š šif (BLI_array_count(edges) == 1)<br>
+ š š{<br>
+ š š// TODO ÒÁÚÒÁÂÏÔÁÔØ ÐÌÏÓËÉÊ ×ÁÒÉÎÁÔ<br>
+ š š š šAdditionalVert *av;<br>
+ š š š šav = (AdditionalVert*)MEM_callocN(sizeof(AdditionalVert), "AdditionalVert");<br>
+ š š š šav->v = v;<br>
+ š š š šav->vertices.first = av->vertices.last = NULL;<br>
+ š š š šBLI_addtail(&bp->vertList, av);<br>
+<br>
+ š š š šBM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH)<br>
+ š š š š{<br>
+ š š š š š šif (e!= edges[0])<br>
+ š š š š š š{<br>
+ š š š š š š š šif ((e->v1 == v)||(BM_edge_other_vert(e, e->v1) == v)){<br>
+ š š š š š š š š š šVertexItem *item;<br>
+ š š š š š š š š š šitem = (VertexItem*)MEM_callocN(sizeof(VertexItem), "VertexItem");<br>
+ š š š š š š š š š šitem->onEdge = true;<br>
+ š š š š š š š š š šitem->edge1 = e;<br>
+ š š š š š š š š š šitem->edge2 = NULL;<br>
+ š š š š š š š š š šitem->v = bevel_calc_aditional_vert(bm, bp, e, v);<br>
+ š š š š š š š š š šBLI_addtail(&av->vertices, item);<br>
+ š š š š š š š š š }<br>
+ š š š š š š}<br>
+ š š š š}<br>
+ š š}<br>
+<br>
+ š šif (BLI_array_count(edges) > 1)<br>
+ š š{<br>
+ š š š šBMEdge *cur_e, *prev_e;<br>
+ š š š šAdditionalVert *av;<br>
+ š š š šav = (AdditionalVert*)MEM_callocN(sizeof(AdditionalVert), "AdditionalVert");<br>
+ š š š šav->v = v;<br>
+ š š š šav->vertices.first = av->vertices.last = NULL;<br>
+ š š š šBLI_addtail(&bp->vertList, av);<br>
+ š š š še = edges[0];<br>
+ š š š šcur_e = e;<br>
+ š š š šdo {<br>
+ š š š š š šprev_e = cur_e;<br>
+ š š š š š šcur_e = bmesh_disk_edge_next(cur_e, v);<br>
+ š š š š š šif (!BMO_elem_flag_test(bm, cur_e, EDGE_SELECTED)){<br>
+ š š š š š š š šVertexItem *item;<br>
+ š š š š š š š šitem = (VertexItem*)MEM_callocN(sizeof(VertexItem), "VertexItem");<br>
+ š š š š š š š šitem->onEdge = true;<br>
+ š š š š š š š šitem->edge1 = cur_e;<br>
+ š š š š š š š šitem->edge2 = NULL;<br>
+ š š š š š š š šitem->v = bevel_calc_aditional_vert(bm, bp, cur_e, v);<br>
+ š š š š š š š šBLI_addtail(&av->vertices, item);<br>
+ š š š š š š}else {<br>
+ š š š š š š š šif ( BMO_elem_flag_test(bm, cur_e, EDGE_SELECTED) &&<br>
+ š š š š š š š š š š BMO_elem_flag_test(bm, prev_e, EDGE_SELECTED)){<br>
+ š š š š š š š š š šVertexItem *item;<br>
+ š š š š š š š š š šitem = (VertexItem*)MEM_callocN(sizeof(VertexItem), "VertexItem");<br>
+ š š š š š š š š š šitem->onEdge = false;<br>
+ š š š š š š š š š šitem->edge1 = cur_e;<br>
+ š š š š š š š š š šitem->edge2 = prev_e;<br>
+ š š š š š š š š š šitem->v = bevel_middle_vert(bm, bp, prev_e,cur_e, v);<br>
+ š š š š š š š š š šBLI_addtail(&av->vertices, item);<br>
+ š š š š š š š š}<br>
+ š š š š š š}<br>
+ š š š š} while (e!= cur_e);<br>
+ š š}<br>
+}<br>
+<br>
+// Build the polygons along the selected Edge<br>
+void bevel_build_polygon(BMesh *bm, BevelParams *bp, BMEdge *e){<br>
+ š šBMVert *vi[4]; // only for linear case with seg = 1<br>
+ š šBMFace *f1, *f2;<br>
+ š šAdditionalVert *item, *av1, *av2;<br>
+ š šVertexItem *vItem;<br>
+ š šint i = 0;<br>
+ š š// find pair<br>
+ š šfor (item = bp->vertList.first; item ; item = item->next){<br>
+ š š š šif (item->v == e->v1)<br>
+ š š š š š šav1 = item;<br>
+ š š š šif (item->v == BM_edge_other_vert(e, e->v1))<br>
+ š š š š š šav2 = item;<br>
+ š š}<br>
+<br>
+<br>
+ š šfor (vItem = av1->vertices.first; vItem; vItem = vItem->next){<br>
+ š š š šif (vItem->onEdge)<br>
+ š š š š{<br>
+ š š š š š šif (vItem->edge1 == bmesh_disk_edge_next(e, av1->v))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š š šif (vItem->edge1 == bmesh_disk_edge_prev(e, av1->v))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š}<br>
+ š š š šelse<br>
+ š š š š{<br>
+ š š š š š šif ((vItem->edge1 == bmesh_disk_edge_next(e, av1->v)) ||<br>
+ š š š š š š(vItem->edge2 == bmesh_disk_edge_next(e, av1->v)))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š š šif ((vItem->edge1 == bmesh_disk_edge_prev(e, av1->v)) ||<br>
+ š š š š š š(vItem->edge2 == bmesh_disk_edge_prev(e, av1->v)))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š}<br>
+ š š}<br>
+ š šfor (vItem = av2->vertices.first; vItem; vItem = vItem->next){<br>
+ š š š šif (vItem->onEdge)<br>
+ š š š š{<br>
+ š š š š š šif (vItem->edge1 == bmesh_disk_edge_next(e, av2->v))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š š šif (vItem->edge1 == bmesh_disk_edge_prev(e, av2->v))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š}<br>
+ š š š šelse<br>
+ š š š š{<br>
+ š š š š š šif ((vItem->edge1 == bmesh_disk_edge_next(e, av2->v)) ||<br>
+ š š š š š š(vItem->edge2 == bmesh_disk_edge_next(e, av2->v)))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š š šif ((vItem->edge1 == bmesh_disk_edge_prev(e, av2->v)) ||<br>
+ š š š š š š(vItem->edge2 == bmesh_disk_edge_prev(e, av2->v)))<br>
+ š š š š š š{<br>
+ š š š š š š š švi[i] = vItem->v;<br>
+ š š š š š š š ši++;<br>
+ š š š š š š}<br>
+ š š š š}<br>
+ š š}<br>
+ š šBM_face_create_quad_tri(bm, vi[0], vi[1], vi[3], vi[2], NULL, TRUE);<br>
+<br>
+<br>
+}<br>
+<br>
švoid bmo_bevel_exec(BMesh *bm, BMOperator *op)<br>
š{<br>
+ š šBMOIter siter;<br>
+ š šBMVert *v;<br>
+ š šBMEdge *e;<br>
+ š šBevelParams bp;<br>
+ š šAdditionalVert *item;<br>
+<br>
+ š šbp.offset = 0.1;<br>
+ š šbp.vertList.first = bp.vertList.last = NULL;<br>
+ š š// The analysis of the input vertices and vyrolnenine additional constructions<br>
+ š šBMO_ITER (v, &siter, bm, op, "geom", BM_VERT) {<br>
+ š š š šbevel_aditional_construction_by_vert(bm, &bp, op, v);<br>
+ š š}<br>
+<br>
+ š š// Build polgiony found at verteces<br>
+ š š// First construct the polygons along the edge<br>
+ š šBMO_ITER(e, &siter, bm, op, "geom", BM_EDGE){<br>
+ š š š šbevel_build_polygon(bm, &bp, e);<br>
+ š š}<br>
+<br>
+<br>
+}<br>
+<br>
+<br>
+void bmo_bevel_exec_old(BMesh *bm, BMOperator *op)<br>
+{<br>
š š š š BMOIter siter;<br>
š š š š BMIter iter;<br>
š š š š BMEdge *e;<br>
@@ -211,7 +473,7 @@<br>
š š š š š š š š BMO_elem_flag_enable(bm, e, BEVEL_FLAG | BEVEL_DEL);<br>
š š š š š š š š BMO_elem_flag_enable(bm, e->v1, BEVEL_FLAG | BEVEL_DEL);<br>
š š š š š š š š BMO_elem_flag_enable(bm, e->v2, BEVEL_FLAG | BEVEL_DEL);<br>
-<br>
+ š š š š// ÒÁÚÂÒÁÔØÓÑ Ó ÜÔÉÍ ÓÌÕÞÁÅÍ<br>
š š š š š š š š if (BM_edge_face_count(e) < 2) {<br>
š š š š š š š š š š š š BMO_elem_flag_disable(bm, e, BEVEL_DEL);<br>
š š š š š š š š š š š š BMO_elem_flag_disable(bm, e->v1, BEVEL_DEL);<br>
<br>
_______________________________________________<br>
Bf-blender-cvs mailing list<br>
<a href="mailto:Bf-blender-cvs@blender.org">Bf-blender-cvs@blender.org</a><br>
<a href="http://lists.blender.org/mailman/listinfo/bf-blender-cvs" target="_blank">http://lists.blender.org/mailman/listinfo/bf-blender-cvs</a><br>
</blockquote></div><br></div>