Exemplo n.º 1
0
        private void DrawWeight(Graphics g, AEdgeModel edge, vec2 min, vec2 max)
        {
            Matrix       matrix       = new Matrix();
            StringFormat stringFormat = new StringFormat();

            matrix.Translate(edge.WeightPos.x, edge.WeightPos.y);
            matrix.Rotate(edge.WeightAngle);
            if (edge.WeightAngle > 90f)
            {
                matrix.Multiply(mirrorY);
                matrix.Multiply(mirrorX);
            }
            g.MultiplyTransform(matrix);
            string res = edge.AddMark + edge.StringRepresent;

            g.DrawString(res, font, brush, 0, 0, stringFormat);
            matrix.Reset();
            if (edge.WeightAngle > 90f)
            {
                matrix.Multiply(mirrorX);
                matrix.Multiply(mirrorY);
            }
            matrix.Rotate(-edge.WeightAngle);
            matrix.Translate(-edge.WeightPos.x, -edge.WeightPos.y);
            g.MultiplyTransform(matrix);
        }
Exemplo n.º 2
0
        public GraphModel RemoveEdgeModel(AEdgeModel edgeModel, bool raise = true)
        {
            int weight = 0;

            if (edgeModel.Weight != null)
            {
                weight = int.Parse(edgeModel.Weight);
            }
            var source = new TVertex();
            var stock  = new TVertex();

            source.SetFromString(edgeModel.Source.VertexStr);
            stock.SetFromString(edgeModel.Stock.VertexStr);
            var    res = Graph.RemoveEdge(source, stock);
            string key = edgeModel.Key;

            if (res == ReturnValue.Succsess)
            {
                _models.Remove(key);
                if (raise)
                {
                    FieldUpdate?.Invoke(this, new ModelFieldUpdateArgs(FieldEvents.RemoveModel));
                }
                return(edgeModel);
            }
            else
            {
                throw new Exception(res.ToString());
            }
        }
Exemplo n.º 3
0
        public void AddEdgeModel(AEdgeModel edgeModel, bool raise = true)
        {
            var weight = 0;

            if (edgeModel.Weight != null && edgeModel.Weight != "")
            {
                weight = int.Parse(edgeModel.Weight);
            }
            var source = new TVertex();
            var stock  = new TVertex();

            source.SetFromString(edgeModel.Source.VertexStr);
            stock.SetFromString(edgeModel.Stock.VertexStr);
            var res = Graph.AddEdge(source, stock, weight);

            if (res != ReturnValue.Succsess)
            {
                throw new Exception(res.ToString());
            }
            else
            {
                _models.Add(edgeModel.Key, edgeModel);
                if (raise)
                {
                    FieldUpdate?.Invoke(this, null);
                }
            }
        }
Exemplo n.º 4
0
        public void MoveVertexModel(string key, vec2 newPos, bool raise = true)
        {
            GraphModel model;

            if (_models.ContainsKey(key) && (model = _models[key]) is AVertexModel)
            {
                ((AVertexModel)model).UpdatePos(newPos);
                _models.Values.ToList().ForEach(m =>
                {
                    AEdgeModel edge = m as AEdgeModel;
                    if (edge != null && (edge.Source.Key == key || edge.Stock.Key == key))
                    {
                        edge.RefreshPos();
                    }
                });
                if (raise)
                {
                    FieldUpdate?.Invoke(this, null);
                }
            }
        }