{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ---------------------------------------------------------------------\n", "# File Name: building_extension.py\n", "# Purpose: CityGML building objects are randomly choosen and extended in given height \n", "# Author: Nico Ehlers\n", "# Created: 2024-07-08\n", "# ---------------------------------------------------------------------" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import os\n", "import ipywidgets as widgets\n", "from IPython.display import display\n", "from choose_extrusion_buildings import choose_building\n", "from build_up_geonmetries import bldg_extrusion\n", "from gml_parsing import little_parser" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# Create input widgets\n", "residential_code_input = widgets.Text(description='Residential Code:', value='31001_1000')# '31001_1010' Asberg)\n", "bldg_extension_input = widgets.IntSlider(description='Building Extension:', min=0, max=5, step=1, value=2)\n", "extrusion_percentage_input = widgets.FloatSlider(description='Extrusion Percentage:', min=0.0, max=1.0, step=0.1, value=1.0)\n", "floor_height_input = widgets.FloatText(description='Floor Height:', value=3.5)\n", "gml_path_input = widgets.Text(description='GML Path:', value=os.getcwd()+'\\GML_files\\\\')\n", "gml_file_input = widgets.Text(description='GML File:', value='Grombuehl_LoD2_mini.gml')#Grafenbühl.gml" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "# Create button widget\n", "run_button = widgets.Button(description='Run Code')\n", "\n", "# Create output widget\n", "output = widgets.Output()" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "gml_path =os.getcwd()+'\\GML_files\\\\'\n", "gml_file = 'Grombuehl_LoD2_mini.gml'\n", "\n", "save_name = gml_file.split('.')[0]+'_'\n", "gml_info = little_parser(gml_path+gml_file)\n", "gml_par = gml_info.little_parser()" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "# Define function to run when button is clicked\n", "def run_code(button):\n", " with output:\n", " # Get user inputs\n", " residential_code = residential_code_input.value\n", " bldg_extension = bldg_extension_input.value\n", " extrusion_percentage = extrusion_percentage_input.value\n", " floor_height = floor_height_input.value\n", " gml_path = gml_path_input.value\n", " gml_file = gml_file_input.value\n", " \n", " file_path = gml_path + gml_file\n", " # Run choose_building and bldg_extrusion classes\n", " #----------------------------------------------------------------------------\n", " ### GML PARSING\n", " #----------------------------------------------------------------------------\n", " save_name = gml_file.split('.')[0]+'_'\n", " gml_info = little_parser(file_path)\n", " gml_par = gml_info.little_parser()\n", " #----------------------------------------------------------------------------\n", " ### choose buildings for extrusion\n", " #----------------------------------------------------------------------------\n", " # TODO: at the moment all construction massive\n", " gml_par['construction_type'] = 'massive'\n", " extr = choose_building(gml_par, bldg_extension, residential_code, extrusion_percentage)\n", " gml_par = extr.choose_building()\n", " # filter buildings with residential code\n", " gml_par = gml_par[gml_par['function'] == residential_code].reset_index(drop=True)\n", " #----------------------------------------------------------------------------\n", " ### GML extrusion\n", " #----------------------------------------------------------------------------\n", " # Example usage\n", " output_file_path = gml_path + gml_file.replace('.gml', '_extruded.gml')\n", "\n", " extrude_gml = bldg_extrusion(gml_par, file_path, output_file_path, floor_height, residential_code)\n", " extrude_gml.bldg_extrusion()\n", " \n", " # Print confirmation message\n", " print('Code executed successfully!')" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f3b8a4b0a13049b8b3d4f2b6a5341b37", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Text(value='31001_1000', description='Residential Code:')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0bf67b5105144554930a549da784f462", "version_major": 2, "version_minor": 0 }, "text/plain": [ "IntSlider(value=2, description='Building Extension:', max=5)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "46100a95792546249024ad1f86e93d84", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatSlider(value=1.0, description='Extrusion Percentage:', max=1.0)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5abedb2d0f41428fb9b8b12431e279b6", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatText(value=3.5, description='Floor Height:')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5a5c0fa620444bc9b86e9ffa100fb6a0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Text(value='c:\\\\Users\\\\ge29duf\\\\Documents\\\\02_Forschung\\\\P62\\\\Tool_ne\\\\gml_changes\\\\GML_files\\\\', description=…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6e25579ba32a4aadb06b4ef9e9895553", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Text(value='Grombuehl_LoD2_mini.gml', description='GML File:')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "306f5b8b537b4d288d29f571ea25bf67", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Button(description='Run Code', style=ButtonStyle())" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b77571c755904f1083458c6490b8d738", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Attach function to button click event\n", "run_button.on_click(run_code)\n", "\n", "# Display the widgets\n", "display(residential_code_input, bldg_extension_input, extrusion_percentage_input, floor_height_input, gml_path_input, gml_file_input, run_button, output)" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 2 }