Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Is it possible to determine if a line segment is present between two points?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:
            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)
        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
for atom in Coords:
    for pi_atom in pi_list:
        if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
            x += single_bond(pi_atom, atom)

Can anyone think of a more elegant way to approach this?

Is it possible to determine if a line segment is present between two points?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

 Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:
             if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)
         if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
 for atom in Coords:
     for pi_atom in pi_list:
         if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
             x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or

Can anyone think of a more elegant way to approach this?

Is it possible to determine if a line segment is present between two points?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or
or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Is it possible to determine if a line segment is present between two points?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Is it possible to determine if a line segment is present between two points?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Is it possible to determine if a line segment is present between two points?points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

def pi_bond(x,Cx,Cy): X = 0.05 if Cx[1] == Cy[1]: Ca = Cx[1]-X Cb = Cx[1]+X Cc = Cy[1]-X Cd = Cy[1]+X Cx1 = (Cx[0], Ca, Cx[2]) Cx2 = (Cx[0], Cb, Cx[2]) Cy1 = (Cy[0], Cc, Cy[2]) Cy2 = (Cy[0], Cd, Cy[2]) x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False) x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False) return x else: Ca = Cx[2]-X Cb = Cx[2]+X Cc = Cy[2]-X Cd = Cy[2]+X Cx1 = (Cx[0], Cx[1], Ca) Cx2 = (Cx[0], Cx[1], Cb) Cy1 = (Cy[0], Cy[1], Cc) Cy2 = (Cy[0], Cy[1], Cd) x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False) x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False) return x

Is it possible to determine if a line segment is present between two points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

 def pi_bond(x,Cx,Cy):
     X = 0.05
     if Cx[1] == Cy[1]:
        Ca = Cx[1]-X
        Cb = Cx[1]+X
        Cc = Cy[1]-X
         Cd = Cy[1]+X
        Cx1 = (Cx[0], Ca, Cx[2])
        Cx2 = (Cx[0], Cb, Cx[2])
        Cy1 = (Cy[0], Cc, Cy[2])
        Cy2 = (Cy[0], Cd, Cy[2])
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x
    else:
        Ca = Cx[2]-X
        Cb = Cx[2]+X
        Cc = Cy[2]-X
        Cd = Cy[2]+X
        Cx1 = (Cx[0], Cx[1], Ca)
        Cx2 = (Cx[0], Cx[1], Cb)
        Cy1 = (Cy[0], Cy[1], Cc)
        Cy2 = (Cy[0], Cy[1], Cd)
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x

x

Is it possible to determine if a line segment is present between two points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

    def pi_bond(x,Cx,Cy):
        X = 0.05
       if Cx[1] == Cy[1]:
        Ca = Cx[1]-X
        Cb = Cx[1]+X
        Cc = Cy[1]-X
          Cd = Cy[1]+X
        Cx1 = (Cx[0], Ca, Cx[2])
        Cx2 = (Cx[0], Cb, Cx[2])
        Cy1 = (Cy[0], Cc, Cy[2])
        Cy2 = (Cy[0], Cd, Cy[2])
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x
    else:
        Ca = Cx[2]-X
        Cb = Cx[2]+X
        Cc = Cy[2]-X
        Cd = Cy[2]+X
        Cx1 = (Cx[0], Cx[1], Ca)
        Cx2 = (Cx[0], Cx[1], Cb)
        Cy1 = (Cy[0], Cy[1], Cc)
        Cy2 = (Cy[0], Cy[1], Cd)
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x

