pythonラッパーで。openbabelで気をつけないといけないところはAtomのインデックスは1から始まるのに対しBondのインデックスは0からはじまる。
from openbabel import *
mol = OBMol()
a = mol.NewAtom()
a.SetAtomicNum(6)
a.SetVector(0.0, 1.0, 2.0)
b = mol.NewAtom()
b.SetAtomicNum(6)
b.SetVector(1.0, 2.0, 2.0)
mol.AddBond(1, 2, 2)
mol.SetTitle("Ethene")
obConversion = OBConversion()
obConversion.SetOutFormat("smi")
smiles_string = obConversion.WriteString(mol)
print smiles_string
あとAddHydrogensで水素を付与した場合の水素原子はSetVectorメソッドで座標が貼付けられないの。よくわからん。サンプルだときちんと水素がついてるので、なんかの属性をセットしとく必要があるのではなかろうか。