protected virtual void UpdateReaction(IObjectBase reactionAsEntity, IBaseNode reactionNodeAsBaseNode) { var reaction = reactionAsEntity.DowncastTo <IReaction>(); var reactionNode = reactionNodeAsBaseNode.DowncastTo <ReactionNode>(); reactionNode.ClearLinks(); var newEductDistance = new PointF(-70, 0); var newProductDistance = new PointF(30, 0); var newModifierDistance = new PointF(-30, -30); foreach (var rp in reaction.Educts) { createReactionLink(ReactionLinkType.Educt, reactionNode, moleculeNodeFor(rp.Partner.Id, reactionNode, newEductDistance)); } foreach (var rp in reaction.Products) { createReactionLink(ReactionLinkType.Product, reactionNode, moleculeNodeFor(rp.Partner.Id, reactionNode, newProductDistance)); } foreach (var modifierName in reaction.ModifierNames) { // modifier are in the same container as reaction (and not in subcontainers) var modifier = getModifierNode(reaction, modifierName); if (modifier != null) { createReactionLink(ReactionLinkType.Modifier, reactionNode, moleculeNodeFor(modifier.Id, reactionNode, newModifierDistance)); } } }
// signature is necessary for use as argument in RegisterUpdateMethod public void UpdateReactionBuilder(IObjectBase reactionAsObjectBase, IBaseNode reactionNodeAsBaseNode) { var reactionBuilder = reactionAsObjectBase.DowncastTo <IReactionBuilder>(); var reactionNode = reactionNodeAsBaseNode.DowncastTo <ReactionNode>(); reactionNode.ClearLinks(); foreach (var rpb in reactionBuilder.Educts) { createReactionLink(ReactionLinkType.Educt, reactionNode, getMoleculeNode(rpb.MoleculeName, reactionNode.Location)); } foreach (var rpb in reactionBuilder.Products) { createReactionLink(ReactionLinkType.Product, reactionNode, getMoleculeNode(rpb.MoleculeName, reactionNode.Location)); } foreach (var modifierName in reactionBuilder.ModifierNames) { createReactionLink(ReactionLinkType.Modifier, reactionNode, getMoleculeNode(modifierName, reactionNode.Location)); } reactionNode.SetColorFrom(DiagramOptions.DiagramColors); }
private void updateObserver(IObjectBase observerAsEntity, IBaseNode observerNodeAsBaseNode) { var observer = observerAsEntity.DowncastTo <IObserver>(); var observerNode = observerNodeAsBaseNode.DowncastTo <ObserverNode>(); observerNode.ClearLinks(); foreach (var oRef in observer.Formula.ObjectReferences) { var refId = oRef.Object.Id; var refParentId = oRef.Object.ParentContainer.Id; var moleculeNode = DiagramModel.GetNode <MoleculeNode>(refId); // if object reference is not molecule amount itself, it could be a child of molecule amount, e.g. a concentration if (moleculeNode == null) { moleculeNode = DiagramModel.GetNode <MoleculeNode>(refParentId); } if (moleculeNode != null) { createObserverLink(observerNode, moleculeNode); } } }