Is it possible to determine if a line segment is present between two points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

    Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

    while (Bonds != 'PLOT'):
        Bonds2 = Bonds.split('-')
        for bond in Bonds2:

            if bond == 'A1':
                pi_list.append(A1)
            elif bond == 'A2':
                pi_list.append(A2)
            elif bond == 'A3':
                pi_list.append(A3)
            elif bond == 'A4':
                pi_list.append(A4)
            elif bond == 'A5':
                pi_list.append(A5)
            elif bond == 'A6':
                pi_list.append(A6)

        if pi_list != []:
            x += pi_bond(x,pi_list[0], pi_list[1])
        for atom in Coords:
            for pi_atom in pi_list:
                if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
        pi_list.clear()

        if (Bonds == 'PLOT'):
            break
        Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

    def pi_bond(x,Cx,Cy):
        X = 0.05
       if Cx[1] == Cy[1]:
        Ca = Cx[1]-X
        Cb = Cx[1]+X
        Cc = Cy[1]-X
         Cd = Cy[1]+X
        Cx1 = (Cx[0], Ca, Cx[2])
        Cx2 = (Cx[0], Cb, Cx[2])
        Cy1 = (Cy[0], Cc, Cy[2])
        Cy2 = (Cy[0], Cd, Cy[2])
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x
    else:
        Ca = Cx[2]-X
        Cb = Cx[2]+X
        Cc = Cy[2]-X
        Cd = Cy[2]+X
        Cx1 = (Cx[0], Cx[1], Ca)
        Cx2 = (Cx[0], Cx[1], Cb)
        Cy1 = (Cy[0], Cy[1], Cc)
        Cy2 = (Cy[0], Cy[1], Cd)
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x

Is it possible to determine if a line segment is present between two points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

 Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

 while (Bonds != 'PLOT'):
     Bonds2 = Bonds.split('-')
     for bond in Bonds2:
         if bond == 'A1':
             pi_list.append(A1)
         elif bond == 'A2':
             pi_list.append(A2)
         elif bond == 'A3':
             pi_list.append(A3)
         elif bond == 'A4':
             pi_list.append(A4)
         elif bond == 'A5':
             pi_list.append(A5)
         elif bond == 'A6':
             pi_list.append(A6)
     if pi_list != []:
         x += pi_bond(x,pi_list[0], pi_list[1])
     for atom in Coords:
         for pi_atom in pi_list:
         if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                    x += single_bond(pi_atom, atom)
     pi_list.clear()

     if (Bonds == 'PLOT'):
         break
     Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

 def pi_bond(x,Cx,Cy):
     X = 0.05
     if Cx[1] == Cy[1]:
        Ca = Cx[1]-X
        Cb = Cx[1]+X
        Cc = Cy[1]-X
        Cd = Cy[1]+X
        Cx1 = (Cx[0], Ca, Cx[2])
        Cx2 = (Cx[0], Cb, Cx[2])
        Cy1 = (Cy[0], Cc, Cy[2])
        Cy2 = (Cy[0], Cd, Cy[2])
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x
    else:
        Ca = Cx[2]-X
        Cb = Cx[2]+X
        Cc = Cy[2]-X
        Cd = Cy[2]+X
        Cx1 = (Cx[0], Cx[1], Ca)
        Cx2 = (Cx[0], Cx[1], Cb)
        Cy1 = (Cy[0], Cy[1], Cc)
        Cy2 = (Cy[0], Cy[1], Cd)
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x

Is it possible to determine if a line segment is present between two points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

while (Bonds != 'PLOT'):
    Bonds2 = Bonds.split('-')
    for bond in Bonds2:
        if bond == 'A1':
            pi_list.append(A1)
        elif bond == 'A2':
            pi_list.append(A2)
        elif bond == 'A3':
            pi_list.append(A3)
        elif bond == 'A4':
            pi_list.append(A4)
        elif bond == 'A5':
            pi_list.append(A5)
        elif bond == 'A6':
            pi_list.append(A6)
    if pi_list != []:
        x += pi_bond(x,pi_list[0], pi_list[1])
    for atom in Coords:
        for pi_atom in pi_list:
        if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
                 x += single_bond(pi_atom, atom)
    pi_list.clear()

    if (Bonds == 'PLOT'):
        break
    Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

