"inset" extrude/bevel

hello,

i’ve not yet been able to find an inset tool inside blender. i’ve tried to find information from the wiki and googled around, maybe i’ve missed it or it just isn’t there?
using the normal extrude and the scaling or moving individual vertexes is a real pain and in some cases almost impossible to get aligned correctly. esp when a lot of faces are selected.

here’s what i mean: (edit: didn’t register spaces, using dots instead, X=vertex)

normal extrude (scales in proportion)
X---------------X
I…X---------X…
I…I…
I…X----------X…
X--------------------X

inset “extrude”/bevel (scales the same amount from all sides)
X-----------------X
I…X-------------X…
I…I…\
I…X---------------X…
X---------------------X

if there’s such tool i would love to hear about it or maybe it could be implemented as a script or tool in the gui?
im sure there are people who, like me, use this tool regularly.

also im wondering if there’s a way to snap the knife tool to vertices so you wouldn’t have to merge the vertexes and convert the triangles that it produced to quads. i tried using F tool to make an edge on top of face, slicing it, but it just created the edge and didn’t affect the face at all. converting with ctrl-T and sometimes having to rotate the edge is not a very fast way in my experience. this would avoid changing among the vertices, edges and faces.

thank you in advance :slight_smile:

  • tomi
    <3 blender

Alt-S might be what you’re looking for.

%<

thanks for the alt-s, didn’t know that before but i can already see use for it. but it didn’t work the way i wanted especially with multiple faces. :rolleyes:

now that im on my own computer i can show a pic of what i mean.
here’s the pic:
http://personal.inet.fi/taide/tomi/inset_problem.jpg

:cool: 1) the result im looking for (no extruding or anything, eventhough for beveling needs there could be possibility for extruding aswell)
:stuck_out_tongue: 2) normal extrude(no offset) and scale
:rolleyes: 3) alt-S method, which worked one one face except it had to be offsetted with extrude first, then when scaling it would fall inwards (i left it a bit uncentered on the pic, the face next to it is roughly the amount needed to extract first before flattening
:mad: 4) multiple faces with alt-S, doesn’t work

  • tomi

really sorry for bumping this thread AND double posting.
anybody has insight on this?

Sorry I didn’t see your post 2 days ago. Anyhow, Wings3D has Inset and if you really need to use it a lot you can Import wings into Blender. A workaround that might work for you is to Extrude Region and cancel it with LMB. Then hit W-Smooth (more than once if need be) to scale each face planar, and inset with Alt-S.

%<

thanks for the workarounds.:slight_smile: i guess i’ll have to use wings3d for such purposes.
hope we’ll see this tool in later version of blender!

cheers,

  • tomi

I miss extrude inner from C4D - does just what you described. Alt-S and shft-P aren’t replacements for that with any of workarounds.

E+0<enter> extrudes a new face 0 units out, then hit scale, voila, you´ve got inset. if that´s what you´re after?

bedlam: sadly no. using extrude (0 for offset) and scale is the 2nd face on the picture i posted.

i think there still needs to be implemented a tool to blender as a real inset (with possibility of choosing multiple faces). maybe someone has done a script that does exactly this? ^^; crosses fingers

-tomi

Someone posted a script called InOutset.py but you’ll need to update it to work with py.2.4:

 
from Blender import * 
from Blender.NMesh import Vert,Face 
from Blender.Mathutils import DotVecs, Vector 
mesh = Object.GetSelected()[0].getData() 
inset = 1 
''' 
faceList = [] 
faceCount = len(mesh.faces) 
fIdx = 0 
while fIdx &lt; faceCount: 
  f = mesh.faces[fIdx] 
  newf = Face() 
  
  for v in f.v: 
    if len(f.v) == 3 or len(f.v) == 4: 
      a = v.co[0]+(inset*f.no[0]) 
      b = v.co[1]+(inset*f.no[1]) 
      c = v.co[2]+(inset*f.no[2]) 
      mesh.verts.append(Vert(a,b,c)) 
    
      newf.v.append(mesh.verts[-1]) 
    mesh.faces.append(newf) 
  fIdx +=1 
mesh.update() 
''' 
 
