# Documentación

## Módulo calidad_car

Este módulo es el que articula toda la funcionalidad del plugin, y esta compuesto por la clase CalidadCAR.

class `calidad_car.``CalidadCAR`(iface)

  Implementación del plugin.

  `addCsv`()

    Crea una capa a partir de un archivo CSV, y une la información que contiene esta, con la tabla de atributos de la capa de secciones, la cual tendrá que existir, para que se pueda realizar esta operación.

  `addSection`()

    Utiliza una capa llamada temp, para insertar las nuevas secciones, esta operación solo podrá ser realizada si existe la capa de secciones.

    En caso de que no exista la capa temp, se creara una nueva, con el crs de la capa de secciones.

  `add_action`(icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None)

    Agrega una acción la la barra de herramientas, y al menú del plugin.

    Parámetros: | icon_path (str) – Ruta del icono. Puede ser la ruta de un recurso recurso (ejemplo: “:/plugins/foo/bar.png”) o una ruta normal del sistema de archivos text (str) – Texto que será mostrado en el menu de opciones de plugin para esta accion. callback (function) – Función que será llamada cuando se hace click sobre la acción. enabled_flag (bool) – Una bandera que indica si la acción debería ser activada por defecto. Por defecto este valor esta en True. add_to_menu (bool) – Una bandera indicando si la acción debería ser agregada al menú de opciones del plugin. Por defecto esta en True add_to_toolbar (bool) – Una bandera indicando si la acción debería ser agregada a la barra de herramientas del plugin. Por defecto esta en True status_tip (str) – Texto opcional que aparecerá cuando el puntero del mouse se pocisione sobre la acción. parent (QWidget) – Widget padre de la nueva acción. Por defecto será None whats_this – Texto opcional para mostrar en la barra de estatus, cuando el puntero del mouse se pocisione sobre la acción.
    Devuelve: | La acción que fue creada. Notar que la acción también es agregada a self.actions list.
    Tipo del valor devuelto:
    | QAction

  `cargarCapas`()

    Función que se ejecuta cuando el usuario hace click en la acción de Cargar Fondos

  `clean`()

    Recarga el plugin, limpiando todas las capas cargadas, excepto, las capas de salida de información.

  `concentrationPoints`()

    Este método se encarga de recopilar toda la información, para permitirle al usuario ingresar los puntos de concentración.

    Para que el usuario pueda realizar esta operación, necesariamente, tienen que estar cargadas la capa de ejes, y la capa de secciones transversales.

  `initGui`()

    Crea las entradas del menu, y las acciones de la barra de herramientas dentro de la interfaz de QGIS

  `intersection`()

    Se encarga de aplicar el modelo matemático a la información para determinar la calidad del agua.

  `tr`(message)

    Get the translation for a string using Qt translation API.

    We implement this ourselves since we do not inherit QObject.

    Parámetros: | message (str, QString) – String for translation.
    Devuelve: | Translated version of message.
    Tipo del valor devuelto:
    | QString

  `unload`()

    Remueve el menú del plugin, y las acciones de la barra de herramientas de la interfaz de QGIS.

## Módulo actions

class `src.actions.``AddSectionAction`

  Esta acción se encarga de implementar la funcionalidad para agregar secciones.

  `pos`(iface, csvAction)

    Deshabilita la acción de realizar unión entre la tabla de atributos de la capa de secciones y un archivo CSV, selecciona la capa temporal para agregar secciones, y la pone en modo de edición.

  `pre`()

    Verifica si existe la capa de secciones.

    Devuelve: | Un booleano que indica si ya esta cargada la capa de secciones:
    Tipo del valor devuelto:
    | bool

  `pro`()

    Crea una capa temporal para almacenar las secciones, en caso de que no exista.

