#!BPY
""" Released under the Blender Artistic Licence (BAL)
Name: 'showVertIndex'
Blender: 235
Group: 'Object'
Tooltip: 'Select only the vertex with given index'
"""
__author__ = "pat"
__version__ = "1.3a - 01/10/05 -"
__email__ = ('Author, pat:psycho3d*de')
__url__ = ("Author's website, www.psycho3d.de")
__bpydoc__ ="""\
This script deselects all verts but the one you choose.

Select a mesh object and click the "Index" button.
The mesh will enter EditMode and the chosen vertex will be selected.
You may now edit your mesh, change to another vertex
or leave EditMode to select another object.

Hotkeys:<br>
   Q: [Q]uit
"""

from Blender import NMesh, Window
from Blender.Object import GetSelected
from Blender.Draw import *
from Blender.BGL import *

index = Create(0)
obname = ""
maxverts = 0
ob = None
me = None

def checkOb():
  global ob, index, obname, maxverts
  try:
    ob = GetSelected()[0]
  except IndexError:
    PupMenu("Error%t|No object selected!")
  else:
    if ob.getName() != obname:
      if ob.getType() != "Mesh":
        PupMenu("Error%t|Object is not a mesh!")
      else:
        obname = ob.getName()
        maxverts = len(ob.getData().verts)-1
    else:
      maxverts = len(ob.getData().verts)-1
### checkOb

def find(index):
  global ob, me
  Window.EditMode(0)
  me = ob.getData()
  for v in me.verts:
    v.sel = 0
  me.verts[index].sel = 1
  me.update()
  Window.EditMode(1)
### find

def gui():
  global index, ob, me, maxverts
  col = Window.Theme.Get()[0].get("buts").back
  glClearColor(col[0]/255., col[1]/255., col[2]/255., col[3]/255.)
  glClear(GL_COLOR_BUFFER_BIT)
  index = Number("Index: ", 2, 10, 60, 100, 20, index.val, 0, maxverts, "The index you are looking for")
  Button("Exit", 1, 10, 30, 100, 20, "This one should explain itself :)")
  
def event(evt, val):
  if (evt == QKEY and not val): Exit()
def bevent(evt):
  if (evt == 1): Exit()
  elif evt == 2:
    checkOb()
    if index.val > maxverts: index.val = maxverts
    if index.val < 0: index.val = 0
    find(index.val)

Register(gui, event, bevent)
