MoleditPy-linux 2.8.2__tar.gz → 2.8.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/PKG-INFO +1 -1
  2. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/pyproject.toml +1 -1
  3. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/MoleditPy_linux.egg-info/PKG-INFO +1 -1
  4. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/calculation_worker.py +17 -14
  5. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/constants.py +1 -1
  6. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/constrained_optimization_dialog.py +3 -2
  7. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window.py +4 -0
  8. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_compute.py +21 -2
  9. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_main_init.py +13 -0
  10. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/move_group_dialog.py +0 -12
  11. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/translation_dialog.py +0 -18
  12. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/LICENSE +0 -0
  13. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/README.md +0 -0
  14. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/setup.cfg +0 -0
  15. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/MoleditPy_linux.egg-info/SOURCES.txt +0 -0
  16. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/MoleditPy_linux.egg-info/dependency_links.txt +0 -0
  17. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/MoleditPy_linux.egg-info/entry_points.txt +0 -0
  18. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/MoleditPy_linux.egg-info/requires.txt +0 -0
  19. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/MoleditPy_linux.egg-info/top_level.txt +0 -0
  20. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/__init__.py +0 -0
  21. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/__main__.py +0 -0
  22. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/assets/file_icon.ico +0 -0
  23. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/assets/icon.icns +0 -0
  24. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/assets/icon.ico +0 -0
  25. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/assets/icon.png +0 -0
  26. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/main.py +0 -0
  27. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/__init__.py +0 -0
  28. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/about_dialog.py +0 -0
  29. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/align_plane_dialog.py +0 -0
  30. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/alignment_dialog.py +0 -0
  31. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/analysis_window.py +0 -0
  32. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/angle_dialog.py +0 -0
  33. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/atom_item.py +0 -0
  34. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/bond_item.py +0 -0
  35. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/bond_length_dialog.py +0 -0
  36. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/color_settings_dialog.py +0 -0
  37. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/custom_interactor_style.py +0 -0
  38. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/custom_qt_interactor.py +0 -0
  39. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/dialog3_d_picking_mixin.py +0 -0
  40. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/dihedral_dialog.py +0 -0
  41. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_app_state.py +0 -0
  42. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_dialog_manager.py +0 -0
  43. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_edit_3d.py +0 -0
  44. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_edit_actions.py +0 -0
  45. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_export.py +0 -0
  46. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_molecular_parsers.py +0 -0
  47. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_project_io.py +0 -0
  48. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_string_importers.py +0 -0
  49. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_ui_manager.py +0 -0
  50. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_view_3d.py +0 -0
  51. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/main_window_view_loaders.py +0 -0
  52. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/mirror_dialog.py +0 -0
  53. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/mol_geometry.py +0 -0
  54. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/molecular_data.py +0 -0
  55. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/molecule_scene.py +0 -0
  56. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/periodic_table_dialog.py +0 -0
  57. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/planarize_dialog.py +0 -0
  58. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/plugin_interface.py +0 -0
  59. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/plugin_manager.py +0 -0
  60. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/plugin_manager_window.py +0 -0
  61. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/settings_dialog.py +0 -0
  62. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/sip_isdeleted_safe.py +0 -0
  63. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/template_preview_item.py +0 -0
  64. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/template_preview_view.py +0 -0
  65. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/user_template_dialog.py +0 -0
  66. {moleditpy_linux-2.8.2 → moleditpy_linux-2.8.3}/src/moleditpy_linux/modules/zoomable_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 2.8.2
3
+ Version: 2.8.3
4
4
  Summary: A cross-platform, simple, and intuitive molecular structure editor built in Python. It allows 2D molecular drawing and 3D structure visualization. It supports exporting structure files for input to DFT calculation software.
5
5
  Author-email: HiroYokoyama <titech.yoko.hiro@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "MoleditPy-linux"
7
7
 
8
- version = "2.8.2"
8
+ version = "2.8.3"
9
9
 
10
10
  license = {file = "LICENSE"}
11
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 2.8.2
3
+ Version: 2.8.3
4
4
  Summary: A cross-platform, simple, and intuitive molecular structure editor built in Python. It allows 2D molecular drawing and 3D structure visualization. It supports exporting structure files for input to DFT calculation software.