class `src.actions.``BaseAction`

  Clase base que define la estructura de una acción.

  `pos`()

    En este método se pueden implementar procesos que se deben realizar una vez se ha concluido con éxito el llamado al método pos.

  `pre`()

    En este método puede definir y verificar condiciones iniciales necesarias para que se pueda realizar una acción.

  `pro`()

    En este método se puede implementar la funcionalidad esencial de la acción.

class `src.actions.``CSVAction`

  Esta acción se encarga de cargar un archivo CSV, y de unirlo con la tabla de atributos de la capa de secciones.

  `pos`(layer, csv_cols, csv_field, shp_cols, shp_field)

    Este método se encarga de realizar la unión entre el archivo CSV que se cargo, y la tabla de atributos de self.shp.

    Parámetros: | layer (QgsVectorLayer) – Capa del archivo CSV. csv_cols (Lista str) – Lista con las columnas de la capa CSV que se van a unir. csv_field (str) – Campo de la capa CSV que se va a usar como columna de unión. shp_cols (Lista str) – Lista de columnas de la tabla de atributos de self.shp que se van a unir. shp_field (str) – Campo de la capa self.shp que se va a usar como columna de unión.

  `pre`()

    Este método se encarga de obtener la capa de secciones del administrador de las capas cargadas (manager) y lo retorna.

    Devuelve: | La capa de secciones en caso de que la encuentre, retorna Nonde de otra forma.
    Tipo del valor devuelto:
    | QgsVectorLayer

  `pro`()

    Este método se encarga de guardar en una lista todos los nombres de las columnas de la tabla de atributos de self.shp y la retorna.

    Devuelve: | Lista con todos los nombres de las columnas de la tabla de atributos de self.shp
    Tipo del valor devuelto:
    | Lista str

class `src.actions.``ConcentrationPointsAction`

  Esta ación se encarga de fusionar la capa de secciones temporales (temp) con la capa de secciones.

  `addFeature`(layerA, feature=None, idx=-1)

    Inserta una característica (feature) en una capa en un orden establecido

    Parámetros: | layerA (QgsVectorLayer) – Capa en la que se va a insertar la característica (feature) feature (QgsFeature) – Característica (feature) que se va a insertar en la capa. idx (Integer) – Indice de la nueva característica (feature) que se va a insertar.
    Devuelve: | Una nueva capa con la característica insertada en el pocisión idx.
    Tipo del valor devuelto:
    | QgsVectorLayer

  `check`(segments, point)

    Verifica si un punto se encuentra entre dos segmentos

    Parámetros: | segments (Lista de QgsSegments) – Lista de segmentos entre los que se puede encontrar el punto. point (QgsPoint) – punto sobre el cual se va a hacer la verificación
    Devuelve: | Un booleano que indica si la condición se cumple o no.
    Tipo del valor devuelto:
    | Boolean

  `place`(segments, p)

    Ubica un punto entre los dos segmentos consecutivos a los que pertenece.

    Parámetros: | segments (Lista de QgsSegments) – Lista de segmentos p – punto que se va a ubicar en la lista de segmentos

  `pos`(iface)

    Agrega la capa de salida (output) al gestor de capas de QGIS.

  `pre`()

    Verifica que las capas necesarias para realizar esta acción estan cargadas.

    Devuelve: | Un booleano que indica si se cumple o no la condición.
    Tipo del valor devuelto:
    | bool

  `pro`()

    Crea una capa de salida con las secciones de la capa de secciones, y las secciones agregadas por el usuario.

class `src.actions.``CreateInputFileAction`

  Esta acción se encarga de la lógica necesaria para poder crear el archivo de entrada.

  `pos`(path, dis, time, wd, sl)

    Recibe la información del diálogo, y crea el archivo de entrada.

    Parámetros: | path (str) – Ruta del archivo que se va a crear. dis (list) – Lista con las distancias de los puntos de intersección. time (int) – Tiempo del cálculo. wd – Promedio de la profundidad del agua. sl (Decimal) – Pendiente
    Devuelve: | Booleano que indica si el proceso culmino con exito.
    Tipo del valor devuelto:
    | bool

  `pre`()

    Verifica que las capas necesarias para realizar esta acción estan cargadas.

    Devuelve: | Un booleano que indica si se cumple o no la condición.
    Tipo del valor devuelto:
    | bool

  `pro`()

    Cálcula las distancias entre los puntos de intersección de la capa de ejes, y la capa de secciones.

