=bmesh=
[blender.git] / source / blender / bmesh / intern / bmesh_opdefines.c
index caa09811ad93c7544328ed31eef3564560c5e25f..c949d730d8c5640c68d50592a292a5d664d2d6bd 100644 (file)
@@ -224,6 +224,22 @@ BMOpDefine def_removedoubles = {
        0,
 };
 
+/*
+  Auto Merge
+
+  Finds groups of vertices closer then dist and merges them together,
+  using the weld verts bmop.  The merges must go from a vert not in
+  verts to one in verts.
+*/
+BMOpDefine def_automerge = {
+       "automerge",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "verts"}, //input verts
+        {BMOP_OPSLOT_FLT,         "dist"}, //minimum distance
+        {0, /*null-terminating sentinel*/}},
+       bmesh_automerge_exec,
+       0,
+};
+
 /*
   Collapse Connected
 
@@ -324,6 +340,27 @@ BMOpDefine def_makevert = {
        0,
 };
 
+/*
+  Join Triangles
+
+  Tries to intelligently join triangles according 
+  to various settings and stuff.
+
+  */
+BMOpDefine def_join_triangles= {
+       "join_triangles",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "faces"}, //input geometry.
+        {BMOP_OPSLOT_ELEMENT_BUF, "faceout"}, //joined faces
+        {BMOP_OPSLOT_INT, "compare_sharp"},
+        {BMOP_OPSLOT_INT, "compare_uvs"},
+        {BMOP_OPSLOT_INT, "compare_vcols"},
+        {BMOP_OPSLOT_INT, "compare_materials"},
+        {BMOP_OPSLOT_FLT, "limit"},
+        {0, /*null-terminating sentinel*/}},
+       bmesh_jointriangles_exec,
+       0,
+};
+
 /*
   Contextual Create
 
@@ -346,8 +383,12 @@ BMOpDefine def_contextual_create= {
 
 BMOpDefine def_edgenet_fill= {
        "edgenet_fill",
-       {{BMOP_OPSLOT_ELEMENT_BUF, "edges"},
-        {BMOP_OPSLOT_ELEMENT_BUF, "faceout"},
+       {{BMOP_OPSLOT_ELEMENT_BUF, "edges"}, /*input edges*/
+        {BMOP_OPSLOT_MAPPING,     "restrict"}, /*restricts edges to groups.  maps edges to integers*/
+        {BMOP_OPSLOT_INT,         "use_restrict"},
+        {BMOP_OPSLOT_ELEMENT_BUF, "excludefaces"}, /*list of faces to ignore for manifold checks*/
+        {BMOP_OPSLOT_MAPPING,     "faceout_groupmap"}, /*maps new faces to the group numbers they came from*/
+        {BMOP_OPSLOT_ELEMENT_BUF, "faceout"}, /*new faces*/
        {0, /*null-terminating sentinel*/}},
        bmesh_edgenet_fill_exec,
        0,
