├── GraphX.Controls ├── .gitignore ├── Images │ └── help_black.png ├── packages.config ├── Models │ ├── RemoveControlEventHandler.cs │ ├── VertexPositionChangedEH.cs │ ├── EdgeSelectedEventHandler.cs │ ├── VertexSelectedEventHandler.cs │ ├── ControlEventArgs.cs │ ├── VertexMovedEventArgs.cs │ ├── Interfaces │ │ ├── IGraphControlFactory.cs │ │ ├── IAttachableControl.cs │ │ └── ILabelFactory.cs │ ├── VertexSelectedEventArgs.cs │ ├── ContentSizeChangedEventHandler.cs │ ├── VertexPositionEventArgs.cs │ ├── EdgeSelectedEventArgs.cs │ ├── ControlClickedEventArgs.cs │ ├── GraphControlFactory.cs │ └── DefaultLabelFactory.cs ├── Controls │ ├── ZoomControl │ │ ├── SupportClasses │ │ │ ├── AreaSelectedEventHandler.cs │ │ │ ├── MouseWheelZoomingMode.cs │ │ │ ├── ContentSizeChangedHandler.cs │ │ │ ├── AreaSelectedEventArgs.cs │ │ │ ├── ZoomControlModes.cs │ │ │ └── ZoomViewModifierMode.cs │ │ ├── Converters │ │ │ ├── EqualityToBooleanConverter.cs │ │ │ ├── DoubleToLog10Converter.cs │ │ │ └── GeometryToPathGeometryConverter.cs │ │ └── Helpers │ │ │ └── PointHelper.cs │ └── Misc │ │ ├── EdgeDashStyle.cs │ │ ├── IGraphArea.cs │ │ ├── ControlDrawOrder.cs │ │ ├── LogicCoreChangedAction.cs │ │ ├── IGraphAreaBase.cs │ │ ├── IVertexLabelControl.cs │ │ ├── IPositionChangeNotify.cs │ │ ├── IZoomControl.cs │ │ ├── IGraphControl.cs │ │ ├── ITrackableContent.cs │ │ ├── IVertexConnectionPoint.cs │ │ └── IEdgeLabelControl.cs ├── Animations │ ├── Enums │ │ ├── MouseOverAnimation.cs │ │ ├── MoveAnimation.cs │ │ └── DeleteAnimation.cs │ └── Interfaces │ │ ├── IBidirectionalControlAnimation.cs │ │ └── IOneWayControlAnimation.cs ├── DesignerExampleData │ ├── EdgeDataExample.cs │ └── VertexDataExample.cs ├── ExceptionExtensions.cs ├── Properties │ └── AssemblyInfo.cs └── GraphX.WPF.Controls.nuspec ├── Examples ├── SimpleGraph │ ├── .gitignore │ ├── readme.txt │ ├── Images │ │ ├── dice.png │ │ └── update.png │ ├── packages.config │ ├── App.config │ ├── Properties │ │ ├── Settings.settings │ │ └── Settings.Designer.cs │ ├── App.xaml.cs │ ├── App.xaml │ └── Models │ │ ├── GXLogicCoreExample.cs │ │ ├── GraphAreaExample.cs │ │ ├── GraphExample.cs │ │ └── DataVertex.cs ├── WindowsFormsProject │ ├── .gitignore │ ├── Images │ │ ├── dice.png │ │ └── update.png │ ├── packages.config │ ├── app.config │ ├── Properties │ │ ├── Settings.settings │ │ └── Settings.Designer.cs │ ├── Program.cs │ └── Models │ │ ├── GraphAreaExample.cs │ │ ├── GraphExample.cs │ │ └── DataVertex.cs ├── ShowcaseApp.WPF │ ├── app.ico │ ├── Assets │ │ ├── dice.png │ │ ├── male.png │ │ ├── carpet.png │ │ ├── female.png │ │ ├── tr_red.png │ │ ├── board_hd.png │ │ ├── brick_16.png │ │ ├── hand_comp.png │ │ ├── tr_grren.png │ │ ├── blackCircle.png │ │ ├── circle_blue.png │ │ ├── circle_red.png │ │ ├── grid_paper.png │ │ ├── hand_comp2.png │ │ ├── hand_comp3.png │ │ ├── SplashScreen.png │ │ ├── circle_green.png │ │ ├── blackCircleFilled.png │ │ ├── background.snowflakes.jpg │ │ └── ModernUI.Snowflakes.xaml │ ├── Models │ │ ├── EditorOperationMode.cs │ │ ├── DataItem.cs │ │ ├── MiniSpecialType.cs │ │ ├── ColorModel.cs │ │ ├── LinkCommands.cs │ │ ├── ImageLoader.cs │ │ └── SimpleCommand.cs │ ├── App.config │ ├── ExampleModels │ │ ├── GraphExample.cs │ │ ├── GraphAreaExample.cs │ │ ├── LogicCoreExample.cs │ │ ├── ExampleExternalOverlapRemovalAlgorithm.cs │ │ ├── Filters │ │ │ └── BlueVertexFilter.cs │ │ ├── ExampleMoveAnimation.cs │ │ ├── ExampleExternalEdgeRoutingAlgorithm.cs │ │ └── DataVertex.cs │ ├── readme.txt │ ├── Properties │ │ ├── Settings.settings │ │ └── Settings.Designer.cs │ ├── Pages │ │ ├── Settings.xaml.cs │ │ ├── Introduction.xaml.cs │ │ ├── FeatureLists │ │ │ ├── FeaturesPageData.xaml.cs │ │ │ ├── FeaturesPageEdges.xaml.cs │ │ │ ├── FeaturesPageLayouts.xaml.cs │ │ │ ├── FeaturesPageTemplates.xaml.cs │ │ │ └── FeaturesPageData.xaml │ │ └── Settings.xaml │ ├── App.xaml.cs │ ├── packages.config │ ├── Templates │ │ ├── TransparentTooltips.xaml │ │ └── Mini │ │ │ └── LayoutDataFiltering.xaml │ ├── Content │ │ └── SettingsAppearance.xaml.cs │ ├── ShowcaseApp.WPF.csproj.DotSettings │ ├── App.xaml │ └── Controls │ │ ├── MiniContentPage.xaml.cs │ │ ├── MiniContentPage.xaml │ │ ├── SpecialWindowControl.xaml │ │ ├── MiniXamlPage.xaml │ │ └── MiniXamlTemplatePage.xaml ├── UAP.SimpleGraph │ ├── Assets │ │ ├── 100.png │ │ ├── 150.png │ │ ├── 300.png │ │ ├── 44.png │ │ ├── 50.png │ │ ├── 88.png │ │ ├── Logo.png │ │ ├── play.png │ │ ├── tr_red.png │ │ ├── MidLogo.png │ │ ├── SmallLogo.png │ │ ├── StoreLogo.png │ │ ├── refresh.png │ │ ├── tr_grren.png │ │ ├── newlogo_big.png │ │ ├── Logo.scale-100.png │ │ ├── Logo.scale-200.png │ │ ├── SplashScreen.png │ │ ├── SplashScreen.scale-100.png │ │ └── SplashScreen.scale-200.png │ ├── Models │ │ ├── DebugItems.cs │ │ ├── GXLogicCoreExample.cs │ │ ├── CurvedErParameters.cs │ │ ├── GraphAreaExample.cs │ │ └── GraphExample.cs │ ├── App.xaml │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ └── Default.rd.xml │ └── UAP.SimpleGraph.nuget.targets ├── WindowsDesktop_VB.NET_WinForms_Example │ ├── packages.config │ ├── Models │ │ ├── GraphExample.vb │ │ ├── GraphAreaExample.vb │ │ ├── DataVertex.vb │ │ └── DataEdge.vb │ ├── App.config │ └── My Project │ │ ├── Settings.settings │ │ ├── Application.myapp │ │ └── AssemblyInfo.vb └── SimpleGraph.DotNetCore │ ├── App.xaml.cs │ ├── App.xaml │ └── AssemblyInfo.cs ├── Documents ├── AIV.cs ├── Licenses │ ├── License.MediaFIles.txt │ └── License.YAXLib.txt └── TODO.txt ├── ExternalDlls ├── FirstFloor.ModernUI.dll └── Microsoft.Windows.Shell.dll ├── GraphX.Standard.Common ├── signature.snk ├── Enums │ ├── GraphControlType.cs │ ├── ImageType.cs │ ├── OverlapRemovalAlgorithmTypeEnum.cs │ ├── EdgeRoutingAlgorithmTypeEnum.cs │ ├── VertexShape.cs │ ├── EventType.cs │ ├── EdgesType.cs │ ├── HighlightStrategy.cs │ ├── ProcessingOptionEnum.cs │ └── LayoutAlgorithmTypeEnum.cs ├── Interfaces │ ├── IAlgorithmParameters.cs │ ├── IEdgeRoutingParameters.cs │ ├── IOverlapRemovalParameters.cs │ ├── IRoutingInfo.cs │ ├── IWeightedEdge.cs │ ├── ILayoutParameters.cs │ ├── ILayoutAlgorithm.cs │ ├── IIdentifiableGraphDataObject.cs │ ├── IGraphXVertex.cs │ ├── ICloneable.cs │ ├── ILayoutEdgeRouting.cs │ ├── IExternalOverlapRemoval.cs │ ├── IGraphFIlter.cs │ ├── IOverlapRemovalAlgorithm.cs │ └── IAlgorithmStorage.cs ├── GraphX.Standard.Common.csproj ├── Exceptions │ ├── GX_ObsoleteException.cs │ ├── GX_ObjectNotFoundException.cs │ ├── GX_SerializationException.cs │ ├── GX_GeneralException.cs │ └── GX_InvalidDataException.cs ├── Models │ ├── EdgeRoutingVisualData.cs │ ├── GraphSerializationData.cs │ ├── VertexBase.cs │ └── WeightedEdge.cs ├── Helpers │ └── CommonExtensions.cs └── Measure │ └── Thickness.cs ├── GraphX.UAP.Controls ├── Images │ ├── round1.png │ ├── round2.png │ ├── cross-icon.png │ └── help_black.png ├── Models │ ├── MouseButtonEventArgs.cs │ ├── ModifierKeys.cs │ ├── VertexMovedEventArgs.cs │ ├── VertexSelectedEventArgs.cs │ ├── DispatcherHelper.cs │ ├── EdgeSelectedEventArgs.cs │ ├── XamlTypes │ │ └── ViewModelXamlMetadataProvider.cs │ ├── AnimationHelper.cs │ └── FileServiceProviderMETRO.cs ├── Properties │ └── AssemblyInfo.cs ├── Controls │ └── ZoomControl │ │ ├── SupportClasses │ │ ├── AreaSelectedEventHandler.cs │ │ ├── MouseWheelZoomingMode.cs │ │ ├── ContentSizeChangedHandler.cs │ │ ├── AreaSelectedEventArgs.cs │ │ ├── ZoomControlModes.cs │ │ └── ZoomViewModifierMode.cs │ │ ├── Converters │ │ ├── EqualityToBooleanConverter.cs │ │ └── DoubleToLog10Converter.cs │ │ └── Helpers │ │ └── PointHelper.cs └── DesignerExampleData │ ├── EdgeDataExample.cs │ └── VertexDataExample.cs ├── GraphX.METRO.Controls ├── Images │ ├── round1.png │ ├── round2.png │ ├── cross-icon.png │ └── help_black.png ├── Models │ ├── MouseButtonEventArgs.cs │ ├── ModifierKeys.cs │ ├── VertexMovedEventArgs.cs │ ├── VertexSelectedEventArgs.cs │ ├── DispatcherHelper.cs │ ├── EdgeSelectedEventArgs.cs │ ├── XamlTypes │ │ └── ViewModelXamlMetadataProvider.cs │ ├── AnimationHelper.cs │ └── FileServiceProviderMETRO.cs ├── METRO.SimpleGraph_TemporaryKey.pfx ├── packages.config ├── Properties │ └── AssemblyInfo.cs ├── Controls │ └── ZoomControl │ │ ├── SupportClasses │ │ ├── AreaSelectedEventHandler.cs │ │ ├── MouseWheelZoomingMode.cs │ │ ├── ContentSizeChangedHandler.cs │ │ ├── AreaSelectedEventArgs.cs │ │ ├── ZoomControlModes.cs │ │ └── ZoomViewModifierMode.cs │ │ ├── Converters │ │ ├── EqualityToBooleanConverter.cs │ │ └── DoubleToLog10Converter.cs │ │ └── Helpers │ │ └── PointHelper.cs ├── DesignerExampleData │ ├── EdgeDataExample.cs │ └── VertexDataExample.cs └── port.txt ├── GraphX.Standard.Logic ├── Algorithms │ ├── OverlapRemoval │ │ ├── FSAAlgorithm.cs │ │ ├── RectangleWrapper.cs │ │ ├── IOverlapRemovalContext.cs │ │ ├── OverlapRemovalHelper.cs │ │ ├── OverlapRemovalContext.cs │ │ ├── OneWayFSAParameters.cs │ │ ├── IOverlapRemovalAlgorithmFactory.cs │ │ └── OverlapRemovalParameters.cs │ ├── LayoutAlgorithms │ │ ├── FDP │ │ │ ├── KKLayoutAlgorithm.cs │ │ │ ├── ISOMLayoutAlgorithm.cs │ │ │ ├── LinLogLayoutAlgorithm.cs │ │ │ ├── FRCoolingFunction.cs │ │ │ ├── Compound │ │ │ │ ├── CompoundVertexInnerLayoutType.cs │ │ │ │ ├── LayoutMode.cs │ │ │ │ ├── IMutableCompoundGraph.cs │ │ │ │ ├── ICompoundLayoutIterationEventArgs.cs │ │ │ │ ├── ICompoundLayoutAlgorithm.cs │ │ │ │ ├── ILayoutContext.cs │ │ │ │ ├── ICompoundLayoutContext.cs │ │ │ │ ├── TestingCompoundVertexInfo.cs │ │ │ │ ├── ICompoundGraph.cs │ │ │ │ ├── LayoutContext.cs │ │ │ │ ├── CompoundLayoutIterationEventArgs.cs │ │ │ │ └── CompoundLayoutContext.cs │ │ │ ├── FreeFRLayoutParameters.cs │ │ │ └── LinLogLayoutParameters.cs │ │ ├── Circular │ │ │ └── CircularLayoutParameters.cs │ │ ├── Tree │ │ │ ├── SpanningTreeGeneration.cs │ │ │ ├── BalloonTreeLayoutParameters.cs │ │ │ └── SimpleTreeLayoutAlgorithm.Data.cs │ │ ├── Hierarchical │ │ │ ├── SugiyamaEdgeRoutings.cs │ │ │ ├── SugiyamaLayoutAlgorithm.VertexLayerCollection.cs │ │ │ ├── SugiyamaLayoutAlgorithm.Enums.cs │ │ │ └── SugiyamaLayoutAlgorithm.SugiEdge.cs │ │ ├── LayoutDirection.cs │ │ ├── IParameterizedLayoutAlgorithm.cs │ │ ├── Random │ │ │ └── RandomLayoutAlgorithmParams.cs │ │ ├── ILayoutInfoIterationEventArgs.cs │ │ ├── LayoutParametersBase.cs │ │ └── ILayoutIterationEventArgs.cs │ ├── AlgorithmBase.cs │ ├── IAlgorithm.cs │ ├── WrappedVertex.cs │ ├── EdgeRouting │ │ ├── PathFinderER │ │ │ └── MatrixItem.cs │ │ ├── SimpleER │ │ │ └── SimpleERParameters.cs │ │ └── EdgeRoutingParameters.cs │ ├── TypedEdge.cs │ └── IHierarchicalBidirectionalGraph.cs ├── Helpers │ └── ReflectionHelper.cs └── GraphX.Standard.Logic.csproj ├── .nuget └── NuGet.Config ├── info.md ├── .gitattributes ├── GraphX.Core.Controls └── AssemblyInfo.cs └── .settings └── launch.json /GraphX.Controls/.gitignore: -------------------------------------------------------------------------------- 1 | /obj/ 2 | /bin/ 3 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /obj/ 3 | -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /obj/ 3 | -------------------------------------------------------------------------------- /Documents/AIV.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Documents/AIV.cs -------------------------------------------------------------------------------- /Documents/Licenses/License.MediaFIles.txt: -------------------------------------------------------------------------------- 1 | http://creativecommons.org/licenses/by/3.0/ -------------------------------------------------------------------------------- /Examples/SimpleGraph/readme.txt: -------------------------------------------------------------------------------- 1 | This example shows how to configure and create graph using automatic methods. -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/app.ico -------------------------------------------------------------------------------- /Examples/SimpleGraph/Images/dice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/SimpleGraph/Images/dice.png -------------------------------------------------------------------------------- /ExternalDlls/FirstFloor.ModernUI.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/ExternalDlls/FirstFloor.ModernUI.dll -------------------------------------------------------------------------------- /GraphX.Controls/Images/help_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Controls/Images/help_black.png -------------------------------------------------------------------------------- /GraphX.Standard.Common/signature.snk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Standard.Common/signature.snk -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Images/round1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.UAP.Controls/Images/round1.png -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Images/round2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.UAP.Controls/Images/round2.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/dice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/dice.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/male.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/male.png -------------------------------------------------------------------------------- /Examples/SimpleGraph/Images/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/SimpleGraph/Images/update.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/100.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/150.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/300.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/44.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/50.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/88.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/Logo.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/play.png -------------------------------------------------------------------------------- /ExternalDlls/Microsoft.Windows.Shell.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/ExternalDlls/Microsoft.Windows.Shell.dll -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Images/round1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.METRO.Controls/Images/round1.png -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Images/round2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.METRO.Controls/Images/round2.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/carpet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/carpet.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/female.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/female.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/tr_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/tr_red.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/tr_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/tr_red.png -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Images/cross-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.UAP.Controls/Images/cross-icon.png -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Images/help_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.UAP.Controls/Images/help_black.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/board_hd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/board_hd.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/brick_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/brick_16.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/hand_comp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/hand_comp.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/tr_grren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/tr_grren.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/MidLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/MidLogo.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/SmallLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/SmallLogo.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/StoreLogo.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/refresh.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/tr_grren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/tr_grren.png -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Images/dice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/WindowsFormsProject/Images/dice.png -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Images/cross-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.METRO.Controls/Images/cross-icon.png -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Images/help_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.METRO.Controls/Images/help_black.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/blackCircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/blackCircle.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/circle_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/circle_blue.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/circle_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/circle_red.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/grid_paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/grid_paper.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/hand_comp2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/hand_comp2.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/hand_comp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/hand_comp3.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/newlogo_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/newlogo_big.png -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Images/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/WindowsFormsProject/Images/update.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/SplashScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/SplashScreen.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/circle_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/circle_green.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/Logo.scale-100.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/Logo.scale-200.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/SplashScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/SplashScreen.png -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/blackCircleFilled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/blackCircleFilled.png -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/MouseButtonEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public class MouseButtonEventArgs 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/MouseButtonEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public class MouseButtonEventArgs 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/background.snowflakes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/ShowcaseApp.WPF/Assets/background.snowflakes.jpg -------------------------------------------------------------------------------- /GraphX.METRO.Controls/METRO.SimpleGraph_TemporaryKey.pfx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.METRO.Controls/METRO.SimpleGraph_TemporaryKey.pfx -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/SplashScreen.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/SplashScreen.scale-100.png -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/Examples/UAP.SimpleGraph/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /Examples/SimpleGraph/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /GraphX.Controls/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/FSAAlgorithm.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Standard.Logic/Algorithms/OverlapRemoval/FSAAlgorithm.cs -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/RectangleWrapper.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Standard.Logic/Algorithms/OverlapRemoval/RectangleWrapper.cs -------------------------------------------------------------------------------- /GraphX.METRO.Controls/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/RemoveControlEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public delegate void RemoveControlEventHandler(object sender, ControlEventArgs args); 4 | } 5 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/VertexPositionChangedEH.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public delegate void VertexPositionChangedEH(object sender, VertexPositionEventArgs args); 4 | } 5 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyTitle("GraphX.Controls")] 5 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/KKLayoutAlgorithm.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/KKLayoutAlgorithm.cs -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/ISOMLayoutAlgorithm.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/ISOMLayoutAlgorithm.cs -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyTitle("GraphX.UAP.Controls")] 5 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/GraphControlType.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum GraphControlType 4 | { 5 | Vertex, 6 | Edge, 7 | VertexAndEdge 8 | } 9 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IAlgorithmParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Interfaces 2 | { 3 | public interface IAlgorithmParameters : ICloneable//!PCL-NON-COMPL! INotifyPropertyChanged 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/LinLogLayoutAlgorithm.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panthernet/GraphX/HEAD/GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/LinLogLayoutAlgorithm.cs -------------------------------------------------------------------------------- /Examples/SimpleGraph/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Models/DebugItems.cs: -------------------------------------------------------------------------------- 1 | namespace UAP.SimpleGraph.Models 2 | { 3 | public enum DebugItems 4 | { 5 | General = 0, 6 | EdgeLabels = 1, 7 | VCP = 2, 8 | } 9 | } -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/SupportClasses/AreaSelectedEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public delegate void AreaSelectedEventHandler(object sender, AreaSelectedEventArgs args); 4 | } -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/SupportClasses/AreaSelectedEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public delegate void AreaSelectedEventHandler(object sender, AreaSelectedEventArgs args); 4 | } -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/SupportClasses/AreaSelectedEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public delegate void AreaSelectedEventHandler(object sender, AreaSelectedEventArgs args); 4 | } -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/SupportClasses/MouseWheelZoomingMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum MouseWheelZoomingMode 4 | { 5 | Positional = 0, 6 | Absolute 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/SupportClasses/MouseWheelZoomingMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum MouseWheelZoomingMode 4 | { 5 | Positional = 0, 6 | Absolute 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/EditorOperationMode.cs: -------------------------------------------------------------------------------- 1 | namespace ShowcaseApp.WPF.Models 2 | { 3 | public enum EditorOperationMode 4 | { 5 | Select = 0, 6 | Edit, 7 | Delete 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/SupportClasses/ContentSizeChangedHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | namespace GraphX.Controls 4 | { 5 | public delegate void ContentSizeChangedHandler(object sender, Size newSize); 6 | } 7 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/SupportClasses/MouseWheelZoomingMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum MouseWheelZoomingMode 4 | { 5 | Positional = 0, 6 | Absolute 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/ImageType.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum ImageType 4 | { 5 | PNG, 6 | JPEG, 7 | BMP, 8 | GIF, 9 | TIFF 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Circular/CircularLayoutParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public class CircularLayoutParameters : LayoutParametersBase 4 | { 5 | 6 | } 7 | } -------------------------------------------------------------------------------- /.nuget/NuGet.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/GraphExample.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace ShowcaseApp.WPF 4 | { 5 | public class GraphExample : BidirectionalGraph 6 | { 7 | } 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/DataItem.cs: -------------------------------------------------------------------------------- 1 | namespace ShowcaseApp.WPF.Models 2 | { 3 | public class DataItem 4 | { 5 | public int ID { get; set; } 6 | 7 | public string Text { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/FRCoolingFunction.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public enum FRCoolingFunction 4 | { 5 | Linear, 6 | Exponential 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/SupportClasses/ContentSizeChangedHandler.cs: -------------------------------------------------------------------------------- 1 | using Windows.Foundation; 2 | 3 | namespace GraphX.Controls 4 | { 5 | public delegate void ContentSizeChangedHandler(object sender, Size newSize); 6 | } 7 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/OverlapRemovalAlgorithmTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum OverlapRemovalAlgorithmTypeEnum 4 | { 5 | FSA, 6 | OneWayFSA, 7 | None 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Tree/SpanningTreeGeneration.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public enum SpanningTreeGeneration 4 | { 5 | BFS, 6 | DFS 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/SupportClasses/ContentSizeChangedHandler.cs: -------------------------------------------------------------------------------- 1 | using Windows.Foundation; 2 | 3 | namespace GraphX.Controls 4 | { 5 | public delegate void ContentSizeChangedHandler(object sender, Size newSize); 6 | } 7 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/readme.txt: -------------------------------------------------------------------------------- 1 | GraphX for .NET library 2 | http://panthernet.ru/en/projects-en/graphx-en 3 | https://github.com/panthernet/GraphX/ 4 | 5 | Thanks for reading this! :) 6 | You can find help and updates on the URL specified above. -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/Models/GraphExample.vb: -------------------------------------------------------------------------------- 1 | Imports QuikGraph 2 | 3 | Namespace Models 4 | 5 | Public Class GraphExample 6 | Inherits BidirectionalGraph(Of DataVertex, DataEdge) 7 | End Class 8 | End Namespace -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/EdgeDashStyle.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum EdgeDashStyle 4 | { 5 | Solid, 6 | Dash, 7 | Dot, 8 | DashDot, 9 | DashDotDot 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Hierarchical/SugiyamaEdgeRoutings.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public enum SugiyamaEdgeRoutings 4 | { 5 | Traditional, 6 | Orthogonal 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/ModifierKeys.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public class Keyboard 4 | { 5 | public static ModifierKeys Modifiers; 6 | } 7 | 8 | public class ModifierKeys 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/ModifierKeys.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public class Keyboard 4 | { 5 | public static ModifierKeys Modifiers; 6 | } 7 | 8 | public class ModifierKeys 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/EdgeRoutingAlgorithmTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum EdgeRoutingAlgorithmTypeEnum 4 | { 5 | None, 6 | PathFinder, 7 | SimpleER, 8 | Bundling, 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IEdgeRoutingParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Interfaces 2 | { 3 | /// 4 | /// Base class for edge routing algorithm parameters 5 | /// 6 | public interface IEdgeRoutingParameters 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IOverlapRemovalParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Interfaces 2 | { 3 | public interface IOverlapRemovalParameters : IAlgorithmParameters 4 | { 5 | float VerticalGap { get; set; } 6 | float HorizontalGap { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/AlgorithmBase.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | 3 | namespace GraphX.Logic.Algorithms 4 | { 5 | public abstract class AlgorithmBase : IAlgorithm 6 | { 7 | public abstract void Compute(CancellationToken cancellationToken); 8 | } 9 | } -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IGraphArea.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace GraphX.Controls 4 | { 5 | public interface IGraphArea 6 | { 7 | IDictionary VertexList { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/VertexShape.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum VertexShape 4 | { 5 | Rectangle, 6 | Diamond, 7 | Triangle, 8 | Circle, 9 | None, 10 | Ellipse 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/LayoutDirection.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public enum LayoutDirection 4 | { 5 | LeftToRight = 0, 6 | TopToBottom = 1, 7 | RightToLeft = 2, 8 | BottomToTop = 3 9 | } 10 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/MiniSpecialType.cs: -------------------------------------------------------------------------------- 1 | namespace ShowcaseApp.WPF.Models 2 | { 3 | public enum MiniSpecialType 4 | { 5 | None, 6 | LayoutVCP, 7 | EdgesParallel, 8 | LayoutGrouped, 9 | DataFiltering 10 | } 11 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/GraphAreaExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX; 2 | using GraphX.Controls; 3 | using QuikGraph; 4 | 5 | namespace ShowcaseApp.WPF 6 | { 7 | public class GraphAreaExample : GraphArea> { } 8 | } 9 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/LogicCoreExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Logic.Models; 2 | using QuikGraph; 3 | 4 | namespace ShowcaseApp.WPF 5 | { 6 | public class LogicCoreExample : GXLogicCore> 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /GraphX.Controls/Animations/Enums/MouseOverAnimation.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Animations 2 | { 3 | /// 4 | /// Controls mouse over animation types 5 | /// 6 | public enum MouseOverAnimation 7 | { 8 | Scale, 9 | None 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /GraphX.Controls/Animations/Enums/MoveAnimation.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Animations 2 | { 3 | /// 4 | /// Vertex move animation types 5 | /// 6 | public enum MoveAnimation 7 | { 8 | Move, 9 | Fade, 10 | None 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/EventType.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum EventType 4 | { 5 | MouseMove, 6 | MouseClick, 7 | MouseEnter, 8 | MouseLeave, 9 | MouseDoubleClick, 10 | PositionChangeNotify 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /info.md: -------------------------------------------------------------------------------- 1 | QuickGraphPCL 2 | https://www.nuget.org/packages/QuickGraphPCL/3.6.61114.2 3 | 4 | ?? 5 | https://github.com/YaccConstructor/QuickGraph 6 | 7 | Standard 8 | https://github.com/KeRNeLith/QuikGraph 9 | https://github.com/mokeyish/QuickGraph 10 | https://github.com/oldrev/Sandwych.QuickGraph -------------------------------------------------------------------------------- /GraphX.Controls/Animations/Enums/DeleteAnimation.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Animations 2 | { 3 | /// 4 | /// Controls delete animation types 5 | /// 6 | public enum DeleteAnimation 7 | { 8 | Shrink, 9 | Fade, 10 | None 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/ControlDrawOrder.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | /// 4 | /// Defines in which order GraphX controls are drawn 5 | /// 6 | public enum ControlDrawOrder 7 | { 8 | VerticesOnTop = 0, 9 | EdgesOnTop 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/LogicCoreChangedAction.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum LogicCoreChangedAction 4 | { 5 | None = 0, 6 | GenerateGraph, 7 | GenerateGraphWithEdges, 8 | RelayoutGraph, 9 | RelayoutGraphWithEdges 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/Models/GraphAreaExample.vb: -------------------------------------------------------------------------------- 1 | Imports GraphX.Controls 2 | Imports QuikGraph 3 | 4 | Namespace Models 5 | 6 | Public Class GraphAreaExample 7 | Inherits GraphArea(Of DataVertex, DataEdge, BidirectionalGraph(Of DataVertex, DataEdge)) 8 | End Class 9 | End Namespace -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/GraphX.Standard.Common.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/CompoundVertexInnerLayoutType.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public enum CompoundVertexInnerLayoutType 4 | { 5 | Automatic, 6 | ContextFree, 7 | Contextual, 8 | Fixed 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/IOverlapRemovalContext.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | 4 | namespace GraphX.Logic.Algorithms.OverlapRemoval 5 | { 6 | public interface IOverlapRemovalContext 7 | { 8 | IDictionary Rectangles { get; } 9 | } 10 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Exceptions/GX_ObsoleteException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Common.Exceptions 4 | { 5 | public sealed class GX_ObsoleteException: Exception 6 | { 7 | public GX_ObsoleteException(string text) 8 | : base(text) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows; 5 | 6 | namespace SimpleGraph 7 | { 8 | /// 9 | /// Interaction logic for App.xaml 10 | /// 11 | public partial class App : Application 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Exceptions/GX_ObjectNotFoundException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Common.Exceptions 4 | { 5 | public sealed class GX_ObjectNotFoundException: Exception 6 | { 7 | public GX_ObjectNotFoundException(string text) 8 | : base(text) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Exceptions/GX_SerializationException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Common.Exceptions 4 | { 5 | public sealed class GX_SerializationException: Exception 6 | { 7 | public GX_SerializationException(string text) 8 | : base(text) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/IAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | 3 | namespace GraphX.Logic.Algorithms 4 | { 5 | /// 6 | /// Simple algorithm interface which is not connected to any graph. 7 | /// 8 | public interface IAlgorithm 9 | { 10 | void Compute(CancellationToken cancellationToken); 11 | } 12 | } -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Helpers/ReflectionHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Logic.Helpers 4 | { 5 | public static class ReflectionHelper 6 | { 7 | public static T CreateDefaultGraphInstance() 8 | { 9 | return (T)Activator.CreateInstance(typeof(T), null); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/SimpleGraph.DotNetCore/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows; 5 | 6 | namespace SimpleGraph 7 | { 8 | /// 9 | /// Interaction logic for App.xaml 10 | /// 11 | public partial class App : Application 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/App.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/OverlapRemovalHelper.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Logic.Algorithms.OverlapRemoval 4 | { 5 | public static class OverlapRemovalHelper 6 | { 7 | public static Point GetCenter( this Rect r ) 8 | { 9 | return new Point( r.Left + r.Width / 2, r.Top + r.Height / 2 ); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IRoutingInfo.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | public interface IRoutingInfo 6 | { 7 | /// 8 | /// Routing points collection used to make Path visual object 9 | /// 10 | Point[] RoutingPoints { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/SimpleGraph.DotNetCore/App.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IWeightedEdge.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | public interface IWeightedEdge : IEdge 6 | { 7 | /// 8 | /// Edge weight that can be used by some weight-related layout algorithms 9 | /// 10 | double Weight { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/WrappedVertex.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms 2 | { 3 | public class WrappedVertex 4 | { 5 | private readonly TVertex _originalVertex; 6 | public TVertex Original 7 | { 8 | get { return _originalVertex; } 9 | } 10 | 11 | public WrappedVertex(TVertex original) 12 | { 13 | _originalVertex = original; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/Settings.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace ShowcaseApp.WPF.Pages 4 | { 5 | /// 6 | /// Interaction logic for Settings.xaml 7 | /// 8 | public partial class Settings : UserControl 9 | { 10 | public Settings() 11 | { 12 | InitializeComponent(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/Models/GXLogicCoreExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Logic.Models; 2 | using QuikGraph; 3 | 4 | namespace SimpleGraph.Models 5 | { 6 | /// 7 | /// Logics core object which contains all algorithms and logic settings 8 | /// 9 | public class GXLogicCoreExample : GXLogicCore> { } 10 | } 11 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/LayoutMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public enum LayoutMode 4 | { 5 | /// 6 | /// Simple layout mode without compound vertices. 7 | /// 8 | Simple, 9 | 10 | /// 11 | /// Compound vertices, compound graph. 12 | /// 13 | Compound 14 | } 15 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Windows; 7 | 8 | namespace ShowcaseApp.WPF 9 | { 10 | /// 11 | /// Interaction logic for App.xaml 12 | /// 13 | public partial class App : Application 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Models/GXLogicCoreExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Logic.Models; 2 | using QuikGraph; 3 | 4 | namespace UAP.SimpleGraph.Models 5 | { 6 | /// 7 | /// Logics core object which contains all algorithms and logic settings 8 | /// 9 | public class GXLogicCoreExample : GXLogicCore> { } 10 | } 11 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/EdgeSelectedEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public delegate void EdgeSelectedEventHandler(object sender, EdgeSelectedEventArgs args); 4 | #if WPF 5 | public delegate void EdgeClickedEventHandler(object sender, EdgeClickedEventArgs args); 6 | #endif 7 | public delegate void EdgeLabelEventHandler(object sender, EdgeLabelSelectedEventArgs args); 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/ILayoutParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Interfaces 2 | { 3 | public interface ILayoutParameters : IAlgorithmParameters 4 | { 5 | /// 6 | /// Seed to be used to initialize any random number generators in order to construct 7 | /// more deterministic output. 8 | /// 9 | int Seed { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/ColorModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Media; 2 | 3 | namespace ShowcaseApp.WPF.Models 4 | { 5 | public class ColorModel 6 | { 7 | public Color Color {get;set;} 8 | public string Text { get; set; } 9 | 10 | public ColorModel(string text, Color color) 11 | { 12 | Text = text; Color = color; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/VertexSelectedEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public delegate void VertexSelectedEventHandler(object sender, VertexSelectedEventArgs args); 4 | public delegate void VertexMovedEventHandler(object sender, VertexMovedEventArgs e); 5 | #if WPF 6 | public delegate void VertexClickedEventHandler(object sender, VertexClickedEventArgs args); 7 | #endif 8 | } 9 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/IMutableCompoundGraph.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 4 | { 5 | public interface IMutableCompoundGraph 6 | : ICompoundGraph, 7 | IMutableBidirectionalGraph 8 | where TEdge : IEdge 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/Introduction.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace ShowcaseApp.WPF.Pages 4 | { 5 | /// 6 | /// Interaction logic for Introduction.xaml 7 | /// 8 | public partial class Introduction : UserControl 9 | { 10 | public Introduction() 11 | { 12 | InitializeComponent(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Models/CurvedErParameters.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Logic.Algorithms.EdgeRouting; 2 | 3 | namespace UAP.SimpleGraph.Models 4 | { 5 | public class CurvedErParameters: EdgeRoutingParameters 6 | { 7 | /// 8 | /// Value by which middle edge point is offseted from original middle point 9 | /// 10 | public int VerticalCurveOffset { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/EdgesType.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | public enum EdgesType 4 | { 5 | /// 6 | /// In edges 7 | /// 8 | In, 9 | /// 10 | /// Out edges 11 | /// 12 | Out, 13 | /// 14 | /// Both In and Out edges 15 | /// 16 | All 17 | } 18 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Exceptions/GX_GeneralException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Common.Exceptions 4 | { 5 | public sealed class GX_GeneralException: Exception 6 | { 7 | public GX_GeneralException(string text) 8 | : base(text) 9 | { 10 | } 11 | 12 | public GX_GeneralException(string text, Exception innerException) 13 | : base(text, innerException) 14 | { 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/GraphX.Standard.Logic.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Templates/TransparentTooltips.xaml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IGraphAreaBase.cs: -------------------------------------------------------------------------------- 1 | #if WPF 2 | using System.Windows; 3 | #else 4 | using Windows.Foundation; 5 | #endif 6 | 7 | namespace GraphX.Controls 8 | { 9 | /// 10 | /// Common GraphArea interface 11 | /// 12 | public interface IGraphAreaBase 13 | { 14 | void SetPrintMode(bool value, bool offsetControls = true, int margin = 0); 15 | 16 | Rect ContentSize { get; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/ICompoundLayoutIterationEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public interface ICompoundLayoutIterationEventArgs 7 | : ILayoutIterationEventArgs 8 | where TVertex : class 9 | { 10 | IDictionary InnerCanvasSizes { get; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /GraphX.Controls/Animations/Interfaces/IBidirectionalControlAnimation.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Animations 2 | { 3 | public interface IBidirectionalControlAnimation 4 | { 5 | double Duration { get; set; } 6 | void AnimateVertexForward(VertexControl target); 7 | void AnimateVertexBackward(VertexControl target); 8 | void AnimateEdgeForward(EdgeControl target); 9 | void AnimateEdgeBackward(EdgeControl target); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/IParameterizedLayoutAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Interfaces; 2 | 3 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 4 | { 5 | public interface IParameterizedLayoutAlgorithm 6 | { 7 | ILayoutParameters GetParameters(); 8 | } 9 | 10 | public interface IParameterizedLayoutAlgorithm : IParameterizedLayoutAlgorithm 11 | where TParam : ILayoutParameters 12 | { 13 | TParam Parameters { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /GraphX.Controls/Models/ControlEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | public sealed class ControlEventArgs : System.EventArgs 4 | { 5 | public IGraphControl Control { get; private set; } 6 | 7 | public bool RemoveDataObject { get; private set; } 8 | 9 | public ControlEventArgs(IGraphControl vc, bool removeDataObject) 10 | { 11 | RemoveDataObject = removeDataObject; 12 | Control = vc; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/SupportClasses/AreaSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | namespace GraphX.Controls 4 | { 5 | public class AreaSelectedEventArgs : System.EventArgs 6 | { 7 | /// 8 | /// Rectangle data in coordinates of content object 9 | /// 10 | public Rect Rectangle { get; set; } 11 | 12 | public AreaSelectedEventArgs(Rect rec) 13 | { 14 | Rectangle = rec; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IVertexLabelControl.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public interface IVertexLabelControl 4 | { 5 | /// 6 | /// Gets or sets label drawing angle in degrees 7 | /// 8 | double Angle { get; set; } 9 | 10 | /// 11 | /// Automaticaly update vertex label position 12 | /// 13 | void UpdatePosition(); 14 | 15 | void Hide(); 16 | void Show(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Exceptions/GX_InvalidDataException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Common.Exceptions 4 | { 5 | public sealed class GX_InvalidDataException: Exception 6 | { 7 | public GX_InvalidDataException(string text):base(text) 8 | { 9 | } 10 | } 11 | 12 | public sealed class GX_ConsistencyException : Exception 13 | { 14 | public GX_ConsistencyException(string text) 15 | : base(text) 16 | { 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/ILayoutAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | public interface ILayoutAlgorithm : IExternalLayout 6 | where TVertex : class 7 | where TEdge : IEdge 8 | where TGraph : IVertexAndEdgeListGraph 9 | { 10 | /// 11 | /// Internal graph storage for layout algorithm 12 | /// 13 | TGraph VisitedGraph { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /Documents/TODO.txt: -------------------------------------------------------------------------------- 1 | TODO 2 | 3. Detect bidirectional edge and correctly display it w/o parallelization 3 | 4 | Add edge labels - labels on path 5 | http://www.codeproject.com/Articles/30090/Text-On-A-Path-in-WPF 6 | 7 | http://en.wikipedia.org/wiki/Automatic_label_placement 8 | 9 | 10 | NOTES 11 | 1. If custom object 1st time position is incorrect - CHECK if it has Arrange() specified in LayoutUpdated event! 12 | 13 | 14 | perf 15 | http://blogs.msdn.com/b/llobo/archive/2009/11/10/new-wpf-features-cached-composition.aspx?wa=wsignin1.0 -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/OverlapRemovalContext.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | 4 | namespace GraphX.Logic.Algorithms.OverlapRemoval 5 | { 6 | public class OverlapRemovalContext : IOverlapRemovalContext 7 | { 8 | public IDictionary Rectangles { get; private set; } 9 | 10 | public OverlapRemovalContext( IDictionary rectangles ) 11 | { 12 | Rectangles = rectangles; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/VertexMovedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public sealed class VertexMovedEventArgs : System.EventArgs 6 | { 7 | public VertexControl VertexControl { get; private set; } 8 | public PointerRoutedEventArgs Args { get; private set; } 9 | 10 | public VertexMovedEventArgs(VertexControl vc, PointerRoutedEventArgs e) 11 | { 12 | Args = e; 13 | VertexControl = vc; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/OneWayFSAParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.OverlapRemoval 2 | { 3 | public enum OneWayFSAWayEnum { 4 | Horizontal, 5 | Vertical 6 | } 7 | 8 | public class OneWayFSAParameters : OverlapRemovalParameters 9 | { 10 | private OneWayFSAWayEnum _way; 11 | public OneWayFSAWayEnum Way 12 | { 13 | get { return _way; } 14 | set 15 | { 16 | if ( _way != value ) 17 | { 18 | _way = value; 19 | NotifyChanged( "Way" ); 20 | } 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/VertexMovedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public sealed class VertexMovedEventArgs : System.EventArgs 6 | { 7 | public VertexControl VertexControl { get; private set; } 8 | public PointerRoutedEventArgs Args { get; private set; } 9 | 10 | public VertexMovedEventArgs(VertexControl vc, PointerRoutedEventArgs e) 11 | { 12 | Args = e; 13 | VertexControl = vc; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/VertexSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public sealed class VertexSelectedEventArgs : System.EventArgs 6 | { 7 | public VertexControl VertexControl { get; private set; } 8 | public PointerRoutedEventArgs Args { get; private set; } 9 | 10 | public VertexSelectedEventArgs(VertexControl vc, PointerRoutedEventArgs e) 11 | { 12 | VertexControl = vc; 13 | Args = e; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/VertexSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public sealed class VertexSelectedEventArgs : System.EventArgs 6 | { 7 | public VertexControl VertexControl { get; private set; } 8 | public PointerRoutedEventArgs Args { get; private set; } 9 | 10 | public VertexSelectedEventArgs(VertexControl vc, PointerRoutedEventArgs e) 11 | { 12 | VertexControl = vc; 13 | Args = e; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IIdentifiableGraphDataObject.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Enums; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | public interface IIdentifiableGraphDataObject 6 | { 7 | /// 8 | /// Unique object identifier 9 | /// 10 | long ID { get; set; } 11 | 12 | /// 13 | /// Skip object in algorithm calc and visual control generation 14 | /// 15 | ProcessingOptionEnum SkipProcessing { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IPositionChangeNotify.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | /// 4 | /// Interface that implements means to notify on objetc position changes (implemented to track attached property changes parent -> child) 5 | /// 6 | public interface IPositionChangeNotify 7 | { 8 | #if METRO 9 | /// 10 | /// Notify object that it's position within container has been changed 11 | /// 12 | void OnPositionChanged(); 13 | #endif 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Random/RandomLayoutAlgorithmParams.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 4 | { 5 | public class RandomLayoutAlgorithmParams: LayoutParametersBase 6 | { 7 | /// 8 | /// Gets or sets layout bounds 9 | /// 10 | public Rect Bounds { get; set; } 11 | 12 | public RandomLayoutAlgorithmParams() 13 | { 14 | Bounds = new Rect(0, 0, 2000, 2000); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IGraphXVertex.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | public interface IGraphXVertex : IEquatable, IIdentifiableGraphDataObject 6 | { 7 | /// 8 | /// Gets or sets custom angle associated with the vertex 9 | /// 10 | double Angle { get; set; } 11 | 12 | /// 13 | /// Gets or sets optional group identificator 14 | /// 15 | int GroupId { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/SupportClasses/AreaSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.Foundation; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public class AreaSelectedEventArgs : EventArgs 7 | { 8 | /// 9 | /// Rectangle data in coordinates of content object 10 | /// 11 | public Rect Rectangle { get; set; } 12 | 13 | public AreaSelectedEventArgs(Rect rec) 14 | : base() 15 | { 16 | Rectangle = rec; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/SupportClasses/AreaSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.Foundation; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public class AreaSelectedEventArgs : EventArgs 7 | { 8 | /// 9 | /// Rectangle data in coordinates of content object 10 | /// 11 | public Rect Rectangle { get; set; } 12 | 13 | public AreaSelectedEventArgs(Rect rec) 14 | : base() 15 | { 16 | Rectangle = rec; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/HighlightStrategy.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | /* public enum HighlightStrategy 4 | { 5 | /// 6 | /// Use existing vertex and edge controls 7 | /// No additional control manipulation needed 8 | /// 9 | UseExistingControls, 10 | /// 11 | /// NOT IMPLEMENTED Create new vertex and edge controls 12 | /// Useful when edges is not created by default 13 | /// 14 | CreateControls 15 | }*/ 16 | } 17 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/ICloneable.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Interfaces 2 | { 3 | /// 4 | /// Cloning interface 5 | /// 6 | public interface ICloneable 7 | { 8 | /// 9 | /// Creates a new object that is a copy of the current instance. 10 | /// 11 | /// 12 | /// 13 | /// A new object that is a copy of this instance. 14 | /// 15 | /// 2 16 | object Clone(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Content/SettingsAppearance.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace ShowcaseApp.WPF.Content 4 | { 5 | /// 6 | /// Interaction logic for SettingsAppearance.xaml 7 | /// 8 | public partial class SettingsAppearance : UserControl 9 | { 10 | public SettingsAppearance() 11 | { 12 | InitializeComponent(); 13 | 14 | // a simple view model for appearance configuration 15 | this.DataContext = new SettingsAppearanceViewModel(); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/SupportClasses/ZoomControlModes.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum ZoomControlModes 4 | { 5 | /// 6 | /// The content should fill the given space. 7 | /// 8 | Fill, 9 | 10 | /// 11 | /// The content will be represented in its original size. 12 | /// 13 | Original, 14 | 15 | /// 16 | /// The content will be zoomed with a custom percent. 17 | /// 18 | Custom 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/ICompoundLayoutAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | using GraphX.Common.Interfaces; 4 | using QuikGraph; 5 | 6 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 7 | { 8 | public interface ICompoundLayoutAlgorithm : ILayoutAlgorithm 9 | where TVertex : class 10 | where TEdge : IEdge 11 | where TGraph : IBidirectionalGraph 12 | { 13 | IDictionary InnerCanvasSizes { get; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/SupportClasses/ZoomControlModes.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum ZoomControlModes 4 | { 5 | /// 6 | /// The content should fill the given space. 7 | /// 8 | Fill, 9 | 10 | /// 11 | /// The content will be represented in its original size. 12 | /// 13 | Original, 14 | 15 | /// 16 | /// The content will be zoomed with a custom percent. 17 | /// 18 | Custom 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/SupportClasses/ZoomControlModes.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum ZoomControlModes 4 | { 5 | /// 6 | /// The content should fill the given space. 7 | /// 8 | Fill, 9 | 10 | /// 11 | /// The content will be represented in its original size. 12 | /// 13 | Original, 14 | 15 | /// 16 | /// The content will be zoomed with a custom percent. 17 | /// 18 | Custom 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IZoomControl.cs: -------------------------------------------------------------------------------- 1 | #if WPF 2 | using System.Windows; 3 | #elif METRO 4 | using Windows.UI.Xaml; 5 | #endif 6 | 7 | namespace GraphX.Controls 8 | { 9 | /// 10 | /// Common imterface for all possible zoomcontrol objects 11 | /// 12 | public interface IZoomControl 13 | { 14 | UIElement PresenterVisual { get; } 15 | double Zoom { get; set; } 16 | double Width { get; set; } 17 | double Height { get; set; } 18 | double ActualWidth { get; } 19 | double ActualHeight { get; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/Models/GraphAreaExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Controls; 2 | using QuikGraph; 3 | 4 | namespace SimpleGraph.Models 5 | { 6 | /// 7 | /// This is custom GraphArea representation using custom data types. 8 | /// GraphArea is the visual panel component responsible for drawing visuals (vertices and edges). 9 | /// It is also provides many global preferences and methods that makes GraphX so customizable and user-friendly. 10 | /// 11 | public class GraphAreaExample : GraphArea> { } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | Form1 5 | false 6 | 0 7 | true 8 | 0 9 | 0 10 | true 11 | 12 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Models/GraphAreaExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Controls; 2 | using QuikGraph; 3 | 4 | namespace UAP.SimpleGraph.Models 5 | { 6 | /// 7 | /// This is custom GraphArea representation using custom data types. 8 | /// GraphArea is the visual panel component responsible for drawing visuals (vertices and edges). 9 | /// It is also provides many global preferences and methods that makes GraphX so customizable and user-friendly. 10 | /// 11 | public class GraphAreaExample : GraphArea> { } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | 6 | namespace WindowsFormsProject 7 | { 8 | static class Program 9 | { 10 | /// 11 | /// The main entry point for the application. 12 | /// 13 | [STAThread] 14 | static void Main() 15 | { 16 | Application.EnableVisualStyles(); 17 | Application.SetCompatibleTextRenderingDefault(false); 18 | Application.Run(new Form1()); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/ExampleExternalOverlapRemovalAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System; 3 | using System.Collections.Generic; 4 | using GraphX.Measure; 5 | using GraphX.Common.Interfaces; 6 | 7 | namespace ShowcaseApp.WPF 8 | { 9 | public class ExampleExternalOverlapRemovalAlgorithm: IExternalOverlapRemoval 10 | { 11 | public IDictionary Rectangles { get; set; } 12 | 13 | public void Compute(CancellationToken cancellationToken) 14 | { 15 | throw new NotImplementedException(); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ShowcaseApp.WPF.csproj.DotSettings: -------------------------------------------------------------------------------- 1 | 2 | True 3 | True -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IGraphControl.cs: -------------------------------------------------------------------------------- 1 | #if WPF 2 | using System.Windows; 3 | #elif METRO 4 | using Windows.Foundation; 5 | using Windows.UI.Xaml; 6 | #endif 7 | 8 | 9 | namespace GraphX.Controls 10 | { 11 | public interface IGraphControl : IPositionChangeNotify 12 | { 13 | GraphAreaBase RootArea {get; } 14 | Point GetPosition(bool final = false, bool round = false); 15 | void SetPosition(Point pt, bool alsoFinal = true); 16 | void SetPosition(double x, double y, bool alsoFinal = true); 17 | Visibility Visibility { get; set; } 18 | void Clean(); 19 | } 20 | } -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/ILayoutContext.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | using QuikGraph; 4 | 5 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 6 | { 7 | public interface ILayoutContext 8 | where TEdge : IEdge 9 | where TGraph : IVertexAndEdgeListGraph 10 | { 11 | IDictionary Positions { get; } 12 | IDictionary Sizes { get; } 13 | 14 | TGraph Graph { get; } 15 | 16 | LayoutMode Mode { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/LinkCommands.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace ShowcaseApp.WPF.Models 4 | { 5 | public static class LinkCommands 6 | { 7 | private static readonly RoutedUICommand ShowMiniSpecialDialogInternal = new RoutedUICommand("Show help", "ShowMiniSpecialDialog", typeof(LinkCommands)); 8 | 9 | /// 10 | /// Gets the navigate link routed command. 11 | /// 12 | public static RoutedUICommand ShowMiniSpecialDialog 13 | { 14 | get { return ShowMiniSpecialDialogInternal; } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /GraphX.Controls/DesignerExampleData/EdgeDataExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Models; 2 | 3 | namespace GraphX.Controls.DesignerExampleData 4 | { 5 | internal sealed class EdgeDataExample : EdgeBase 6 | { 7 | public EdgeDataExample(TVertex source, TVertex target) 8 | : base(source, target) 9 | { 10 | 11 | } 12 | public EdgeDataExample(TVertex source, TVertex target, double weight) 13 | : base(source, target, weight) 14 | { 15 | 16 | } 17 | 18 | public string Text { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/ICompoundLayoutContext.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | using QuikGraph; 4 | 5 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 6 | { 7 | public interface ICompoundLayoutContext : ILayoutContext 8 | where TEdge : IEdge 9 | where TGraph : IBidirectionalGraph 10 | { 11 | IDictionary VertexBorders { get; } 12 | IDictionary LayoutTypes { get; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/DesignerExampleData/EdgeDataExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Models; 2 | 3 | namespace GraphX.Controls.DesignerExampleData 4 | { 5 | internal sealed class EdgeDataExample : EdgeBase 6 | { 7 | public EdgeDataExample(TVertex source, TVertex target) 8 | : base(source, target) 9 | { 10 | 11 | } 12 | public EdgeDataExample(TVertex source, TVertex target, double weight) 13 | : base(source, target, weight) 14 | { 15 | 16 | } 17 | 18 | public string Text { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/DesignerExampleData/EdgeDataExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.PCL.Common.Models; 2 | 3 | namespace GraphX.Controls.DesignerExampleData 4 | { 5 | internal sealed class EdgeDataExample : EdgeBase 6 | { 7 | public EdgeDataExample(TVertex source, TVertex target) 8 | : base(source, target) 9 | { 10 | 11 | } 12 | public EdgeDataExample(TVertex source, TVertex target, double weight) 13 | : base(source, target, weight) 14 | { 15 | 16 | } 17 | 18 | public string Text { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/VertexMovedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Input; 3 | 4 | namespace GraphX.Controls.Models 5 | { 6 | public sealed class VertexMovedEventArgs : System.EventArgs 7 | { 8 | public VertexControl VertexControl { get; private set; } 9 | public Point Offset { get; private set; } 10 | public MouseEventArgs Args { get; private set; } 11 | 12 | public VertexMovedEventArgs(VertexControl vc, MouseEventArgs e) 13 | { 14 | Offset = new Point(); 15 | VertexControl = vc; 16 | Args = e; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/EdgeRouting/PathFinderER/MatrixItem.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Logic.Algorithms.EdgeRouting 4 | { 5 | public class MatrixItem 6 | { 7 | public Point Point; 8 | public bool IsIntersected; 9 | 10 | public int PlaceX; 11 | public int PlaceY; 12 | 13 | public int Weight { get { return IsIntersected ? 0 : 1; } } 14 | 15 | public MatrixItem(Point pt, bool inter, int placeX, int placeY) 16 | { 17 | Point = pt; IsIntersected = inter; 18 | PlaceX = placeX; PlaceY = placeY; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /GraphX.Controls/ExceptionExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace GraphX.Controls 5 | { 6 | internal static class ExceptionExtensions 7 | { 8 | internal static void PreserveStackTrace(this Exception exception) 9 | { 10 | // In .NET 4.5 and later this isn't needed... (yes, this is a brutal hack!) 11 | var preserveStackTrace = typeof(Exception).GetMethod( 12 | "InternalPreserveStackTrace", 13 | BindingFlags.Instance | BindingFlags.NonPublic); 14 | 15 | preserveStackTrace.Invoke(exception, null); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Models/EdgeRoutingVisualData.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | using GraphX.Common.Interfaces; 3 | 4 | namespace GraphX.Common.Models 5 | { 6 | public class EdgeRoutingVisualData 7 | { 8 | public bool HaveTemplate { get; set; } 9 | public bool IsEdgeVisible { get; set; } 10 | public bool IsEdgeSelfLooped { get; set; } 11 | 12 | public Point SourcePosition { get; set; } 13 | public Size SourceSize { get; set; } 14 | public Point TargetPosition { get; set; } 15 | public Size TargetSize { get; set; } 16 | 17 | IRoutingInfo Edge { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/ILayoutEdgeRouting.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | 4 | namespace GraphX.Common.Interfaces 5 | { 6 | /// 7 | /// If added to layout algorithm specifies that it uses it's own edge routing and thus 8 | /// should ignore edge routing algorithm 9 | /// 10 | /// Edge type 11 | public interface ILayoutEdgeRouting 12 | { 13 | /// 14 | /// Get resulting edge routes collection 15 | /// 16 | IDictionary EdgeRoutes { get; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/SimpleGraph.DotNetCore/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 5 | //(used if a resource is not found in the page, 6 | // or application resource dictionaries) 7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 8 | //(used if a resource is not found in the page, 9 | // app, or any theme specific resource dictionaries) 10 | )] 11 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/Interfaces/IGraphControlFactory.cs: -------------------------------------------------------------------------------- 1 | # if WPF 2 | using System.Windows; 3 | #elif METRO 4 | using Windows.UI.Xaml; 5 | #endif 6 | 7 | namespace GraphX.Controls.Models 8 | { 9 | public interface IGraphControlFactory 10 | { 11 | EdgeControl CreateEdgeControl(VertexControl source, VertexControl target, object edge, bool showArrows = true, Visibility visibility = Visibility.Visible); 12 | VertexControl CreateVertexControl(object vertexData); 13 | /// 14 | /// Root graph area for the factory 15 | /// 16 | GraphAreaBase FactoryRootArea { get; } 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/DispatcherHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Windows.UI.Core; 4 | 5 | namespace GraphX.Controls.Models 6 | { 7 | public static class DispatcherHelper 8 | { 9 | public static async Task CheckBeginInvokeOnUi(Action action) 10 | { 11 | var dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher; 12 | 13 | if (dispatcher.HasThreadAccess) 14 | action(); 15 | else await dispatcher.RunAsync(CoreDispatcherPriority.Normal, 16 | () => action()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/VertexSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public sealed class VertexSelectedEventArgs : System.EventArgs 6 | { 7 | public VertexControl VertexControl { get; private set; } 8 | public MouseButtonEventArgs MouseArgs { get; private set; } 9 | public ModifierKeys Modifiers { get; private set; } 10 | 11 | public VertexSelectedEventArgs(VertexControl vc, MouseEventArgs e, ModifierKeys keys) 12 | { 13 | VertexControl = vc; 14 | MouseArgs = e as MouseButtonEventArgs; 15 | Modifiers = keys; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/DispatcherHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Windows.UI.Core; 4 | 5 | namespace GraphX.Controls.Models 6 | { 7 | public static class DispatcherHelper 8 | { 9 | public static async Task CheckBeginInvokeOnUi(Action action) 10 | { 11 | var dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher; 12 | 13 | if (dispatcher.HasThreadAccess) 14 | action(); 15 | else await dispatcher.RunAsync(CoreDispatcherPriority.Normal, 16 | () => action()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Hierarchical/SugiyamaLayoutAlgorithm.VertexLayerCollection.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public partial class SugiyamaLayoutAlgorithm 7 | where TVertex : class 8 | where TEdge : IEdge 9 | where TGraph : IVertexAndEdgeListGraph, IMutableVertexAndEdgeSet 10 | { 11 | /// 12 | /// Collection of the layers of the vertices. 13 | /// 14 | private class VertexLayerCollection : List 15 | { 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Examples/SimpleGraph/Models/GraphExample.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace SimpleGraph.Models 4 | { 5 | /// 6 | /// This is our custom data graph derived from BidirectionalGraph class using custom data types. 7 | /// Data graph stores vertices and edges data that is used by GraphArea and end-user for a variety of operations. 8 | /// Data graph content handled manually by user (add/remove objects). The main idea is that you can dynamicaly 9 | /// remove/add objects into the GraphArea layout and then use data graph to restore original layout content. 10 | /// 11 | public class GraphExample : BidirectionalGraph { } 12 | } -------------------------------------------------------------------------------- /GraphX.Controls/Models/Interfaces/IAttachableControl.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls.Models 2 | { 3 | /// 4 | /// Represents attachable control so it can be automaticaly attached to parent entity 5 | /// 6 | /// Parent entity type 7 | public interface IAttachableControl 8 | { 9 | /// 10 | /// Attach control to parent entity 11 | /// 12 | /// Parent entity 13 | void Attach(T control); 14 | /// 15 | /// Detach label from control 16 | /// 17 | void Detach(); 18 | } 19 | } -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Models/GraphExample.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace UAP.SimpleGraph.Models 4 | { 5 | /// 6 | /// This is our custom data graph derived from BidirectionalGraph class using custom data types. 7 | /// Data graph stores vertices and edges data that is used by GraphArea and end-user for a variety of operations. 8 | /// Data graph content handled manually by user (add/remove objects). The main idea is that you can dynamicaly 9 | /// remove/add objects into the GraphArea layout and then use data graph to restore original layout content. 10 | /// 11 | public class GraphExample : BidirectionalGraph { } 12 | } -------------------------------------------------------------------------------- /GraphX.Controls/Models/ContentSizeChangedEventHandler.cs: -------------------------------------------------------------------------------- 1 | #if WPF 2 | using System.Windows; 3 | #elif METRO 4 | using Windows.Foundation; 5 | #endif 6 | 7 | namespace GraphX.Controls.Models 8 | { 9 | public sealed class ContentSizeChangedEventArgs : System.EventArgs 10 | { 11 | public Rect OldSize { get; private set; } 12 | public Rect NewSize { get; private set; } 13 | 14 | public ContentSizeChangedEventArgs(Rect oldSize, Rect newSize) 15 | { 16 | OldSize = oldSize; 17 | NewSize = newSize; 18 | } 19 | } 20 | 21 | public delegate void ContentSizeChangedEventHandler(object sender, ContentSizeChangedEventArgs e); 22 | } -------------------------------------------------------------------------------- /GraphX.Standard.Common/Helpers/CommonExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace GraphX.Common 5 | { 6 | public static class CommonExtensions 7 | { 8 | public static void AddOrUpdate(this IDictionary dictionary, TKey key, TValue value) 9 | { 10 | if (dictionary.ContainsKey(key)) 11 | dictionary[key] = value; 12 | else dictionary.Add(key, value); 13 | } 14 | 15 | public static void ForEach(this IEnumerable list, Action func) 16 | { 17 | foreach (var item in list) 18 | func(item); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/ProcessingOptionEnum.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | /// 4 | /// Specifies how object will be treated in calculations and visualization 5 | /// 6 | public enum ProcessingOptionEnum 7 | { 8 | /// 9 | /// Process object as intended 10 | /// 11 | Default, 12 | /// 13 | /// Freeze object so its position will remain intact for all subsequent calculations. 14 | /// 15 | Freeze, 16 | /// 17 | /// Exclude object from all consequent calulations 18 | /// 19 | Exclude 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Models/GraphAreaExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX; 2 | using QuikGraph; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using GraphX.Controls; 7 | 8 | namespace WindowsFormsProject 9 | { 10 | /// 11 | /// This is custom GraphArea representation using custom data types. 12 | /// GraphArea is the visual panel component responsible for drawing visuals (vertices and edges). 13 | /// It is also provides many global preferences and methods that makes GraphX so customizable and user-friendly. 14 | /// 15 | public class GraphAreaExample : GraphArea> { } 16 | } 17 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/DesignerExampleData/VertexDataExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Models; 2 | 3 | namespace GraphX.Controls.DesignerExampleData 4 | { 5 | internal sealed class VertexDataExample : VertexBase 6 | { 7 | public VertexDataExample(int id, string name) 8 | { 9 | ID = id; Name = name; 10 | //DataImage = new BitmapImage(new Uri(@"pack://application:,,,/GraphX.Controls;component/Images/help_black.png", UriKind.Absolute)); 11 | } 12 | 13 | public string Name { get; set; } 14 | //public ImageSource DataImage{ get; set; } 15 | 16 | public override string ToString() 17 | { 18 | return Name; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/DesignerExampleData/VertexDataExample.cs: -------------------------------------------------------------------------------- 1 | using GraphX.PCL.Common.Models; 2 | 3 | namespace GraphX.Controls.DesignerExampleData 4 | { 5 | internal sealed class VertexDataExample : VertexBase 6 | { 7 | public VertexDataExample(int id, string name) 8 | { 9 | ID = id; Name = name; 10 | //DataImage = new BitmapImage(new Uri(@"pack://application:,,,/GraphX.Controls;component/Images/help_black.png", UriKind.Absolute)); 11 | } 12 | 13 | public string Name { get; set; } 14 | //public ImageSource DataImage{ get; set; } 15 | 16 | public override string ToString() 17 | { 18 | return Name; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/Converters/EqualityToBooleanConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Data; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public sealed class EqualityToBooleanConverter : IValueConverter 7 | { 8 | public object Convert(object value, Type targetType, object parameter, string language) 9 | { 10 | return Equals(value, parameter); 11 | } 12 | 13 | public object ConvertBack(object value, Type targetType, object parameter, string language) 14 | { 15 | if ((bool)value) 16 | return parameter; 17 | 18 | //it's false, so don't bind it back 19 | return null; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/Converters/EqualityToBooleanConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Data; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public sealed class EqualityToBooleanConverter : IValueConverter 7 | { 8 | public object Convert(object value, Type targetType, object parameter, string language) 9 | { 10 | return Equals(value, parameter); 11 | } 12 | 13 | public object ConvertBack(object value, Type targetType, object parameter, string language) 14 | { 15 | if ((bool)value) 16 | return parameter; 17 | 18 | //it's false, so don't bind it back 19 | return null; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/EdgeRouting/SimpleER/SimpleERParameters.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Interfaces; 2 | 3 | namespace GraphX.Logic.Algorithms.EdgeRouting 4 | { 5 | public class SimpleERParameters: IEdgeRoutingParameters 6 | { 7 | /// 8 | /// Get or set side step value when searching for way around vertex 9 | /// 10 | public double SideStep { get; set; } 11 | /// 12 | /// Get or set backward step when intersection is met 13 | /// 14 | public double BackStep { get; set; } 15 | 16 | public SimpleERParameters() 17 | { 18 | SideStep = 5; 19 | BackStep = 10; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/TypedEdge.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace GraphX.Logic.Algorithms 4 | { 5 | public enum EdgeTypes 6 | { 7 | General, 8 | Hierarchical 9 | } 10 | 11 | public interface ITypedEdge 12 | { 13 | EdgeTypes Type { get; } 14 | } 15 | 16 | public class TypedEdge : Edge, ITypedEdge 17 | { 18 | private readonly EdgeTypes _type; 19 | public EdgeTypes Type 20 | { 21 | get { return _type; } 22 | } 23 | 24 | public TypedEdge(TVertex source, TVertex target, EdgeTypes type) 25 | : base(source, target) 26 | { 27 | _type = type; 28 | } 29 | 30 | public override string ToString() 31 | { 32 | return string.Format("{0}: {1}-->{2}", _type, Source, Target); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/ITrackableContent.cs: -------------------------------------------------------------------------------- 1 | #if WPF 2 | using System.Windows; 3 | #elif METRO 4 | using Windows.Foundation; 5 | #endif 6 | using GraphX.Controls.Models; 7 | 8 | namespace GraphX.Controls 9 | { 10 | /// 11 | /// Interface that represents trackable content object (e.g. provides means to notify about it's content changes) 12 | /// 13 | public interface ITrackableContent 14 | { 15 | /// 16 | /// Rises when content size changed 17 | /// 18 | event ContentSizeChangedEventHandler ContentSizeChanged; 19 | /// 20 | /// Gets actual content rectangle size 21 | /// 22 | Rect ContentSize { get; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Tree/BalloonTreeLayoutParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public class BalloonTreeLayoutParameters : LayoutParametersBase 4 | { 5 | internal int minRadius = 2; 6 | internal float border = 20.0f; 7 | 8 | public int MinRadius 9 | { 10 | get { return minRadius; } 11 | set 12 | { 13 | if (value == minRadius) return; 14 | minRadius = value; 15 | NotifyPropertyChanged( "MinRadius" ); 16 | } 17 | } 18 | 19 | 20 | public float Border 21 | { 22 | get { return border; } 23 | set 24 | { 25 | if (value == border) return; 26 | border = value; 27 | NotifyPropertyChanged( "Border" ); 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Enums/LayoutAlgorithmTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Common.Enums 2 | { 3 | /// 4 | /// Built-in layout algorithm types 5 | /// 6 | public enum LayoutAlgorithmTypeEnum 7 | { 8 | BoundedFR, 9 | Circular, 10 | CompoundFDP, 11 | EfficientSugiyama, 12 | Sugiyama, 13 | FR, 14 | ISOM, 15 | KK, 16 | LinLog, 17 | Tree, 18 | /// 19 | /// Simple random vertices layout 20 | /// 21 | SimpleRandom, 22 | //BalloonTree 23 | /// 24 | /// Do not perform any layout. Layout will be manualy managed by end-user. 25 | /// 26 | Custom, 27 | } 28 | } -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Models/GraphExample.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | namespace WindowsFormsProject 7 | { 8 | /// 9 | /// This is our custom data graph derived from BidirectionalGraph class using custom data types. 10 | /// Data graph stores vertices and edges data that is used by GraphArea and end-user for a variety of operations. 11 | /// Data graph content handled manually by user (add/remove objects). The main idea is that you can dynamicaly 12 | /// remove/add objects into the GraphArea layout and then use data graph to restore original layout content. 13 | /// 14 | public class GraphExample : BidirectionalGraph { } 15 | } 16 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Hierarchical/SugiyamaLayoutAlgorithm.Enums.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public partial class SugiyamaLayoutAlgorithm 7 | where TVertex : class 8 | where TEdge : IEdge 9 | where TGraph : IVertexAndEdgeListGraph, IMutableVertexAndEdgeSet 10 | { 11 | [Flags] 12 | protected enum BaryCenter 13 | { 14 | Up = 1, 15 | Down = 2, 16 | Sub = 4 17 | } 18 | 19 | [Flags] 20 | protected enum CrossCount 21 | { 22 | Up = 1, 23 | Down = 2 24 | } 25 | 26 | protected enum SweepingDirection 27 | { 28 | Up = 1, 29 | Down = 2 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/Converters/EqualityToBooleanConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | 5 | namespace GraphX.Controls 6 | { 7 | public sealed class EqualityToBooleanConverter : IValueConverter 8 | { 9 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 10 | { 11 | return Equals(value, parameter); 12 | } 13 | 14 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 15 | { 16 | if ((bool)value) 17 | return parameter; 18 | 19 | //it's false, so don't bind it back 20 | return Binding.DoNothing; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/port.txt: -------------------------------------------------------------------------------- 1 | 1. async/threadsafe 2 | 2. XAML: 3 | - xmlns changes 4 | - style TargetType changed 5 | - Template.FindName cut off (this.FindName or GetTemplatedName) 6 | - readonly dependecy props are removed 7 | - DP definition logic changed 8 | - invalidatevisual removed, now can use invalidatearrange 9 | - generic.xaml as Content and must use DefaultStyleKey for Control objects to hook default styles 10 | - Freezable removed 11 | - PolyLine, LineSegment, PathSegment and etc. have no ctors w params 12 | - Only PropertyMetadata remains 13 | - No Triggers (use visual states) 14 | 3. math and logic: 15 | - Matrix class have no advanced methods (Transform(Points[]), RotateAt) 16 | 4. No DependencyPropertyDescriptor so no attached props change notifications 17 | 18 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Models/GraphSerializationData.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Common.Models 4 | { 5 | public class GraphSerializationData 6 | { 7 | /// 8 | /// Gets or sets graph data object 9 | /// 10 | public object Data { get; set; } 11 | /// 12 | /// Gets or sets control position 13 | /// 14 | public Point Position { get; set; } 15 | /// 16 | /// Gets or sets control visibility 17 | /// 18 | public bool IsVisible { get; set; } = true; 19 | /// 20 | /// Gets or sets control label availability 21 | /// 22 | public bool HasLabel { get; set; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/Interfaces/ILabelFactory.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Windows; 3 | #if METRO 4 | using Windows.UI.Xaml; 5 | #endif 6 | 7 | namespace GraphX.Controls.Models 8 | { 9 | /// 10 | /// Generic label factory interface. TResult should be at least UIElement to be able to be added as the GraphArea child. 11 | /// 12 | public interface ILabelFactory 13 | where TResult: UIElement 14 | { 15 | /// 16 | /// Returns newly generated label for parent control. Attachable labels will be auto attached if derived from IAttachableControl 17 | /// 18 | /// Parent control 19 | IEnumerable CreateLabel(TCtrl control); 20 | } 21 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Resources 13 | *.png binary 14 | *.jpg binary 15 | *.dll binary 16 | *.exe binary 17 | *.gif binary 18 | *.ico binary 19 | 20 | # Standard to msysgit 21 | *.doc diff=astextplain 22 | *.DOC diff=astextplain 23 | *.docx diff=astextplain 24 | *.DOCX diff=astextplain 25 | *.dot diff=astextplain 26 | *.DOT diff=astextplain 27 | *.pdf diff=astextplain 28 | *.PDF diff=astextplain 29 | *.rtf diff=astextplain 30 | *.RTF diff=astextplain 31 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/TestingCompoundVertexInfo.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 4 | { 5 | public class TestingCompoundVertexInfo 6 | { 7 | public TestingCompoundVertexInfo(Vector springForce, Vector repulsionForce, Vector gravityForce, Vector applicationForce) 8 | { 9 | SpringForce = springForce; 10 | RepulsionForce = repulsionForce; 11 | GravityForce = gravityForce; 12 | ApplicationForce = applicationForce; 13 | } 14 | 15 | public Vector SpringForce { get; set; } 16 | public Vector RepulsionForce { get; set; } 17 | public Vector GravityForce { get; set; } 18 | public Vector ApplicationForce { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/ICompoundGraph.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public interface ICompoundGraph : IBidirectionalGraph 7 | where TEdge : IEdge 8 | { 9 | bool AddChildVertex( TVertex parent, TVertex child ); 10 | int AddChildVertexRange( TVertex parent, IEnumerable children ); 11 | TVertex GetParent( TVertex vertex ); 12 | bool IsChildVertex( TVertex vertex ); 13 | IEnumerable GetChildrenVertices( TVertex vertex ); 14 | int GetChildrenCount( TVertex vertex ); 15 | bool IsCompoundVertex( TVertex vertex ); 16 | 17 | IEnumerable CompoundVertices { get; } 18 | IEnumerable SimpleVertices { get; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GraphX.Controls/DesignerExampleData/VertexDataExample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Media; 3 | using System.Windows.Media.Imaging; 4 | using GraphX.Common.Models; 5 | 6 | namespace GraphX.Controls.DesignerExampleData 7 | { 8 | internal sealed class VertexDataExample : VertexBase 9 | { 10 | public VertexDataExample(int id, string name) 11 | { 12 | ID = id; Name = name; 13 | DataImage = new BitmapImage(new Uri(@"pack://application:,,,/GraphX.Controls;component/Images/help_black.png", UriKind.Absolute)) { CacheOption = BitmapCacheOption.OnLoad }; 14 | } 15 | 16 | public string Name { get; set; } 17 | public ImageSource DataImage{ get; set; } 18 | 19 | public override string ToString() 20 | { 21 | return Name; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/FeatureLists/FeaturesPageData.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Controls; 3 | 4 | namespace ShowcaseApp.WPF.Pages 5 | { 6 | /// 7 | /// Interaction logic for DebugGraph.xaml 8 | /// 9 | public partial class FeaturesPageData : UserControl, INotifyPropertyChanged 10 | { 11 | public FeaturesPageData() 12 | { 13 | InitializeComponent(); 14 | DataContext = this; 15 | } 16 | 17 | public event PropertyChangedEventHandler PropertyChanged; 18 | 19 | protected virtual void OnPropertyChanged(string propertyName) 20 | { 21 | var handler = PropertyChanged; 22 | if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/FeatureLists/FeaturesPageEdges.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Controls; 3 | 4 | namespace ShowcaseApp.WPF.Pages 5 | { 6 | /// 7 | /// Interaction logic for DebugGraph.xaml 8 | /// 9 | public partial class FeaturesPageEdges : UserControl, INotifyPropertyChanged 10 | { 11 | public FeaturesPageEdges() 12 | { 13 | InitializeComponent(); 14 | DataContext = this; 15 | } 16 | 17 | public event PropertyChangedEventHandler PropertyChanged; 18 | 19 | protected virtual void OnPropertyChanged(string propertyName) 20 | { 21 | var handler = PropertyChanged; 22 | if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/Converters/DoubleToLog10Converter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Data; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public sealed class DoubleToLog10Converter : IValueConverter 7 | { 8 | #region IValueConverter Members 9 | 10 | public object Convert(object value, Type targetType, object parameter, string language) 11 | { 12 | var val = Math.Log10((double)value); 13 | return double.IsNegativeInfinity(val) ? 0 : val; 14 | } 15 | 16 | public object ConvertBack(object value, Type targetType, object parameter, string language) 17 | { 18 | var val = Math.Pow(10, (double)value); 19 | return double.IsNegativeInfinity(val) ? 0 : val; 20 | } 21 | 22 | #endregion 23 | 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/Converters/DoubleToLog10Converter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Data; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public sealed class DoubleToLog10Converter : IValueConverter 7 | { 8 | #region IValueConverter Members 9 | 10 | public object Convert(object value, Type targetType, object parameter, string language) 11 | { 12 | var val = Math.Log10((double)value); 13 | return double.IsNegativeInfinity(val) ? 0 : val; 14 | } 15 | 16 | public object ConvertBack(object value, Type targetType, object parameter, string language) 17 | { 18 | var val = Math.Pow(10, (double)value); 19 | return double.IsNegativeInfinity(val) ? 0 : val; 20 | } 21 | 22 | #endregion 23 | 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/FeatureLists/FeaturesPageLayouts.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Controls; 3 | 4 | namespace ShowcaseApp.WPF.Pages 5 | { 6 | /// 7 | /// Interaction logic for DebugGraph.xaml 8 | /// 9 | public partial class FeaturesPageLayouts : UserControl, INotifyPropertyChanged 10 | { 11 | public FeaturesPageLayouts() 12 | { 13 | InitializeComponent(); 14 | DataContext = this; 15 | } 16 | 17 | public event PropertyChangedEventHandler PropertyChanged; 18 | 19 | protected virtual void OnPropertyChanged(string propertyName) 20 | { 21 | var handler = PropertyChanged; 22 | if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/FeatureLists/FeaturesPageTemplates.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Controls; 3 | 4 | namespace ShowcaseApp.WPF.Pages 5 | { 6 | /// 7 | /// Interaction logic for DebugGraph.xaml 8 | /// 9 | public partial class FeaturesPageTemplates : UserControl, INotifyPropertyChanged 10 | { 11 | public FeaturesPageTemplates() 12 | { 13 | InitializeComponent(); 14 | DataContext = this; 15 | } 16 | 17 | public event PropertyChangedEventHandler PropertyChanged; 18 | 19 | protected virtual void OnPropertyChanged(string propertyName) 20 | { 21 | var handler = PropertyChanged; 22 | if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/Misc/IVertexConnectionPoint.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | #if WPF 3 | using System.Windows; 4 | #elif METRO 5 | using Windows.Foundation; 6 | using Windows.UI.Xaml; 7 | #endif 8 | using GraphX.Common.Enums; 9 | 10 | namespace GraphX.Controls 11 | { 12 | public interface IVertexConnectionPoint : IDisposable 13 | { 14 | /// 15 | /// Connector identifier 16 | /// 17 | int Id { get; } 18 | 19 | /// 20 | /// Gets or sets shape form for connection point (affects math calculations for edge end placement) 21 | /// 22 | VertexShape Shape { get; set; } 23 | 24 | void Hide(); 25 | void Show(); 26 | 27 | Rect RectangularSize { get; } 28 | 29 | void Update(); 30 | DependencyObject GetParent(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/SupportClasses/ZoomViewModifierMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum ZoomViewModifierMode 4 | { 5 | /// 6 | /// It does nothing at all. 7 | /// 8 | None, 9 | 10 | /// 11 | /// You can pan the view with the mouse in this mode. 12 | /// 13 | Pan, 14 | 15 | /// 16 | /// You can zoom in with the mouse in this mode. 17 | /// 18 | ZoomIn, 19 | 20 | /// 21 | /// You can zoom out with the mouse in this mode. 22 | /// 23 | ZoomOut, 24 | 25 | /// 26 | /// Zooming after the user has been selected the zooming box. 27 | /// 28 | ZoomBox 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/SupportClasses/ZoomViewModifierMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum ZoomViewModifierMode 4 | { 5 | /// 6 | /// It does nothing at all. 7 | /// 8 | None, 9 | 10 | /// 11 | /// You can pan the view with the mouse in this mode. 12 | /// 13 | Pan, 14 | 15 | /// 16 | /// You can zoom in with the mouse in this mode. 17 | /// 18 | ZoomIn, 19 | 20 | /// 21 | /// You can zoom out with the mouse in this mode. 22 | /// 23 | ZoomOut, 24 | 25 | /// 26 | /// Zooming after the user has been selected the zooming box. 27 | /// 28 | ZoomBox 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/App.xaml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/SupportClasses/ZoomViewModifierMode.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Controls 2 | { 3 | public enum ZoomViewModifierMode 4 | { 5 | /// 6 | /// It does nothing at all. 7 | /// 8 | None, 9 | 10 | /// 11 | /// You can pan the view with the mouse in this mode. 12 | /// 13 | Pan, 14 | 15 | /// 16 | /// You can zoom in with the mouse in this mode. 17 | /// 18 | ZoomIn, 19 | 20 | /// 21 | /// You can zoom out with the mouse in this mode. 22 | /// 23 | ZoomOut, 24 | 25 | /// 26 | /// Zooming after the user has been selected the zooming box. 27 | /// 28 | ZoomBox 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/Converters/DoubleToLog10Converter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Data; 3 | 4 | namespace GraphX.Controls 5 | { 6 | public sealed class DoubleToLog10Converter : IValueConverter 7 | { 8 | #region IValueConverter Members 9 | 10 | public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 11 | { 12 | var val = Math.Log10((double)value); 13 | return double.IsNegativeInfinity(val) ? 0 : val; 14 | } 15 | 16 | public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 17 | { 18 | var val = Math.Pow(10, (double)value); 19 | return double.IsNegativeInfinity(val) ? 0 : val; 20 | } 21 | 22 | #endregion 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/IOverlapRemovalAlgorithmFactory.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Common.Interfaces; 3 | 4 | namespace GraphX.Logic.Algorithms.OverlapRemoval 5 | { 6 | /*public interface IOverlapRemovalAlgorithmFactory 7 | where TVertex : class 8 | { 9 | /// 10 | /// List of the available algorithms. 11 | /// 12 | IEnumerable AlgorithmTypes { get; } 13 | 14 | IOverlapRemovalAlgorithm CreateAlgorithm( string newAlgorithmType, IOverlapRemovalContext context, IOverlapRemovalParameters parameters ); 15 | 16 | IOverlapRemovalParameters CreateParameters( string algorithmType, IOverlapRemovalParameters oldParameters ); 17 | 18 | bool IsValidAlgorithm( string algorithmType ); 19 | 20 | string GetAlgorithmType( IOverlapRemovalAlgorithm algorithm ); 21 | }*/ 22 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/App.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IExternalOverlapRemoval.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading; 3 | using GraphX.Measure; 4 | 5 | namespace GraphX.Common.Interfaces 6 | { 7 | /// 8 | /// Base interface for overlap removal algorithm 9 | /// 10 | /// Vertex data class 11 | public interface IExternalOverlapRemoval 12 | { 13 | /// 14 | /// Gets or sets vertices rectangle sizes 15 | /// This property is filled automaticaly before calculation in GenerateGraph()/RelayoutGraph() methods 16 | /// 17 | IDictionary Rectangles { get; set; } 18 | /// 19 | /// Implements algorithm computation 20 | /// 21 | void Compute(CancellationToken cancellationToken); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/ILayoutInfoIterationEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public interface ILayoutInfoIterationEventArgs 7 | : ILayoutIterationEventArgs 8 | where TVertex : class 9 | where TEdge : IEdge 10 | { 11 | object GetVertexInfo(TVertex vertex); 12 | 13 | object GetEdgeInfo(TEdge edge); 14 | } 15 | 16 | public interface ILayoutInfoIterationEventArgs 17 | : ILayoutInfoIterationEventArgs 18 | where TVertex : class 19 | where TEdge : IEdge 20 | { 21 | IDictionary VertexInfos { get; } 22 | IDictionary EdgeInfos { get; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Assets/ModernUI.Snowflakes.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | #0082AD 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IGraphFIlter.cs: -------------------------------------------------------------------------------- 1 | using QuikGraph; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | /// 6 | /// Common interface for the graph filter 7 | /// 8 | /// Graph vertex 9 | /// Graph edge 10 | /// Graph 11 | public interface IGraphFilter 12 | where TVertex : class, IGraphXVertex 13 | where TEdge : class, IGraphXEdge 14 | where TGraph : class, IMutableBidirectionalGraph 15 | { 16 | /// 17 | /// Core filter method that can modify the input graph and supply modified graph to the output 18 | /// 19 | /// Input graph 20 | TGraph ProcessFilter(TGraph inputGraph); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/Models/DataVertex.vb: -------------------------------------------------------------------------------- 1 | 2 | Imports GraphX.Common.Models 3 | 4 | Namespace Models 5 | 6 | Public Class DataVertex 7 | Inherits VertexBase 8 | ''' 9 | ''' Some string property for example purposes 10 | ''' 11 | Public Property Text As String 12 | 13 | #Region "Calculated or static props" 14 | 15 | Public Overrides Function ToString() As String 16 | Return Text 17 | End Function 18 | 19 | 20 | #End Region 21 | 22 | ''' 23 | ''' Default parameterless constructor for this class 24 | ''' (required for YAXLib serialization) 25 | ''' 26 | Public Sub New() 27 | Me.New("") 28 | End Sub 29 | 30 | Public Sub New(Optional text1 As String = "") 31 | Text = text1 32 | End Sub 33 | End Class 34 | End Namespace -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/Filters/BlueVertexFilter.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Interfaces; 2 | using QuikGraph; 3 | 4 | namespace ShowcaseApp.WPF.Filters 5 | { 6 | public class BlueVertexFilter: IGraphFilter> 7 | { 8 | public BidirectionalGraph ProcessFilter(BidirectionalGraph inputGraph) 9 | { 10 | inputGraph.RemoveVertexIf(a => !a.IsBlue); 11 | return inputGraph; 12 | } 13 | } 14 | 15 | public class YellowVertexFilter : IGraphFilter> 16 | { 17 | public BidirectionalGraph ProcessFilter(BidirectionalGraph inputGraph) 18 | { 19 | inputGraph.RemoveVertexIf(a => a.IsBlue); 20 | return inputGraph; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/EdgeSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public class EdgeSelectedEventArgs : System.EventArgs 6 | { 7 | public EdgeControl EdgeControl { get; set; } 8 | public PointerRoutedEventArgs Args { get; set; } 9 | 10 | public EdgeSelectedEventArgs(EdgeControl ec, PointerRoutedEventArgs e) 11 | : base() 12 | { 13 | EdgeControl = ec; 14 | Args = e; 15 | } 16 | } 17 | 18 | public sealed class EdgeLabelSelectedEventArgs : EdgeSelectedEventArgs 19 | { 20 | public IEdgeLabelControl EdgeLabelControl { get; set; } 21 | 22 | 23 | public EdgeLabelSelectedEventArgs(IEdgeLabelControl label, EdgeControl ec, PointerRoutedEventArgs e, object nu = null) 24 | : base(ec, e) 25 | { 26 | EdgeLabelControl = label; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/EdgeSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public class EdgeSelectedEventArgs : System.EventArgs 6 | { 7 | public EdgeControl EdgeControl { get; set; } 8 | public PointerRoutedEventArgs Args { get; set; } 9 | 10 | public EdgeSelectedEventArgs(EdgeControl ec, PointerRoutedEventArgs e) 11 | : base() 12 | { 13 | EdgeControl = ec; 14 | Args = e; 15 | } 16 | } 17 | 18 | public sealed class EdgeLabelSelectedEventArgs : EdgeSelectedEventArgs 19 | { 20 | public IEdgeLabelControl EdgeLabelControl { get; set; } 21 | 22 | 23 | public EdgeLabelSelectedEventArgs(IEdgeLabelControl label, EdgeControl ec, PointerRoutedEventArgs e, object nu = null) 24 | : base(ec, e) 25 | { 26 | EdgeLabelControl = label; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/Settings.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/ExampleMoveAnimation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using GraphX.Controls.Animations; 3 | 4 | namespace ShowcaseApp.WPF 5 | { 6 | public class ExampleMoveAnimation: MoveAnimationBase 7 | { 8 | public ExampleMoveAnimation() 9 | { 10 | //set animation duration 11 | Duration = TimeSpan.FromSeconds(1); 12 | } 13 | 14 | public override void Cleanup() 15 | { 16 | //cleanup something 17 | } 18 | 19 | public override void RunVertexAnimation() 20 | { 21 | //do some vertex animation. Can be optional. 22 | 23 | //you need to call this manually at the animation end 24 | //if you want corresponding event fired on complete 25 | OnCompleted(); 26 | } 27 | 28 | public override void RunEdgeAnimation() 29 | { 30 | //do some edge animation. Can be optional. 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/FreeFRLayoutParameters.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 4 | { 5 | public class FreeFRLayoutParameters : FRLayoutParametersBase 6 | { 7 | private double _idealEdgeLength = 10; 8 | 9 | public override double K 10 | { 11 | get { return _idealEdgeLength; } 12 | } 13 | 14 | public override double InitialTemperature 15 | { 16 | get { return Math.Sqrt(Math.Pow(_idealEdgeLength, 2) * VertexCount); } 17 | } 18 | 19 | /// 20 | /// Constant. Represents the ideal length of the edges. 21 | /// 22 | public double IdealEdgeLength 23 | { 24 | get { return _idealEdgeLength; } 25 | set 26 | { 27 | _idealEdgeLength = value; 28 | UpdateParameters(); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/LayoutParametersBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using GraphX.Common.Interfaces; 4 | 5 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 6 | { 7 | public abstract class LayoutParametersBase : ILayoutParameters 8 | { 9 | protected LayoutParametersBase() 10 | { 11 | Seed = Guid.NewGuid().GetHashCode(); 12 | } 13 | 14 | #region ICloneable Members 15 | 16 | public object Clone() 17 | { 18 | return MemberwiseClone(); 19 | } 20 | 21 | public int Seed { get; set; } 22 | #endregion 23 | 24 | #region INotifyPropertyChanged Members 25 | 26 | public event PropertyChangedEventHandler PropertyChanged; 27 | 28 | protected void NotifyPropertyChanged(string propertyName) 29 | { 30 | //delegating to the event... 31 | if (PropertyChanged != null) 32 | PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 33 | } 34 | #endregion 35 | } 36 | } -------------------------------------------------------------------------------- /GraphX.Controls/Models/VertexPositionEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | #if WPF 3 | using System.Windows; 4 | #elif METRO 5 | using Windows.Foundation; 6 | #endif 7 | 8 | namespace GraphX.Controls.Models 9 | { 10 | public sealed class VertexPositionEventArgs : EventArgs 11 | { 12 | /// 13 | /// Vertex control 14 | /// 15 | public VertexControlBase VertexControl { get; private set; } 16 | /// 17 | /// Attached coordinates X and Y 18 | /// 19 | public Point Position { get; private set; } 20 | /// 21 | /// Offset of the vertex control within the GraphArea 22 | /// 23 | public Point OffsetPosition { get; private set; } 24 | 25 | public VertexPositionEventArgs(Point offset, Point pos, VertexControlBase vc) 26 | { 27 | OffsetPosition = offset; 28 | VertexControl = vc; 29 | Position = pos; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/LayoutContext.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | using QuikGraph; 4 | 5 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 6 | { 7 | public class LayoutContext : ILayoutContext 8 | where TEdge : IEdge 9 | where TGraph : IVertexAndEdgeListGraph 10 | { 11 | public IDictionary Positions { get; private set; } 12 | 13 | public IDictionary Sizes { get; private set; } 14 | 15 | public TGraph Graph { get; private set; } 16 | 17 | public LayoutMode Mode { get; private set; } 18 | 19 | public LayoutContext( TGraph graph, IDictionary positions, IDictionary sizes, LayoutMode mode ) 20 | { 21 | Graph = graph; 22 | Positions = positions; 23 | Sizes = sizes; 24 | Mode = mode; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /GraphX.Controls/Models/EdgeSelectedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace GraphX.Controls.Models 4 | { 5 | public class EdgeSelectedEventArgs : System.EventArgs 6 | { 7 | public EdgeControl EdgeControl { get; set; } 8 | public ModifierKeys Modifiers { get; set; } 9 | public MouseButtonEventArgs MouseArgs { get; set; } 10 | 11 | public EdgeSelectedEventArgs(EdgeControl ec, MouseButtonEventArgs e, ModifierKeys keys) 12 | { 13 | EdgeControl = ec; 14 | Modifiers = keys; 15 | MouseArgs = e; 16 | } 17 | } 18 | 19 | public sealed class EdgeLabelSelectedEventArgs : EdgeSelectedEventArgs 20 | { 21 | public IEdgeLabelControl EdgeLabelControl { get; set; } 22 | 23 | 24 | public EdgeLabelSelectedEventArgs(IEdgeLabelControl label, EdgeControl ec, MouseButtonEventArgs e, ModifierKeys keys) 25 | :base(ec,e,keys) 26 | { 27 | EdgeLabelControl = label; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Controls/MiniContentPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Controls; 3 | using ShowcaseApp.WPF.Controls; 4 | 5 | namespace ShowcaseApp.WPF.Pages 6 | { 7 | /// 8 | /// Interaction logic for MiniContentPage.xaml 9 | /// 10 | public partial class MiniContentPage : UserControl, ISpecialWindowContentIntro, INotifyPropertyChanged 11 | { 12 | public MiniContentPage() 13 | { 14 | InitializeComponent(); 15 | DataContext = this; 16 | } 17 | 18 | private string _text; 19 | public string IntroText { get { return _text; } set { _text = value; OnPropertyChanged("IntroText"); } } 20 | public event PropertyChangedEventHandler PropertyChanged; 21 | 22 | protected virtual void OnPropertyChanged(string propertyName) 23 | { 24 | var handler = PropertyChanged; 25 | if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/EdgeRouting/EdgeRoutingParameters.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Interfaces; 2 | 3 | namespace GraphX.Logic.Algorithms.EdgeRouting 4 | { 5 | /// 6 | /// Base class for edge routing parameters 7 | /// 8 | public class EdgeRoutingParameters : IEdgeRoutingParameters 9 | { 10 | /// 11 | /// Clone parameters 12 | /// 13 | /// 14 | public object Clone() 15 | { 16 | return MemberwiseClone(); 17 | } 18 | 19 | /// 20 | /// Calls OnPropertyChange event notification 21 | /// 22 | /// 23 | protected void NotifyChanged( string propertyName ) 24 | { 25 | PropertyChanged?.Invoke( this, new System.ComponentModel.PropertyChangedEventArgs( propertyName ) ); 26 | } 27 | 28 | /// 29 | /// PropertyChange event notification 30 | /// 31 | protected event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 32 | } 33 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/ExampleExternalEdgeRoutingAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Collections.Generic; 3 | using GraphX.Measure; 4 | using GraphX.Common.Interfaces; 5 | 6 | namespace ShowcaseApp.WPF 7 | { 8 | public class ExampleExternalEdgeRoutingAlgorithm : IExternalEdgeRouting 9 | { 10 | public void Compute(CancellationToken cancellationToken) 11 | { 12 | } 13 | 14 | public IDictionary VertexSizes { get; set; } 15 | 16 | public IDictionary VertexPositions { get; set; } 17 | 18 | readonly Dictionary _edgeRoutes = new Dictionary(); 19 | public IDictionary EdgeRoutes { get { return _edgeRoutes; }} 20 | 21 | public Point[] ComputeSingle(TEdge edge) { return null; } 22 | 23 | public void UpdateVertexData(TVertex vertex, Point position, Rect size) { } 24 | 25 | 26 | public Rect AreaRectangle { get; set; } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/ILayoutIterationEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public interface ILayoutIterationEventArgs 7 | where TVertex : class 8 | { 9 | /// 10 | /// Represent the status of the layout algorithm in percent. 11 | /// 12 | double StatusInPercent { get; } 13 | 14 | /// 15 | /// If the user sets this value to true, the algorithm aborts ASAP. 16 | /// 17 | bool Abort { get; set; } 18 | 19 | /// 20 | /// Number of the actual iteration. 21 | /// 22 | int Iteration { get; } 23 | 24 | /// 25 | /// Message, textual representation of the status of the algorithm. 26 | /// 27 | string Message { get; } 28 | 29 | IDictionary VertexPositions { get; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /GraphX.Core.Controls/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Markup; 3 | 4 | [assembly: ThemeInfo( 5 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 6 | //(used if a resource is not found in the page, 7 | // or application resource dictionaries) 8 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 9 | //(used if a resource is not found in the page, 10 | // app, or any theme specific resource dictionaries) 11 | )] 12 | 13 | [assembly: XmlnsPrefix("http://schemas.panthernet.ru/graphx/", "graphx")] 14 | [assembly: XmlnsDefinition("http://schemas.panthernet.ru/graphx/", 15 | "GraphX.Controls")] 16 | [assembly: XmlnsDefinition("http://schemas.panthernet.ru/graphx/", 17 | "GraphX.Controls.Animations")] 18 | [assembly: XmlnsDefinition("http://schemas.panthernet.ru/graphx/", 19 | "GraphX.Controls.Models")] -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Controls/MiniContentPage.xaml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/ExampleModels/DataVertex.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Models; 2 | 3 | namespace ShowcaseApp.WPF 4 | { 5 | public class DataVertex: VertexBase 6 | { 7 | public string Text { get; set; } 8 | public string Name { get; set; } 9 | public string Profession { get; set; } 10 | public string Gender { get; set; } 11 | public int Age { get; set; } 12 | public int ImageId { get; set; } 13 | 14 | public bool IsBlue { get; set; } 15 | 16 | #region Calculated or static props 17 | 18 | public override string ToString() 19 | { 20 | return Text; 21 | } 22 | 23 | #endregion 24 | 25 | /// 26 | /// Default constructor for this class 27 | /// (required for serialization). 28 | /// 29 | public DataVertex():this(string.Empty) 30 | { 31 | } 32 | 33 | public DataVertex(string text = "") 34 | { 35 | Text = string.IsNullOrEmpty(text) ? "New Vertex" : text; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Models/VertexBase.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Enums; 2 | using GraphX.Common.Interfaces; 3 | 4 | namespace GraphX.Common.Models 5 | { 6 | public abstract class VertexBase: IGraphXVertex 7 | { 8 | /// 9 | /// Gets or sets custom angle associated with the vertex 10 | /// 11 | public double Angle { get; set; } 12 | 13 | /// 14 | /// Gets or sets optional group identificator 15 | /// 16 | public int GroupId { get; set; } 17 | 18 | /// 19 | /// Skip vertex in algo calc and visualization 20 | /// 21 | public ProcessingOptionEnum SkipProcessing { get; set; } 22 | 23 | protected VertexBase() 24 | { 25 | ID = -1; 26 | } 27 | /// 28 | /// Unique vertex ID 29 | /// 30 | public long ID { get; set; } 31 | 32 | public bool Equals(IGraphXVertex other) 33 | { 34 | return Equals(this, other); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/ImageLoader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Media.Imaging; 4 | 5 | namespace ShowcaseApp.WPF.Models 6 | { 7 | public static class ImageLoader 8 | { 9 | private static readonly List Images = new List(); 10 | 11 | static ImageLoader() 12 | { 13 | Images.Add(new BitmapImage(new Uri(@"pack://application:,,,/ShowcaseApp.WPF;component/Assets/circle_red.png", UriKind.Absolute)) { CacheOption = BitmapCacheOption.OnLoad }); 14 | Images.Add(new BitmapImage(new Uri(@"pack://application:,,,/ShowcaseApp.WPF;component/Assets/circle_blue.png", UriKind.Absolute)) { CacheOption = BitmapCacheOption.OnLoad }); 15 | Images.Add(new BitmapImage(new Uri(@"pack://application:,,,/ShowcaseApp.WPF;component/Assets/circle_green.png", UriKind.Absolute)) { CacheOption = BitmapCacheOption.OnLoad }); 16 | } 17 | 18 | public static BitmapImage GetImageById(int id) 19 | { 20 | return Images.Count < id ? null : Images[id]; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/IHierarchicalBidirectionalGraph.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms 5 | { 6 | public interface IHierarchicalBidirectionalGraph : IBidirectionalGraph 7 | where TEdge : TypedEdge 8 | { 9 | IEnumerable HierarchicalEdgesFor(TVertex v); 10 | int HierarchicalEdgeCountFor(TVertex v); 11 | IEnumerable HierarchicalEdges { get; } 12 | int HierarchicalEdgeCount { get; } 13 | 14 | IEnumerable InHierarchicalEdges(TVertex v); 15 | int InHierarchicalEdgeCount(TVertex v); 16 | 17 | IEnumerable OutHierarchicalEdges(TVertex v); 18 | int OutHierarchicalEdgeCount(TVertex v); 19 | 20 | IEnumerable GeneralEdgesFor(TVertex v); 21 | int GeneralEdgeCountFor(TVertex v); 22 | IEnumerable GeneralEdges { get; } 23 | int GeneralEdgeCount { get; } 24 | 25 | IEnumerable InGeneralEdges(TVertex v); 26 | int InGeneralEdgeCount(TVertex v); 27 | 28 | IEnumerable OutGeneralEdges(TVertex v); 29 | int OutGeneralEdgeCount(TVertex v); 30 | } 31 | } -------------------------------------------------------------------------------- /Documents/Licenses/License.YAXLib.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2009 - 2011 Sina Iravanian (sina@sinairv.com) 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IOverlapRemovalAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | 4 | namespace GraphX.Common.Interfaces 5 | { 6 | public interface IOverlapRemovalAlgorithm : IExternalOverlapRemoval 7 | { 8 | IOverlapRemovalParameters GetParameters(); 9 | 10 | /// 11 | /// Initialize algorithm initial data 12 | /// 13 | /// Size rectangles 14 | void Initialize(IDictionary rectangles); 15 | } 16 | 17 | public interface IOverlapRemovalAlgorithm : IOverlapRemovalAlgorithm 18 | where TParam : IOverlapRemovalParameters 19 | { 20 | /// 21 | /// Algorithm parameters 22 | /// 23 | TParam Parameters { get; } 24 | 25 | /// 26 | /// Initialize algorithm initial data 27 | /// 28 | /// Size rectangles 29 | /// algorithm parameters 30 | void Initialize(IDictionary rectangles, TParam parameters); 31 | } 32 | } -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/XamlTypes/ViewModelXamlMetadataProvider.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Markup; 3 | 4 | namespace FancyDevelopment.WinRtPluginSystem.MVVM 5 | { 6 | /* public class ViewModelXamlMetadataProvider : IXamlMetadataProvider 7 | { 8 | public IXamlType GetXamlType(string fullName) 9 | { 10 | return XamlTypeProvider.Instance.GetType(fullName); 11 | } 12 | 13 | public IXamlType GetXamlType(Type type) 14 | { 15 | return XamlTypeProvider.Instance.GetType(type); 16 | } 17 | 18 | public XmlnsDefinition[] GetXmlnsDefinitions() 19 | { 20 | return new[] 21 | { 22 | new XmlnsDefinition() { XmlNamespace = "http://schemas.panthernet.ru/graphx/", Namespace = "GraphX.Controls" }, 23 | new XmlnsDefinition() { XmlNamespace = "http://schemas.panthernet.ru/graphx/", Namespace = "GraphX.Controls.Animations" }, 24 | new XmlnsDefinition() { XmlNamespace = "http://schemas.panthernet.ru/graphx/", Namespace = "GraphX.Controls.Models" }, 25 | }; 26 | } 27 | }*/ 28 | } 29 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/XamlTypes/ViewModelXamlMetadataProvider.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Markup; 3 | 4 | namespace FancyDevelopment.WinRtPluginSystem.MVVM 5 | { 6 | /* public class ViewModelXamlMetadataProvider : IXamlMetadataProvider 7 | { 8 | public IXamlType GetXamlType(string fullName) 9 | { 10 | return XamlTypeProvider.Instance.GetType(fullName); 11 | } 12 | 13 | public IXamlType GetXamlType(Type type) 14 | { 15 | return XamlTypeProvider.Instance.GetType(type); 16 | } 17 | 18 | public XmlnsDefinition[] GetXmlnsDefinitions() 19 | { 20 | return new[] 21 | { 22 | new XmlnsDefinition() { XmlNamespace = "http://schemas.panthernet.ru/graphx/", Namespace = "GraphX.Controls" }, 23 | new XmlnsDefinition() { XmlNamespace = "http://schemas.panthernet.ru/graphx/", Namespace = "GraphX.Controls.Animations" }, 24 | new XmlnsDefinition() { XmlNamespace = "http://schemas.panthernet.ru/graphx/", Namespace = "GraphX.Controls.Models" }, 25 | }; 26 | } 27 | }*/ 28 | } 29 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/CompoundLayoutIterationEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | using QuikGraph; 4 | 5 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 6 | { 7 | public class CompoundLayoutIterationEventArgs 8 | : LayoutIterationEventArgs, ICompoundLayoutIterationEventArgs 9 | where TVertex : class 10 | where TEdge : IEdge 11 | { 12 | public CompoundLayoutIterationEventArgs( 13 | int iteration, 14 | double statusInPercent, 15 | string message, 16 | IDictionary vertexPositions, 17 | IDictionary innerCanvasSizes) 18 | : base(iteration, statusInPercent, message, vertexPositions) 19 | { 20 | InnerCanvasSizes = innerCanvasSizes; 21 | } 22 | 23 | #region ICompoundLayoutIterationEventArgs Members 24 | 25 | public IDictionary InnerCanvasSizes 26 | { 27 | get; private set; 28 | } 29 | 30 | #endregion 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /GraphX.Controls/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | using System.Windows; 4 | using System.Windows.Markup; 5 | 6 | [assembly: AssemblyTitle("GraphX Controls Library")] 7 | 8 | [assembly: ComVisible(false)] 9 | [assembly: Guid("d8511b14-512b-46ec-ad4f-8f14f46a466c")] 10 | 11 | [assembly: XmlnsPrefix("http://schemas.panthernet.ru/graphx/", "graphx")] 12 | [assembly: XmlnsDefinition("http://schemas.panthernet.ru/graphx/", 13 | "GraphX.Controls")] 14 | [assembly: XmlnsDefinition("http://schemas.panthernet.ru/graphx/", 15 | "GraphX.Controls.Animations")] 16 | [assembly: XmlnsDefinition("http://schemas.panthernet.ru/graphx/", 17 | "GraphX.Controls.Models")] 18 | 19 | [assembly: ThemeInfo( 20 | ResourceDictionaryLocation.None, 21 | //where theme specific resource dictionaries are located 22 | //(used if a resource is not found in the page, 23 | // or application resource dictionaries) 24 | ResourceDictionaryLocation.SourceAssembly 25 | //where the generic resource dictionary is located 26 | //(used if a resource is not found in the page, 27 | // app, or any theme specific resource dictionaries) 28 | )] -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Controls/SpecialWindowControl.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("UWA.SimpleGraph")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("UWA.SimpleGraph")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Version information for an assembly consists of the following four values: 18 | // 19 | // Major Version 20 | // Minor Version 21 | // Build Number 22 | // Revision 23 | // 24 | // You can specify all the values or you can default the Build and Revision Numbers 25 | // by using the '*' as shown below: 26 | // [assembly: AssemblyVersion("1.0.*")] 27 | [assembly: AssemblyVersion("1.0.0.0")] 28 | [assembly: AssemblyFileVersion("1.0.0.0")] 29 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /GraphX.Controls/Models/ControlClickedEventArgs.cs: -------------------------------------------------------------------------------- 1 | 2 | using System.Windows.Input; 3 | 4 | namespace GraphX.Controls.Models 5 | { 6 | public class ControlClickedEventArgs : System.EventArgs 7 | { 8 | public CType Control { get; private set; } 9 | public MouseButtonEventArgs MouseArgs { get; private set; } 10 | public ModifierKeys Modifiers { get; private set; } 11 | 12 | public ControlClickedEventArgs(CType c, MouseEventArgs e, ModifierKeys keys) 13 | { 14 | Control = c; 15 | MouseArgs = e as MouseButtonEventArgs; 16 | Modifiers = keys; 17 | } 18 | } 19 | 20 | public sealed class VertexClickedEventArgs : ControlClickedEventArgs 21 | { 22 | public VertexClickedEventArgs(VertexControl c, MouseEventArgs e, ModifierKeys keys) 23 | : base(c, e, keys) 24 | { 25 | } 26 | } 27 | 28 | public sealed class EdgeClickedEventArgs : ControlClickedEventArgs 29 | { 30 | public EdgeClickedEventArgs(EdgeControl c, MouseEventArgs e, ModifierKeys keys) 31 | : base(c, e, keys) 32 | { 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Examples/SimpleGraph/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SimpleGraph.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Interfaces/IAlgorithmStorage.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Measure; 2 | 3 | namespace GraphX.Common.Interfaces 4 | { 5 | /// 6 | /// Base level interface for algorithm storage implementation 7 | /// 8 | /// Vertex data class 9 | /// Edge data class 10 | public interface IAlgorithmStorage 11 | { 12 | /// 13 | /// Gets layout algorithm 14 | /// 15 | IExternalLayout Layout { get; } 16 | 17 | /// 18 | /// Gets overlap removal algorithm 19 | /// 20 | IExternalOverlapRemoval OverlapRemoval { get; } 21 | 22 | /// 23 | /// Gets edge routing algorithm 24 | /// 25 | IExternalEdgeRouting EdgeRouting { get; } 26 | 27 | void RemoveSingleEdge(TEdge edge); 28 | void AddSingleEdge(TEdge edge, Point[] routingPoints = null); 29 | void RemoveSingleVertex(TVertex vertex); 30 | void AddSingleVertex(TVertex vertex, Point position, Rect size); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace ShowcaseApp.WPF.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WindowsFormsProject.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Models/WeightedEdge.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Interfaces; 2 | 3 | namespace GraphX.Common.Models 4 | { 5 | 6 | public class WeightedEdge : IWeightedEdge 7 | { 8 | public double Weight { get; set; } 9 | 10 | public WeightedEdge(TVertex source, TVertex target) 11 | : this(source, target, 1) {} 12 | 13 | public WeightedEdge(TVertex source, TVertex target, double weight) 14 | { 15 | Source = source; 16 | Target = target; 17 | Weight = weight; 18 | } 19 | 20 | /// 21 | /// Source vertex data 22 | /// 23 | public TVertex Source { get; set; } 24 | 25 | /// 26 | /// Target vertex data 27 | /// 28 | public TVertex Target { get; set; } 29 | 30 | /// 31 | /// Update vertices (probably needed for serialization TODO) 32 | /// 33 | /// Source vertex data 34 | /// Target vertex data 35 | public void UpdateVertices(TVertex source, TVertex target) 36 | { 37 | Source = source; Target = target; 38 | } 39 | 40 | } 41 | } -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/Converters/GeometryToPathGeometryConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using System.Windows.Media; 5 | 6 | namespace GraphX.Controls 7 | { 8 | public class GeometryToPathGeometryConverter : IValueConverter 9 | { 10 | #region Inverted Property 11 | 12 | public bool Inverted 13 | { 14 | get 15 | { 16 | return _inverted; 17 | } 18 | set 19 | { 20 | _inverted = value; 21 | } 22 | } 23 | 24 | private bool _inverted; //false 25 | 26 | #endregion 27 | 28 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 29 | { 30 | if (value is EllipseGeometry) return null; 31 | return _inverted ? (Geometry)value : (PathGeometry)value; 32 | } 33 | 34 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 35 | { 36 | if (value is EllipseGeometry) return null; 37 | return _inverted ? (PathGeometry)value : (Geometry)value; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/Compound/CompoundLayoutContext.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GraphX.Measure; 3 | using QuikGraph; 4 | 5 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 6 | { 7 | public class CompoundLayoutContext 8 | : LayoutContext, ICompoundLayoutContext 9 | where TEdge : IEdge 10 | where TGraph : class, IBidirectionalGraph 11 | { 12 | public CompoundLayoutContext( 13 | TGraph graph, 14 | IDictionary positions, 15 | IDictionary sizes, 16 | LayoutMode mode, 17 | IDictionary vertexBorders, 18 | IDictionary layoutTypes) 19 | : base( graph, positions, sizes, mode ) 20 | { 21 | VertexBorders = vertexBorders; 22 | LayoutTypes = layoutTypes; 23 | } 24 | 25 | public IDictionary VertexBorders { get; private set; } 26 | public IDictionary LayoutTypes { get; private set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /GraphX.Controls/Models/GraphControlFactory.cs: -------------------------------------------------------------------------------- 1 | #if WPF 2 | using System.Windows; 3 | #elif METRO 4 | using Windows.UI.Xaml; 5 | #endif 6 | 7 | namespace GraphX.Controls.Models 8 | { 9 | /// 10 | /// Factory class responsible for VertexControl and EdgeControl objects creation 11 | /// 12 | public class GraphControlFactory : IGraphControlFactory 13 | { 14 | public GraphControlFactory(GraphAreaBase graphArea) 15 | { 16 | FactoryRootArea = graphArea; 17 | } 18 | 19 | public virtual EdgeControl CreateEdgeControl(VertexControl source, VertexControl target, object edge, bool showArrows = true, Visibility visibility = Visibility.Visible) 20 | { 21 | var edgectrl = new EdgeControl(source, target, edge, showArrows) { RootArea = FactoryRootArea}; 22 | edgectrl.SetCurrentValue(UIElement.VisibilityProperty, visibility); 23 | return edgectrl; 24 | 25 | } 26 | 27 | public virtual VertexControl CreateVertexControl(object vertexData) 28 | { 29 | return new VertexControl(vertexData) {RootArea = FactoryRootArea}; 30 | } 31 | 32 | 33 | public GraphAreaBase FactoryRootArea { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Tree/SimpleTreeLayoutAlgorithm.Data.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public partial class SimpleTreeLayoutAlgorithm where TVertex : class 7 | where TEdge : IEdge 8 | where TGraph : IBidirectionalGraph, IMutableVertexAndEdgeSet 9 | { 10 | protected class Layer 11 | { 12 | public double Size; 13 | public double NextPosition; 14 | public readonly IList Vertices = new List(); 15 | public double LastTranslate; 16 | 17 | public Layer() 18 | { 19 | LastTranslate = 0; 20 | } 21 | 22 | /* Width and Height Optimization */ 23 | 24 | } 25 | 26 | /// 27 | /// Vertex data class 28 | /// 29 | protected class VertexData 30 | { 31 | public TVertex Parent; 32 | public double Translate; 33 | public double Position; 34 | 35 | /* Width and Height Optimization */ 36 | 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Models/SimpleCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Input; 3 | 4 | namespace ShowcaseApp.WPF.Models 5 | { 6 | public class SimpleCommand : ICommand 7 | { 8 | public Predicate CanExecuteDelegate { get; set; } 9 | public Action ExecuteDelegate { get; set; } 10 | 11 | public SimpleCommand(Predicate can, Action ex) 12 | { 13 | CanExecuteDelegate = can; 14 | ExecuteDelegate = ex; 15 | } 16 | 17 | #region ICommand Members 18 | 19 | public bool CanExecute(object parameter) 20 | { 21 | if (CanExecuteDelegate != null) 22 | return CanExecuteDelegate(parameter); 23 | return true;// if there is no can execute default to true 24 | } 25 | 26 | public event EventHandler CanExecuteChanged 27 | { 28 | add { CommandManager.RequerySuggested += value; } 29 | remove { CommandManager.RequerySuggested -= value; } 30 | } 31 | 32 | public void Execute(object parameter) 33 | { 34 | if (ExecuteDelegate != null) 35 | ExecuteDelegate(parameter); 36 | } 37 | 38 | #endregion 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /GraphX.Controls/GraphX.WPF.Controls.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | GraphX.WPF 5 | $version$ 6 | GraphX for .NET (WPF) 7 | panthernet 8 | panthernet 9 | https://github.com/panthernet/GraphX/blob/master/LICENSE 10 | https://github.com/panthernet/GraphX 11 | http://www.panthernet.ru/myimages/StoreLogo.png 12 | false 13 | GraphX for .NET is an advanced graph visualization library 14 | GraphX for .NET is an advanced graph visualization library that uses different layout and edge routing algorithms, implements many graph-related features and supports highly customizable visual templates. It is able to render large amount of vertices and steadily moves to support the most popular .NET platforms. 15 | https://github.com/panthernet/GraphX/blob/PCL/Documents/CHANGELOG.txt 16 | Copyright www.panthernet.ru 2015 17 | GraphX WPF Graph# QuickGraph graph visualization 18 | 19 | -------------------------------------------------------------------------------- /.settings/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | // List of configurations. Add new configurations or edit existing ones. 4 | // ONLY "node" and "mono" are supported, change "type" to switch. 5 | "configurations": [ 6 | { 7 | // Name of configuration; appears in the launch configuration drop down menu. 8 | "name": "Launch app.js", 9 | // Type of configuration. Possible values: "node", "mono". 10 | "type": "node", 11 | // Workspace relative or absolute path to the program. 12 | "program": "app.js", 13 | // Automatically stop program after launch. 14 | "stopOnEntry": true, 15 | // Command line arguments passed to the program. 16 | "args": [], 17 | // Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace. 18 | "cwd": ".", 19 | // Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH. 20 | "runtimeExecutable": null, 21 | // Environment variables passed to the program. 22 | "env": { } 23 | }, 24 | { 25 | "name": "Attach", 26 | "type": "node", 27 | // TCP/IP address. Default is "localhost". 28 | "address": "localhost", 29 | // Port to attach to. 30 | "port": 5858 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/FDP/LinLogLayoutParameters.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 2 | { 3 | public class LinLogLayoutParameters : LayoutParametersBase 4 | { 5 | internal double attractionExponent = 1.0; 6 | 7 | public double AttractionExponent 8 | { 9 | get { return attractionExponent; } 10 | set 11 | { 12 | attractionExponent = value; 13 | NotifyPropertyChanged("AttractionExponent"); 14 | } 15 | } 16 | 17 | internal double repulsiveExponent; 18 | 19 | public double RepulsiveExponent 20 | { 21 | get { return repulsiveExponent; } 22 | set 23 | { 24 | repulsiveExponent = value; 25 | NotifyPropertyChanged("RepulsiveExponent"); 26 | } 27 | } 28 | 29 | internal double gravitationMultiplier = 0.1; 30 | 31 | public double GravitationMultiplier 32 | { 33 | get { return gravitationMultiplier; } 34 | set 35 | { 36 | gravitationMultiplier = value; 37 | NotifyPropertyChanged("GravitationMultiplier"); 38 | } 39 | } 40 | 41 | internal int iterationCount = 100; 42 | 43 | public int IterationCount 44 | { 45 | get { return iterationCount; } 46 | set 47 | { 48 | iterationCount = value; 49 | NotifyPropertyChanged("IterationCount"); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Controls/MiniXamlPage.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 27 | 28 | -------------------------------------------------------------------------------- /GraphX.Controls/Animations/Interfaces/IOneWayControlAnimation.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Controls.Models; 2 | 3 | namespace GraphX.Controls.Animations 4 | { 5 | public interface IOneWayControlAnimation 6 | { 7 | /// 8 | /// Animation duration 9 | /// 10 | double Duration { get; set; } 11 | 12 | /// 13 | /// Run vertex animation 14 | /// 15 | /// 16 | /// Remove data vertex from data graph when animation is finished. Default value is False. 17 | void AnimateVertex(VertexControl target, bool removeDataVertex = false); 18 | /// 19 | /// Run edge animation 20 | /// 21 | /// 22 | /// Remove data edge from data graph when animation is finished. Default value is False. 23 | void AnimateEdge(EdgeControl target, bool removeDataEdge = false); 24 | /// 25 | /// Completed event that fires when animation is complete. Must be fired for correct object removal when animation ends. 26 | /// 27 | event RemoveControlEventHandler Completed; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/Models/DataEdge.vb: -------------------------------------------------------------------------------- 1 | 2 | Imports GraphX.Common.Models 3 | 4 | Namespace Models 5 | 6 | Public Class DataEdge 7 | Inherits EdgeBase(Of DataVertex) 8 | ''' 9 | ''' Default constructor. We need to set at least Source and Target properties of the edge. 10 | ''' 11 | ''' Source vertex data 12 | ''' Target vertex data 13 | ''' Optional edge weight 14 | Public Sub New(source As DataVertex, target As DataVertex, Optional weight As Double = 1) 15 | MyBase.New(source, target, weight) 16 | End Sub 17 | ''' 18 | ''' Default parameterless constructor (for serialization compatibility) 19 | ''' 20 | Public Sub New() 21 | MyBase.New(Nothing, Nothing, 1) 22 | End Sub 23 | 24 | ''' 25 | ''' Custom string property for example 26 | ''' 27 | Public Property Text As String 28 | 29 | #Region "GET members" 30 | Public Overloads Function ToString() As String 31 | Return Text 32 | End Function 33 | 34 | 35 | #End Region 36 | End Class 37 | End Namespace -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/LayoutAlgorithms/Hierarchical/SugiyamaLayoutAlgorithm.SugiEdge.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using QuikGraph; 3 | 4 | namespace GraphX.Logic.Algorithms.LayoutAlgorithms 5 | { 6 | public partial class SugiyamaLayoutAlgorithm 7 | where TVertex : class 8 | where TEdge : IEdge 9 | where TGraph : IVertexAndEdgeListGraph, IMutableVertexAndEdgeSet 10 | { 11 | private class SugiEdge : TypedEdge 12 | { 13 | public bool IsLongEdge 14 | { 15 | get { return DummyVertices != null; } 16 | set 17 | { 18 | if ( IsLongEdge != value ) 19 | { 20 | DummyVertices = value ? new List() : null; 21 | } 22 | } 23 | } 24 | 25 | public IList DummyVertices { get; private set; } 26 | public TEdge Original { get; private set; } 27 | public bool IsReverted 28 | { 29 | get 30 | { 31 | return !Original.Equals(default(TEdge)) && Original.Source == Target.Original && Original.Target == Source.Original; 32 | } 33 | } 34 | 35 | public SugiEdge( TEdge original, SugiVertex source, SugiVertex target, EdgeTypes type ) 36 | : base( source, target, type ) 37 | { 38 | Original = original; 39 | } 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Controls/MiniXamlTemplatePage.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 27 | 28 | -------------------------------------------------------------------------------- /Examples/SimpleGraph/Models/DataVertex.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Models; 2 | 3 | namespace SimpleGraph.Models 4 | { 5 | /* DataVertex is the data class for the vertices. It contains all custom vertex data specified by the user. 6 | * This class also must be derived from VertexBase that provides properties and methods mandatory for 7 | * correct GraphX operations. 8 | * Some of the useful VertexBase members are: 9 | * - ID property that stores unique positive identfication number. Property must be filled by user. 10 | * 11 | */ 12 | 13 | public class DataVertex: VertexBase 14 | { 15 | /// 16 | /// Some string property for example purposes 17 | /// 18 | public string Text { get; set; } 19 | 20 | #region Calculated or static props 21 | 22 | public override string ToString() 23 | { 24 | return Text; 25 | } 26 | 27 | #endregion 28 | 29 | /// 30 | /// Default parameterless constructor for this class 31 | /// (required for YAXLib serialization) 32 | /// 33 | public DataVertex():this(string.Empty) 34 | { 35 | } 36 | 37 | public DataVertex(string text = "") 38 | { 39 | Text = text; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Templates/Mini/LayoutDataFiltering.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 22 | -------------------------------------------------------------------------------- /GraphX.Controls/Controls/ZoomControl/Helpers/PointHelper.cs: -------------------------------------------------------------------------------- 1 | /************************************************************************************* 2 | 3 | Extended WPF Toolkit 4 | 5 | Copyright (C) 2007-2013 Xceed Software Inc. 6 | 7 | This program is provided to you under the terms of the Microsoft Public 8 | License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license 9 | 10 | For more features, controls, and fast professional support, 11 | pick up the Plus Edition at http://xceed.com/wpf_toolkit 12 | 13 | Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids 14 | 15 | ***********************************************************************************/ 16 | 17 | using System; 18 | using System.Windows; 19 | 20 | namespace GraphX.Controls 21 | { 22 | internal static class PointHelper 23 | { 24 | public static double DistanceBetween( Point p1, Point p2 ) 25 | { 26 | return Math.Sqrt( Math.Pow( p1.X - p2.X, 2 ) + Math.Pow( p1.Y - p2.Y, 2 ) ); 27 | } 28 | 29 | public static Point Empty 30 | { 31 | get 32 | { 33 | return new Point( double.NaN, double.NaN ); 34 | } 35 | } 36 | 37 | public static bool IsEmpty( Point point ) 38 | { 39 | return DoubleHelper.IsNaN( point.X ) && DoubleHelper.IsNaN( point.Y ); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Controls/ZoomControl/Helpers/PointHelper.cs: -------------------------------------------------------------------------------- 1 | /************************************************************************************* 2 | 3 | Extended WPF Toolkit 4 | 5 | Copyright (C) 2007-2013 Xceed Software Inc. 6 | 7 | This program is provided to you under the terms of the Microsoft Public 8 | License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license 9 | 10 | For more features, controls, and fast professional support, 11 | pick up the Plus Edition at http://xceed.com/wpf_toolkit 12 | 13 | Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids 14 | 15 | ***********************************************************************************/ 16 | 17 | using System; 18 | using Windows.Foundation; 19 | 20 | namespace GraphX.Controls 21 | { 22 | internal static class PointHelper 23 | { 24 | public static double DistanceBetween( Point p1, Point p2 ) 25 | { 26 | return Math.Sqrt( Math.Pow( p1.X - p2.X, 2 ) + Math.Pow( p1.Y - p2.Y, 2 ) ); 27 | } 28 | 29 | public static Point Empty 30 | { 31 | get 32 | { 33 | return new Point( double.NaN, double.NaN ); 34 | } 35 | } 36 | 37 | public static bool IsEmpty( Point point ) 38 | { 39 | return DoubleHelper.IsNaN( point.X ) && DoubleHelper.IsNaN( point.Y ); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Controls/ZoomControl/Helpers/PointHelper.cs: -------------------------------------------------------------------------------- 1 | /************************************************************************************* 2 | 3 | Extended WPF Toolkit 4 | 5 | Copyright (C) 2007-2013 Xceed Software Inc. 6 | 7 | This program is provided to you under the terms of the Microsoft Public 8 | License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license 9 | 10 | For more features, controls, and fast professional support, 11 | pick up the Plus Edition at http://xceed.com/wpf_toolkit 12 | 13 | Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids 14 | 15 | ***********************************************************************************/ 16 | 17 | using System; 18 | using Windows.Foundation; 19 | 20 | namespace GraphX.Controls 21 | { 22 | internal static class PointHelper 23 | { 24 | public static double DistanceBetween( Point p1, Point p2 ) 25 | { 26 | return Math.Sqrt( Math.Pow( p1.X - p2.X, 2 ) + Math.Pow( p1.Y - p2.Y, 2 ) ); 27 | } 28 | 29 | public static Point Empty 30 | { 31 | get 32 | { 33 | return new Point( double.NaN, double.NaN ); 34 | } 35 | } 36 | 37 | public static bool IsEmpty( Point point ) 38 | { 39 | return DoubleHelper.IsNaN( point.X ) && DoubleHelper.IsNaN( point.Y ); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Examples/WindowsFormsProject/Models/DataVertex.cs: -------------------------------------------------------------------------------- 1 | using GraphX; 2 | using GraphX.Common.Models; 3 | 4 | namespace WindowsFormsProject 5 | { 6 | /* DataVertex is the data class for the vertices. It contains all custom vertex data specified by the user. 7 | * This class also must be derived from VertexBase that provides properties and methods mandatory for 8 | * correct GraphX operations. 9 | * Some of the useful VertexBase members are: 10 | * - ID property that stores unique positive identfication number. Property must be filled by user. 11 | * 12 | */ 13 | 14 | public class DataVertex: VertexBase 15 | { 16 | /// 17 | /// Some string property for example purposes 18 | /// 19 | public string Text { get; set; } 20 | 21 | #region Calculated or static props 22 | 23 | public override string ToString() 24 | { 25 | return Text; 26 | } 27 | 28 | 29 | #endregion 30 | 31 | /// 32 | /// Default parameterless constructor for this class 33 | /// (required for YAXLib serialization) 34 | /// 35 | public DataVertex():this("") 36 | { 37 | } 38 | 39 | public DataVertex(string text = "") 40 | { 41 | Text = text; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/AnimationHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Media.Animation; 4 | 5 | namespace GraphX.Controls.Models 6 | { 7 | public static class AnimationHelper 8 | { 9 | public static Storyboard CreateDoubleAnimation(double? from, double? to, double duration, string propertyName, FrameworkElement target, FillBehavior? fillBehavior = null, EventHandler onCompleted = null) 10 | { 11 | var animation = new DoubleAnimation 12 | { 13 | From = from, 14 | To = to, 15 | Duration = new Duration(TimeSpan.FromMilliseconds(duration)), 16 | EnableDependentAnimation = true , 17 | //FillBehavior = fillBehavior 18 | //EasingFunction = new ExponentialEase() { EasingMode = EasingMode.EaseOut } 19 | }; 20 | 21 | if (fillBehavior.HasValue) 22 | animation.FillBehavior = fillBehavior.Value; 23 | var sb = new Storyboard(); 24 | Storyboard.SetTarget(animation, target); 25 | Storyboard.SetTargetProperty(animation, propertyName); 26 | sb.Children.Add(animation); 27 | if(onCompleted != null) 28 | sb.Completed += onCompleted; 29 | return sb; 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /GraphX.UAP.Controls/Models/FileServiceProviderMETRO.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using GraphX.Common.Interfaces; 4 | using GraphX.Common.Models; 5 | 6 | namespace GraphX.Controls.Models 7 | { 8 | /// 9 | /// WPF implementation of IFileServiceProvider 10 | /// 11 | public static class FileServiceProviderMETRO 12 | { 13 | /// 14 | /// Serializes data classes list to file 15 | /// 16 | /// File name 17 | /// Data classes list 18 | public static void SerializeDataToFile(string filename, List modelsList) 19 | { 20 | 21 | } 22 | /// 23 | /// Deserializes data classes list from file 24 | /// 25 | /// File name 26 | public static List DeserializeDataFromFile(string filename) 27 | { 28 | 29 | return Deserialize(filename).Result; 30 | } 31 | 32 | #pragma warning disable 1998 33 | private static async Task> Deserialize(string filename) 34 | #pragma warning restore 1998 35 | { 36 | return new List(); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Examples/UAP.SimpleGraph/Properties/Default.rd.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Examples/WindowsDesktop_VB.NET_WinForms_Example/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' General Information about an assembly is controlled through the following 6 | ' set of attributes. Change these attribute values to modify the information 7 | ' associated with an assembly. 8 | 9 | ' Review the values of the assembly attributes 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 21 | 22 | 23 | ' Version information for an assembly consists of the following four values: 24 | ' 25 | ' Major Version 26 | ' Minor Version 27 | ' Build Number 28 | ' Revision 29 | ' 30 | ' You can specify all the values or you can default the Build and Revision Numbers 31 | ' by using the '*' as shown below: 32 | ' 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/AnimationHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Media.Animation; 4 | 5 | namespace GraphX.Controls.Models 6 | { 7 | public static class AnimationHelper 8 | { 9 | public static Storyboard CreateDoubleAnimation(double? from, double? to, double duration, string propertyName, FrameworkElement target, FillBehavior? fillBehavior = null, EventHandler onCompleted = null) 10 | { 11 | var animation = new DoubleAnimation 12 | { 13 | From = from, 14 | To = to, 15 | Duration = new Duration(TimeSpan.FromMilliseconds(duration)), 16 | EnableDependentAnimation = true , 17 | //FillBehavior = fillBehavior 18 | //EasingFunction = new ExponentialEase() { EasingMode = EasingMode.EaseOut } 19 | }; 20 | 21 | if (fillBehavior.HasValue) 22 | animation.FillBehavior = fillBehavior.Value; 23 | var sb = new Storyboard(); 24 | Storyboard.SetTarget(animation, target); 25 | Storyboard.SetTargetProperty(animation, propertyName); 26 | sb.Children.Add(animation); 27 | if(onCompleted != null) 28 | sb.Completed += onCompleted; 29 | return sb; 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /GraphX.METRO.Controls/Models/FileServiceProviderMETRO.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using GraphX.PCL.Common.Interfaces; 4 | using GraphX.PCL.Common.Models; 5 | 6 | namespace GraphX.Controls.Models 7 | { 8 | /// 9 | /// WPF implementation of IFileServiceProvider 10 | /// 11 | public static class FileServiceProviderMETRO 12 | { 13 | /// 14 | /// Serializes data classes list to file 15 | /// 16 | /// File name 17 | /// Data classes list 18 | public static void SerializeDataToFile(string filename, List modelsList) 19 | { 20 | 21 | } 22 | /// 23 | /// Deserializes data classes list from file 24 | /// 25 | /// File name 26 | public static List DeserializeDataFromFile(string filename) 27 | { 28 | 29 | return Deserialize(filename).Result; 30 | } 31 | 32 | #pragma warning disable 1998 33 | private static async Task> Deserialize(string filename) 34 | #pragma warning restore 1998 35 | { 36 | return new List(); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /GraphX.Standard.Common/Measure/Thickness.cs: -------------------------------------------------------------------------------- 1 | namespace GraphX.Measure 2 | { 3 | public struct Thickness 4 | { 5 | public readonly double Left; 6 | public readonly double Top; 7 | public readonly double Bottom; 8 | public readonly double Right; 9 | 10 | public Thickness(double left, double top, double right, double bottom) 11 | { 12 | Left = left; Right = right; 13 | Top = top; Bottom = bottom; 14 | } 15 | 16 | public static bool operator !=(Thickness t1, Thickness t2) 17 | { 18 | return !(t1.Left == t2.Left && t1.Top == t2.Top && t1.Right == t2.Right && t1.Bottom == t2.Bottom); 19 | } 20 | 21 | public static bool operator ==(Thickness t1, Thickness t2) 22 | { 23 | return t1.Left == t2.Left && t1.Top == t2.Top && t1.Right == t2.Right && t1.Bottom == t2.Bottom; 24 | } 25 | 26 | public override bool Equals(object o) 27 | { 28 | if (!(o is Thickness)) 29 | return false; 30 | return Equals(this, (Thickness)o); 31 | } 32 | 33 | public bool Equals(Thickness value) 34 | { 35 | return Equals(this, value); 36 | } 37 | 38 | public override int GetHashCode() 39 | { 40 | return (Left.GetHashCode() ^ Top.GetHashCode() ^ Right.GetHashCode() ^ Bottom.GetHashCode()); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /GraphX.Standard.Logic/Algorithms/OverlapRemoval/OverlapRemovalParameters.cs: -------------------------------------------------------------------------------- 1 | using GraphX.Common.Interfaces; 2 | 3 | namespace GraphX.Logic.Algorithms.OverlapRemoval 4 | { 5 | public class OverlapRemovalParameters : IOverlapRemovalParameters 6 | { 7 | private float _verticalGap = 10; 8 | private float _horizontalGap = 10; 9 | 10 | /// 11 | /// Gets or sets minimal vertical distance between vertices 12 | /// 13 | public float VerticalGap 14 | { 15 | get { return _verticalGap; } 16 | set 17 | { 18 | if (_verticalGap == value) return; 19 | _verticalGap = value; 20 | NotifyChanged( "VerticalGap" ); 21 | } 22 | } 23 | 24 | /// 25 | /// Gets or sets minimal horizontal distance between vertices 26 | /// 27 | public float HorizontalGap 28 | { 29 | get { return _horizontalGap; } 30 | set 31 | { 32 | if (_horizontalGap == value) return; 33 | _horizontalGap = value; 34 | NotifyChanged( "HorizontalGap" ); 35 | } 36 | } 37 | 38 | public object Clone() 39 | { 40 | return MemberwiseClone(); 41 | } 42 | 43 | protected void NotifyChanged( string propertyName ) 44 | { 45 | if ( PropertyChanged != null ) 46 | PropertyChanged( this, new System.ComponentModel.PropertyChangedEventArgs( propertyName ) ); 47 | } 48 | 49 | public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 50 | } 51 | } -------------------------------------------------------------------------------- /Examples/ShowcaseApp.WPF/Pages/FeatureLists/FeaturesPageData.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 16 |