class `src.actions.``LayerAction`

  Esta clase representa la acción encargada de cargar las capas necesarias.

  `pos`()

    Este método se encarga de agregar todas las capas cargadas en el registro de QGIS (QgsMapLayerRegistry).

  `pre`()

    Este método se encarga de eliminar todas las capas cargagas previamente en el registro de QGIS (QgsMapLayerRegistry).

  `pro`(layers)

    Este método se encarga de cargar todas las capas en layers, y de llenar self.layers

    Parámetros: | layers (Lista str) – Lista de las rutas de todas las capas que se van a cargar.

class `src.actions.``ModellingAction`

  Esta acción se encarga de aplicar el modelo matemático sobre la información cargada por el usuario.

  `apply_modelling`(c_i, va, cd, flag)

    Método auxilar que abstrae la forma en la que se aplica el modelo matemático.

  `pos`(vel_name, conc_name, flag=0)

    Aplica el modelo matemático sobre la información.

    Parámetros: | vel_name (str) – Nombre de la columna en la que se encuetra la información de la velocidad. conc_name (str) – Nombre de la columna en la que se encuetra la información de los puntos de concentracion. flag – Bandera que indica que gráfica se va a desplegar.

  `pre`()

    Verifica que las capas necesarias para realizar esta acción estan cargadas.

    Devuelve: | Un booleano que indica si se cumple o no la condición.
    Tipo del valor devuelto:
    | bool

  `pro`()

    Inicializa variables necesarias para trabajar, y retorna los nombres de las columnas de la tabla de atributos de la capa de trabajo output.

    Devuelve: | Lista de columnas de la capa de trabajo output.
    Tipo del valor devuelto:
    | Lista str

## Módulo geometry

Este módulo contiene utilidades geometricas, que se utilizan en la clase CalidadCAR.

`geometry.``buildConvexPolygon`(segments)
  Construye un polígono convexo a partir de un conjungo de segementos,
    tomando todos los puntos de los segmentos que estan al extremo inicial, y final, y solo el punto de inicio y el punto final de los segementos intermedios.

  Parámetros: | segements (Lista de Polylines) –
  Devuelve: | Un polígono convexo que envuelve todos los puntos que se acabarón de describir.
  Tipo del valor devuelto:
  | QgsGeometry

`geometry.``distance`(a, b)

  Cálcula la distancia entre un punto a, y un punto b.

  Parámetros: | a (QgsPoint) – Punto a b (QgsPoint) – Punto b
  Devuelve: | Distancia entre a y b.
  Tipo del valor devuelto:
  | Double

`geometry.``getSegments`(layer)

  Retorna los segmentos de layer.

  Parámetros: | layer (QgsVectorLayer) – Capa de la cual se van a obtener los segementos
  Devuelve: | La lista de segmentos
  Tipo del valor devuelto:
  | Lista de Polylines

`geometry.``intersection`(A, B)

  Optiene el punto de insersección entre dos geometrías.

  Parámetros: | A (QgsGeometry fsdfsd) – Geometría A fsdfsdf B (QgsGeometry) – Geometría B
  Devuelve: | El punto de insersección, en caso de que exita, returna None de otra forma.
  Tipo del valor devuelto:
  | QgsPointXY

`geometry.``intersectionLayerGeometry`(layer, geometry)

  Obtiene la primera inresección entre una capa y una geometría.

  Parámetros: | layer (QgsVectorLayer) – Capa geometry (QgsGeometry) – Geometría
  Devuelve: | El punto de insersección, en caso de que exita, returna None de otra forma.
  Tipo del valor devuelto:
  | QgsPointXY

