tomg

Members
  • Content count

    17
  • Joined

  • Last visited

  1. I have seen the update which allows for source and target pointers to be added using the "PART_EdgePointerForTarget" and "PART_EdgePointerForSource" names on DefaultEdgePointers. I was wondering if there is any support for a central pointer. A diode symbol shows roughly what I'm talking about: http://www.mcmelectronics.com/content/productimages/s4/DIODE.jpg The actual shape of the pointer is irrelevant since the template can just be given whatever path I want, I am purely asking for placement in the centre of the line purposes. Thanks, Tom
  2. Hello. This is the exact same issue that is described in this GitHub issue that was posted: https://github.com/panthernet/GraphX/issues/53 Reproducible 100% of the time with a single Vertex and 0 Edges on the graph. Is there any light you can shed on the issue further? We are currently using version 2.3.6. If you would like any further information I would be happy to provide it. Thanks, Tom
  3. As it happens, the reason it was not working was my mistake entirely. My DataEdge class implemented the INotifyPropertyChanged interface already, but I was passing in an incorrect variable to the RaisePropertyChanged Method. Thankyou
  4. As the title suggests I am looking to reapply the visuals to a single EdgeControl but cannot seem to find how to do it. Context: I have an EdgeControl on my graph. I change the weight of the DataEdge using an UpDown style control in the context menu, which is bound to the stroke thickness, and I would like it to update visually in real time. I can get this to work if I call GraphArea.GenerateAllEdges(); which is fine for a graph with a small number of edges, however obviously takes a much longer period of time for a graph with 500 edges on it. Is there a way to update the visuals of a single edge?
  5. That was my first thought hence trying it but couldn't understand why it wouldn't work. I went back to the default template provided in the test application and the binding worked immediately. I can only assume I had done something wrong with my custom template. Thankyou for the feedback.
  6. I am looking to change the thickness of edge. This will eventually be done through binding but for now I am having trouble figuring out how to change the thickness to any value other than the default. In the template for my dataedge I have tried setting the Width, Height, BorderThickness and StrokeThickness but none of these are working for me. Am I missing something obvious that would enable to me change the thickness of my edges?
  7. I can't necessarily give a piece of example code reproducing the issue but I can show you the VertexControl template I am using so you can understand the amount that is in there. I'm pretty sure the problem is that I am rendering everything inside the template for each vertex then just changing the visibility based on numerous variables. Therefore, even if something is not visible to the eye on the graph, it was still initialized when added to the graph. This is more of an issue with my experience with efficient templates rather than a reflection of how GraphArea handles the visualization of VertexControls. <Style TargetType="{x:Type graphx:VertexControl}"> <Setter Property="Background" Value="{StaticResource NormalBrush}"/> <Setter Property="Padding" Value="10,5,10,5"/> <Setter Property="BorderBrush" Value="{StaticResource NormalBorderBrush}"/> <Setter Property="BorderThickness" Value="3"/> <Setter Property="MinHeight" Value="65"/> ??? <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type graphx:VertexControl}"> <ControlTemplate.Resources> <Storyboard x:Key="HoverOn"> <DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundOver" Storyboard.TargetProperty="Opacity" To="1" /> <DoubleAnimation Duration="00:00:00.1000000" Storyboard.TargetName="BackgroundOver_Highlight" Storyboard.TargetProperty="Opacity" To="0.65" /> </Storyboard> <Storyboard x:Key="HoverOff"> <DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundOver" Storyboard.TargetProperty="Opacity" To="0" /> <DoubleAnimation Duration="00:00:00.4000000" Storyboard.TargetName="BackgroundOver_Highlight" Storyboard.TargetProperty="Opacity" To="0" /> </Storyboard> </ControlTemplate.Resources> <Grid MouseLeftButtonDown="VertexBeginMove" MouseLeftButtonUp="VertexEndMove" Tag="{Binding Item.ItemID}"> <Border x:Name="BackgroundNorm" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"/> <Border x:Name="BackgroundNorm_highlight" Margin="1" BorderBrush="{DynamicResource NormalHighlightBrush}" BorderThickness="1,0,1,1" CornerRadius="5" Opacity="0.65" /> <Border x:Name="BackgroundOver" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="5" Opacity="0" Background="{DynamicResource MouseOverBrush}" BorderBrush="{DynamicResource MouseOverBorderBrush}"/> <Border x:Name="BackgroundOver_Highlight" Margin="1" BorderThickness="1,0,1,1" CornerRadius="5" Opacity="0" BorderBrush="{DynamicResource MouseOverHighlightBrush}"/> <Grid > <StackPanel Orientation="Horizontal" Visibility="{Binding IsFlipped, Converter={StaticResource Inversebooltovis}}" Tag="{Binding Item.ItemID}"> <StackPanel Visibility="{Binding IsMediaPlaying, Converter={StaticResource Booltovis}}"> <TextBlock Text="test"></TextBlock> </StackPanel> <Image Source="{Binding Item.ItemIcon, Converter={StaticResource Imagetouriconv}}" Margin="3" Width="50" Height="50" VerticalAlignment="Center" HorizontalAlignment="Center" StretchDirection="Both" Stretch="UniformToFill" Tag="{Binding Item.ItemID}" MouseDown="FlipVertice"/> <TextBlock Text="{Binding Item.ItemLabel}" VerticalAlignment="Center" FontWeight="Bold" Foreground="Black" Margin="3" MinWidth="120" Visibility="{Binding CanEditLabel, Converter={StaticResource Inversebooltovis}}"> <TextBlock.InputBindings> <MouseBinding MouseAction="LeftDoubleClick" Command="commands:MyCommands.EditItemLabel"></MouseBinding> </TextBlock.InputBindings> </TextBlock> <StackPanel Orientation="Vertical" Visibility="{Binding CanEditLabel, Converter={StaticResource Booltovis}}" Tag="{Binding Item.ItemID}"> <TextBox Text="{Binding Item.ItemLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" FontWeight="Bold" Foreground="Black" Margin="3" TextChanged="TextBoxBase_OnTextChanged" MinWidth="120" KeyDown="EnterPress" Tag="{Binding Item.ItemID}"></TextBox> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding IsFlipped, Converter={StaticResource Booltovis}}" Tag="{Binding Item.ItemID}"> <StackPanel Orientation="Horizontal" Tag="{Binding Item.ItemID}"> <Image Source="{Binding Item.ItemIcon, Converter={StaticResource Imagetouriconv}}" Margin="3" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center" Width="50" Stretch="UniformToFill" Tag="{Binding Item.ItemID}" StretchDirection="Both" MouseDown="FlipVertice"/> <TextBlock Text="{Binding Item.ItemLabel}" VerticalAlignment="Center" FontWeight="Bold" Foreground="Black" Margin="3" MinWidth="120" Visibility="{Binding CanEditLabel, Converter={StaticResource Inversebooltovis}}" Tag="{Binding Item.ItemID}"> <TextBlock.InputBindings> <MouseBinding MouseAction="LeftDoubleClick" Command="commands:MyCommands.EditItemLabel"></MouseBinding> </TextBlock.InputBindings> </TextBlock> <StackPanel Orientation="Vertical" Visibility="{Binding CanEditLabel, Converter={StaticResource Booltovis}}" Tag="{Binding Item.ItemID}"> <TextBox Text="{Binding Item.ItemLabel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" FontWeight="Bold" Foreground="Black" Margin="3" MinWidth="120" TextChanged="TextBoxBase_OnTextChanged" KeyDown="EnterPress" Tag="{Binding Item.ItemID}"/> </StackPanel> </StackPanel> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center"> <StackPanel Orientation="Vertical" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvmedia}}"> <TextBlock Text="Show Media" FontWeight="Bold"></TextBlock> <svgc:SvgViewbox Height="10" Width="10" Stretch="UniformToFill" StretchDirection="Both" Source="..\..\Assets\Plus.svg" Margin="5,0,0,0" MouseDown="MediaFlip" Tag="{Binding Item.ItemID}"></svgc:SvgViewbox> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Item Details" FontWeight="Bold"></TextBlock> <svgc:SvgViewbox Height="10" Width="10" Stretch="UniformToFill" StretchDirection="Both" Source="..\..\Assets\Plus.svg" Margin="5,0,0,0" MouseDown="ItemFlip" Tag="{Binding Item.ItemID}"></svgc:SvgViewbox> </StackPanel> <StackPanel Visibility="{Binding IsItemFlipped, Converter={StaticResource Booltovis}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.ItemDescription, Converter={StaticResource Booltovis}}"> <TextBlock Text="Item Description: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Item.ItemDescription}" FontWeight="Bold" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.ItemNotes, Converter={StaticResource Booltovis}}"> <TextBlock Text="Item Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Item.ItemNotes}" FontWeight="Bold" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.ItemDateTimeAdded, Converter={StaticResource Booltovis}}"> <TextBlock Text="DateTime Added: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Item.DateTimeAdded}" FontWeight="Bold" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Attributes" FontWeight="Bold"></TextBlock> <svgc:SvgViewbox Height="10" Width="10" Stretch="UniformToFill" StretchDirection="Both" Source="..\..\Assets\Plus.svg" Margin="5,0,0,0" MouseDown="AttributeFlip" Tag="{Binding Item.ItemID}"></svgc:SvgViewbox> </StackPanel> <StackPanel Visibility="{Binding IsAttributeFlipped, Converter={StaticResource Booltovis}}"> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvperson}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.FirstName, Converter={StaticResource Booltovis}}"> <TextBlock Text="First Name: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.FirstName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.LastName, Converter={StaticResource Booltovis}}" > <TextBlock Text="Last Name: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.LastName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.ApproxAge, Converter={StaticResource Booltovis}}" > <TextBlock Text="Approx Age: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.ApproxAge}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.Build, Converter={StaticResource Booltovis}}" > <TextBlock Text="Build: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Build, Converter={StaticResource Buildconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.Clothing, Converter={StaticResource Booltovis}}" > <TextBlock Text="Clothing: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Clothing}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PersonDistinguishingFeatures, Converter={StaticResource Booltovis}}" > <TextBlock Text="Dist Features: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.DistinguishingFeatures}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.Elevation, Converter={StaticResource Booltovis}}" > <TextBlock Text="Elevation: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Elevation, Converter={StaticResource Eleconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.Face, Converter={StaticResource Booltovis}}" > <TextBlock Text="Face: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Face, Converter={StaticResource Faceconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.Gait, Converter={StaticResource Booltovis}}" > <TextBlock Text="Gait: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Gait, Converter={StaticResource Gaitconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.Hair, Converter={StaticResource Booltovis}}" > <TextBlock Text="Hair: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Hair}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PersonIdiosyncrasies, Converter={StaticResource Booltovis}}" > <TextBlock Text="Idiosyncrasies: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.Idiosyncrasies}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PersonNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Person.PersonNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvdevice}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.DeviceName, Converter={StaticResource Booltovis}}" > <TextBlock Text="Device Name: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Device.DeviceName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.IMEI, Converter={StaticResource Booltovis}}" > <TextBlock Text="IMEI: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Device.IMEI}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.DeviceNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Device.DeviceNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvvehicle}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleType, Converter={StaticResource Booltovis}}" > <TextBlock Text="Type: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleType, Converter={StaticResource vehicletypeconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleMake, Converter={StaticResource Booltovis}}" > <TextBlock Text="Make: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleMake, Converter={StaticResource Vehiclemakeconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleModel, Converter={StaticResource Booltovis}}" > <TextBlock Text="Model: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleModel, Converter={StaticResource Vehiclemodelconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleSize, Converter={StaticResource Booltovis}}" > <TextBlock Text="Size: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleSize, Converter={StaticResource Vehiclesizeconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleColour, Converter={StaticResource Booltovis}}" > <TextBlock Text="Colour: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleColour, Converter={StaticResource Colourconv}}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleRegistration, Converter={StaticResource Booltovis}}" > <TextBlock Text="Vehicle Reg: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.Registration}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleIdiosyncrasies, Converter={StaticResource Booltovis}}" > <TextBlock Text="Idiosyncrasies: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleIdiosyncrasies}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.VehicleNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Vehicle.VehicleNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvevent}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EventName, Converter={StaticResource Booltovis}}" > <TextBlock Text="EventName: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Event.EventName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EventStartDateTime, Converter={StaticResource Booltovis}}" > <TextBlock Text="EventStartDateTime: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Event.EventStartDateTime}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EventEndDateTime, Converter={StaticResource Booltovis}}" > <TextBlock Text="EventEndDateTime: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Event.EventEndDateTime}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EventNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Event.EventNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvequipment}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EquipmentName, Converter={StaticResource Booltovis}}" > <TextBlock Text="EquipmentName: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Equipment.EquipmentName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EquipmentSerialNo, Converter={StaticResource Booltovis}}" > <TextBlock Text="EquipmentSerialNo: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Equipment.EquipmentSerialNo}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EquipmentDescription, Converter={StaticResource Booltovis}}" > <TextBlock Text="EquipmentDescription: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Equipment.EquipmentDescription}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.EquipmentNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Equipment.EquipmentNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvweapon}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.WeaponName, Converter={StaticResource Booltovis}}" > <TextBlock Text="WeaponName: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Weapon.WeaponName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.WeaponSerialNo, Converter={StaticResource Booltovis}}" > <TextBlock Text="WeaponSerialNo: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Weapon.WeaponSerialNo}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.WeaponDescription, Converter={StaticResource Booltovis}}" > <TextBlock Text="WeaponDescription: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Weapon.WeaponDescription}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.WeaponNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Weapon.WeaponNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvcustom}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.CustomName, Converter={StaticResource Booltovis}}" > <TextBlock Text="Name: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Custom.CustomName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.CustomIdentifier, Converter={StaticResource Booltovis}}" > <TextBlock Text="CustomID: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Custom.CustomIdentifier}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.CustomDescription, Converter={StaticResource Booltovis}}" > <TextBlock Text="CustomDescription: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Custom.CustomDescription}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.CustomNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Custom.CustomNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisplace}}"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PlaceLine1, Converter={StaticResource Booltovis}}" > <TextBlock Text="Place Line 1: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Place.PlaceLine1}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PlaceLine2, Converter={StaticResource Booltovis}}" > <TextBlock Text="Place Line 2: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Place.PlaceLine2}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PlaceLine3, Converter={StaticResource Booltovis}}" > <TextBlock Text="Place Line 3: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Place.PlaceLine3}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PlaceDescription, Converter={StaticResource Booltovis}}" > <TextBlock Text="Place Description: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Place.PlaceDescription}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.PlaceNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Place.PlaceNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding Item.ItemType, Converter={StaticResource Cattovisconvmedia}}"> <StackPanel Orientation="Horizontal"> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.MediaFriendlyName, Converter={StaticResource Booltovis}}" > <TextBlock Text="FriendlyName: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Media.MediaFriendlyName}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.MediaLinkToFile, Converter={StaticResource Booltovis}}" > <TextBlock Text="LinkToFile: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Media.MediaLinkToFile}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.MediaDescription, Converter={StaticResource Booltovis}}" > <TextBlock Text="MediaDescription: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Media.MediaDescription}" MinWidth="120"></TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Visibility="{Binding DisplayDataConfig.MediaNotes, Converter={StaticResource Booltovis}}" > <TextBlock Text="Notes: " MinWidth="100"></TextBlock> <TextBlock Text="{Binding Media.MediaNotes}" MinWidth="120"></TextBlock> </StackPanel> </StackPanel> </StackPanel> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" HorizontalAlignment="Center"> <Button Content="Export" Click="ExportItem" Tag="{Binding Item.ItemID}" Width="100" Height="20" Margin="0,5,0,0"></Button> <Button Content="Mission Details" Click="DisplayMissionDetails" Tag="{Binding Item.ItemID}" Width="100" Height="20" Margin="0,5,0,0" Visibility="{Binding Item.ItemType, Converter={StaticResource Missionconv}}"></Button> <Button Content="Edit Item" Click="EditItem" Tag="{Binding Item.ItemID}" Width="100" Height="20" Margin="0,5,0,0"></Button> </StackPanel> </StackPanel> <StackPanel Orientation="Vertical" Visibility="{Binding IsMediaFlipped, Converter={StaticResource Booltovis}}"> <StackPanel Orientation="Vertical" Name="stkMediaImage" Visibility="{Binding Item.ItemType, Converter={StaticResource imagetovisconv}}"> <Image x:Name="MainImage" Margin="5" Height="200" Width="200" Source="{Binding Media.MediaLinkToFile, Converter={StaticResource linktosource}}"> <wpftk:MagnifierManager.Magnifier> <wpftk:Magnifier Radius="40" ZoomFactor=".2" FrameType="Circle" x:Name="Magnifier"/> </wpftk:MagnifierManager.Magnifier> </Image> </StackPanel> <StackPanel Orientation="Vertical" Name="stkMediaVideo" Visibility="{Binding Item.ItemType, Converter={StaticResource videotovisconv}}"> <userControls:VideoPlayer Loaded="LoadVideo" Tag="{Binding Item.ItemID}"></userControls:VideoPlayer> </StackPanel> <StackPanel Orientation="Vertical" Name="stkMediaAudio" Visibility="{Binding Item.ItemType, Converter={StaticResource audiotovisconv}}"> <userControls:AudioPlayer Loaded="LoadAudio" Tag="{Binding Item.ItemID}"></userControls:AudioPlayer> </StackPanel> </StackPanel> </StackPanel> </StackPanel> </Grid> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Trigger.ExitActions> <BeginStoryboard Storyboard="{StaticResource HoverOff}"/> </Trigger.ExitActions> <Trigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource HoverOn}" /> </Trigger.EnterActions> </Trigger> <Trigger Property="graphx:HighlightBehaviour.Highlighted" Value="True"> <Setter Property="Background" Value="{DynamicResource AccentColorBrush}"/> </Trigger> <Trigger Property="graphx:HighlightBehaviour.Highlighted" Value="False"> <Setter Property="Background" Value="#FFE3E3E3"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> EDIT: In order to improve performance on my large graph, I made the template significantly smaller since all the above data was not necessarily needed. However, it would be nice in the future to be able to have templates as large and complex as this on a much larger scale graph. ??
  8. I have changed over so that my LogicCore implements the LinLog algorithm but am still have some issues. Firstly, I really don't know what values I should be looking at for things such as AttractionComponent, RepulsiveComponent and GravitationalMultiplier etc. The visuals seems to be heading in the direction I want in terms of my end goal, but I feel tweaking these numbers correctly will help tremendously. I cannot find any documentation explaining the various algorithms, are you able to point me in the correct direction if there is some? Also having an issue with overlapping vertices. It seems as though the OverlapRemovalAlgorithm isn't doing what I think it should since tweaking numbers on these seems to have no effect. I still end up with up to 20 or 30 vertices on top of each other at any given point within the GraphArea. EDIT: I discovered that I am setting each item that already appears on the graph to ProcessingOptionEnum.Exclude and is therefore being excluded whenever the relayout takes place, hence the overlapping. However, when I take this out and replace it with Freeze/Default, the visualization cannot keep up with the rate at which new data is arriving and therefore the GraphArea is being updated.
  9. I agree, it's brilliant Okay, I will give that a go tomorrow when I am in the office and see what happens. Thank you.
  10. Is there functionality to alter the gravity between nodes built into GraphX currently? Scenario: I have a graph with ~300 vertices. There are 5 parent nodes which each have 50 child nodes. The remaining 50 nodes are not connected to anything at all. I would like to have each of these 5 parent nodes occupy its own space within the GraphArea. The idea behind the gravity is that parents attract their children, and repel anything that isn't a child, thus creating segregated sections of the GraphArea. The 50 nodes that are not connected to anything would be in any available space. http://arborjs.org/halfviz/#/mystery-of-the-secret-room%E2%80%8B'>http://arborjs.org/halfviz/#/mystery-of-the-secret-room??
  11. As it turns out I have made a slight change to way in which the Media is initialized and the drop in performance has been negated. I do however have a different issue with something completely unrelated. I have a graph which is being built on the fly automatically as data comes in from a remote server. The data comes in in string form, I parse and split the strings as required and then I come to need to add it to the graph. Calling the Graph.AddVertex() method on each piece of information is very fast so there is no problem there. However, when calling GraphArea.AddVertex() and passing in the appropriate information,the application hangs, I eventually run out of memory and the application crashes. This is before any RelayoutGraph() methods are called. I originally have around 500 seperate pieces of information coming in, which equates to around 500 seperate vertexs, and likely the same number of edges, however I will leave the edges out of this example. There is nothing spectacular occurring with the VertexControl style, they are simply told to display 2 strings each, neither of which need to be converted in any way. The same issue persists when running the multiple calls of GraphArea.AddVertex on different threads in an attempt to spread the load. After the 500 original vertices are added, further pieces of information equating to ~ 10 per second are coming in. The idea is to display the original 500 pieces of data, then to add the new data to the visual graph as they come in in real time. After a certain period of time, Vertices will be removed. What I would like to know is if the GraphX library is designed to support such a large number of vertices on a single graph at the same time? Are there dedicated methods to adding large number of vertices simultaneously? I haven't come across any as of yet. If you would like this to be a separate topic then I can post a new one. EDIT: Solved
  12. Hello. When adding various Vertices to my GraphArea and calling RelayoutGraph, everything performs as it should without throwing any exceptions. This occurs when the vertices contain data such as strings, ints, DateTimes, and various other data types. However, when adding a Vertice containing a piece of media, be it an Image, Audio or Video to the GraphArea, I get 2 NullReferenceExceptions. The graph still performs as I expect it to, e.g. The video/audio can play from within the vertice, and the image is displayed, however I feel as though catching numerous exceptions on each piece of media added to the graph is hindering performance. As far as I can tell, the exceptions are not thrown in my code, so I was wondering whether there is any reason they would be thrown from within the source code? The media elements are hosted within numerous user controls inside of the Vertice. I have gone through and systematically commented out each catch statement the exception could possibly be caught at, but it doesn't appear to be on my end.
  13. Thanks. I think I will try the first option of storing the visibility of each DataVertex internally. I will let you know how that works out whenever I get around to implementing it.
  14. I have another quick question regarding the above issue. When viewing the newly saved state, any Vertices that were hidden at the time of saving are visible. Edges that were hidden at the time of saving are not visible as they should be. I was wondering if there is a way to keep the Vertices that were hidden (using the VertexControl.HideWithEdges(); method) when the state was saved from appearing when the state is loaded? I hope that makes sense. Thankyou
  15. Sorry for the delay. I have just got round to testing the changes and on first glance they seem to do exactly what I need them to. I will let you know if I find any unexpected behaviour etc in the future. Thankyou very much for your help, Tom G