Explorar o código

Se ha cambiado el modo de funcionamiento de la matriz de incompatibilidad y se ha mejorado el excel de salida a formato AYRE

dacowars hai 2 semanas
pai
achega
bfeee3b692
Modificáronse 2 ficheiros con 27 adicións e 23 borrados
  1. 9 12
      Comb_acciones.py
  2. 18 11
      extraer_comb.py

+ 9 - 12
Comb_acciones.py

@@ -2,6 +2,7 @@ import os
 import sys
 import comtypes.client
 import pandas as pd
+pd.set_option('future.no_silent_downcasting', True)
 import itertools
 import tkinter as tk
 from tkinter import *
@@ -206,11 +207,11 @@ def borrar_patrones_carga():
 
 def crear_ventana_configuracion():
     """Crea una ventana gráfica para configuración inicial"""
-    resultado = {'borrar_combos': False, 'borrar_cargas': False, 'norma': 'IAPF', 'vias': '1', 'elu_p_1_5': True}
+    resultado = {'borrar_combos': False, 'borrar_cargas': False, 'norma': 'IAPF', 'vias': '1'}
     
     ventana = tk.Tk()
     ventana.title("Configuración de Combinaciones")
-    ventana.geometry("400x380")
+    ventana.geometry("400x300")
     ventana.attributes('-topmost', True)
     script_dir = os.path.dirname(os.path.abspath(__file__))
     icon_path = os.path.join(script_dir, 'AYRE.ico')
@@ -249,10 +250,7 @@ def crear_ventana_configuracion():
     combo_vias = tk.ttk.Combobox(frame_vias, textvariable=var_vias, values=["1", "2", "3", "Más de 3"], state="readonly", width=15)
     combo_vias.pack(side=tk.LEFT, padx=5)
     
-    # Checkbox 3: Combos ELU P con coeficientes 1.5
-    var_elu_p_1_5 = tk.BooleanVar(value=False)
-    check_elu_p = tk.Checkbutton(ventana, text="Combos ELU P con coeficientes a '1.5'", variable=var_elu_p_1_5, font=("Arial", 10))
-    check_elu_p.pack(anchor=tk.W, padx=20, pady=5)
+    
     
     # Botón OK
     def on_ok():
@@ -260,7 +258,6 @@ def crear_ventana_configuracion():
         resultado['borrar_cargas'] = var_cargas.get()
         resultado['norma'] = var_norma.get()
         resultado['vias'] = var_vias.get()
-        resultado['elu_p_1_5'] = var_elu_p_1_5.get()
         ventana.destroy()
     
     boton_ok = tk.Button(ventana, text="Aceptar", command=on_ok, font=("Arial", 11), bg="#4CAF50", fg="white", padx=20, pady=10)
@@ -306,6 +303,8 @@ root.destroy()
 compatibilidades_df = pd.read_excel(ruta_excel,
                               sheet_name='Compatibilidades')
 
+compatibilidades_df = compatibilidades_df.astype(object)
+
 restricciones_df = pd.read_excel(ruta_excel,
                               sheet_name='Restricciones')
 
@@ -334,12 +333,12 @@ for i in range(1, x+1):
     for j in range(i-1):
         if not isinstance(compatibilidades_df.loc[j, compatibilidades_df.columns.values[i]], str):
             if math.isnan(compatibilidades_df.loc[j, compatibilidades_df.columns.values[i]]):
-                compatibilidades_df.loc[j, compatibilidades_df.columns.values[i]] = 'r'
+                compatibilidades_df.loc[j, compatibilidades_df.columns.values[i]] = 'x'
 
 
 
 #cambio de los valores Nan por 0
-compatibilidades_df = compatibilidades_df.fillna(0)
+compatibilidades_df = compatibilidades_df.fillna(0).infer_objects(copy=False)
 print(compatibilidades_df)
 
 restricciones_df = restricciones_df.fillna(0)
@@ -714,10 +713,8 @@ def limpiar_combos(combos, mascara, coef_comp):
     return np.array(combos_limpios)
 
 
-if not config['elu_p_1_5']:
-    combos_ELUP = limpiar_combos(combos_ELUP, mascara, 1.5)
-
 
+combos_ELUP = limpiar_combos(combos_ELUP, mascara, 1.5)
 combos_ELSC = limpiar_combos(combos_ELSC, mascara, 1)
 combos_ELSF = limpiar_combos(combos_ELSF, mascara, 1)
 combos_ELSCP = limpiar_combos(combos_ELSCP, mascara, 1)