`geometry.``intersectionPoints`(layerA, layerB)

  Obtiene los puntos de intersección entre dos capas.

  Parámetros: | layerA (QgsVectorLayer) – Capa que se va a intersectar con layerB. layerB (QgsVectorLayer) – Capa que se va a intersectar con layerA.
  Devuelve: | La lista de los puntos de intersección
  Tipo del valor devuelto:
  | Lista de QgsPoints

## Módulo layer_manager

Este módulo propociona puntos de acceso al registro de capas de QGIS (QgsMapLayerRegistry.instance()), para hacer el código más legible.

`src.layer_manager.``add_layers`(layers)

  Agrega capas al registro de capas de qgis.

  Parámetros: | layers – Capas que se van a agregar.

`src.layer_manager.``get_all_layers`(layer_name)

  Retorna todas la capas con el nombre layer_name que estan en el registro de capas de qgis.

  Parámetros: | layer_name (str) – Nombre de la capa a buscar.
  Devuelve: | La primera capa cuyo nombre coincida con layer_name, en caso de que no exista se retorna None.
  Tipo del valor devuelto:
  | Lista de QgsMapLayer

`src.layer_manager.``get_layer`(layer_name)

  Busca una capa por nombre en el registro de capas de qgis.

  Parámetros: | layer_name (str) – Nombre de la capa a buscar.
  Devuelve: | La primera capa cuyo nombre coincida con layer_name, en caso de que no exista se retorna None.
  Tipo del valor devuelto:
  | QgsMapLayer

`src.layer_manager.``load_raster_layer`(path, name)

  Carga una capa rasterizada.

  Parámetros: | path (str) – Ruta de la capa que se va a cargar. name – Nombre de la capa que se va a cargar, este nombre será el identificador de la capa.
  Devuelve: | Capa rasterizada en caso de que sea valida, de lo contrario se retorna None.
  Tipo del valor devuelto:
  | QgsRasterLayer

`src.layer_manager.``load_vector_layer`(path, name, color=(0, 0, 0))

  Carga una capa vectorizada.

  Parámetros: | path (str) – Ruta de la capa que se va a cargar. name – Nombre de la capa que se va a cargar, este nombre será el identificador de la capa. color (Tupla de 3 elementos r, g, b) – Color que se la va a asignar a la capa
  Devuelve: | Capa vectorizada en caso de que sea valida, de lo contrario se retorna None
  Tipo del valor devuelto:
  | QgsVectorLayer

`src.layer_manager.``remove_layers`(layers)

  Elimina capas del registro de capas de qgis.

  Parámetros: | layers – Capas que se van a eliminar.

## Módulo util

`util.``comboBoxDialog`(self, title, text, values)

  Este diálogo le pide al usuario que seleccione una opción de un combobox y la retorna.

  Parámetros: | title (str) – Título del diálogo text (str) – Texto descriptivo del diálogo values (List str) – Opciones con las que se va a llenar el combobox
  Devuelve: | En caso de Aceptar retorna la opción que escogio, retorna None en caso de Cancelar
  Tipo del valor devuelto:
  | str

`util.``errorDialog`(self, text, detail)

  Dialogo de error que se lanzará cuando el usuario intente hacer una operación que no esta permitida.

  Parámetros: | text (str) – Identificador principal del error. name (str) – Información detallada del error.

`util.``infoDialog`(self, title, text, detail)

  Dialogo de información.

  Parámetros: | text (str) – Identificador principal del mensaje. name (str) – Información detallada del mensaje.

`util.``questionDialog`(self, title, detail)

  Este díalogo le hace una pregunta de Si/No al usuario.

  Parámetros: | title (str) – Título del diálogo detail (str) – Texto descriptivo del diálogo
  Devuelve: | La respuesta del usuario
  Tipo del valor devuelto:
  | bool

