/// <summary> /// <pre> /// -C#N /// -[N+]#[C-] /// -C=[N+]=N /// -N=[N+]=N /// </pre> /// </summary> internal static bool IsColinear(IAtom atom, IEnumerable <IBond> bonds) { if (PeriodicTable.IsMetal(atom.AtomicNumber)) { return(bonds.Count() == 2); } int numSgl = atom.ImplicitHydrogenCount ?? 0; int numDbl = 0; int numTpl = 0; int count = 0; foreach (var bond in bonds) { ++count; switch (bond.Order.Numeric()) { case 1: numSgl++; break; case 2: numDbl++; break; case 3: numTpl++; break; case 4: return(true); default: return(false); } } if (count != 2) { return(false); } switch (atom.AtomicNumber) { case 6: case 7: case 14: case 32: if (numTpl == 1 && numSgl == 1) { return(true); } if (numDbl == 2 && numSgl == 0) { return(true); } break; } return(false); }