Search the Community

Showing results for tags 'graph'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


    • Announcements
  • GraphX for .NET (open-source)
    • Updates & Releases
    • Discussions
    • Documents & Tutorials
    • Bug reports
    • Redirect to GraphX repository on GitHub
  • General Discussions
    • General software discussions
    • Monogame/XNA
  • International Discussions
    • Обсуждения на русском
  • News & Announcements
  • Discussions

Found 18 results

  1. Now also on Twitter: Latest source code with specified changes is available on GitHub Version 2.3.8 WIP DETAILED CHANGELOG: - Implemented multiple labels logic for edges. Now you can display multiple labels across the edge - Added LabelHorizontalOffset property for labels which offsets labels along the edge given some offset value in total edge length percent CODE CHANGES: - Properties ShowLabel,LabelVerticalOffset,AlignLabelsToEdges moved from EdgeControlBase to EdgeLabelControl class - Property AlignLabelsToEdges renamed to AlignToEdge - Property EdgeControlBase.EdgeLabelControl renamed to EdgeLabelControls and now has IList<IEdgeLabelControl> type - Added new method IList<SysRect> EdgeControlBase.GetLabelSizes() - Added new method IList<IEdgeLabelControl> EdgeControlBase.GetLabelControls() - GraphArea.ShowAllEdgesLabels() method now has one-time effect and will not be reapplied after relayout - GraphArea.ShowAllEdgesLabels() method now has one-time effect and will not be reapplied after relayout - GraphArea.EdgeLabelFactory is now setup up with default factory generating one AttachableEdgeLabelControl - Label factory method CreateLabel() now returns IEnumerable<TResult> to accomodate multiple labels generation during single factory pass OBSOLETE AND REMOVED STUFF: General - Old style arrows are now not supported - Old style edge labels (EdgeLabelControl) are now not supported, make sure to remove it from XAML templates and update your code to use AttachableEdgeLabelControl EdgeControlBase - LabelAngle - GetLabelSize() - SetCustomLabelSize() EdgeControl - LabelMouseDown event removed Other: - showLabel parameter has been removed from all EdgeControl constructors and factories
  2. RELEASE 2.3.6 DETAILED CHANGELOG: + Added edge endpoint calculation for rotated vertex that use ellipse, circle and rectangle math shape + Added VertexControl::LabelAttached and LabelDetached events which fires when new label is attached to VertexControl or detached from it + Added new parameter to GraphArea::UpdateParallelEdgesData(Dictionary<TEdge, EdgeControl> edgeList) to be able to specify edges list to parse for parallelization instead of full edge list parse + Added support for object visbility and attachable labels to GraphX serialization data + Added ZoomControl::ResetKeyBindings() method to clear all (incl default) set key bindings + Fixed ZoomControl dynamic content switch to corectly refresh viewfinder + Improved ZoomControl handling with disabled animation + Renamed ZoomControl::IsAnimationDisabled to IsAnimationEnabled and changed the logic according the modification + Renamed ZoomControl::MaximumZoomStep to ZoomStep and updated description + Implemented easy ZoomControl key bindings with BindKey() method and exposed base commands for zoom and pan actions to be able to bind keys for them + Some class refactoring Go to the archive & sources download page NuGet version is also available
  3. Greetings everyone! Today we proudly announce the release of the GraphX for .NET PRO 1.0.0 version which is planned as our mainstream product! We have a great plans for it so you may expect more features and content to be added soon followed by special highlights. Feel free to read through this announce and ask us questions if you'll have some. So, what's inside? GraphX PRO utilizes open-source GraphX logic core making possible for you to use all the algorithms from this version and all the possible custom algorithms you already have. This also allows us to create new PRO algorithms compatible with open-source GraphX which is still a great visualization tool for templated interactive graphs. Using the PRO version you gain access to a set of new high performance controls designed to handle large data graphs in WPF and UWA environments by utilizing the low-level rendering techniques. These controls allows you to build your graph visualization from scratch skipping the heavy XAML templates and optimize overall performance by using fast and efficient graph object techniques. We also have an performance-tweaked zoom control and additional layout algorithms to play with. For example this highly customizable Radial Layout Algorithm can do the magic with the tree data graphs. Here are some GraphX PRO highlights we have to offer you: New controls for maximum rendering performance you can achieve in WPF. New low-level rendering techniques and plenty of performance optimizations allowed us to create controls better suitable for large data graph rendering and visualization. Also we have more performant ZoomControl to offer. New layout algorithms for better tree graph visualization with different configurable options, including Radial Tree Layout. Expect more algorithms to come soon. Extended support for both FREE and PRO GraphX products including the access to VIP customers area on the forums and guaranteed quick responses on all the questions related to GraphX and derived projects. Priority version updates and feature requests. Access to requested hotfixes in any desirable form and ability to request minor new features with top priority mark. More tools to work with will be added in the future including new algorithms, controls and much more. Special discounts and offers for other services including GraphX-based paid project development and feature implementation! On-demand source code access that includes full GraphX PRO source code sharing and support The Requirements? We want to supply our customers with the best software possible so we have to use modern tools to achieve the best performance and usability . GraphX for .NET PRO software requirements as follows: Visual Studio 2015 Community Edition or higher (for sample projects) .NET Framework 4.5* or higher * Compatibility with other framework versions is a subject for a discussion, feel free to contact us What about the license? GraphX for .NET PRO utilize subscription based licensing model which means you can get new product versions while your license is active and continue to use them even when your license is expired. You won't be able to use new product releases after your license is expired and you have to renew it to be able to do so. Each license is valid for one developer only but if you want to purchase GraphX PRO for many developers you can always contact with the Sales Department. Check the subscription details on our new web-sites: Have Something Special? Sure! We want to thank all our contributors and give them life-time -15% discount for indie and professional bundles if you'd contributed to GraphX before the PRO version release. We appreciate your work and hope to see you working with us on the free open-source GraphX version. Remember, buying our products also helps to push forward our open-source projects! For all the questions regarding the GraphX PRO please contact or use the order form below ** The text given above is not a public offer
  4. There has been some new data filtering features introduced In GraphX version 2.3.5. Let's see the quick review. In order to provide more flexible data filtering for GraphX the LogicCore::Filters property has been introduced representing the Queue<IGraphFilter<TVertex, TEdge, TGraph>> of custom filters. The queue means that the filters that are added into it are processed in a FIFO (First In First Out) order consequently modifying the graph. Filters are automaticaly applied on GraphArea::GenerateGraph() and GraphArea::RelayoutGraph() method calls before any visuals are calculated and ensures that all calculations will be done on filtered graph. In case of relayout, each relayout method call will initiate filtering process starting from "original graph". Original graph is the copy of the LogicCore::Graph property that is saved before first filter is applied on an unfiltered graph to have an untouched graph copy. Also we'd implemented dynamic visuals add/remove routine specially for the filters in the relayout process so during the each relayout method call GraphX will now check if there are vertices or edges that needs VertexControl/EdgeControl objects to be created/removed to reflect changes made by filters. This behavior can be turned off by setting GraphArea::EnableVisualsRenewOnFiltering property to False. You can check if graph is currently filtered by checking the LogicCore::IsFiltered property. Furthermore you have several methods to work with data filtering: LogicCore::PushFilters() - this method is called automaticaly as described above and applies LogicCore::Filters to LogicCore::Graph. You can also call it manually to push the filtering for your custom purpose. LogicCore::ApplyFilters() - this method will remove graph filtering, clear all filters, clear original graph and save filtered graph as unfiltered making the changes permanent. You want to make changes from filtering permanent? That is the method! LogicCore::PopFIlters() - this method will remove graph filtering, clear all filters, clear original graph and revert LogicCore::Graph property to original graph saved earlier. Want to revert all the filtering changes and restore the graph? You can do it! PS: Remember that while you operate with filtered graph you hold the original graph copy in the memory which can cause performance issues depending on the graph size. The graph data filter itself is very simple: public class BlueVertexFilter: IGraphFilter<DataVertex, DataEdge, BidirectionalGraph<DataVertex, DataEdge>> { public BidirectionalGraph<DataVertex, DataEdge> ProcessFilter(BidirectionalGraph<DataVertex, DataEdge> inputGraph) { inputGraph.RemoveVertexIf(a => !a.IsBlue); return inputGraph; } } It has only one method named ProcessFilter() that do all the stuff. This method receive some graph as the input parameter and shoud return the graph when it is done with the filtering. So, basically you will want to do the following: Create custom filters derived from IGraphFilter interface Add them to LogicCore::FIlters in desired order Run GraphArea::GenerateGraph() or GraphArea::RelayoutGraph() methods That's it! If you need this feature functionality expanded please let me know, thanks!
  5. We appreciate your feedback on features and functionality you miss in GraphX. In order to further improve it we want to find out what popular features we can implement. It can be almost anything: new algorithm, new platform support, visualization features, enhanced templates, small tweaks etc. Please feel free to post your suggestions and thank you!
  6. SERVICE RELEASE 2.3.3 DETAILED CHANGELOG: - Exposed internal PrintHelper class with new CalculateEstimatedDPI() method which can calculate DPI required for image export based on specified criteria - Fixed arrows display issue when printing SERVICE RELEASE 2.3.2 DETAILED CHANGELOG: - Added GraphArea::ExportAsImageDialog() method which act as old ExportAsImage and the ExportAsImage() method now accepts file name to work without the dialog BREAKING CHANGES: - GraphArea::ExportAsImage() now takes file name as the first parameter and don't have save file dialog (use GraphArea::ExportAsImageDialog() instead) RELEASE 2.3.1 DETAILED CHANGELOG: - Added default templates for attached vertex and edge labels - Added HighlightBehavior::HighlightedEdgeType attached property that indicates In or Out edge is currently highlighted. Default value is None. - Added GraphArea::GetRelatedVertexControls() and GraphArea::GetRelatedEdgeControls() methods to fetch corresponding objects faster and easily - Added new printing logic. Now you can use GraphArea::PrintDialog() and GraphArea::PrintVisibleAreaDialog() methods with extended optional parameters - Added new image export logic. Now GraphArea::ExportToImage() method allows graph image export in original size via optional parameter - Added GraphArea::SetPrintMode() method which is used internally by print and image export methods but can be useful to override due to complex GraphArea print preparation logic. - Fixed excessive rendering issue when ZoomControl viewfinder is hidden. Should significantly increase performance of the viewfinder in this case. - Fixed showcase app edge example graph - Fixed ZoomControl viewbox logic to correctly react on zoom control background change - Improved attachable labels logic. Simplified base classes, added checks for mandatory base classes - Improved attachable labels customization possibilities by making several methods virtual BREAKING CHANGES: - Made DefaultLabelFactory class abstract and it is now accepts only one generic param (output object type) - GraphAreaBase now has new abstract members needed to be overriden in derived controls: GetRelatedVertexControls(), GetRelatedEdgeControls(), SetPrintMode() KNOWN ISSUES: - Graph image export may throw OutOfMemoryError for large graphs Go to the archive & sources download page NuGet version is also available
  7. RELEASE 2.2.0 RELEASE NOTES: New features can still have some bugs as there are many scenarios that might involve them and it's hard to check all of them on my own. If you feel uncomfortable with anything in this release please let me know. I appreciate any feedback as this is almost the only reason i'm still working on GraphX. Thanks! NEW TERMS: VAESPS - vertex and edge skip processing support VCP - vertex connection point HIGHLIGHTS: VCPs has been added into GraphX making edge endpoint fixation(binding) possible. By default GraphX automaticaly calculates edge endpoint position relative to vertex dimensions and approximate math shape, but with this feature on you'll be able to bind edge endpoint to a separate customizable object. This will allow you to create static edge fixation endpoints on the vertex and give you full control over edge endpoints positioning. Now GraphX for WPF requires only .NET Framework 4.0 to build & run. Deprecated all code that required .NET 4.0.3 Now you can easily customize edge pointers with the help of DefaultEdgePointer class which can host any content including Image/Path and supports rotation. Changes include more precious edge endpoint calculations so the edge will overlap with the edge pointer no more. Because of these changes the old logic that utilizes direct Path object in EdgeControl template will be removed completely in favor of notable performance improvements. Serialization has been decoupled from GraphX completely to allow bring much more freedom to custom serializers. All what GraphX do now is provide serialization data and accept serialization data for deserialization. Serialization classes are not limited by interfaces now. See FileServiceProviderWpf class for an example. Now you can use "" XAML namespace in GraphX for WPF for all its visual content. Additionaly, assemblies (and output filenames) for WPF/METRO dlls are both changed to GraphX.Controls.dll so Post-Build process copies output files to GraphX/Bin folder with distinct filenames reflecting the platform as before. Performance improvements are always welcome. In this release the whole layout calculation logic has been revisited in terms of both performance and code quality gains. We've also eliminated some redundant layout updates, moved all math & algorithms handling from GraphArea directly to LogicCore under better async implementation, cleaned up ZoomControl logic, revisited edges & edge labels code to remove redundant calculation passes. DETAILED CHANGES: Added support for custom VCP [WPF, METRO] * New control class added: StaticVertexConnectionPoint. It represents ContentControl which can host virtualy any valid object. * VCP supports the same math shapes as VertexShape property or can use VertexShape::None value to disable precise edge endpoint calculations Added vertex and edge skip processing support to METRO version (VAESPS) [METRO] Added VAESPS for following algorithms: Circular [ALL] Added VertexShape::None enum option, currently affecting only VCP logic [ALL] Added different layout options to EfficientSugiyama algorithm using new Direction param [ALL] Added true orthogonal edge routing for EfficientSugiyama algorithm using EdgeRouting param [ALL] Added new property GraphArea::ControlsDrawOrder which defines vertex or edges should be drawn topmost [WPF, METRO] Added GraphArea::PreloadGraph() method for manual graph rendering which generate vertices and edges from GraphArea::LogicCore.Graph property w/o any algorithms and also sets vertices positions if needed [WPF, METRO] Added new EdgeControl template PART (PART_SelfLoopedEdge) for custom self looped edge indicator visualization. It represents FrameworkElement and if specified in the template will be positioned in the top left vertex corner. Also made indicator settings more flexible by implementing some dependency props [WPF, METRO] Added StateStorage::SaveOrUpdateState() method for easier use [WPF,METRO] Added new read only property EdgeControl::IsParallel that identifies edge as currently parallel to other edge. Made GraphArea::UpdateParallelEdgesData() method public to be able to refresh IsParallel property on manual graph operations [METRO, WPF] Added EdgeLabelControl::FlipOnRotation dependency property which controls if label should be flipped when axis is changed while rotating [WPF, METRO] Fixed parallel edges labels handling. Now edge labels are more readable when there are two of them [WPF, METRO] Fixed edge routing when graph state has been loaded. Graph state now stores AlgorithmStorage too [ALL] Fixed ZoomControl zoom-out to the value equal to zoom-in resulting in similar smooth zoom [WPF, METRO] Fixed ZoomControl::Zoom property change not firing [WPF, METRO] Fixed manual graph composition routines in case of ER algorithm is set [ALL] Fixed layout algorithm calculations to always receive actual vertex positions as input parameter. This will fix VAESPS for default algorithms. [WPF, METRO] Fixed outdated edge rendering in some cases when vertex coordinates are changed manually [WPF, METRO] Fixed edge overlapping edge pointers [WPF, METRO] Fixed use of ControlFactory for edge deserialization [WPF, METRO] thanks to perturbare Fixed some algorithm calculation problems, especial FR [ALL] Fixed EdgeControl.ShowArrows to implement DependencyProperty [WPF, METRO] thanks to perturbare Fixed minor performance problems in ZoomControl [METRO] Fixed and enhanced automatic data object Id resolve logic [WPF,METRO] thanks to perturbare Fixed ZoomControl zoom sometimes not firing from code call after control is loaded [WPF] Fixed VB sample project dependencies and refactored code a bit Reorganized Example apps namespaces and code for greater good Made EdgeControlBase::UpdateEdge() method public. It can be used now to fully update edge visual on custom edge-related modifications [WPF, METRO] Improved main layout calculation logic to gain performance improvements [WPF, METRO] Merged EdgePointerImage and EdgePointerPath into one universal DefaultEdgePointer class [WPF, METRO] Improved edge and its template parts rendering/calc performance [WPF, METRO] Enhanced edge labels logic so now it don't require additional template bindings and modifications (Angle or RenderTransform) [WPF] GraphArea::PreloadVertexes() now accepts graph param as optional (null by default) and uses LogicCore.Graph in that case [WPF, METRO] Decoupled serialization logic from GraphX completely [ALL] thanks to perturbare Adjusted FR and BoundedFR default values for random initial positions [All] Now GraphX for WPF requires only .NET Framework 4.0 to build & run [WPF] Refactored almost all of the GraphX code for improvements and code quality. Changed many namespaces for better name reflection [ALL] BREAKING CHANGES: !!!WARNING!!! This GraphX version has fallen under the heavy hand of code refactoring and along with the numerous code improvements almost ALL of the namespaces has been changed to better reflect logical code grouping and ease additional platform support through code reusability. Also i've get rid of the several different XAML xmlns usings in favor of single one. I'm very sorry that this changes will force you to update your GraphX projects but i realy felt that i must do it once and for all. You will have to change most of the usings in code and XAML templates: i strongly recommend you to use Resharper or any other code quality tool which will help you to do this in minutes (or even seconds). Core changes: - All controls, behaviours and their interfaces are moved to GraphX.Controls namespace - All algorithms are spreaded across GraphX.PCL.Logic.Algorithms namespace with additional OverlapRemoval, LayoutAlgorithms, EdgeRouting endings - All base models and interfaces are now in GraphX.PCL.Common.Models namespace - All GraphX primitives (Point, Rect, etc.) are left in GraphX.Measure for better code readability in cases when they are intersected with System.Windows namespace twins IGXLogicCore now include ExternalLayoutAlgorithm, ExternalOverlapRemovalAlgorithm, ExternalEdgeRoutingAlgorithm properties for simplier external algo assignment Now GraphX for WPF requires only .NET Framework 4.0 to build & run Serialization decoupling process changes some method names: GraphArea::SerializeToFile() -> GraphArea::ExtractSerializationData() and GraphArea:: DeserializeFromFile() -> GraphArea::RebuildFromSerializationData() EdgeLabelControl no longer needs default Angle binding and RenderTransformOrigin setup. They are processed internally [WPF] GraphArea::GenerateGraph() method now has generateAllEdges param True by default. Renamed following peoperties, moved them to EdgeControlBase and implemented them as DependencyProperty: - LogicCore::EdgeSelfLoopCircleOffset -> SelfLoopIndicatorOffset - LogicCore::EdgeSelfLoopCircleRadius -> SelfLoopIndicatorRadius - LogicCore::EdgeShowSelfLooped -> ShowSelfLoopIndicator Renamed following ZoomControl properties: - ZoomDeltaMultiplier -> ZoomSensitivity - MaxZoomDelta -> MaximumZoomStep Completely deprecated EdgeControl::PART_edgeArrowPath template PART in favor of the new DefaultEdgePointer (PART_EdgePointerForSource & PART_EdgePointerForTarget). Please renew your custom templates. You can find an example in Generic.XAML template. Self looped edges display logic has been slightly changed with the introduction of custom template PART (PART_SelfLoopedEdge). Now LogicCore::EdgeSelfLoopElementOffset is (0,0) by default and indicator is shown in the top left vertex corner minus indicator size. You can change this behavior by overriding EdgeControl::PrepareEdgePath() method. GetVertexSizeRectangles() method moved from GraphArea to LogicCore. Edge labels placement logic has been slightly changed when they are applied to parallel edges. Labels offset now translates them into different directions, for ex. one up, one down, one up.. etc. This behavior helps to better place labels for double parallels. Also parallel edge labels now are not flipped when axis changes during label rotation. If you're uncomfortable with these changes, please let me know!
  8. Hi, I am using graphX and its working great! although when I started using vertexcontrol and edgecontrol with customizations, all of a sudden the graph in zoombox has disappeared. what am I missing here (may be a small property set?). The code, if it helps, is as follows: NetworkDataBlock ndb = this._networkDataHandler.Get_All_Networks().FirstOrDefault().Value; gArea = new GraphAreaExample(); zoomctrl.Content = gArea; var graph = new GraphExample(); Dictionary<DataVertex, VertexControl> vertex_dictionary = new Dictionary<DataVertex, VertexControl>(); Dictionary<DataEdge, EdgeControl> edge_dictionary = new Dictionary<DataEdge, EdgeControl>(); foreach (var cluster_id in ndb.Get_Annotated_Cluster_Ids()) { foreach (var node_id in ndb.Get_Cluster_Node_List()[cluster_id]) { DataVertex node = new DataVertex(); GraphX.VertexControl vertex = new GraphX.VertexControl(node); ... vertex.Background = Brushes.LightGray; vertex.Foreground = Brushes.White; vertex.ShowLabel = true; //vertex.Opacity = 0.1; ... graph.AddVertex(node); if (!vertex_dictionary.ContainsKey(node)) { vertex_dictionary.Add(node, vertex); } } foreach (var edge_id in ndb.Get_Cluster_Edge_List()[cluster_id]) { DataEdge edge = new DataEdge(); ... EdgeControl edgecontrol; edgecontrol = new GraphX.EdgeControl(vertex_dictionary[edge.Source], vertex_dictionary[edge.Target], edge, false, true); edgecontrol.Background = Brushes.Black; edgecontrol.DashStyle = GraphX.EdgeDashStyle.Dash; edgecontrol.Edge = edge; edgecontrol.ToolTip = edge.DeltaMZ.ToString(); //edgecontrol.Opacity = 0.1; ... if (!edge_dictionary.ContainsKey(edge)) { edge_dictionary.Add(edge, edgecontrol); } graph.AddEdge(edge); } } //Generate graph var LogicCore = new GXLogicCoreExample(); LogicCore.Graph = graph; foreach (var vertex_info in vertex_dictionary) { gArea.AddVertex(vertex_info.Key, vertex_info.Value); } foreach (var edge_info in edge_dictionary) { gArea.InsertEdge(edge_info.Key, edge_info.Value); } LogicCore.DefaultLayoutAlgorithm = GraphX.LayoutAlgorithmTypeEnum.KK; LogicCore.DefaultLayoutAlgorithmParams = LogicCore.AlgorithmFactory.CreateLayoutParameters(GraphX.LayoutAlgorithmTypeEnum.KK); ((KKLayoutParameters)LogicCore.DefaultLayoutAlgorithmParams).MaxIterations = 100; LogicCore.DefaultOverlapRemovalAlgorithm = GraphX.OverlapRemovalAlgorithmTypeEnum.FSA; LogicCore.DefaultOverlapRemovalAlgorithmParams = LogicCore.AlgorithmFactory.CreateOverlapRemovalParameters(GraphX.OverlapRemovalAlgorithmTypeEnum.FSA); ((OverlapRemovalParameters)LogicCore.DefaultOverlapRemovalAlgorithmParams).HorizontalGap = 50; ((OverlapRemovalParameters)LogicCore.DefaultOverlapRemovalAlgorithmParams).VerticalGap = 50; LogicCore.DefaultEdgeRoutingAlgorithm = GraphX.EdgeRoutingAlgorithmTypeEnum.None; LogicCore.AsyncAlgorithmCompute = false; gArea.LogicCore = LogicCore; gArea.RelayoutGraph(true); gArea.SetVerticesDrag(true, true); zoomctrl.ZoomToFill(); gArea.RelayoutFinished += gArea_RelayoutFinished; The graph with zoombox looks like the one attached with empty zoombox. Thanks for the help! Waqas
  9. Here we go with the new 2.1.8 release of the GraphX library. This release fixes many bugs and brings many new features such as image based edge pointers, async op cancellation feature, new graph editor showcase and more! RELEASE 2.1.8 + Added basic support for Image based edge pointers. Introduced new object for EdgeControl template: [WPF, METRO(bugged)] 1. EdgePointerImage class with name "PART_EdgePointerImageForSource" - marks edge source pointer (new!) 2. EdgePointerImage class with name "PART_EdgePointerImageForTarget" - marks edge target pointer Look in GeneralTemplate.xaml of ShowcaseApp.WPF project. Added rotation support for image based edge pointers + Added extensibility to corresponding controls by inheriting from IEdgeLabelControl and IEdgePointer [WPF, METRO] + Added extensibility to corresponding controls by inheriting from IVertexLabelControl [WPF, METRO] + Added support method GraphArea::GetVertexControlAt(Point position) to get VC by coordinates [METRO, WPF] + Added VertexControl::GetCenterPosition() method to get vertex center position instead the default top-left [WPF, METRO] + Added new showcase example: Templates/Graph editor [WPF] + Added new option GraphArea::LogicCoreChangeAction which defines what action will be taken on LogicCore property change. You can rebuild graph now. [WPF, METRO] + Added new async calculation cancellation feature [WPF, METRO] thanks to jorgensigvardsson + Added new property EdgeLabelControl::DisplayForSelfLoopedEdges which is self explaining [WPF, METRO] + Fixed edge labels display for self looped edges [WPF, METRO] + Fixed annoying data binding error in ZoomControl slider binding [METRO, WPF] + Fixed ZoomControl unresponsivness after startup (prev needed to change zoom/translation first to work fine) [WPF,METRO] + Fixed ZoomControl::Zoom property bug on empty content window resize [WPF, METRO] + Fixed dynamic graph showcase example first vertex auto zooming onto [WPF] + Fixed some issues in ShowcaseApp.WPF + Fixed GraphArea::DeserializeFromFile() logic and filestorage logic to properly restore internal data for loaded graphs [WPF, METRO] + Fixed calculation of label control position and angle [WPF, METRO] thanks to jorgensigvardsson + Implemented EdgeControl::LabelVerticalOffset property as dependecy [WPF, METRO] + Updated default control templates to include some new properties setup by default [WPF, METRO] + Optimized showcase app media files + Improved extensibility by making some methods virtual for EdgeLabelControl, VertexLabelControl, EdgeControl !Breaking changes + Renamed and changed to Enum - ZoomControl::UseAbsoluteZoomOnMouseWheel to MouseWheelZoomingMode [METRO, WPF] + Expanded EdgeControl event args with mouse and keyboard modifiers [WPF] + Moved all WPF interfaces to GraphX.Controls.Models.Interfaces namespace and all METRO interfaces to GraphX.METRO.Controls.Models.Interfaces [WPF, METRO] + Edge rotation now needs additional modification for all custom EdgeLabelControl templates. Please add: <Setter Property="RenderTransformOrigin" Value="0.5,0.5" />[WPF, METRO] + Due to new calc cancelation feature the following has been changed: - IExternalEdgeRouting, IExternalLayout, IExternalOverlapRemoval interfaces and different algorithm base classes now implement Compute(CancellationToken cancellationToken) method with an additional param - METRO now works only in async mode. Postfix Async has been added for GraphArea graph generation and relayout methods. Go to the archive & sources download page NuGet version is also available
  10. New version 2.1.7 has been released and contains some bug fixes along with the new shiny ShowcaseApp.WPF application as the replacement of the old showcase app. Expect it to be filled with new examples soon enough. Also his release contains major (and some breaking) changes to the solution structure. Changelog: + Added new ShowcaseApp.WPF with mostly the same functionality as before but in a new nutshell and with refactored code. + Added some new exceptions for GraphArea on invalid or insufficient data [WPF,METRO] + Addded automatic default params generation for GXLogicCore if default algorithm was changed and default params property is null + Fixed async calc not being aborted on invalid data (can cause crash) [WPF,METRO] + Implemented VertexControl::ShowLabel property as dependecy for templating purpose [WPF] + Fixed vertex label display [WPF] + Implemented IOverlapRemovalParameters properties setters to be able to change params easily[ALL] + Made EdgeBase::RoutingPoints property virtual in case you want to override it and add custom serialization attributes (as was the issue with YAXLib)[ALL] !Breaking changes + Renamed VertexControl::MathShape property to VertexShape for template bindings to work [WPF, METRO] + Removed YAXLib project from solution and its dependencies from GraphX projects except showcase project. This will make GraphX independent from this 3rd party lib. [WPF] The cost is that there is no built in FileServiceProvider anymore but you can easily create your own using provided interface or use YAXLib example from showcase app. One less additional dll file Go to the archive & sources download page Go to the NuGet version download page
  11. There was old nuget GraphX version hanging around about an year or so. I've completely forgot about it, but thanks to some users, my attention has been redirected into right direction! Now the library has been reuploaded and includes GraphX v2.1.7 for .NET4.0+ and Win8.1 Store (METRO). Feel free to use and test it.
  12. Hello! I am a user control GraphX in my program 'mpd' - page, but encoutered a certain problem. I would like to set up a graph add more objects (Vertices) and connections (Edges), but so that there is no need to re-generate the entire graph - in short: add the Vertex without generating the chart again. Is it possible? Please help how to do this - it is basically the only thing that I can not do it alone. This is a sample of my program using control GraphX - chart calls.
  13. I've made some research in PCL a while ago and now i've come to the need to port GraphX to PCL-compliant format to be able to use it with a wider range of Microsoft platforms. The task itself is quite complicated so i felt the need to share the info on the progress and porting results with the community. You can find new PCL BRANCH in GitHub repository (can be broken from time to time as it is WIP branch). Currently the following specifications are supported/required for the PCL version (logic and common libs only): Min requirement and support: .NET framework v4.0.3 (not common enough but supported in WinXP, needed for enchanced PCL features such as LINQ support) Min support: Siverlight 4 and above Min support: Windows Phone 8 Min support: Windows Metro 8 As you may already be familiar with the PCL concept it is clear that we need to do the following: Globaly convert GraphX to PCL compliant format (preserving all current features) so i have to maintain only one library version Convert GraphX.Common and GraphX.Logic to PCL Implement GraphX.Controls library for each platform individualy (first of all Windows Desktop version has to be reworked) For the moment i've successfuly finished most of the work (hopefuly without the major breaking changes) and currently i'm looking for an additional library optimization and feature isolations. So far the following solutions has been implemented: Implemented custom Semaphore class to use in EdgeBundling technique Implemented custom IClonable interface for some classes that use cloning Moved latest YAXlib project into the solution and splitted it into PCL and non-PCL projects to be able to use field attributes and custom serializers in PCL libraries Implemented custom classes from System.Windows namespace: Point, Rect, Size, Vector Removed Debug calls Removed HighResolutionTime class from PathFinder edge routing as it used DLL injection and unsafe code Implemented workaround for some PCL non-compliant code such as LINQ extensions *Moved MathHelper class to Controls library as it is primarily used for visuals and doing this helps to avoid excessive type conversions Implemented IGraphControl.SetPosition(double x, double y) method to avoid some type conversions Solved file operations problem by introducing IFileServiceProvider interface and corresponding property in GXLogicCore class. The implementation of this interface is platform specific so it must be implemented for each platform separately. Good news is that when you assign LogicCore property of the GraphArea the new default (platform-specific) FileServiceProvider is created and assigned to LogicCore automaticaly. This approach helps to avoid breaking changes so you can use general file operation methods as you've used them before. Additionaly this approach allows you to easily implement custom type serialization (or use 3rd party serialization libraries). Discussion of current problems and approaches: I've decided to implement my own System.Windows types (as default ones are not supported in PCL) that are used throughout the libraries and this decision leads me to a massive rework of GraphX.Controls library. I have to implement type conversions wisely to avoid heavy impact on the performance (custom type <-> original System.Windows type). That is the most important problem for now that has to be solved correctly, so that is why it would be nice to hear some opinions on the matter. Currently i see two possible ways to solve it: a) Completely rework library to eliminate that types usage in PCL Implement type conversions before-set/after-get values in visuals ops YAXLib serialization is currently located in GXCore and has to be moved somewhere in platform dependent library as it uses reflection which is unsupported in PCL. Do we realy need Silverlight 4 support? I'm no pro in SL so i can't tell it for sure. If we target Silverlight 5 as minimum requirement we can get the following platforms supported: a) Windows Phone 8.1 Xamarin Android c) Xamarin iOS That is all i've got now. Hope to see some feedback. Thanks!
  14. Finally! GraphX repository has been moved to GitHub: Now you can easily submit your code improvements and contribute to the project! GitHub also allows to fork GraphX sources into your own repository copy to work with it independently.
  15. Along with the bug fixes this version brings some new functionality. For example, GraphArea now can restore (reapply) visual properties (that was previously set using GraphArea methods such as GraphArea::SetVerticesDrag()) for VertexControl and EdgeControl objects. You can also switch this off for better performance or manual handling. Also some new methods and properties has been added to simplify work with GraphX, read the change log for details. Change log: + Added GraphArea::AddCustomChildControl() and GraphArea::RemoveCustomChildControl() methods to make the possibility to add any custom controls that are not vertex or edge. + Added ZoomControl::ToContentRectangle() method which translates screen rectangle coordinates to content rectangle coordinates + Added correct endpoints rendering for parallel edges on a rectangular vertex shape (thanks ro bleibold) + Added some hooks for ZoomControl to notify Presenter::RenderTransform on scale/translation changes. Now bindings to that property are correctly refreshed. + Added additional handling of custom objects in GraphArea (eg. clearing) + Added dependency property for GraphArea::LogicCore + Added new property GraphArea::EnableVisualPropsRecovery. Gets or sets if visual properties such as edge dash style or vertex shape should be automaticaly reapplied to visuals when graph is regenerated. Turning this off can save a bit of performance if you don't use custom values. + Added new property GraphArea::EnableVisualPropsApply. Gets or sets if visual properties such as edge dash style or vertex shape should be automaticaly applied to newly added visuals which are added using AddVertex() or AddEdge() or similar methods. Turning this off can save a bit of performance if you don't use custom values and making many manual edge/vertex create or remove operations. + Added GraphArea::SetVerticesHighlight() and GraphArea::SetEdgesHighlight() methods for easier highlight feature handling. + Improved some showcase code + Improved GraphArea code performance (slightly) + Fixed minimap rectangle drag issue + Fixed issue with ZoomControl area selection by Ctrl+Alt+Click + Fixed issue with GraphArea::VertexSelected event + Fixed issue with inproper overlap removal work (that issue affected some algorithms vis) using new coordinates system. + Fixed issue with incorrect rendering of parallel edges (thanks to bleibold) - GraphArea::Children property has been hidden. Use EdgesList and VertexList properties and corresponding methods instead. VISIT DOWNLOADS PAGE
  16. Finally GraphX v2 has made it to the public and is now in the process of active polishing. New project architecture easily allows to perform porting GraphX to different platforms as visualization has been separated from logic. Also the logics module can now be use independently of GraphX to calculate graph layouts and edge routings for custom projects. Currently there are no officialy released ports but there is work in progress for Silverlight and Windows 8 solutions. There are no estimate dates for port releases as there is no exact information will it also be an open-source projects or projects on the paid basis. Most notable features for this version are: Portable architecture support. Still testing, but all of the core features except file handling and serialization has been made PCL compliant. Separated algorithms in standalone GXLogicCore class. Now you can easily use all GraphX algorithms separately from visual stuff. ZoomControl enchanced. Merged most viable features of ZoomControl and Zoombox into one control and made smooth graph representation while dragging vertices. Parallel edges support and rotated edge labels. Further enchanced edge visualization by implementing parallel edges visualization between the same vertices and labels that are aligned to the edges by angle. Thanks to all of you who support GraphX on the road to perfection! This adventure would not be so exciting without you
  17. Yes, i've decided to name it GraphX v2 at the moment From the current milestone i see following features that makes difference: Separate libraries design - all algorithms and logic are in the standalone library that can be used separately from GraphX. PCL version - portable compact libraries can be hot-referenced in Windows (Framework 4.0), Silverlight 5, WindowsPhone 8 and Windows 8 applications. Silverlight platform support There is no alpha at the moment but if you are interested, you can contribute by following matters: PM me if you have any cool zoom control library for Silverlight. It is real pain to transfer ZoomBox to silverlight PM me if you're interested in Silverlight XAML animation and visualization development. Well, some SL limitations is a pain for me
  18. Changelog: + Changed ExportToImage() parameters: added useZoomControlSurface param that enables zoom control parent visual space to be used for export instead whole GraphArea panel. Using this technique it is possible to export graphs with negative vertices coordinates. + Added common interface IZoomControl for all included Zoom controls + Added new method GraphArea.GenerateGraph() that accepts only optional parameters and will use internalGraphArea.Graph property as the source (assuming it was already set earlier or exception will be thrown) + Added new method GraphArea.SetVerticesDrag() that controls edge drag mode for all vertices that are added into the GraphArea + Added new method GraphArea.SetVerticesMathShape() that sets math shape for all vertices that are added into the GraphArea + Added Windows Forms interop compatibility mode. You must specifyGraphArea.EnableWinFormsHostingMode property for this to work. + Added edge parallelization as the post-process algorithm + Added GraphArea.EnableParallelEdges and GraphArea.ParallelEdgeDistance properties + Added EdgeControl.CanBeParallel property + Fixed some code definitions Download this release