private IHSExplicitVectorValue <HSEdgeState> __qwGetStartVector(IQGVertex startVertex) { List <HSEdgeState> edgeStates = new List <HSEdgeState>(); double n = startVertex.GraphEdges.Count(); IAlgebraicExpression coefficient = IAlgebraicExpression.RealNumber(1.0d / Math.Sqrt(n)); foreach (QGEdge edge in startVertex.GraphEdges) { HSEdgeState edgeState; if (edge.Vertex1 == startVertex) { edgeState = new HSEdgeState(edge.Vertex1, edge.Vertex2); } else { edgeState = new HSEdgeState(edge.Vertex2, edge.Vertex1); } edgeStates.Add(edgeState); } var vectorTerms = edgeStates.Select(s => new VectorTerm <HSEdgeState>(s, coefficient)); return(IHSExplicitVector <HSEdgeState> .VectorValue(vectorTerms)); }
private void __loadVertexIDTypeCB() { if (this.LoadedVertices.Count() != 1) { this.VertexIDTypeCB.SelectedIndex = -1; this.VertexIDTypeCB.IsEnabled = false; this.VertexIDField.FieldText = ""; this.VertexIDField.IsEnabled = false; return; } IQGVertex loadedVertex = this.LoadedVertices.First(); this.VertexIDTypeCB.SelectedIndex = (int)loadedVertex.VertexIDType; if (loadedVertex.VertexIDType == QGVertexIDType.Sequential) { this.VertexIDField.FieldText = ""; this.VertexIDField.IsEnabled = false; } else { this.VertexIDField.FieldText = loadedVertex.ID as string; this.VertexIDField.IsEnabled = true; } }
private void __IsStartVertexCheckbox_ValueChanged(object sender, RoutedEventArgs e) { if (_IsLoading) { return; } if (this.LoadedVertices.Count() != 1) { throw new Exception("Setting the start vertex status can only be done to one vertex."); } IQGVertex loadedVertex = this.LoadedVertices.First(); if (this.IsStartVertexCheckbox.IsChecked == true) { loadedVertex.SetAsStart(); } else { loadedVertex.ClearVertexStatus(); } __reloadControl(); }
public IQGVertex OtherVertex(IQGVertex v) { if (v == this.Vertex1) { return(this.Vertex2); } if (v == this.Vertex2) { return(this.Vertex1); } throw new Exception("Vertex v is not present in the edge."); }
protected override void OnAfterDeserializing(QXDeserializingEventArgs <QGRootLayer> e) { base.OnAfterDeserializing(e); foreach (QGXmlEdgeInfo ei in QXEdgeSerializer.LoadedEdges) { IQGVertex vertex1 = QXVertexSerializer.IndexToVertexDictionary[ei.Vertex1Index]; IQGVertex vertex2 = QXVertexSerializer.IndexToVertexDictionary[ei.Vertex2Index]; vertex1.CreateEdge(vertex2); } QXVertexSerializer.IndexToVertexDictionary.Clear(); QXEdgeSerializer.LoadedEdges.Clear(); }
private void __VertexIDField_TextChanged(object sender, RoutedEventArgs e) { if (_IsLoading) { return; } if (this.LoadedVertices.Count() != 1) { throw new Exception("Setting vertex ID can only be done to one vertex at a time."); } IQGVertex loadedVertex = this.LoadedVertices.First(); loadedVertex.ID = this.VertexIDField.FieldText; __reloadControl(); }
public Vector GetEdgeVector(IQGVertex pointingTo) { if (this.ParentLayer == null) { return(default(Vector)); } if (pointingTo != Vertex1 && pointingTo != Vertex2) { throw new Exception("Nope."); } IQGVertex vTo = pointingTo == this.Vertex1 ? this.Vertex1 : this.Vertex2; IQGVertex vFrom = pointingTo == this.Vertex1 ? this.Vertex2 : this.Vertex1; Point pTo = this.ParentLayer.GetLocalCoordinatesOf(vTo); Point pFrom = this.ParentLayer.GetLocalCoordinatesOf(vFrom); return(pTo - pFrom); }
public QGEdge(IQGVertex v1, IQGVertex v2) : base() { this.Vertex1 = v1; this.Vertex2 = v2; this.WPFSurfaceLine = new Line(); this.SurfaceThickness = 15; this.WPFSurfaceLine.Stroke = Brushes.Transparent; this.WPFEdgeLine = new Line(); this.WPFEdgeLine.StrokeThickness = this.LineThickness; this.WPFEdgeLine.Stroke = Brushes.DarkBlue; this.RegisterWPFElement(this.WPFEdgeLine); this.RegisterWPFElement(this.WPFSurfaceLine); this.SetWPFPrimaryElement(this.WPFSurfaceLine); /////// ((IQGDraggable)this.Vertex1).AddDragStartEventHandler(__VertexDragStart, QGDragParameterType.All); ((IQGDraggable)this.Vertex2).AddDragStartEventHandler(__VertexDragStart, QGDragParameterType.All); ((IQGDraggable)this.Vertex1).AddDragStopEventHandler(__VertexDragStop, QGDragParameterType.All); ((IQGDraggable)this.Vertex2).AddDragStopEventHandler(__VertexDragStop, QGDragParameterType.All); this.Vertex1.PositionChange += __positionChange; this.Vertex2.PositionChange += __positionChange; this.Vertex1.RegisterControlInitMethod(__registerParent); this.Vertex2.RegisterControlInitMethod(__registerParent); ((IQGDraggable)this).SetDraggability(true, QGDragParameterType.Active); ((IQGDraggable)this).SetDraggability(false, QGDragParameterType.Passive); ((IQGDraggable)this).SetDraggability(false, QGDragParameterType.Proxy); ((IQGDraggable)this).SetDragMobility(false); this.SetProxyTargets(_ProxyTargets, QGDragParameterType.Active); //this.UserSelectable = true; }
private void __VertexIDTypeCB_SelectionChanged(object sender, RoutedEventArgs e) { if (_IsLoading) { return; } if (this.LoadedVertices.Count() != 1) { throw new Exception("Setting vertex ID type can only be done to one vertex at a time."); } IQGVertex loadedVertex = this.LoadedVertices.First(); loadedVertex.VertexIDType = (QGVertexIDType)this.VertexIDTypeCB.SelectedIndex; if (loadedVertex.VertexIDType == QGVertexIDType.Local || loadedVertex.VertexIDType == QGVertexIDType.Global && !(loadedVertex.ID is string)) { loadedVertex.ID = ""; } __reloadControl(); }
public QGEdge GetEdge(IQGVertex v2) => ((IQGVertex)this).GetEdge(v2);
public static bool IsStartVertex(this IQGVertex v) => IQGVertex.StartVertex == v;
public static bool IsMarked(this IQGVertex v) => v.VertexStatus == "marked";
public static void SetAsStart(this IQGVertex v) => v.SetVertexStatus("start");
public static void MarkVertex(this IQGVertex v) => v.SetVertexStatus("marked");
public HSEdgeState(IQGVertex v1, IQGVertex v2) { this.Vertex1 = v1; this.Vertex2 = v2; }
public QGEdge CreateEdgeIfAbsent(IQGVertex v2) => ((IQGVertex)this).CreateEdgeIfAbsent(v2);
public QGEdge CreateEdge(IQGVertex v2) => ((IQGVertex)this).CreateEdge(v2);
public bool ContainsEdge(IQGVertex v2) => ((IQGVertex)this).ContainsEdge(v2);
public bool ContainsVertex(IQGVertex v) { return(v == this.Vertex1 || v == this.Vertex2); }