private void DrawVertex(Graphics g, VertexDrawModel v, vec2 min, vec2 max) { if (Clip.SimpleClip(v.VertexStrPos, max, min, v.R / 2f)) { g.DrawString(v.VertexStr, font, brush, new RectangleF(v.VertexStrPos.x, v.VertexStrPos.y, v.R * 2f, v.R * 2f)); } int i = 0; vec2 A = new vec2(v.Lines[i++]); for (; i < v.Lines.Length; i++) { vec2 B = new vec2(v.Lines[i]); if (Clip.RectangleClip(ref A, ref B, min, max)) { g.DrawLine(pen, A.x, A.y, B.x, B.y); } A = new vec2(v.Lines[i]); } }
// --------------------------------- !From events --------------------------------- // //public Edges makeEdges(vec2 posSource, string source, vec2 posStock, string stock, float r, string weight) //{ // if (oriented) return new OrientedEdges(posSource, source, posStock, stock, r, weight); // else return new NonOrientedEdges(posSource, source, posStock, stock, r, weight); //} // ----------------------------- Mouse Events ----------------------------- // private void MainForm_MouseClick(object sender, MouseEventArgs e) { try { if (!_field.Status || tsbtnMove.Checked) { return; } switch (e.Button) { case MouseButtons.Left: { vec2 pos = new vec2((float)e.X, (float)e.Y); if (max.x - pos.x < R || pos.x - left < R || max.y - pos.y < R || pos.y - top < R) { _field.UnmarkGraphModels(); } else if ((selectedKey = _field.GetPosKey(pos, R)) != null && !tsBtnAddVertex.Checked) { _field.MarkGraphModel(selectedKey); var model = _field[selectedKey]; if (model is AVertexModel && _field.MarkedModelsCount <= 2) { if (_field.MarkedVertexModelCount == 1) { sourceModel = (AVertexModel)model; } else if (_field.MarkedVertexModelCount == 2) { stockModel = (AVertexModel)model; } } } else if (_field.GetPosKey(pos, R + R + R / 2) == null && tsBtnAddVertex.Checked) { if (_field.MarkedVertexModelCount > 0 || _field.MarkedEdgeModelCount > 0) { _field.UnmarkGraphModels(); break; } string v = i++.ToString(); var model = new VertexDrawModel(v, pos); AddModelCommandArgs command = new AddModelCommandArgs(model); CommandEntered?.Invoke(this, command); } else { _field.UnmarkGraphModels(); sourceModel = stockModel = null; } break; } default: break; } } catch (Exception ex) { PostErrorMessage(ex.Message); } }