+ 18 - 11
extraer_comb.py

@@ -7,12 +7,13 @@ import os
 import tkinter as tk
 from tkinter.filedialog import asksaveasfilename
 from openpyxl import Workbook
-from openpyxl.styles import Font, PatternFill, Alignment
+from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
 from openpyxl.utils import get_column_letter
 
 # Colores exactos de SAP2000
-AZUL_SAP = "000080"    # Azul marino cabecera
-AMARILLO_SAP = "FFFF00"  # Amarillo fila de tipos
+AZUL_TITULO = "33CCCC"  # Azul oscurito título
+AZUL_SAP = "CCFFFF"    # Azul marino cabecera
+
 
 # Barra de progreso (la misma que usas en el script principal)
 def printProgressBar(iteration, total, prefix='', suffix='', decimals=1, length=50, fill='█'):
@@ -42,7 +43,7 @@ def extraer_combinaciones_a_excel(SapModel, ruta_excel_origen=None):
         carpeta = os.path.dirname(ruta_excel_origen)
         nombre_base = os.path.splitext(os.path.basename(ruta_excel_origen))[0]
         nombre_sugerido = f"{nombre_base}_COMBINACIONES_SAP2000.xlsx"
-        initialfile = os.path.join(carpeta, nombre_sugerido)
+        initialfile = nombre_sugerido
     else:
         initialfile = "COMBINACIONES_SAP2000.xlsx"
 
@@ -92,15 +93,16 @@ def extraer_combinaciones_a_excel(SapModel, ruta_excel_origen=None):
 
     # 1. Título
     ws['A1'] = "TABLE:  Combination Definitions"
-    ws['A1'].font = Font(name="Arial Narrow", size=12, bold=True)
+    ws['A1'].font = Font(name="Arial Narrow", size=11, bold=True)
     ws['A1'].alignment = Alignment(horizontal="center")
+    ws['A1'].fill = PatternFill(start_color=AZUL_TITULO, end_color=AZUL_TITULO, fill_type="solid")
     ws.merge_cells('A1:D1')
 
     # 2. Cabeceras (azul marino SAP2000)
     cabeceras = ["ComboName", "ComboType", "CaseName", "ScaleFactor"]
     for c, texto in enumerate(cabeceras, 1):
         cell = ws.cell(row=2, column=c, value=texto)
-        cell.font = Font(name="Arial Narrow", bold=True, color="FFFFFF")
+        cell.font = Font(name="Arial Narrow", bold=True, color="000000", size=10)
         cell.fill = PatternFill(start_color=AZUL_SAP, end_color=AZUL_SAP, fill_type="solid")
         cell.alignment = Alignment(horizontal="center")
 
@@ -108,15 +110,21 @@ def extraer_combinaciones_a_excel(SapModel, ruta_excel_origen=None):
     tipos = ["Text", "Text", "Text", "Unitless"]
     for c, texto in enumerate(tipos, 1):
         cell = ws.cell(row=3, column=c, value=texto)
-        cell.font = Font(name="Arial Narrow", color="000000")
-        cell.fill = PatternFill(start_color=AMARILLO_SAP, end_color=AMARILLO_SAP, fill_type="solid")
+        cell.font = Font(name="Arial Narrow", color="000000", size=10)
+        cell.fill = PatternFill(start_color=AZUL_SAP, end_color=AZUL_SAP, fill_type="solid")
         cell.alignment = Alignment(horizontal="center")
 
     # 4. Datos
     for r, fila in enumerate(datos, start=4):
         for c, valor in enumerate(fila, 1):
             cell = ws.cell(row=r, column=c, value=valor)
-            cell.font = Font(name="Arial Narrow")
+            cell.font = Font(name="Arial Narrow", size=10)
+
+    # Aplicar borde fino a todas las celdas
+    thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
+    for row in ws.iter_rows():
+        for cell in row:
+            cell.border = thin_border
 
     # Autoajustar columnas según el contenido (excluyendo la primera fila que está fusionada)
     column_widths = {1: 18, 2: 12, 3: 25, 4: 12}  # Anchos por defecto
@@ -133,5 +141,4 @@ def extraer_combinaciones_a_excel(SapModel, ruta_excel_origen=None):
     # Guardar
     wb.save(archivo_salida)
     print(f"\nCOMBINACIONES EXTRAÍDAS CORRECTAMENTE")
-    print(f"Archivo: {archivo_salida}")
-    print("Formato 100% idéntico al reporte oficial de SAP2000\n")
+    print(f"Archivo: {archivo_salida}")