diff --git a/pulse/editor/structures/valve.py b/pulse/editor/structures/valve.py index 5f19604a5..ab7a5076e 100644 --- a/pulse/editor/structures/valve.py +++ b/pulse/editor/structures/valve.py @@ -126,8 +126,9 @@ def load_from_data(cls, data: dict) -> "Valve": valve_info = data["valve_info"] d_out, t, offset_y, offset_z, *_ = valve_info["body_section_parameters"] - flange_outer_diameter, *_ = valve_info["flange_section_parameters"] - flange_length = valve_info["flange_length"] + flange_section_parameters = valve_info.get("flange_section_parameters") + flange_outer_diameter = flange_section_parameters[0] if flange_section_parameters else None + flange_length = valve_info.get("flange_length") structure = Valve( start, diff --git a/pulse/interface/data/examples/openpulse_files/discharge_piping_acoustic_modal.pulse b/pulse/interface/data/examples/openpulse_files/discharge_piping_acoustic_modal.pulse new file mode 100644 index 000000000..170630ff3 Binary files /dev/null and b/pulse/interface/data/examples/openpulse_files/discharge_piping_acoustic_modal.pulse differ diff --git a/pulse/interface/data/examples/openpulse_files/expansion_chamber_acoustic_harmonic.pulse b/pulse/interface/data/examples/openpulse_files/expansion_chamber_acoustic_harmonic.pulse new file mode 100644 index 000000000..75021c34a Binary files /dev/null and b/pulse/interface/data/examples/openpulse_files/expansion_chamber_acoustic_harmonic.pulse differ diff --git a/pulse/interface/data/examples/openpulse_files/open_pipe_acoustic_modal.pulse b/pulse/interface/data/examples/openpulse_files/open_pipe_acoustic_modal.pulse new file mode 100644 index 000000000..624634579 Binary files /dev/null and b/pulse/interface/data/examples/openpulse_files/open_pipe_acoustic_modal.pulse differ diff --git a/pulse/interface/data/examples/openpulse_files/refrigerator_condenser_coupled_harmonic.pulse b/pulse/interface/data/examples/openpulse_files/refrigerator_condenser_coupled_harmonic.pulse new file mode 100644 index 000000000..7a41791ae Binary files /dev/null and b/pulse/interface/data/examples/openpulse_files/refrigerator_condenser_coupled_harmonic.pulse differ diff --git a/pulse/interface/data/examples/openpulse_files/supported_piping_coupled_harmonic.pulse b/pulse/interface/data/examples/openpulse_files/supported_piping_coupled_harmonic.pulse new file mode 100644 index 000000000..cbc25a026 Binary files /dev/null and b/pulse/interface/data/examples/openpulse_files/supported_piping_coupled_harmonic.pulse differ diff --git a/pulse/interface/data/examples/openpulse_files/teste4.pulse b/pulse/interface/data/examples/openpulse_files/teste4.pulse deleted file mode 100644 index ba34cbe5c..000000000 Binary files a/pulse/interface/data/examples/openpulse_files/teste4.pulse and /dev/null differ diff --git a/pulse/interface/data/examples/openpulse_files/teste5.pulse b/pulse/interface/data/examples/openpulse_files/teste5.pulse deleted file mode 100644 index e929e09d9..000000000 Binary files a/pulse/interface/data/examples/openpulse_files/teste5.pulse and /dev/null differ diff --git a/pulse/interface/user_input/model/geometry/options/pipe_options.py b/pulse/interface/user_input/model/geometry/options/pipe_options.py index 6df89e3d5..74f909c26 100644 --- a/pulse/interface/user_input/model/geometry/options/pipe_options.py +++ b/pulse/interface/user_input/model/geometry/options/pipe_options.py @@ -86,6 +86,16 @@ def configure_section_of_selected(self): if not isinstance(structure, Pipe | Bend): continue + extra_info: dict = kwargs.get("extra_info") + + fluid_id = structure.extra_info.get("fluid_id") + if isinstance(fluid_id, int): + extra_info.update({"fluid_id" : fluid_id}) + + material_id = structure.extra_info.get("material_id") + if isinstance(material_id, int): + extra_info.update({"material_id" : material_id}) + for k, v in kwargs.items(): setattr(structure, k, v) diff --git a/pulse/interface/user_input/model/geometry/options/structure_options.py b/pulse/interface/user_input/model/geometry/options/structure_options.py index 250e010f9..a8c9e4546 100644 --- a/pulse/interface/user_input/model/geometry/options/structure_options.py +++ b/pulse/interface/user_input/model/geometry/options/structure_options.py @@ -3,6 +3,7 @@ from molde.stylesheets import set_qproperty from pulse import app +from pulse.editor.structures import Beam from pulse.utils.text_utils import pascal_to_spaced_case if TYPE_CHECKING: @@ -99,6 +100,16 @@ def configure_section_of_selected(self): if not isinstance(structure, self.structure_type): continue + extra_info: dict = kwargs.get("extra_info") + + fluid_id = structure.extra_info.get("fluid_id") + if isinstance(fluid_id, int) and not isinstance(structure, Beam): + extra_info.update({"fluid_id" : fluid_id}) + + material_id = structure.extra_info.get("material_id") + if isinstance(material_id, int): + extra_info.update({"material_id" : material_id}) + for k, v in kwargs.items(): setattr(structure, k, v) diff --git a/pulse/interface/user_input/model/geometry/options/valve_options.py b/pulse/interface/user_input/model/geometry/options/valve_options.py index bb56aa5ae..74a8c5186 100644 --- a/pulse/interface/user_input/model/geometry/options/valve_options.py +++ b/pulse/interface/user_input/model/geometry/options/valve_options.py @@ -24,14 +24,25 @@ def get_kwargs(self) -> dict: if self.structure_info is None: return - return dict( + kwargs = dict( diameter=self.structure_info.get("effective_diameter", 0), - flange_outer_diameter=self.structure_info.get("flange_section_parameters", [0])[0], - flange_length=self.structure_info.get("flange_length"), thickness=0, extra_info=self._get_extra_info(), ) + if "flange_diameter" in self.structure_info: + kwargs.update( + flange_outer_diameter=self.structure_info.get("flange_section_parameters", [0])[0], + flange_length=self.structure_info.get("flange_length"), + ) + else: + kwargs.update( + flange_outer_diameter=None, + flange_length=None, + ) + + return kwargs + def configure_structure(self): app().main_window.close_dialogs() self.valve_input = ValvesInput(render_type="geometry") diff --git a/pulse/interface/user_input/plots/acoustic/plot_acoustic_mode_shape.py b/pulse/interface/user_input/plots/acoustic/plot_acoustic_mode_shape.py index 418caa0b0..14a9cf486 100644 --- a/pulse/interface/user_input/plots/acoustic/plot_acoustic_mode_shape.py +++ b/pulse/interface/user_input/plots/acoustic/plot_acoustic_mode_shape.py @@ -14,7 +14,6 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._initialize() self._create_connections() - self._config_widgets() self._add_animation_widget() @@ -50,6 +49,11 @@ def _config_widgets(self): font = QFont() font.setPointSize(9) + # full reset of the treeWidget_frequencies + self.treeWidget_frequencies.clear() + self.treeWidget_frequencies.setColumnCount(0) + self.treeWidget_frequencies.setHeaderLabels([]) + for i, header in enumerate(headers): self.treeWidget_frequencies.headerItem().setFont(i, font) self.treeWidget_frequencies.headerItem().setText(i, header) @@ -131,6 +135,8 @@ def get_user_color_scale_setup(self): def load_natural_frequencies(self): + self._config_widgets() + if isinstance(app().project.complex_natural_frequencies_acoustic, np.ndarray): self.natural_frequencies = list(app().project.complex_natural_frequencies_acoustic) @@ -140,7 +146,6 @@ def load_natural_frequencies(self): modes = np.arange(1, len(self.natural_frequencies) + 1, 1) self.modes_to_frequencies = dict(zip(modes, self.natural_frequencies)) - self.treeWidget_frequencies.clear() for mode, value in self.modes_to_frequencies.items(): if isinstance(value, complex): cols = 3 diff --git a/pulse/interface/viewer_3d/actors/fixed_symbols_actor.py b/pulse/interface/viewer_3d/actors/fixed_symbols_actor.py index 20c20a3de..0267a9ac3 100644 --- a/pulse/interface/viewer_3d/actors/fixed_symbols_actor.py +++ b/pulse/interface/viewer_3d/actors/fixed_symbols_actor.py @@ -204,8 +204,9 @@ def create_valves(self): valve_info = data["valve_info"] outside_diameter, thickness, offset_y, offset_z, *_ = valve_info["body_section_parameters"] - flange_outer_diameter, *_ = valve_info["flange_section_parameters"] - flange_length = valve_info["flange_length"] + flange_section_parameters = valve_info.get("flange_section_parameters") + flange_outer_diameter = flange_section_parameters[0] if flange_section_parameters else None + flange_length = valve_info.get("flange_length") source = valve_data( length, diff --git a/pulse/interface/welcome_widget.py b/pulse/interface/welcome_widget.py index f4d6bc8c5..4106cf8b2 100644 --- a/pulse/interface/welcome_widget.py +++ b/pulse/interface/welcome_widget.py @@ -132,7 +132,7 @@ def setup_example_projects(self, layout: QBoxLayout): layout.addLayout(examples_layout) layout.addStretch() - # Finds every file that end with ".vibra" in the examples + # Finds every file that end with ".pulse" in the examples # dir and use only the last N of them to show. number_of_examples = 5 example_paths = (EXAMPLES_DIR / "openpulse_files/").glob("*.pulse") diff --git a/pulse/utils/cross_section_sources.py b/pulse/utils/cross_section_sources.py index 3628a78d8..38c557747 100644 --- a/pulse/utils/cross_section_sources.py +++ b/pulse/utils/cross_section_sources.py @@ -428,14 +428,15 @@ def valve_data(length, outside_diameter, thickness, flange_diameter, flange_leng return vtkPolyData() pipe = pipe_data(length, outside_diameter, thickness) - start_flange = flange_data(flange_length, flange_diameter, 0) - end_flange = apply_transform(start_flange, dx=length - flange_length) handle = valve_handle(outside_diameter) handle = apply_transform(handle, dx=length/2, rz=90) append_polydata.AddInputData(pipe) - append_polydata.AddInputData(start_flange) - append_polydata.AddInputData(end_flange) + if flange_diameter and flange_length: + start_flange = flange_data(flange_length, flange_diameter, 0) + end_flange = apply_transform(start_flange, dx=length - flange_length) + append_polydata.AddInputData(start_flange) + append_polydata.AddInputData(end_flange) append_polydata.AddInputData(handle) append_polydata.Update()