## Componentes gráficos

### Módulo calidad_car_dialog

class `calidad_car_dialog.``Ui_Dialog`(parent=None)

  Este diálogo es el encargado de permitirle al usuario cargar las capas necesarias.

  `getFilePaths`()

    Retorna la lista de rutas de las capas que el usuario desea cargar.

    Parámetros: | list (QListWidget) – Lista de items a los cuales se les va a extraer el texto.
    Devuelve: | La lista de las rutas de los archivos que el usuario selecciono.
    Tipo del valor devuelto:
    | Lista str.

  `handler`(title)

    Maneja el evento de click sobre cualquiera de los botones de cargar archivo, con el fin de abrir un diálogo que le permita al usuario seleccionar el archivo de su sistema de archivos.

### Módulo dialogo_csv

class `dialogo_csv.``CSVDialog`(fields, parent=None)

  Este diálogo es el encargado de cargar un archivo CSV, y de recolectar la información necesaria para unirlo con la capa de secciones.

  `addItem`()

    Agrega los items seleccionados de self.listSource a self.listTarget.

  `clear`()

    Limpia los componentes gráficos del diálogo.

  `configWidgets`()

    Configura los componentes gráficos del diálogo.

  `deleteItem`(list, item)

    Función auxiliar que remueve un item de una lista.

    Parámetros: | list (QListWidget) – Lista de la cual se va a eliminar el item. item (QListWidgetItem) – Item que se va a eliminar.

  `errorDialog`(selg, text, detail)
    Dialogo de error que se lanzará cuando el usuario intente hacer una
      operación que no esta permitida.

    Parámetros: | text (str) – Identificador principal del error. name (str) – Información detallada del error.

  `getItems`(list)
    Función auxiliar que extrae el texto de los items gráficos de la lista
      que se le pase.

    Parámetros: | list (QListWidget) – Lista de items a los cuales se les va a extraer el texto.
    Devuelve: | Lista del título de cada item.
    Tipo del valor devuelto:
    | Lista str

  `getJoinField`()

    Retorna el campo del archivo CSV sobre el cual se va a hacer la unión.

    Devuelve: | Campo sobre el cual se a hacer la unión
    Tipo del valor devuelto:
    | str

  `getJoinFieldTarget`()

    Retorna el campo de la capa secciones sobre el cual se va a hacer la unión con el archivo CSV.

    Devuelve: | Campo sobre el cual se a hacer la unión
    Tipo del valor devuelto:
    | str

  `getLayer`()

    Devuelve la el archivo CSV cargado como capa de QGIS.

    Devuelve: | La capa de qgis del archivo CSV que el usuario cargo.
    Tipo del valor devuelto:
    | QgsVectorLayer.

  `getSelectedColumns`()
    Retorna todos los campos de self.listTarget, los cuales contienen
      las columnas seleccionadas para unir a la capa de secciones.

    Devuelve: | Lista de las columnas seleccionadas.
    Tipo del valor devuelto:
    | Lista str.

  `handler`()

    Maneja el evento de click del botón self.buttonLoadFile

  `loadLayer`(path, name='csv')

    Esta función crea una capa de QGIS, a partir de un archivo CSV, lanza una excepción en caso de que el archivo no sea válido.

    Parámetros: | path (str) – Ruta del archivo CSV. name (str) – Nombre que se le asignará a la capa, por defecto es csv.
    Devuelve: | En caso de que no acurra ningun error, retorna la capa del archivo CSV.
    Tipo del valor devuelto:
    | QgsVectorLayer

  `pupulateLists`(columns=[])

    Llena las listas self.listSource, y self.comboJoinField con los nombres columnas del archivo CSV.

    Parámetros: | columns (Lista str) – Son las columnas que se van a instertar en las listas.

  `removeItem`()

    Remueve los items seleccionados de self.listTarget.