Exemplo n.º 1
0
        /// <summary>
        /// create edge by using the information of element.
        /// </summary>
        public void SetEdges()
        {
            // Error Check
            if (base.m_canvas == null || m_ecellObj == null || m_layer == null)
                return;
            EcellProcess process = (EcellProcess)m_ecellObj;
            if (process.ReferenceList == null)
                return;

            try
            {
                List<EcellReference> list = process.ReferenceList;
                float width = m_canvas.Control.Animation.EdgeWidth;
                Brush brush = m_canvas.Control.Animation.EdgeBrush;
                // Create EdgeInfo
                List<EdgeInfo> infos = CreateEdgeInfos(process.Key, list);

                // Delete edges.
                List<PPathwayEdge> edges = new List<PPathwayEdge>();
                foreach (PPathwayEdge edge in m_edges)
                {
                    bool exist = false;
                    EdgeInfo temp = null;
                    foreach (EdgeInfo info in infos)
                    {
                        if (edge.Info.VariableKey != info.VariableKey)
                            continue;
                        // Check existing edge.
                        exist = true;
                        temp = info;
                        edge.EdgeWidth = width;
                        edge.Info.Direction = info.Direction;
                        edge.Info.LineType = info.LineType;
                        //
                        edge.Refresh();
                        edges.Add(edge);
                        break;
                    }
                    // Delete
                    if (!exist)
                    {
                        edge.RemoveFromParent();
                        edge.Dispose();
                        continue;
                    }
                    //
                    infos.Remove(temp);
                    int index = m_layer.IndexOfChild(edge);
                    if (index < 0)
                        m_layer.AddChild(edge);
                }
                m_edges.Clear();
                m_edges = edges;

                // Create edge.
                foreach (EdgeInfo info in infos)
                {
                    PPathwayVariable var = base.m_canvas.Variables[info.VariableKey];
                    PPathwayEdge edge = new PPathwayEdge(m_canvas, info, this, var);
                    edge.EdgeWidth = width;
                    edge.EdgeBrush = brush;
                    edge.Selected = this.Selected || var.Selected;
                    edge.Refresh();
                    m_layer.AddChild(edge);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(" target is " + e.TargetSite);
            }
        }