5
5
  Author-email: HiroYokoyama <titech.yoko.hiro@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -210,17 +210,20 @@ def _adjust_collision_avoidance(rd_mol, check_halted_cb, safe_status_cb):
210
210
  safe_status_cb(f"Collision avoidance warning: {e}")
211
211
 
212
212
 
213
- def _iterative_optimize(mol, method, check_halted_cb, safe_status_cb, max_iters=4000, chunk_size=100):
213
+ def _iterative_optimize(mol, method, check_halted_cb, safe_status_cb, max_iters=4000, chunk_size=100, options=None):
214
214
  """Perform force field optimization in small chunks to avoid UI freezing and allow halts."""
215
215
  try:
216
+ # Respect the "Consider Intermolecular Interaction for RDKit" setting
217
+ ignore_interfrag = not options.get("optimize_intermolecular_interaction_rdkit", True) if options else False
218
+
216
219
  if method in ("MMFF", "MMFF94", "MMFF94S", "MMFF94s"):
217
220
  mmff_variant = "MMFF94" if method == "MMFF94" else "MMFF94s"
218
221
  props = AllChem.MMFFGetMoleculeProperties(mol, mmffVariant=mmff_variant)
219
222
  if props is None:
220
223
  raise ValueError(f"Failed to generate MMFF properties for variant {mmff_variant}.")
221
- ff = AllChem.MMFFGetMoleculeForceField(mol, props, confId=0)
224
+ ff = AllChem.MMFFGetMoleculeForceField(mol, props, confId=0, ignoreInterfragInteractions=ignore_interfrag)
222
225
  elif method == "UFF":
223
- ff = AllChem.UFFGetMoleculeForceField(mol, confId=0)
226
+ ff = AllChem.UFFGetMoleculeForceField(mol, confId=0, ignoreInterfragInteractions=ignore_interfrag)
224
227
  else:
225
228
  raise ValueError(f"Unknown optimization method: {method}")
226
229
 