@@ -452,11 +493,12 @@ BMOpDefine def_object_load_bmesh = {
 /*
   BMesh to Mesh
 
-  Converts a bmesh to a Mesh
+  Converts a bmesh to a Mesh.  This is reserved for exiting editmode.
 */
 BMOpDefine def_bmesh_to_mesh = {
        "bmesh_to_mesh",
-       {{BMOP_OPSLOT_PNT, "meshptr"}, //pointer to a mesh structure to fill in
+       {{BMOP_OPSLOT_PNT, "mesh"}, //pointer to a mesh structure to fill in
+        {BMOP_OPSLOT_PNT, "object"}, //pointer to an object structure
         {BMOP_OPSLOT_INT, "notesselation"}, //don't calculate mfaces
         {0, /*null-terminating sentinel*/}},
        bmesh_to_mesh_exec,
@@ -466,11 +508,13 @@ BMOpDefine def_bmesh_to_mesh = {
 /*
   Mesh to BMesh
 
-  Load the contents of a mesh into the bmesh.
+  Load the contents of a mesh into the bmesh.  this bmop is private, it's
+  reserved exclusively for entering editmode.
 */
 BMOpDefine def_mesh_to_bmesh = {
        "mesh_to_bmesh",
        {{BMOP_OPSLOT_PNT, "mesh"}, //pointer to a Mesh structure
+        {BMOP_OPSLOT_PNT, "object"}, //pointer to an Object structure
         {0, /*null-terminating sentinel*/}},
        mesh_to_bmesh_exec,
        0
@@ -559,15 +603,6 @@ BMOpDefine def_extrudefaceregion = {
        0
 };
 
-BMOpDefine def_makefgonsop = {
-       "makefgon",
-       {{BMOP_OPSLOT_INT, "trifan"}, /*use triangle fans instead of 
-                                       real interpolation*/
-        {0} /*null-terminating sentinel*/},
-       bmesh_make_fgons_exec,
-       0
-};
-
 BMOpDefine def_dissolvevertsop = {
        "dissolveverts",
        {{BMOP_OPSLOT_ELEMENT_BUF, "verts"},
@@ -625,9 +660,10 @@ BMOpDefine def_subdop = {
        {BMOP_OPSLOT_MAPPING, "custompatterns"},
        {BMOP_OPSLOT_MAPPING, "edgepercents"},
        
-       /*these next two can have multiple types of elements in them.*/
+       /*these next three can have multiple types of elements in them.*/
        {BMOP_OPSLOT_ELEMENT_BUF, "outinner"},
        {BMOP_OPSLOT_ELEMENT_BUF, "outsplit"},
+       {BMOP_OPSLOT_ELEMENT_BUF, "geomout"}, /*contains all output geometry*/
 
        {BMOP_OPSLOT_INT, "quadcornertype"}, //quad corner type, see bmesh_operators.h
        {BMOP_OPSLOT_INT, "gridfill"}, //fill in fully-selected faces with a grid
@@ -639,22 +675,6 @@ BMOpDefine def_subdop = {
        0
 };
 
-BMOpDefine def_edit2bmesh = {
-       "editmesh_to_bmesh",
-       {{BMOP_OPSLOT_PNT, "em"}, {BMOP_OPSLOT_MAPPING, "map"},
-       {0} /*null-terminating sentinel*/},
-       edit2bmesh_exec,
-       0
-};
-
-BMOpDefine def_bmesh2edit = {
-       "bmesh_to_editmesh",
-       {{BMOP_OPSLOT_PNT, "emout"},
-       {0} /*null-terminating sentinel*/},
-       bmesh2edit_exec,
-       0
-};
-
 BMOpDefine def_delop = {
        "del",
        {{BMOP_OPSLOT_ELEMENT_BUF, "geom"}, {BMOP_OPSLOT_INT, "context"},
@@ -673,6 +693,7 @@ BMOpDefine def_dupeop = {
        {BMOP_OPSLOT_MAPPING, "facemap"},
        {BMOP_OPSLOT_MAPPING, "boundarymap"},
        {BMOP_OPSLOT_MAPPING, "isovertmap"},
+       {BMOP_OPSLOT_PNT, "dest"}, /*destination bmesh, if NULL will use current one*/
        {0} /*null-terminating sentinel*/},
        dupeop_exec,
        0
@@ -684,15 +705,16 @@ BMOpDefine def_splitop = {
        {BMOP_OPSLOT_ELEMENT_BUF, "geomout"},
        {BMOP_OPSLOT_MAPPING, "boundarymap"},
        {BMOP_OPSLOT_MAPPING, "isovertmap"},
+       {BMOP_OPSLOT_PNT, "dest"}, /*destination bmesh, if NULL will use current one*/
        {0} /*null-terminating sentinel*/},
        splitop_exec,
        0
 };
 
 /*
-  Similar faces select
+  Similar faces search
 
-  Select similar faces (area/material/perimeter....).
+  Find similar faces (area/material/perimeter....).
 */
 BMOpDefine def_similarfaces = {
        "similarfaces",
@@ -706,9 +728,9 @@ BMOpDefine def_similarfaces = {
 };
 
 /*
-  Similar edges select
+  Similar edges search
 
-  Select similar edges (length, direction, edge, seam,....).
+  Find similar edges (length, direction, edge, seam,....).
 */
 BMOpDefine def_similaredges = {
        "similaredges",
@@ -722,9 +744,9 @@ BMOpDefine def_similaredges = {
 };
 
 /*
-  Similar vertices select
+  Similar vertices search
 
-  Select similar vertices (normal, face, vertex group,....).
+  Find similar vertices (normal, face, vertex group,....).
 */
 BMOpDefine def_similarverts = {
        "similarverts",
@@ -788,9 +810,9 @@ BMOpDefine def_meshreversecolors = {
 };
 
 /*
-  Similar vertices select
+  Similar vertices search
 
-  Select similar vertices (normal, face, vertex group,....).
+  Find similar vertices (normal, face, vertex group,....).
 */
 BMOpDefine def_vertexshortestpath = {
        "vertexshortestpath",
@@ -818,19 +840,130 @@ BMOpDefine def_edgesplit = {
        0
 };
 
+/*
+  Create Grid
+
+  Creates a grid with a variable number of subdivisions
+*/
+BMOpDefine def_create_grid = {
+       "create_grid",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "vertout"}, //output verts
+        {BMOP_OPSLOT_INT,         "xsegments"}, //number of x segments
+        {BMOP_OPSLOT_INT,         "ysegments"}, //number of y segments
+        {BMOP_OPSLOT_FLT,         "size"}, //size of the grid
+        {BMOP_OPSLOT_MAT,         "mat"}, //matrix to multiply the new geometry with
+        {0, /*null-terminating sentinel*/}},
+       bmesh_create_grid_exec,
+       0,
+};
+
+/*
+  Create UV Sphere
+
+  Creates a grid with a variable number of subdivisions
+*/
+BMOpDefine def_create_uvsphere = {
+       "create_uvsphere",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "vertout"}, //output verts
+        {BMOP_OPSLOT_INT,         "segments"}, //number of u segments
+        {BMOP_OPSLOT_INT,         "revolutions"}, //number of v segment
+        {BMOP_OPSLOT_FLT,         "diameter"}, //diameter
+        {BMOP_OPSLOT_MAT,         "mat"}, //matrix to multiply the new geometry with--
+        {0, /*null-terminating sentinel*/}},
+       bmesh_create_uvsphere_exec,
+       0,
+};
+
+/*
+  Create Ico Sphere
+
+  Creates a grid with a variable number of subdivisions
+*/
+BMOpDefine def_create_icosphere = {
+       "create_icosphere",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "vertout"}, //output verts
+        {BMOP_OPSLOT_INT,         "subdivisions"}, //how many times to recursively subdivide the sphere
+        {BMOP_OPSLOT_FLT,       "diameter"}, //diameter
+        {BMOP_OPSLOT_MAT, "mat"}, //matrix to multiply the new geometry with
+        {0, /*null-terminating sentinel*/}},
+       bmesh_create_icosphere_exec,
+       0,
+};
+
+/*
+  Create Suzanne
+
+  Creates a monkey.  Be wary.
+*/
+BMOpDefine def_create_monkey = {
+       "create_monkey",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "vertout"}, //output verts
+        {BMOP_OPSLOT_MAT, "mat"}, //matrix to multiply the new geometry with--
+        {0, /*null-terminating sentinel*/}},
+       bmesh_create_monkey_exec,
+       0,
+};
+
+/*
+  Create Cone
+
+  Creates a cone with variable depth at both ends
+*/
+BMOpDefine def_create_cone = {
+       "create_cone",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "vertout"}, //output verts
+        {BMOP_OPSLOT_INT, "cap_ends"}, //wheter or not to fill in the ends with faces
+        {BMOP_OPSLOT_INT, "segments"},
+        {BMOP_OPSLOT_FLT, "diameter1"}, //diameter of one end
+        {BMOP_OPSLOT_FLT, "diameter2"}, //diameter of the opposite
+        {BMOP_OPSLOT_FLT, "depth"}, //distance between ends
+        {BMOP_OPSLOT_MAT, "mat"}, //matrix to multiply the new geometry with--
+        {0, /*null-terminating sentinel*/}},
+       bmesh_create_cone_exec,
+       0,
+};
+
+/*
+  Create Cone
+
+  Creates a cone with variable depth at both ends
+*/
+BMOpDefine def_create_cube = {
+       "create_cube",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "vertout"}, //output verts
+        {BMOP_OPSLOT_FLT, "size"}, //size of the cube
+        {BMOP_OPSLOT_MAT, "mat"}, //matrix to multiply the new geometry with--
+        {0, /*null-terminating sentinel*/}},
+       bmesh_create_cube_exec,
+       0,
+};
+
+/*
+  Bevel
+
+  Bevels edges and vertices
+ */
+BMOpDefine def_bevel = {
+       "bevel",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "geom"}, /* input edges and vertices */
+        {BMOP_OPSLOT_ELEMENT_BUF, "face_spans"}, /* new geometry */
+        {BMOP_OPSLOT_ELEMENT_BUF, "face_holes"}, /* new geometry */
+        {BMOP_OPSLOT_FLT, "percent"}, /* percentage to expand bevelled edges*/
+        {0} /*null-terminating sentinel*/},
+       bmesh_bevel_exec,
+       0
+};
+
 BMOpDefine *opdefines[] = {
        &def_splitop,
        &def_dupeop,
        &def_delop,
-       &def_edit2bmesh,
-       &def_bmesh2edit,
        &def_subdop,
        &def_triangop,
        &def_dissolvefacesop,
        &def_dissolveedgessop,
        &def_dissolveedgeloopsop,
        &def_dissolvevertsop,
-       &def_makefgonsop,
        &def_extrudefaceregion,
        &def_connectverts,
        //&def_makeprim,
@@ -872,6 +1005,15 @@ BMOpDefine *opdefines[] = {
        &def_vertexshortestpath,
        &def_scale,
        &def_edgesplit,
+       &def_automerge,
+       &def_create_uvsphere,
+       &def_create_grid,
+       &def_create_icosphere,
+       &def_create_monkey,
+       &def_create_cone,
+       &def_create_cube,
+       &def_join_triangles,
+       &def_bevel,
 };
 
 int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));