# vertex make a normal for each vertex 
vnoList = [] # keep in sync with the mesh verts order 
for v in mesh.verts: 
  vnoList.append([0,0,0]) 
  nocount = 0 
  for f in mesh.faces: 
    if len(f.v) == 3 or len(f.v) == 4: 
      if v in f.v: 
        vnoList[-1][0] += f.no[0] 
        vnoList[-1][1] += f.no[1] 
        vnoList[-1][2] += f.no[2] 
        nocount += 1 
  if nocount: 
    vnoList[-1][0] = vnoList[-1][0] / nocount 
    vnoList[-1][1] = vnoList[-1][1] / nocount 
    vnoList[-1][2] = vnoList[-1][2] / nocount 
  print vnoList 
def VertCopy(vert): 
  
  nv = Vert(vert.co[0],vert.co[1],vert.co[2]) 
  return nv 
# add a new set of verts 
vCount = len(mesh.verts) 
vIdx = 0 
while vIdx &lt; vCount: 
  mesh.verts.append(VertCopy(mesh.verts[vIdx])) 
  vIdx +=1 
 
''' 
# add new faces 
faceCount = len(mesh.faces) 
fIdx = 0 
while fIdx &lt; faceCount: 
  f = mesh.faces[fIdx] 
  newf = Face() 
  for v in f.v: 
    newf.v.append(mesh.verts[mesh.verts.index(v) + vCount]) 
  print len(newf.v) 
  mesh.faces.append(newf) 
  fIdx +=1 
  #print fIdx 
''' 
faceCount = len(mesh.faces) 
fIdx = 0 
while fIdx &lt; faceCount: 
  f = mesh.faces[fIdx] 
  newf = Face() 
  for v in f.v: 
    mesh.verts.append(Vert(v.co[0], v.co[1], v.co[2])) 
    newf.v.append(mesh.verts[-1]) 
    
    # Move the vert 
    dotVecVertFace = DotVecs (Vector(vnoList[mesh.verts.index(v)]), Vector(f.no)) 
    print dotVecVertFace 
    for axis in [0,1,2]: 
      mesh.verts[-1].co[axis] += ((inset*(vnoList[mesh.verts.index(v)][axis]))/2) + (vnoList[mesh.verts.index(v)][axis] / dotVecVertFace) 
  
  mesh.faces.append(newf) 
  fIdx +=1 
  #print fIdx 

print 'done' 
mesh.update()  


Workaround…if you’re really patient…
http://img72.imageshack.us/img72/4904/1selectedges8nb.th.jpg
http://img85.imageshack.us/img85/3800/2subdividemulti6cn.th.jpg
http://img72.imageshack.us/img72/7537/3selectedgesagain1vc.th.jpg
http://img85.imageshack.us/img85/2153/4subdivide9qy.th.jpg
http://img72.imageshack.us/img72/1714/5insetfacepluslotsamess6im.th.jpg

fligh%: wow, thanks. sadly i got no idea how to use python so maybe someone will recode it on 2.4 =)
any python geniuses out there that would take up the job?

grafíx: starts to get pretty slow if you ask me, and it doesn’t work as a real inset either. but thx anyway :slight_smile:

  • tomi

:smiley: I know. It’s painful, to say the least. It’s doable, but very slow. That’s why Wings kicks Blender’s ass on box modelling. Maybe someday, when the HE mesh project is finally completed, we’ll have comparable tools. But learning Wings is a good idea. I find it to be a good companion app for Blender.

For “insets” by architectural modeling I’m using such simple technique:

  1. select face;
  2. extrude it and move a little - i.e. 0.1 blender unit from its original position;
  3. scale it along normals (alt+S);
  4. snap 3D cursor to any vertex at surface (plane in this very case!) You have extruded from;
  5. change rotation/scaling pivot to 3D cursor
  6. scale extruded face (S-key) with 0.00 blender units along its local coordinates to get it at the surface it was extruded from

This technique has several issues:

  1. It works only with faces that are parallelograms or equilateral triangles at last!
  2. using it with more than one face (connected) makes You doing more aligment with snapping 3D cursor to vertexes and scaling comparatively to it.
  3. Two faces You are working with at the same tame have to have none or more than one collective vertex.