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); }
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()); } }
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); } } }
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); } } }