File: mass_scissors.py

package info (click to toggle)
bkchem 0.14.0~pre4%2Bgit20211228-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 29,340 kB
  • sloc: python: 46,432; xml: 909; javascript: 49; sh: 37; makefile: 16
file content (29 lines) | stat: -rw-r--r-- 1,307 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from oasa.periodic_table import formula_dict



mols, unique = App.paper.selected_to_unique_top_levels()

colors = ["#cc0000","#00ff00","#0000ff","#ff00ff","#00ffff","#ff5500"]

for mol in mols:
    if mol.object_type == "molecule":
        current_selected_bonds = set(mol.bonds) & set(App.paper.selected_bonds)
        if current_selected_bonds:
            for b in current_selected_bonds:
                mol.temporarily_disconnect_edge(b)
            fragments = list(mol.get_connected_components())
            mol.reconnect_temporarily_disconnected_edges()
            for i, fragment in enumerate(fragments):
                color = colors[i%len(colors)]
                frag_bonds = mol.vertex_subgraph_to_edge_subgraph(fragment) - current_selected_bonds
                for x in fragment | frag_bonds:
                    x.line_color = color
                    x.redraw()
                formula = sum([atom.get_formula_dict() for atom in fragment], formula_dict())
                text = "%s: %.8f" % (formula.get_html_repr_as_string(), formula.get_exact_molecular_mass())
                text_obj = App.paper.new_text(0, 0, text)
                text_obj.line_color = color
                text_obj.draw()
                App.paper.place_next_to_bbox("b", "r", 10+20*i, text_obj, mol.bbox())