|
@@ -202,7 +202,18 @@ except TimeoutException as exc:
|
|
|
finally:
|
|
finally:
|
|
|
timer.cancel()
|
|
timer.cancel()
|
|
|
|
|
|
|
|
|
|
+# Creacion del material B500 SD
|
|
|
|
|
|
|
|
|
|
+ret_get, _, _, _, _ = SapModel.PropMaterial.GetMaterial("B500 SD")
|
|
|
|
|
+if ret_get == 0:
|
|
|
|
|
+ ret =SapModel.PropMaterial.AddQuick("Rebar", 6)
|
|
|
|
|
+ SapModel.PropMaterial.ChangeName(ret[0], "B500 SD")
|
|
|
|
|
+
|
|
|
|
|
+SapModel.SetPresentUnits(6) #kN, m, C
|
|
|
|
|
+SapModel.PropMaterial.SetMPUniaxial("B500 SD", 2e8, 1.17e-5)
|
|
|
|
|
+SapModel.PropMaterial.SetORebar_1("B500 SD", 500000, 620000, 540000, 680000, 0, 0, 0, 0, 0, False)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
#se pregunta si se desea borrar todo lo que hay en el SAP
|
|
#se pregunta si se desea borrar todo lo que hay en el SAP
|
|
|
|
|
|
|
|
def borrar_combos_existentes():
|
|
def borrar_combos_existentes():
|
|
@@ -558,6 +569,8 @@ def generar_combinaciones_norma_IAPF(combinaciones_validas, restricciones_df, no
|
|
|
coef_var_ELSC = np.ones(len(patrones))
|
|
coef_var_ELSC = np.ones(len(patrones))
|
|
|
coef_var_ELSF = np.ones(len(patrones))
|
|
coef_var_ELSF = np.ones(len(patrones))
|
|
|
coef_var_ELSCP =np.ones(len(patrones))
|
|
coef_var_ELSCP =np.ones(len(patrones))
|
|
|
|
|
+ minorados_ELUP.append(coef_var_ELUP)
|
|
|
|
|
+ minorados_ELSC.append(coef_var_ELSC)
|
|
|
if (restricciones_df.loc[i,"Tipo"] == "Variable") and combo[i] != 0:
|
|
if (restricciones_df.loc[i,"Tipo"] == "Variable") and combo[i] != 0:
|
|
|
if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
|
|
if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
|
|
|
coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
|
|
coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
|
|
@@ -620,10 +633,10 @@ def generar_combinaciones_norma_IAPF(combinaciones_validas, restricciones_df, no
|
|
|
mascara = np.multiply(np.ones(len(restricciones_array)), (restricciones_array == "Variable").astype(int))
|
|
mascara = np.multiply(np.ones(len(restricciones_array)), (restricciones_array == "Variable").astype(int))
|
|
|
|
|
|
|
|
|
|
|
|
|
- combos_ELUP = limpiar_combos(combos_ELUP, mascara, 1.5, restricciones_df)
|
|
|
|
|
- combos_ELSC = limpiar_combos(combos_ELSC, mascara, 1, restricciones_df)
|
|
|
|
|
- combos_ELSF = limpiar_combos(combos_ELSF, mascara, 1, restricciones_df)
|
|
|
|
|
- combos_ELSCP = limpiar_combos(combos_ELSCP, mascara, 1, restricciones_df)
|
|
|
|
|
|
|
+ #combos_ELUP = limpiar_combos(combos_ELUP, mascara, 1.5, restricciones_df)
|
|
|
|
|
+ #combos_ELSC = limpiar_combos(combos_ELSC, mascara, 1, restricciones_df)
|
|
|
|
|
+ #combos_ELSF = limpiar_combos(combos_ELSF, mascara, 1, restricciones_df)
|
|
|
|
|
+ #combos_ELSCP = limpiar_combos(combos_ELSCP, mascara, 1, restricciones_df)
|
|
|
|
|
|
|
|
return combos_ELUP, combos_ELUA, combos_ELUS, combos_ELSC, combos_ELSF, combos_ELSCP
|
|
return combos_ELUP, combos_ELUA, combos_ELUS, combos_ELSC, combos_ELSF, combos_ELSCP
|
|
|
|
|
|
|
@@ -686,16 +699,20 @@ def main(ruta_excel, norma_proyecto, vias_cargadas):
|
|
|
if ("2. ENV ELU ACC" in temp_comboNames): ret = SapModel.RespCombo.SetCaseList("7. ENV ELU TODO", 1, "2. ENV ELU ACC", 1)
|
|
if ("2. ENV ELU ACC" in temp_comboNames): ret = SapModel.RespCombo.SetCaseList("7. ENV ELU TODO", 1, "2. ENV ELU ACC", 1)
|
|
|
if ("3. ENV ELU SIS" in temp_comboNames): ret = SapModel.RespCombo.SetCaseList("7. ENV ELU TODO", 1, "3. ENV ELU SIS", 1)
|
|
if ("3. ENV ELU SIS" in temp_comboNames): ret = SapModel.RespCombo.SetCaseList("7. ENV ELU TODO", 1, "3. ENV ELU SIS", 1)
|
|
|
|
|
|
|
|
-def crear_ventana_configuracion():
|
|
|
|
|
|
|
+def crear_ventana_configuracion(parent):
|
|
|
"""Crea una ventana gráfica para configuración inicial"""
|
|
"""Crea una ventana gráfica para configuración inicial"""
|
|
|
- ventana = tk.Tk()
|
|
|
|
|
|
|
+ ventana = tk.Toplevel(parent)
|
|
|
ventana.title("Configuración de Combinaciones")
|
|
ventana.title("Configuración de Combinaciones")
|
|
|
ventana.geometry("600x800")
|
|
ventana.geometry("600x800")
|
|
|
ventana.attributes('-topmost', True)
|
|
ventana.attributes('-topmost', True)
|
|
|
|
|
+ ventana.attributes('-topmost', False)
|
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
icon_path = os.path.join(script_dir, 'AYRE.ico')
|
|
icon_path = os.path.join(script_dir, 'AYRE.ico')
|
|
|
ventana.iconbitmap(icon_path)
|
|
ventana.iconbitmap(icon_path)
|
|
|
|
|
|
|
|
|
|
+ ventana.protocol("WM_DELETE_WINDOW", lambda: ventana.destroy() and ventana.grab_release())
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
# Título
|
|
# Título
|
|
|
titulo = tk.Label(ventana, text="Configuración Inicial", font=("Arial", 14, "bold"))
|
|
titulo = tk.Label(ventana, text="Configuración Inicial", font=("Arial", 14, "bold"))
|
|
@@ -828,10 +845,183 @@ def crear_ventana_configuracion():
|
|
|
|
|
|
|
|
comprobacion_SAP_cerrado()
|
|
comprobacion_SAP_cerrado()
|
|
|
|
|
|
|
|
- ventana.mainloop()
|
|
|
|
|
|
|
+ ventana.grab_set()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+def crear_ventana_materiales(parent):
|
|
|
|
|
+ """Crea una ventana gráfica para definición de materiales y secciones"""
|
|
|
|
|
+ ventana_mat = tk.Toplevel(parent)
|
|
|
|
|
+ ventana_mat.title("Definición de Geometría")
|
|
|
|
|
+ ventana_mat.geometry("500x400")
|
|
|
|
|
+ ventana_mat.attributes('-topmost', True)
|
|
|
|
|
+ ventana_mat.attributes('-topmost', False)
|
|
|
|
|
+ script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
+ icon_path = os.path.join(script_dir, 'AYRE.ico')
|
|
|
|
|
+ ventana_mat.iconbitmap(icon_path)
|
|
|
|
|
+ ventana_mat.protocol("WM_DELETE_WINDOW", lambda: ventana_mat.destroy() and ventana_mat.grab_release())
|
|
|
|
|
+ # Título
|
|
|
|
|
+ titulo = tk.Label(ventana_mat, text="Definición de Materiales y Secciones", font=("Arial", 14, "bold"))
|
|
|
|
|
+ titulo.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ # Boton crear seccion
|
|
|
|
|
+ def on_section():
|
|
|
|
|
+ if not SapModel.GetModelisLocked(): SapModel.SetModelisLocked(False)
|
|
|
|
|
+ ret = SapModel.SetPresentUnits(6)
|
|
|
|
|
+ if ret != 0:
|
|
|
|
|
+ confirmacion.config(text="Error al establecer las unidades.", fg="red")
|
|
|
|
|
+ return
|
|
|
|
|
+ ret_get, _, _, _, _ = SapModel.PropMaterial.GetMaterial(var_material.get())
|
|
|
|
|
+ if ret_get == 0:
|
|
|
|
|
+ ret = SapModel.PropMaterial.AddMaterial(var_material.get(),
|
|
|
|
|
+ 2,
|
|
|
|
|
+ Region = "Europe",
|
|
|
|
|
+ Standard = "EN 1992-1-1 per EN 206-1",
|
|
|
|
|
+ Grade = var_material.get())
|
|
|
|
|
+ print(ret)
|
|
|
|
|
+ if (ret[0] != var_material.get()) or (ret != 0):
|
|
|
|
|
+ confirmacion.config(text="Error al añadir el material.", fg="red")
|
|
|
|
|
+ return
|
|
|
|
|
+ ret = SapModel.PropFrame.SetRectangle(var_nombre.get(),
|
|
|
|
|
+ var_material.get(),
|
|
|
|
|
+ float(var_canto.get()),
|
|
|
|
|
+ float(var_ancho.get()))
|
|
|
|
|
+ if ret != 0:
|
|
|
|
|
+ confirmacion.config(text="Error al añadir la sección.", fg="red")
|
|
|
|
|
+ return
|
|
|
|
|
+ ret = SapModel.PropFrame.SetRebarBeam(var_nombre.get(),
|
|
|
|
|
+ "B500 SD",
|
|
|
|
|
+ "B500 SD",
|
|
|
|
|
+ 0.05,
|
|
|
|
|
+ 0.05,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 0,
|
|
|
|
|
+ 0)
|
|
|
|
|
+ if ret != 0:
|
|
|
|
|
+ confirmacion.config(text="Error al asignar el armado.", fg="red")
|
|
|
|
|
+ return
|
|
|
|
|
+ confirmacion.config(text=f"Sección '{var_nombre.get()}' añadida correctamente.", fg="green")
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ # Frame para flechas
|
|
|
|
|
+ frame_material = tk.Frame(ventana_mat)
|
|
|
|
|
+ frame_material.pack(anchor=tk.W, padx=20, pady=10)
|
|
|
|
|
+ label_material = tk.Label(frame_material, text="Hormigón:", font=("Arial", 10))
|
|
|
|
|
+ label_material.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+ var_material = tk.StringVar(value="C30/37")
|
|
|
|
|
+ combo_material = tk.ttk.Combobox(frame_material, textvariable=var_material,
|
|
|
|
|
+ values=["C12/15","C16/20","C20/25","C25/30","C30/37","C35/45","C40/50","C45/55",
|
|
|
|
|
+ "C50/60","C55/67","C60/75","C70/85","C80/95","C90/105"],
|
|
|
|
|
+ state="readonly", width=15)
|
|
|
|
|
+ combo_material.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+
|
|
|
|
|
+ frame_canto = tk.Frame(ventana_mat)
|
|
|
|
|
+ frame_canto.pack(anchor=tk.W, padx=20, pady=10)
|
|
|
|
|
+ label_canto = tk.Label(frame_canto, text="Canto de la sección (m):", font=("Arial", 10))
|
|
|
|
|
+ label_canto.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+ var_canto = tk.StringVar(value="0.4")
|
|
|
|
|
+ entry_canto = tk.Entry(frame_canto, textvariable=var_canto, width=10)
|
|
|
|
|
+ entry_canto.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+
|
|
|
|
|
+ frame_ancho = tk.Frame(ventana_mat)
|
|
|
|
|
+ frame_ancho.pack(anchor=tk.W, padx=20, pady=10)
|
|
|
|
|
+ label_ancho = tk.Label(frame_ancho, text="Ancho de la sección (m):", font=("Arial", 10))
|
|
|
|
|
+ label_ancho.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+ var_ancho = tk.StringVar(value="1.0")
|
|
|
|
|
+ entry_ancho = tk.Entry(frame_ancho, textvariable=var_ancho, width=10)
|
|
|
|
|
+ entry_ancho.pack(side=tk.LEFT, padx=4)
|
|
|
|
|
+ entry_ancho.config(state=tk.DISABLED)
|
|
|
|
|
+ var_checkbox = tk.BooleanVar(value=False)
|
|
|
|
|
+ def toggle_ancho():
|
|
|
|
|
+ if var_checkbox.get():
|
|
|
|
|
+ entry_ancho.config(state=tk.NORMAL)
|
|
|
|
|
+ else:
|
|
|
|
|
+ entry_ancho.config(state=tk.DISABLED)
|
|
|
|
|
+ check_ancho = tk.Checkbutton(frame_ancho, variable=var_checkbox, command=toggle_ancho)
|
|
|
|
|
+ check_ancho.pack(side=tk.LEFT, padx = 5)
|
|
|
|
|
+
|
|
|
|
|
+ frame_nombre = tk.Frame(ventana_mat)
|
|
|
|
|
+ frame_nombre.pack(anchor=tk.W, padx=20, pady=10)
|
|
|
|
|
+ label_nombre = tk.Label(frame_nombre, text="Nombre de la sección:", font=("Arial", 10))
|
|
|
|
|
+ label_nombre.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+ var_nombre = tk.StringVar(value="Losa 0.40 m")
|
|
|
|
|
+ entry_nombre = tk.Entry(frame_nombre, textvariable=var_nombre, width=20)
|
|
|
|
|
+ entry_nombre.pack(side=tk.LEFT, padx=5)
|
|
|
|
|
+
|
|
|
|
|
+ confirmacion = tk.Label(ventana_mat, text="", font=("Arial", 10), fg="green")
|
|
|
|
|
+ confirmacion.pack(pady=10)
|
|
|
|
|
+
|
|
|
|
|
+ boton_canto = tk.Button(ventana_mat, text="Añadir sección", command=on_section, font=("Arial", 11), bg="#2196F3", fg="white", padx=10, pady=5)
|
|
|
|
|
+ boton_canto.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ventana_mat.grab_set()
|
|
|
|
|
+
|
|
|
|
|
+def crear_ventana_geometria(parent):
|
|
|
|
|
+ """Crea una ventana gráfica para definición de la geometría"""
|
|
|
|
|
+ ventana_geo = tk.Toplevel(parent)
|
|
|
|
|
+ ventana_geo.title("Definición de Geometría")
|
|
|
|
|
+ ventana_geo.geometry("500x400")
|
|
|
|
|
+ ventana_geo.attributes('-topmost', True)
|
|
|
|
|
+ ventana_geo.attributes('-topmost', False)
|
|
|
|
|
+ script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
+ icon_path = os.path.join(script_dir, 'AYRE.ico')
|
|
|
|
|
+ ventana_geo.iconbitmap(icon_path)
|
|
|
|
|
+ ventana_geo.protocol("WM_DELETE_WINDOW", lambda: ventana_geo.destroy() and ventana_geo.grab_release())
|
|
|
|
|
+ # Título
|
|
|
|
|
+ titulo = tk.Label(ventana_geo, text="Definición de Geometría", font=("Arial", 14, "bold"))
|
|
|
|
|
+ titulo.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+ ret = SapModel.PropFrame.GetNameList()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ventana_geo.grab_set()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+def crear_ventana_ppal():
|
|
|
|
|
+ ventana_ppal = tk.Tk()
|
|
|
|
|
+ ventana_ppal.title("AYRE")
|
|
|
|
|
+ ventana_ppal.geometry("400x300")
|
|
|
|
|
+ ventana_ppal.attributes('-topmost', True)
|
|
|
|
|
+ ventana_ppal.attributes('-topmost', False)
|
|
|
|
|
+ script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
+ icon_path = os.path.join(script_dir, 'AYRE.ico')
|
|
|
|
|
+ ventana_ppal.iconbitmap(icon_path)
|
|
|
|
|
+
|
|
|
|
|
+ # Título
|
|
|
|
|
+ titulo = tk.Label(ventana_ppal, text="Modelizado por SAP2000", font=("Arial", 14, "bold"))
|
|
|
|
|
+ titulo.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+ # Boton para abrir la ventana de materiales y secciones
|
|
|
|
|
+ def abrir_materiales():
|
|
|
|
|
+ crear_ventana_materiales(ventana_ppal)
|
|
|
|
|
+
|
|
|
|
|
+ boton_materiales = tk.Button(ventana_ppal, text="Definición de Materiales y Secciones", command=abrir_materiales, font=("Arial", 11), bg="#2F42AC", fg="white", padx=10, pady=5)
|
|
|
|
|
+ boton_materiales.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+ # Boton para abrir la ventana de definicion de la geometria
|
|
|
|
|
+ def abrir_geometria():
|
|
|
|
|
+ crear_ventana_geometria(ventana_ppal)
|
|
|
|
|
+
|
|
|
|
|
+ boton_geometria = tk.Button(ventana_ppal, text="Definición de Geometría", command=abrir_geometria, font=("Arial", 11), bg="#673AB7", fg="white", padx=10, pady=5)
|
|
|
|
|
+ boton_geometria.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ # Botón para abrir ventana de configuración
|
|
|
|
|
+ def abrir_configuracion():
|
|
|
|
|
+ crear_ventana_configuracion(ventana_ppal)
|
|
|
|
|
+
|
|
|
|
|
+ boton_config = tk.Button(ventana_ppal, text="Configuración Combinaciones", command=abrir_configuracion, font=("Arial", 11), bg="#4CAF50", fg="white", padx=10, pady=5)
|
|
|
|
|
+ boton_config.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ ventana_ppal.mainloop()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Mostrar ventana de configuración
|
|
# Mostrar ventana de configuración
|
|
|
-config = crear_ventana_configuracion()
|
|
|
|
|
|
|
+config = crear_ventana_ppal()
|
|
|
|
|
|