@@ -714,6 +717,8 @@ def _perform_direct_conversion(mol_block, mol, options, _check_halted, _safe_sta
714
717
  # Optimization (respects do_optimize flag)
715
718
  do_optimize = options.get("do_optimize", True) if options else True
716
719
  if do_optimize:
720
+ # Collision avoidance before optimization
721
+ _adjust_collision_avoidance(mol, _check_halted, _safe_status)
717
722
  _safe_status("Direct conversion: optimizing geometry...")
718
723
  if _check_halted():
719
724
  raise WorkerHaltError("Halted")
@@ -755,7 +760,7 @@ def _perform_direct_conversion(mol_block, mol, options, _check_halted, _safe_sta
755
760
  except Exception:
756
761
  pass
757
762
  _safe_status(f"Applying force field optimization ({method_key} / RDKit)...")
758
- opt_success = _iterative_optimize(mol, method_key, _check_halted, _safe_status)
763
+ opt_success = _iterative_optimize(mol, method_key, _check_halted, _safe_status, options=options)
759
764
  if not opt_success:
760
765
  _safe_status(f"Warning: Optimization with {opt_method} failed. Using unoptimized structure.")
761
766
  try:
@@ -765,8 +770,6 @@ def _perform_direct_conversion(mol_block, mol, options, _check_halted, _safe_sta
765
770
 
766
771
  if _check_halted():
767
772
  raise WorkerHaltError("Halted")
768
- if do_optimize:
769
- _adjust_collision_avoidance(mol, _check_halted, _safe_status)
770
773
  return mol
771
774
 
772
775
 
@@ -800,7 +803,7 @@ def _perform_optimize_only(mol, options, worker_id, _check_halted, _safe_status,
800
803
  mol.SetProp("_pme_optimization_method", opt_method)
801
804
  except Exception:
802
805
  pass
803
- opt_success = _iterative_optimize(mol, method_key, _check_halted, _safe_status)
806
+ opt_success = _iterative_optimize(mol, method_key, _check_halted, _safe_status, options=options)
804
807
 
805
808
  if not opt_success:
806
809
  raise Exception(f"Optimization with {opt_method} failed. You can change the method in the settings.")
@@ -843,6 +846,8 @@ def _perform_obabel_conversion(mol_block, conversion_mode, opt_method, worker_id
843
846
  if rd_mol is None:
844
847
  raise ValueError("Open Babel produced invalid MOL block.")
845
848
  rd_mol = Chem.AddHs(rd_mol)
849
+ # Collision avoidance before optimization
850
+ _adjust_collision_avoidance(rd_mol, _check_halted, _safe_status)
846
851
  try:
847
852
  opt_method_raw = opt_method or "MMFF94s_RDKIT"
848
853
  backend = "OBABEL" if "OBABEL" in opt_method_raw.upper() else "RDKIT"
@@ -870,7 +875,7 @@ def _perform_obabel_conversion(mol_block, conversion_mode, opt_method, worker_id
870
875
  except Exception:
871
876
  pass
872
877
  _safe_status(f"Optimizing with RDKit ({method_key})...")
873
- opt_success = _iterative_optimize(rd_mol, method_key, _check_halted, _safe_status)
878
+ opt_success = _iterative_optimize(rd_mol, method_key, _check_halted, _safe_status, options=options)
874
879
 
875
880
  if not opt_success:
876
881
  _safe_status(f"Warning: Optimization with {opt_method_raw} failed. Using unoptimized structure.")
@@ -894,8 +899,6 @@ def _perform_obabel_conversion(mol_block, conversion_mode, opt_method, worker_id
894
899
  if _check_halted():
895
900
  raise WorkerHaltError("Halted")
896
901
 
897
- # Collision avoidance
898
- _adjust_collision_avoidance(rd_mol, _check_halted, _safe_status)
899
902
  try:
900
903
  _safe_finished((worker_id, rd_mol))
901
904
  except Exception:
@@ -1226,6 +1229,9 @@ class CalculationWorker(QObject):
1226
1229
  bond.SetStereoAtoms(stereo_atoms[0], stereo_atoms[1])
1227
1230
  bond.SetStereo(stereo)
1228
1231
 
1232
+ # Collision avoidance before optimization
1233
+ _adjust_collision_avoidance(mol, _check_halted, _safe_status)
1234
+
1229
1235
  try:
1230
1236
  opt_method_raw = opt_method or "MMFF94s_RDKIT"
1231
1237
  backend = "OBABEL" if "OBABEL" in opt_method_raw.upper() else "RDKIT"
@@ -1253,7 +1259,7 @@ class CalculationWorker(QObject):
1253
1259
  except Exception: # pragma: no cover
1254
1260
  pass
1255
1261
  _safe_status(f"Optimizing with RDKit ({method_key})...")
1256
- opt_success = _iterative_optimize(mol, method_key, _check_halted, _safe_status)
1262
+ opt_success = _iterative_optimize(mol, method_key, _check_halted, _safe_status, options=options)
1257
1263
 
1258
1264
  if not opt_success:
1259
1265
  raise Exception(f"Optimization with {opt_method_raw} failed. You can change the method in the settings.")
@@ -1282,9 +1288,6 @@ class CalculationWorker(QObject):
1282
1288
  if _check_halted():
1283
1289
  raise WorkerHaltError("Halted")
1284
1290
 
1285
- # Collision avoidance
1286
- _adjust_collision_avoidance(mol, _check_halted, _safe_status)
1287
-
1288
1291
  try:
1289
1292
  _safe_finished((worker_id, mol))
1290
1293
  except WorkerHaltError:
@@ -16,7 +16,7 @@ from PyQt6.QtGui import QColor, QFont
16
16
  from rdkit import Chem
17
17
 
18
18
  # Version
19
- VERSION = "2.8.2"
19
+ VERSION = "2.8.3"
20
20
 
21
21
  ATOM_RADIUS = 18
22
22
  BOND_OFFSET = 3.5
@@ -445,14 +445,15 @@ class ConstrainedOptimizationDialog(Dialog3DPickingMixin, QDialog): # pragma: n
445
445
  conf = self.mol.GetConformer()
446
446
 
447
447
  try:
448
+ ignore_interfrag = not self.main_window.settings.get("optimize_intermolecular_interaction_rdkit", True)
448
449
  if ff_name.startswith("MMFF"):
449
450
  props = AllChem.MMFFGetMoleculeProperties(self.mol, mmffVariant=ff_name)
450
- ff = AllChem.MMFFGetMoleculeForceField(self.mol, props, confId=0)
451
+ ff = AllChem.MMFFGetMoleculeForceField(self.mol, props, confId=0, ignoreInterfragInteractions=ignore_interfrag)
451
452
  add_dist_constraint = ff.MMFFAddDistanceConstraint
452
453
  add_angle_constraint = ff.MMFFAddAngleConstraint
453
454
  add_torsion_constraint = ff.MMFFAddTorsionConstraint
454
455
  else: # UFF
455
- ff = AllChem.UFFGetMoleculeForceField(self.mol, confId=0)
456
+ ff = AllChem.UFFGetMoleculeForceField(self.mol, confId=0, ignoreInterfragInteractions=ignore_interfrag)
456
457
  add_dist_constraint = ff.UFFAddDistanceConstraint
457
458
  add_angle_constraint = ff.UFFAddAngleConstraint
458
459
  add_torsion_constraint = ff.UFFAddTorsionConstraint
@@ -178,6 +178,10 @@ class MainWindow(QMainWindow):
178
178
  # --- MOVED TO main_window_compute.py ---
179
179
  return self.main_window_compute.set_optimization_method(method_name)
180
180
 
181
+ def toggle_intermolecular_interaction_rdkit(self, checked):
182
+ # --- MOVED TO main_window_compute.py ---
183
+ return self.main_window_compute.toggle_intermolecular_interaction_rdkit(checked)
184
+
181
185
  def copy_selection(self):
182
186
  # --- MOVED TO main_window_edit_actions.py ---
183
187
  return self.main_window_edit_actions.copy_selection()
@@ -119,6 +119,20 @@ class MainWindowCompute(object):
119
119
  label = self.optimization_method
120
120
  self.statusBar().showMessage(f"3D optimization method set to: {label}")
121
121
 
122
+ def toggle_intermolecular_interaction_rdkit(self, checked): # pragma: no cover
123
+ """Toggle whether intermolecular interactions are considered for RDKit optimization."""
124
+ try:
125
+ self.settings["optimize_intermolecular_interaction_rdkit"] = checked
126
+ try:
127
+ self.settings_dirty = True
128
+ except Exception:
129
+ pass
130
+ state_str = "Enabled" if checked else "Disabled"
131
+ self.statusBar().showMessage(f"Intermolecular interaction for RDKit: {state_str}")
132
+ except Exception:
133
+ import traceback
134
+ traceback.print_exc()
135
+
122
136
  def show_convert_menu(self, pos): # pragma: no cover
123
137
  """右クリックで表示する一時的な3D変換メニュー。
124
138
  選択したモードは一時フラグとして保持され、その後の変換で使用されます(永続化しません)。
@@ -442,7 +456,11 @@ class MainWindowCompute(object):
442
456
  import traceback
443
457
  traceback.print_exc()
444
458
 
445
- options = {"conversion_mode": conv_mode, "optimization_method": opt_method}
459
+ options = {
460
+ "conversion_mode": conv_mode,
461
+ "optimization_method": opt_method,
462
+ "optimize_intermolecular_interaction_rdkit": self.settings.get("optimize_intermolecular_interaction_rdkit", True)
463
+ }
446
464
  # Attach the run id so the worker and main thread can correlate
447
465
  try:
448
466
  # Attach the concrete run id rather than the single waiting id
@@ -800,7 +818,8 @@ class MainWindowCompute(object):
800
818
 
801
819
  options = {
802
820
  "conversion_mode": "optimize_only",
803
- "optimization_method": method
821
+ "optimization_method": method,
822
+ "optimize_intermolecular_interaction_rdkit": self.settings.get("optimize_intermolecular_interaction_rdkit", True)
804
823
  }
805
824
 
806
825
  # Assign a unique ID for this optimization run
@@ -1494,6 +1494,13 @@ class MainWindowMainInit(object):
1494
1494
  optimization_menu.addAction(action)
1495
1495
  opt_group.addAction(action)
1496
1496
  opt_actions[key] = action
1497
+
1498
+ optimization_menu.addSeparator()
1499
+ self.intermolecular_rdkit_action = QAction("Consider Intermolecular Interaction for RDKit", self)
1500
+ self.intermolecular_rdkit_action.setCheckable(True)
1501
+ self.intermolecular_rdkit_action.setChecked(self.settings.get("optimize_intermolecular_interaction_rdkit", True))
1502
+ self.intermolecular_rdkit_action.triggered.connect(self.toggle_intermolecular_interaction_rdkit)
1503
+ optimization_menu.addAction(self.intermolecular_rdkit_action)
1497
1504
 
1498
1505
  # Persist the actions mapping so other methods can update the checked state
1499
1506
  self.opt3d_actions = opt_actions
@@ -1723,6 +1730,11 @@ class MainWindowMainInit(object):
1723
1730
  except Exception: # pragma: no cover
1724
1731
  import traceback
1725
1732
  traceback.print_exc()
1733
+
1734
+ # update intermolecular rdkit setting
1735
+ if hasattr(self, "intermolecular_rdkit_action"):
1736
+ self.intermolecular_rdkit_action.setChecked(self.settings.get("optimize_intermolecular_interaction_rdkit", True))
1737
+
1726
1738
  # 3Dビューの設定を適用
1727
1739
  self.apply_3d_settings()
1728
1740
  # 現在の分子を再描画(設定変更を反映)
@@ -1850,6 +1862,7 @@ class MainWindowMainInit(object):
1850
1862
  "bond_color_2d": "#222222", # Almost black
1851
1863
  "atom_use_bond_color_2d": False,
1852
1864
  "bond_cap_style_2d": "Round",
1865
+ "optimize_intermolecular_interaction_rdkit": True,
1853
1866
  }
1854
1867
 
1855
1868
  try:
@@ -654,22 +654,10 @@ class MoveGroupDialog(Dialog3DPickingMixin, QDialog): # pragma: no cover
654
654
  """ダイアログが閉じられる時の処理"""
655
655
  self.clear_atom_labels()
656
656
  self.disable_picking()
657
- try:
658
- self.main_window.draw_molecule_3d(self.mol)
659
- except Exception: # pragma: no cover
660
- import traceback
661
- traceback.print_exc()
662
-
663
657
  super().closeEvent(event)
664
658
 
665
659
  def reject(self):
666
660
  """キャンセル時の処理"""
667
661
  self.clear_atom_labels()
668
662
  self.disable_picking()
669
- try:
670
- self.main_window.draw_molecule_3d(self.mol)
671
- except Exception: # pragma: no cover
672
- import traceback
673
- traceback.print_exc()
674
-
675
663
  super().reject()
@@ -358,34 +358,16 @@ class TranslationDialog(Dialog3DPickingMixin, QDialog): # pragma: no cover
358
358
  """ダイアログが閉じられる時の処理"""
359
359
  self.clear_atom_labels()
360
360
  self.disable_picking()
361
- try:
362
- self.main_window.draw_molecule_3d(self.mol)
363
- except Exception: # pragma: no cover
364
- import traceback
365
- traceback.print_exc()
366
-
367
361
  super().closeEvent(event)
368
362
 
369
363
  def reject(self):
370
364
  """キャンセル時の処理"""
371
365
  self.clear_atom_labels()
372
366
  self.disable_picking()
373
- try:
374
- self.main_window.draw_molecule_3d(self.mol)
375
- except Exception: # pragma: no cover
376
- import traceback
377
- traceback.print_exc()
378
-
379
367
  super().reject()
380
368
 
381
369
  def accept(self):
382
370
  """OK時の処理"""
383
371
  self.clear_atom_labels()
384
372
  self.disable_picking()
385
- try:
386
- self.main_window.draw_molecule_3d(self.mol)
387
- except Exception: # pragma: no cover
388
- import traceback
389
- traceback.print_exc()
390
-
391
373
  super().accept()
File without changes