def pi_bond(x,Cx,Cy):
    X = 0.05
    if Cx[1] == Cy[1]:
        Ca = Cx[1]-X
        Cb = Cx[1]+X
        Cc = Cy[1]-X
        Cd = Cy[1]+X
        Cx1 = (Cx[0], Ca, Cx[2])
        Cx2 = (Cx[0], Cb, Cx[2])
        Cy1 = (Cy[0], Cc, Cy[2])
        Cy2 = (Cy[0], Cd, Cy[2])
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
       return x
    else:
        Ca = Cx[2]-X
        Cb = Cx[2]+X
        Cc = Cy[2]-X
        Cd = Cy[2]+X
        Cx1 = (Cx[0], Cx[1], Ca)
        Cx2 = (Cx[0], Cx[1], Cb)
        Cy1 = (Cy[0], Cy[1], Cc)
        Cy2 = (Cy[0], Cy[1], Cd)
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x

Is it possible to determine if a line segment is present between two points on a 3d graphic object?

Hello everyone. I'm working on a program which plots 3D molecular structures and associated point group symmetries. I've had some issues figuring out how to fill in the remaining single bonds of a six member ring (aromatic class) after the user dictates where double bonds should be placed. These aromatics are basically 6 member cycle graphs for the purposes of my problem. Is there any way to evaluate two coordinates (atoms) on a 3d graphic object (molecule) and check if a line segment (bond) has already been added between them? By necessity any pi (double) bond should only be connected to the adjacent, (non pi-bonded) atom. So for example if there was a pi bond present between Atoms 1 and 2 of a ring then we should have single bonds between A6-A1 and A2-A3. The code below is how I am currently approaching that problem.

A1,A2,A3,A4,A6 are fixed, three dimensional coordinates associated with each position on the ring.

Bonds = str(input('Enter pi bond atomic pair in format "A1-A2" or type PLOT: '))

while (Bonds != 'PLOT'):
    Bonds2 = Bonds.split('-')
    for bond in Bonds2:
        if bond == 'A1':
            pi_list.append(A1)
        elif bond == 'A2':
            pi_list.append(A2)
        elif bond == 'A3':
            pi_list.append(A3)
        elif bond == 'A4':
            pi_list.append(A4)
        elif bond == 'A5':
            pi_list.append(A5)
        elif bond == 'A6':
            pi_list.append(A6)
    if pi_list != []:
        x += pi_bond(x,pi_list[0], pi_list[1])
    for atom in Coords:
        for pi_atom in pi_list:
        if (atom != pi_list[0]) and (atom != pi_list[1]) and (float(distance(pi_atom,atom))==float(distance(A1,A2))):
             x += single_bond(pi_atom, atom)
    pi_list.clear()

    if (Bonds == 'PLOT'):
        break
    Bonds = str(input('Enter additional pi bonds or type PLOT: '))

Can anyone think of a more elegant way to approach this?

Here is the function I am currently using to add a double bond between two points:

def pi_bond(x,Cx,Cy):
    X = 0.05
    if Cx[1] == Cy[1]:
        Ca = Cx[1]-X
        Cb = Cx[1]+X
        Cc = Cy[1]-X
        Cd = Cy[1]+X
        Cx1 = (Cx[0], Ca, Cx[2])
        Cx2 = (Cx[0], Cb, Cx[2])
        Cy1 = (Cy[0], Cc, Cy[2])
        Cy2 = (Cy[0], Cd, Cy[2])
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
       return x
    else:
        Ca = Cx[2]-X
        Cb = Cx[2]+X
        Cc = Cy[2]-X
        Cd = Cy[2]+X
        Cx1 = (Cx[0], Cx[1], Ca)
        Cx2 = (Cx[0], Cx[1], Cb)
        Cy1 = (Cy[0], Cy[1], Cc)
        Cy2 = (Cy[0], Cy[1], Cd)
        x += LineSegment(Cx1, Cy1, 1, color='white', axes=False, frame=False)
        x += LineSegment(Cx2, Cy2, 1, color='white', axes=False, frame=False)
        return x