Tipos de objetos

Las estructuras de datos de EAGLE se almacenan en archivos XML:

Estos archivos de datos contienen una jerarquía de objetos. En un programa de idioma del usuario, puede acceder a estas jerarquías a través de sus respectivas sentencias de acceso integradas:

library(L) { ... }
schematic(S) { ... }
board(B) { ... }

Estas sentencias de acceso configuran un contexto en el que se puede acceder a todos los objetos incluidos en la biblioteca, el esquema o la placa.

Se puede acceder a las propiedades de estos objetos a través de los miembros. Existen dos tipos de miembros:

Los miembros de datos devuelven inmediatamente los datos solicitados de un objeto. Por ejemplo, en

board(B) {
  printf("%s\n", B.name);
  }

el nombre del miembro de datos del objeto de la placa B devuelve el nombre de la placa. Los miembros de datos también pueden devolver otros objetos,

board(B) {
  printf("%f\n", B.grid.size);
  }

como cuando el miembro de datos de la rejilla de la placa devuelve un objeto de la rejilla, del que el miembro de datos que se refiere al tamaño devuelve el tamaño de la rejilla.

Los miembros de bucle se utilizan para acceder a varios objetos del mismo tipo, que se encuentran en un objeto de nivel superior:

board(B) {
  B.elements(E) {
    printf("%-8s %-8s\n", E.name, E.value);
    }
  }

En este ejemplo se trata la función de miembro de bucle elements() de la placa para configurar un bucle a través de todos los elementos de la placa. El bloque que sigue a la sentencia B.elements(E) ejecuta cada elemento en orden y se puede hacer referencia al elemento actual dentro del bloque a través del nombre E.

Los miembros de bucle procesan los objetos en orden alfanumérico, siempre que tengan un nombre.

La función del miembro de bucle crea una variable del tipo que sea necesario para poder contener los objetos solicitados. Puede utilizar cualquier nombre válido para una variable de este tipo, por lo que el ejemplo anterior también se puede escribir como

board(MyBoard) {
  MyBoard.elements(TheCurrentElement) {
    printf("%-8s %-8s\n", TheCurrentElement.name, TheCurrentElement.value);
    }
  }

y haría exactamente lo mismo. El ámbito de la variable creada por una función para el miembro de bucle se limita a la sentencia (o bloque) inmediatamente después del inicio de la función de bucle.

Jerarquía de objetos de una biblioteca

LIBRARY
  GRID
  LAYER
  DEVICESET
    DEVICE
    GATE
  FOOTPRINT
    CONTACT
      PAD
      SMD
    CIRCLE
    HOLE
    RECTANGLE
    FRAME
    DIMENSION
    TEXT
    WIRE
    POLYSHAPE
      WIRE
    POLYCUTOUT
      WIRE
  PACKAGE3D
  SYMBOL
    PIN
    CIRCLE
    RECTANGLE
    FRAME
    DIMENSION
    TEXT
    WIRE
    POLYSHAPE
      WIRE

Jerarquía de objetos de un esquema

SCHEMATIC
  GRID
  LAYER
  LIBRARY
  ATTRIBUTE
  VARIANTDEF
  COMPONENT
    ATTRIBUTE
    VARIANT
  SHEET
    CIRCLE
    RECTANGLE
    FRAME
    DIMENSION
    TEXT
    WIRE
    POLYSHAPE
      WIRE
    INSTANCE
      ATTRIBUTE
    MODULEINST
    BUS
      SEGMENT
        LABEL
          TEXT
          WIRE
        WIRE
    NET
      SEGMENT
        JUNCTION
        PINREF
        PORTREF
        TEXT
        WIRE
  MODULE
    PORT
    COMPONENT
    SHEET
      (same as above)

Jerarquía de objetos de una placa

BOARD
  GRID
  LAYER
  LIBRARY
  ATTRIBUTE
  VARIANTDEF
  CIRCLE
  HOLE
  RECTANGLE
  FRAME
  DIMENSION
  TEXT
  WIRE
  POLYSHAPE
    WIRE
  POLYCUTOUT
    WIRE
  ELEMENT
    ATTRIBUTE
    VARIANT
  SIGNAL
    CONTACTREF
    POLYPOUR
      WIRE
    VIA
    WIRE