Files
DotNetSolutionTools/DotNetSolutionTools.Photino/Components/BuildOrderDiagram.razor
Matthew Parker [SSW] 5277a7eb70 Add Photino project
2024-11-21 20:48:11 +10:00

61 lines
2.0 KiB
Plaintext

@using Blazor.Diagrams
@using Blazor.Diagrams.Core.Anchors
@using Blazor.Diagrams.Core.Geometry
@using Blazor.Diagrams.Core.Models
@using DotNetSolutionTools.Core.Models
<h3>BuildOrderDiagram</h3>
<div style="width: 100%; height: 400px; border: black">
<CascadingValue Value="Diagram" IsFixed="true">
<DiagramCanvas />
</CascadingValue>
</div>
@code {
[Parameter, EditorRequired]
public List<Project> Projects { get; set; }
private BlazorDiagram Diagram { get; set; } = null!;
protected override void OnInitialized()
{
Diagram = new BlazorDiagram();
foreach (var project in Projects)
{
var node = Diagram.Nodes.Add(new NodeModel()
{
Title = project.Name,
});
foreach (var dependency in project.DependsOn)
{
var dependencyNode = Diagram.Nodes.Add(new NodeModel()
{
Title = dependency.Name
});
Diagram.Links.Add(new LinkModel(node, dependencyNode));
}
}
}
protected void Example()
{
Diagram = new BlazorDiagram();
var firstNode = Diagram.Nodes.Add(new NodeModel(position: new Point(50, 50))
{
Title = "Node 1"
});
var secondNode = Diagram.Nodes.Add(new NodeModel(position: new Point(200, 100))
{
Title = "Node 2"
});
var leftPort = secondNode.AddPort(PortAlignment.Left);
var rightPort = secondNode.AddPort(PortAlignment.Right);
// The connection point will be the intersection of
// a line going from the target to the center of the source
var sourceAnchor = new ShapeIntersectionAnchor(firstNode);
// The connection point will be the port's position
var targetAnchor = new SinglePortAnchor(leftPort);
var link = Diagram.Links.Add(new LinkModel(sourceAnchor, targetAnchor));
}
}