Four new extrude possibilities;

- Individual faces
  Keeps Mesh manifold, so removes old faces always. Also uses a
  transform based on different vectors per vertex.

- Only edges
  Just extrudes the edges (not really 'individual', the edges still
  share the vertices. Uses same transform as normal extrude for that
  reason

- Only Vertices
  Uses normal transform after extrude

Also changed code a bit, to detect whether to call a normal-based
transform after extrude, or whether to call normal grabber. For example
when you just extrude 1 edge, it uses normal grabber.

Note; extruding an entire sphere goes OK with 'individual faces'. for
other extrudes you should press 's key' when in transform. Just cannot
predict (yet) when one method has preference over another.
This commit is contained in:
2004-10-18 22:47:26 +00:00
parent 295f11ea70
commit 4c827e73e2
5 changed files with 204 additions and 25 deletions

View File

@@ -530,21 +530,31 @@ void hashvert_flag(int flag)
void extrude_mesh(void)
{
short a;
short nr, xmode= 0;
TEST_EDITMESH
if(okee("Extrude")==0) return;
a= extrudeflag(SELECT);
if(G.scene->selectmode & SCE_SELECT_VERTEX)
nr= pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3|Only Vertices%x4");
else if(G.scene->selectmode & SCE_SELECT_EDGE)
nr= pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3");
else
nr= pupmenu("Extrude %t|Region %x1||Individual Faces %x2");
if(nr<1) return;
if(a==0) {
if(nr==1) xmode= extrudeflag(SELECT);
else if(nr==4) xmode= extrudeflag_verts_indiv(SELECT);
else if(nr==3) xmode= extrudeflag_edges_indiv(SELECT);
else xmode= extrudeflag_face_indiv(SELECT);
if(xmode==0) {
error("No valid selection");
}
else {
EM_fgon_flags();
countall();
transform('n');
transform(xmode);
}
}