Objetos de diagrama y conexiones
La capa visual de un modelo se captura en tres colecciones:
diagramObjects, diagramConnections y notes.
Objetos de diagrama
Sección titulada «Objetos de diagrama»Un
ArchiDiagramObject
es un nodo visual dentro de una vista: un DiagramObject de Archi (la
representación visual de un ArchiElement) o cualquier otro contenedor
visual que no sea Note que Archi pueda colocar en un diagrama — por ejemplo
un Group, que no tiene ningún elemento semántico subyacente. Cualquier nodo
de este tipo se preserva de forma genérica.
interface ArchiDiagramObject { viewId: string; parentId: string | null; // null when directly owned by the view archimateElementId: string | null; // the semantic element, or null (e.g. Group) referencedModelId: string | null; // DiagramModelReference only childrenIds: string[]; // diagram objects nested directly inside connectionIds: string[]; // connections whose source is this object}Elementos vs. contenedores
Sección titulada «Elementos vs. contenedores»xsiType, no archimateElementId, es el discriminador correcto entre un
objeto respaldado por un elemento y un contenedor puramente visual: tanto
un DiagramObject respaldado por un elemento como un Group pueden
relacionarse con ids — pero solo un Group/referencia tiene
archimateElementId === null. Y solo un DiagramModelReference (el objeto
de Archi “insertar vista como referencia”) tiene un referencedModelId, que
puede apuntar a cualquier IDiagramModel — incluidas las vistas
Sketch/Canvas, no solo a otras ArchiView.
Conexiones
Sección titulada «Conexiones»Una
ArchiDiagramConnection
es una conexión visual entre dos objetos de diagrama (un sourceConnection
de Archi), que normalmente representa una relación ArchiMate subyacente.
interface ArchiDiagramConnection { sourceId: string; // a VISUAL id — an ArchiDiagramObject id targetId: string; // a VISUAL id — an ArchiDiagramObject id archimateRelationshipId: string | null; // the semantic relationship, if any bendpoints: ArchiBendpoint[];}Importante: sourceId/targetId referencian objetos de diagrama, no
elementos semánticos — resuélvalos contra model.diagramObjects primero y
luego siga archimateElementId si necesita los elementos subyacentes.
archimateRelationshipId es legítimamente null para un vínculo visual
simple sin significado semántico (p. ej. un conector Note-a-Note).
Un ArchiNote es una
nota de diagrama de texto libre:
interface ArchiNote { viewId: string; parentId: string | null; content: string | null; bounds: ArchiBounds | null; style: ArchiStyle | null; features: ArchiFeature[];}Geometría anidada
Sección titulada «Geometría anidada»Los objetos de diagrama pueden contener objetos de diagrama (grupos, contenedores anidados). Los límites de un objeto anidado son relativos al origen de su propio padre — consulte Geometría y coordenadas anidadas para saber cómo calcular coordenadas absolutas.
Ejemplo
Sección titulada «Ejemplo»// Every element shown in a view, resolved from its diagram objectsconst view = model.views.find((v) => v.id === 'view-overview');const elementIndex = new Map(model.elements.map((e) => [e.id, e]));
const shown = view ? view.diagramObjectIds .map((id) => model.diagramObjects.find((o) => o.id === id)) .flatMap((o) => (o?.archimateElementId ? [elementIndex.get(o.archimateElementId)] : [])) .filter(Boolean) : [];