def setup_line_params(self): ''' set up the parameters to edit the lengths of the line measures ''' layout = self.ui.mengen_params_group.layout() clear_layout(layout) if len(self.line_elements) == 0: self.init_lines() self.line_params = Params( layout, help_file='infrastruktur_linienelemente.txt') for element in self.line_elements: param = Param(int(element.length), Slider(maximum=10000), label=element.Netzelement, unit='m') self.line_params.add( param, name=f'netzelement_{element.IDNetzelement}') def save(): for element in self.line_elements: param = self.line_params[f'netzelement_{element.IDNetzelement}'] element.length = param.value element.save() self.line_params.show(title=self.ui.mengen_params_group.title()) self.line_params.changed.connect(save) last_row = self.line_params.layout.children()[-1] button = QPushButton() button.setText('aus Zeichnung übernehmen') last_row.insertWidget(0, button) button.clicked.connect(self.apply_drawing)
def setup_weights(self): ''' set up the parameters to weight the transfer nodes ''' self.set_status() if self.weight_params: self.weight_params.close() layout = self.ui.weights_group.layout() clear_layout(layout) self.weight_params = Params(parent=layout, button_label='Gewichtungen verändern', help_file='verkehr_gewichtungen.txt') dependency = SumDependency(100) for node in self.transfer_nodes: perc = round(node.weight) param = Param(perc, Slider(maximum=100, lockable=True), label=node.name, unit='%') self.weight_params.add(param, name=node.name) dependency.add(param) def save(): for node in self.transfer_nodes: node.weight = self.weight_params[node.name].value node.save() self.traffic_load.table.truncate() self.canvas.refreshAllLayers() self.set_status() self.weight_params.changed.connect(save) self.weight_params.show()
def setup_params(self): ''' set up the parameters for editing the mean residential area per appartment and the net share of residential building land in the active area ''' anteil = self.wohnbauland_anteile.get(id_teilflaeche=self.area.id) value = anteil.nettoflaeche if anteil else 85 clear_layout(self.layout) self.params = Params( self.layout, help_file='flaecheninanspruchnahme_wohnbauland_wohnflaeche.txt' ) self.params.add(Title('Anteil Nettowohnbauland')) self.params.nettoflaeche = Param( int(value), Slider(maximum=100), label='Anteil des Nettowohnbaulandes (= Summe aller\n' 'Wohnbaugrundstücke) an der Gesamtfläche der\n' 'ausgewählten Teilfläche', unit='%' ) self.params.add(Seperator()) self.params.add(Title('Durchschnittliche Wohnfläche je Wohnung')) for bt in self.gebaeudetypen_base.features(): param_name = bt.param_we feature = self.wohnflaeche.get(id_gebaeudetyp=bt.id, id_teilflaeche=self.area.id) # default value on first time value = bt.Wohnfl_m2_pro_WE if not feature \ else feature.mean_wohnflaeche self.params.add(Param( value, Slider(maximum=200), label=f'... in {bt.display_name}', unit='m²'), name=param_name ) self.params.changed.connect(self.save) self.params.show( title='Annahmen für Wohnungsdichte und Wohnflächendichte') self.save()
def setup_kostenaufteilung(self, net_id): ''' set up parameters to edit shares for a specific type of infrastructure ''' self.net_id = net_id ui_group = self.ui.kostenaufteilung_params_group net_name = self.netzelemente.filter(IDNetz=net_id)[0].Netz ui_group.setTitle(net_name) layout = ui_group.layout() clear_layout(layout) self.params = Params( layout, help_file='infrastruktur_kostenaufteilung.txt') field_names = ['Anteil_GSB', 'Anteil_GEM', 'Anteil_ALL'] labels = ['Kostenanteil der Grunstücksbesitzer/innen', 'Kostenanteil der Gemeinde', 'Netznutzer/innen und Tarifkundschaft'] def preset_changed(c, p): preset = c.get_data() if not preset: return for field_name in field_names: param = self.params.get(f'{p.Kostenphase}_{field_name}') param.input.value = preset[field_name] for i, phase in enumerate(self.kostenphasen): dependency = SumDependency(100) self.params.add(Title(phase.Kostenphase)) feature = self.kostenaufteilung.get( IDKostenphase=phase.IDKostenphase, IDNetz=net_id) preset_combo, options = self.create_presets( net_id, phase.IDKostenphase) param = Param(0, preset_combo, label='Vorschlagswerte') param.hide_in_overview = True self.params.add(param, name=f'{phase.Kostenphase}_presets') for j, field_name in enumerate(field_names): label = labels[j] slider = Slider(maximum=100, lockable=True) param = Param(feature[field_name], slider, label=label, unit='%') self.params.add( param, name=f'{phase.Kostenphase}_{field_name}') dependency.add(param) slider.changed.connect( lambda b, c=preset_combo, o=options: c.set_value(o[0])) if i != len(self.kostenphasen) - 1: self.params.add(Seperator(margin=0)) preset_combo.changed.connect( lambda b, c=preset_combo, p=phase: preset_changed(c, p)) self.params.show(title='Kostenaufteilung festlegen') self.params.changed.connect(lambda: self.save(net_id))
def setup_params(self): ''' set up the parameter for setting the percentages of ground cover in status quo and the scenario ''' self.params_nullfall = Params( self.ui.param_nullfall_tab.layout(), help_file='oekologie_bodenbedeckung_nullfall.txt') self.params_planfall = Params( self.ui.param_planfall_tab.layout(), help_file='oekologie_bodenbedeckung_planfall.txt') clear_layout(self.ui.param_nullfall_tab.layout()) clear_layout(self.ui.param_planfall_tab.layout()) def apply_nf(): self.apply_drawing(False) def apply_pf(): self.apply_drawing(True) for params, prefix in [(self.params_nullfall, 'nullfall'), (self.params_planfall, 'planfall')]: planfall = prefix == 'planfall' dependency = SumDependency(100) for bb_typ in self.bb_types.features(): bb_id = bb_typ.IDBodenbedeckung feature = self.anteile.get(IDBodenbedeckung=bb_id, planfall=planfall) value = feature.anteil if feature else 0 slider = Slider(maximum=100, width=200, lockable=True) param = Param(int(value), slider, label=bb_typ.name, unit='%') dependency.add(param) params.add(param, name=f'{prefix}_{bb_id}') params.changed.connect(lambda p=prefix: self.save(p)) params.show(title='Flächenanteile der Bodenbedeckung für die ' f'Analyse: {prefix.capitalize()}') last_row = params.layout.children()[-1] button = QPushButton() button.setText('aus Zeichnung übernehmen') last_row.insertWidget(0, button) # workaround: lambda with argument didn't seem to work here (weird) #button.clicked.connect(lambda p=planfall: self.apply_drawing(p)) func = apply_pf if planfall else apply_nf button.clicked.connect(func)
def setup_params(self, area): ''' set the parameters according to the data of the given area ''' self.area = area clear_layout(self.layout) self.params = Params(self.layout, help_file='definitionen_einzelhandel.txt') self.params.add(Title('Verkaufsfläche')) for sortiment in self.sortimente_base.features(): feature = self.verkaufsflaechen.get(id_sortiment=sortiment.id, id_teilflaeche=self.area.id) value = feature.verkaufsflaeche_qm if feature else 0 self.params.add(Param( value, Slider(maximum=20000), label=f'{sortiment.Name_Sortiment_ProjektCheck}', unit='m²'), name=sortiment.param_vfl ) self.params.changed.connect(self.save) self.params.show( title='Einzelhandel: Bezugszeitraum und Maß der baulichen Nutzung')
def setup_params(self, area): ''' set the parameters according to the data of the given area ''' self.area = area clear_layout(self.layout) self.params = Params(self.layout, help_file='definitionen_gewerbe.txt') self.params.add(Title('Bezugszeitraum')) self.params.beginn_nutzung = Param( area.beginn_nutzung, SpinBox(minimum=2000, maximum=2100), label='Beginn des Bezuges', repr_format='%d' ) self.params.aufsiedlungsdauer = Param( area.aufsiedlungsdauer, SpinBox(minimum=1, maximum=100), label='Dauer des Bezuges (Jahre, 1 = Bezug wird noch\n' 'im Jahr des Bezugsbeginns abgeschlossen)', unit='Jahr(e)' ) self.params.add(Seperator(margin=10)) self.params.add( Title('Voraussichtlicher Anteil der Branchen an der Nettofläche')) preset_names = self.df_industry_types_base[ 'Name_Gewerbegebietstyp'].values preset_ids = self.df_industry_types_base['IDGewerbegebietstyp'].values options = ['Gebietstyp wählen'] + list(preset_names) self.preset_combo = ComboBox(options, [-1] + list(preset_ids)) self.preset_combo.input.model().item(0).setEnabled(False) param = Param(0, self.preset_combo, label='Vorschlagswerte') param.hide_in_overview = True self.params.add(param, name='gebietstyp') # break grid layout self.params.add( QSpacerItem(0, 3, QSizePolicy.Fixed, QSizePolicy.Minimum)) def values_changed(): if self.auto_check.value: n_jobs = self.estimate_jobs() self.ap_slider.set_value(n_jobs) def slider_changed(): self.preset_combo.set_value(options[0]) values_changed() def preset_changed(): self.set_industry_presets(self.preset_combo.input.currentData()) values_changed() self.preset_combo.changed.connect(preset_changed) dependency = SumDependency(100) for branche in self.branchen: feature = self.gewerbeanteile.get( id_branche=branche.id, id_teilflaeche=self.area.id ) value = feature.anteil_definition if feature else 0 slider = Slider(maximum=100, width=200, lockable=True) param = Param( value, slider, label=f'{branche.Name_Branche_ProjektCheck}', unit='%' ) slider.changed.connect(slider_changed) dependency.add(param) self.params.add(param, name=branche.param_gewerbenutzung) self.params.add(Seperator()) self.params.add(Title('Voraussichtliche Anzahl an Arbeitsplätzen')) self.auto_check = Checkbox() self.params.auto_check = Param( bool(self.area.ap_ist_geschaetzt), self.auto_check, label='Automatische Schätzung' ) self.ap_slider = Slider(maximum=10000) self.params.arbeitsplaetze_insgesamt = Param( self.area.ap_gesamt, self.ap_slider, label='Zahl der Arbeitsplätze\n' 'nach Vollbezug (Summe über alle Branchen)' ) def toggle_auto_check(): # disable input for manual setting of jobs # when auto check is enabled read_only = self.auto_check.value for _input in [self.ap_slider.slider, self.ap_slider.spinbox]: _input.setAttribute(Qt.WA_TransparentForMouseEvents, read_only) _input.setFocusPolicy(Qt.NoFocus if read_only else Qt.StrongFocus) _input.update() values_changed() self.auto_check.changed.connect(toggle_auto_check) toggle_auto_check() # set to default preset if assignment is new if len(self.gewerbeanteile) == 0: self.set_industry_presets(self.DEFAULT_INDUSTRY_ID) ap_gesamt = self.estimate_jobs() self.params.arbeitsplaetze_insgesamt.value = ap_gesamt self.save() self.params.changed.connect(self.save) self.params.show( title='Gewerbe: Bezugszeitraum und Maß der baulichen Nutzung')
def setup_params(self, area): ''' set the parameters according to the data of the given area ''' self.area = area clear_layout(self.layout) self.params = Params(self.layout, help_file='definitionen_wohnen.txt') self.params.add(Title('Bezugszeitraum')) self.params.beginn_nutzung = Param( area.beginn_nutzung, SpinBox(minimum=2000, maximum=2100), label='Beginn des Bezuges', repr_format='%d' ) self.params.aufsiedlungsdauer = Param( area.aufsiedlungsdauer, SpinBox(minimum=1, maximum=100), label='Dauer des Bezuges', unit='Jahr(e)') self.params.add(Seperator()) self.params.add(Title('Anzahl Wohneinheiten nach Gebäudetypen')) # load the building presets to select from preset_names, idx = np.unique(self.df_presets['Gebietstyp'].values, return_index=True) idx.sort() preset_names = self.df_presets['Gebietstyp'].values[idx] options = ['Gebietstyp wählen'] + list(preset_names) self.preset_combo = ComboBox(options) self.preset_combo.input.model().item(0).setEnabled(False) param = Param(0, self.preset_combo, label='Vorschlagswerte') param.hide_in_overview = True self.params.add(param, name='gebietstyp') self.params.add( QSpacerItem(0, 3, QSizePolicy.Fixed, QSizePolicy.Minimum)) # preset is selected def preset_changed(gebietstyp): presets = self.df_presets[self.df_presets['Gebietstyp']==gebietstyp] for idx, preset in presets.iterrows(): id_bt = preset['IDGebaeudetyp'] bt = self.gebaeudetypen_base.get(id=id_bt) param = self.params.get(bt.param_we) param.input.value = self.area.area * preset['WE_pro_Hektar'] self.preset_combo.changed.connect(preset_changed) for bt in self.gebaeudetypen_base: param_name = bt.param_we feature = self.wohneinheiten.get(id_gebaeudetyp=bt.id, id_teilflaeche=self.area.id) value = feature.we if feature else 0 slider = Slider(maximum=2000) self.params.add(Param( value, slider, label=f'... in {bt.display_name}'), name=param_name ) slider.changed.connect( lambda: self.preset_combo.set_value(options[0])) self.params.add(Seperator()) self.params.add(Title('Mittlere Anzahl Bewohner pro Wohneinheit\n' '(3 Jahre nach Bezug)')) for bt in self.gebaeudetypen_base: param_name = bt.param_ew_je_we feature = self.wohneinheiten.get(id_gebaeudetyp=bt.id, id_teilflaeche=self.area.id) # set to default if no feature yet value = feature.ew_je_we if feature else bt.default_ew_je_we self.params.add(Param( value, DoubleSpinBox(step=0.1, maximum=50), label=f'... in {bt.display_name}'), name=param_name ) self.params.add(Seperator()) self.params.add(Title('Anteil der Bewohner unter 18 Jahre')) # load the age presets to select from for bt in self.gebaeudetypen_base: param_name = bt.param_anteil_u18 feature = self.wohneinheiten.get(id_gebaeudetyp=bt.id, id_teilflaeche=self.area.id) # set to default if no feature yet value = feature.anteil_u18 if feature else bt.default_anteil_u18 self.params.add(Param( value, Slider(maximum=60), unit='%', label=f'... in {bt.display_name}'), name=param_name ) self.params.changed.connect(self.save) self.params.show( title='Wohnen: Bezugszeitraum, Maß der baulichen Nutzung, ' 'Haushaltsstrukturen')