diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs
index 705fd32..8f77870 100644
--- a/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs
+++ b/AIStudio.Wpf.DiagramApp/ViewModels/DiagramsViewModel.cs
@@ -268,11 +268,11 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
connectionItem.SinkType = System.Type.GetType(connectionItem.SinkTypeName);
DesignerItemViewModelBase sourceItem = GetConnectorDataItem(viewModel, connectionItem.SourceId, connectionItem.SourceType);
ConnectorOrientation sourceConnectorOrientation = connectionItem.SourceOrientation;
- FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sourceItem, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint);
+ FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sourceItem, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint, connectionItem.SourceInnerPoint);
DesignerItemViewModelBase sinkItem = GetConnectorDataItem(viewModel, connectionItem.SinkId, connectionItem.SinkType);
ConnectorOrientation sinkConnectorOrientation = connectionItem.SinkOrientation;
- FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint);
+ FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint, connectionItem.SinkInnerPoint);
ConnectionViewModel connectionVM = new ConnectionViewModel(viewModel, sourceConnectorInfo, sinkConnectorInfo, connectionItem);
viewModel.Items.Add(connectionVM);
@@ -354,25 +354,36 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
return dataItem;
}
- private FullyCreatedConnectorInfo GetFullConnectorInfo(Guid connectorId, DesignerItemViewModelBase dataItem, ConnectorOrientation connectorOrientation, double xRatio, double yRatio, bool isInnerPoint)
+ private FullyCreatedConnectorInfo GetFullConnectorInfo(Guid connectorId, DesignerItemViewModelBase dataItem, ConnectorOrientation connectorOrientation, double xRatio, double yRatio, bool isInnerPoint,bool isPortless)
{
if (isInnerPoint)
{
return dataItem.Connectors.Where(p => p.XRatio == xRatio && p.YRatio == yRatio).FirstOrDefault();
}
+ else if(isPortless)
+ {
+ return dataItem.PortlessConnector;
+ }
else
{
switch (connectorOrientation)
{
- case ConnectorOrientation.Top:
- return dataItem.TopConnector;
case ConnectorOrientation.Left:
return dataItem.LeftConnector;
+ case ConnectorOrientation.TopLeft:
+ return dataItem.TopLeftConnector;
+ case ConnectorOrientation.Top:
+ return dataItem.TopConnector;
+ case ConnectorOrientation.TopRight:
+ return dataItem.TopRightConnector;
case ConnectorOrientation.Right:
return dataItem.RightConnector;
+ case ConnectorOrientation.BottomRight:
+ return dataItem.BottomRightConnector;
case ConnectorOrientation.Bottom:
return dataItem.BottomConnector;
-
+ case ConnectorOrientation.BottomLeft:
+ return dataItem.BottomLeftConnector;
default:
throw new InvalidOperationException(
string.Format("Found invalid persisted Connector Orientation for Connector Id: {0}", connectorId));
@@ -539,11 +550,11 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
connectionItem.SinkType = System.Type.GetType(connectionItem.SinkTypeName);
DesignerItemViewModelBase sourceItem = GetConnectorDataItem(viewModel, connectionItem.SourceId, connectionItem.SourceType);
ConnectorOrientation sourceConnectorOrientation = connectionItem.SourceOrientation;
- FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sourceItem, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint);
+ FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sourceItem, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint, connectionItem.SourceIsPortless);
DesignerItemViewModelBase sinkItem = GetConnectorDataItem(viewModel, connectionItem.SinkId, connectionItem.SinkType);
ConnectorOrientation sinkConnectorOrientation = connectionItem.SinkOrientation;
- FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint);
+ FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint, connectionItem.SinkIsPortless);
ConnectionViewModel connectionVM = new ConnectionViewModel(viewModel, sourceConnectorInfo, sinkConnectorInfo, connectionItem);
viewModel.Items.Add(connectionVM);
diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PortlessLinksViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PortlessLinksViewModel.cs
index 21ef33e..f2d1daa 100644
--- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PortlessLinksViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/PortlessLinksViewModel.cs
@@ -34,7 +34,7 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, node1.PortlessConnector, node2.PortlessConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector1);
- ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.PortlessConnector, node3.RightConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
+ ConnectionViewModel connector2 = new ConnectionViewModel(DiagramViewModel, node2.PortlessConnector, node3.TopConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
DiagramViewModel.DirectAddItemCommand.Execute(connector2);
ConnectionViewModel connector3 = new ConnectionViewModel(DiagramViewModel, node3.LeftConnector, node4.PortlessConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/ConnectionItem.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/ConnectionItem.cs
index 619377e..b39b067 100644
--- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/ConnectionItem.cs
+++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/ConnectionItem.cs
@@ -32,6 +32,7 @@ namespace AIStudio.Wpf.DiagramDesigner
this.SourceXRatio = viewmodel.SourceConnectorInfo.GetXRatioFromConnector();
this.SourceYRatio = viewmodel.SourceConnectorInfo.GetYRatioFromConnector();
this.SourceInnerPoint = viewmodel.SourceConnectorInfo.IsInnerPoint;
+ this.SourceIsPortless = viewmodel.SourceConnectorInfo.IsPortless;
this.SinkId = viewmodel.SinkConnectorInfoFully.DataItem.Id;
this.SinkOrientation = viewmodel.SinkConnectorInfoFully.Orientation;
@@ -40,6 +41,8 @@ namespace AIStudio.Wpf.DiagramDesigner
this.SinkXRatio = viewmodel.SinkConnectorInfoFully.GetXRatioFromConnector();
this.SinkYRatio = viewmodel.SinkConnectorInfoFully.GetYRatioFromConnector();
this.SinkInnerPoint = viewmodel.SinkConnectorInfoFully.IsInnerPoint;
+ this.SinkIsPortless = viewmodel.SourceConnectorInfo.IsPortless;
+
this.RouterMode = viewmodel.RouterMode;
this.PathMode = viewmodel.PathMode;
this.Vertices = viewmodel.Vertices.Select(p => new ConnectorVertexItem(p)).ToList();
@@ -68,6 +71,12 @@ namespace AIStudio.Wpf.DiagramDesigner
[XmlAttribute]
public bool SourceInnerPoint { get; set; }
+ [XmlAttribute]
+ public bool SourceIsPortless
+ {
+ get; set;
+ }
+
[XmlAttribute]
public Guid SinkId { get; set; }
@@ -89,6 +98,12 @@ namespace AIStudio.Wpf.DiagramDesigner
[XmlAttribute]
public bool SinkInnerPoint { get; set; }
+ [XmlAttribute]
+ public bool SinkIsPortless
+ {
+ get; set;
+ }
+
[XmlAttribute]
public string RouterMode
{
diff --git a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/FullyCreatedConnectorInfoItem.cs b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/FullyCreatedConnectorInfoItem.cs
index 8912471..9420190 100644
--- a/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/FullyCreatedConnectorInfoItem.cs
+++ b/AIStudio.Wpf.DiagramDesigner/Models/Serializables/Connector/FullyCreatedConnectorInfoItem.cs
@@ -27,23 +27,41 @@ namespace AIStudio.Wpf.DiagramDesigner
XRatio = viewmodel.XRatio;
YRatio = viewmodel.YRatio;
IsInnerPoint = viewmodel.IsInnerPoint;
+ IsPortless = viewmodel.IsPortless;
ValueTypePoint = viewmodel.ValueTypePoint;
}
[XmlAttribute]
- public double XRatio { get; set; }
+ public double XRatio
+ {
+ get; set;
+ }
[XmlAttribute]
- public double YRatio { get; set; }
-
+ public double YRatio
+ {
+ get; set;
+ }
[XmlAttribute]
- public bool IsInnerPoint { get; set; }
+ public bool IsInnerPoint
+ {
+ get; set;
+ }
[XmlAttribute]
- public ValueTypePoint ValueTypePoint { get; set; }
+ public bool IsPortless
+ {
+ get; set;
+ }
+
+ [XmlAttribute]
+ public ValueTypePoint ValueTypePoint
+ {
+ get; set;
+ }
+
-
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs b/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs
index f97b80e..8f6b1db 100644
--- a/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs
+++ b/AIStudio.Wpf.DiagramDesigner/Routers/Routers.Utils.cs
@@ -10,6 +10,10 @@ namespace AIStudio.Wpf.DiagramDesigner
var pt = port.Position;
switch (port.Orientation)
{
+ case ConnectorOrientation.Left:
+ return new PointBase(pt.X, pt.Y + port.ConnectorHeight / 2);
+ case ConnectorOrientation.TopLeft:
+ return new PointBase(pt.X, pt.Y);
case ConnectorOrientation.Top:
return new PointBase(pt.X + port.ConnectorWidth / 2, pt.Y);
case ConnectorOrientation.TopRight:
@@ -21,9 +25,7 @@ namespace AIStudio.Wpf.DiagramDesigner
case ConnectorOrientation.Bottom:
return new PointBase(pt.X + port.ConnectorWidth / 2, pt.Y + port.ConnectorHeight);
case ConnectorOrientation.BottomLeft:
- return new PointBase(pt.X, pt.Y + port.ConnectorHeight);
- case ConnectorOrientation.Left:
- return new PointBase(pt.X, pt.Y + port.ConnectorHeight / 2);
+ return new PointBase(pt.X, pt.Y + port.ConnectorHeight);
default:
return pt;
}
diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
index 528864d..022ed33 100644
--- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
+++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml
@@ -550,7 +550,7 @@
-
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs
index 560ff27..d2f934f 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/Connector/FullyCreatedConnectorInfo.cs
@@ -10,16 +10,17 @@ namespace AIStudio.Wpf.DiagramDesigner
{
public class FullyCreatedConnectorInfo : ConnectorInfoBase
{
- public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
- : this(null, dataItem, orientation, isInnerPoint, valueTypePoint)
+ public FullyCreatedConnectorInfo(DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ValueTypePoint valueTypePoint = 0)
+ : this(null, dataItem, orientation, isInnerPoint, isPortless, valueTypePoint)
{
}
- public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, ValueTypePoint valueTypePoint = 0)
+ public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, ConnectorOrientation orientation, bool isInnerPoint = false, bool isPortless = false, ValueTypePoint valueTypePoint = 0)
: base(root, orientation)
{
this.Parent = dataItem;
this.IsInnerPoint = isInnerPoint;
+ this.IsPortless = IsPortless;
this.ValueTypePoint = valueTypePoint;
if (IsInnerPoint == true)
{
@@ -69,6 +70,7 @@ namespace AIStudio.Wpf.DiagramDesigner
XRatio = designer.XRatio;
YRatio = designer.YRatio;
IsInnerPoint = designer.IsInnerPoint;
+ IsPortless = designer.IsPortless;
ValueTypePoint = designer.ValueTypePoint;
}
}
@@ -231,18 +233,30 @@ namespace AIStudio.Wpf.DiagramDesigner
{
return XRatio;
}
+ else if (IsPortless)
+ {
+ return 0.5;
+ }
else
{
switch (Orientation)
{
- case ConnectorOrientation.Top:
- return 0.5;
case ConnectorOrientation.Left:
return 0;
- case ConnectorOrientation.Bottom:
+ case ConnectorOrientation.TopLeft:
+ return 0;
+ case ConnectorOrientation.Top:
return 0.5;
+ case ConnectorOrientation.TopRight:
+ return 1;
case ConnectorOrientation.Right:
return 1;
+ case ConnectorOrientation.BottomRight:
+ return 1;
+ case ConnectorOrientation.Bottom:
+ return 0.5;
+ case ConnectorOrientation.BottomLeft:
+ return 0;
default: return XRatio;
}
}
@@ -254,18 +268,30 @@ namespace AIStudio.Wpf.DiagramDesigner
{
return YRatio;
}
+ else if (IsPortless)
+ {
+ return 0.5;
+ }
else
{
switch (Orientation)
{
- case ConnectorOrientation.Top:
- return 0;
case ConnectorOrientation.Left:
return 0.5;
- case ConnectorOrientation.Bottom:
- return 1;
+ case ConnectorOrientation.TopLeft:
+ return 0;
+ case ConnectorOrientation.Top:
+ return 0;
+ case ConnectorOrientation.TopRight:
+ return 0;
case ConnectorOrientation.Right:
return 0.5;
+ case ConnectorOrientation.BottomRight:
+ return 1;
+ case ConnectorOrientation.Bottom:
+ return 1;
+ case ConnectorOrientation.BottomLeft:
+ return 1;
default: return YRatio;
}
}
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs
index 12bdf82..6b5c39c 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs
@@ -1479,11 +1479,11 @@ namespace AIStudio.Wpf.DiagramDesigner
connectionItem.SinkType = System.Type.GetType(connectionItem.SinkTypeName);
DesignerItemViewModelBase sourceItem = GetConnectorDataItem(this, connectionItem.SourceId, connectionItem.SourceType);
ConnectorOrientation sourceConnectorOrientation = connectionItem.SourceOrientation;
- FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sourceItem, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint);
+ FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sourceItem, sourceConnectorOrientation, connectionItem.SourceXRatio, connectionItem.SourceYRatio, connectionItem.SourceInnerPoint, connectionItem.SourceIsPortless);
DesignerItemViewModelBase sinkItem = GetConnectorDataItem(this, connectionItem.SinkId, connectionItem.SinkType);
ConnectorOrientation sinkConnectorOrientation = connectionItem.SinkOrientation;
- FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint);
+ FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connectionItem.Id, sinkItem, sinkConnectorOrientation, connectionItem.SinkXRatio, connectionItem.SinkYRatio, connectionItem.SinkInnerPoint, connectionItem.SinkIsPortless);
ConnectionViewModel connectionVM = new ConnectionViewModel(this, sourceConnectorInfo, sinkConnectorInfo, connectionItem);
connectors.Add(connectionVM);
@@ -1514,24 +1514,36 @@ namespace AIStudio.Wpf.DiagramDesigner
return dataItem;
}
- private FullyCreatedConnectorInfo GetFullConnectorInfo(Guid connectorId, DesignerItemViewModelBase dataItem, ConnectorOrientation connectorOrientation, double xRatio, double yRatio, bool isInnerPoint)
+ private FullyCreatedConnectorInfo GetFullConnectorInfo(Guid connectorId, DesignerItemViewModelBase dataItem, ConnectorOrientation connectorOrientation, double xRatio, double yRatio, bool isInnerPoint, bool isPortless)
{
if (isInnerPoint)
{
return dataItem.Connectors.Where(p => p.XRatio == xRatio && p.YRatio == yRatio).FirstOrDefault();
}
+ else if (isPortless)
+ {
+ return dataItem.PortlessConnector;
+ }
else
{
switch (connectorOrientation)
{
- case ConnectorOrientation.Top:
- return dataItem.TopConnector;
case ConnectorOrientation.Left:
return dataItem.LeftConnector;
+ case ConnectorOrientation.TopLeft:
+ return dataItem.TopLeftConnector;
+ case ConnectorOrientation.Top:
+ return dataItem.TopConnector;
+ case ConnectorOrientation.TopRight:
+ return dataItem.TopRightConnector;
case ConnectorOrientation.Right:
return dataItem.RightConnector;
+ case ConnectorOrientation.BottomRight:
+ return dataItem.BottomRightConnector;
case ConnectorOrientation.Bottom:
return dataItem.BottomConnector;
+ case ConnectorOrientation.BottomLeft:
+ return dataItem.BottomLeftConnector;
default:
throw new InvalidOperationException(
diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs
index 547d333..19c45d4 100644
--- a/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs
+++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/SimpleViewModel/LogicalGateItemViewModelBase.cs
@@ -222,7 +222,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
this.ItemHeight = this.ItemHeight * (Input.Values.Count + 1) / Input.Values.Count;
}
- FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Left, true, ValueTypeInput.Count > index ? ValueTypeInput[index] : ValueTypeInput[0]);
+ FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Left, true, false, ValueTypeInput.Count > index ? ValueTypeInput[index] : ValueTypeInput[0]);
connector.XRatio = 0;
Input.Add(Input.Count, connector);
for (int i = 0; i < Input.Values.Count; i++)
@@ -234,7 +234,7 @@ namespace AIStudio.Wpf.DiagramDesigner
public virtual void ExecuteAddOutput(object parameter, int index = 0)
{
- FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Right, true, ValueTypeOutput.Count > index ? ValueTypeOutput[index] : ValueTypeInput[0]);
+ FullyCreatedConnectorInfo connector = new FullyCreatedConnectorInfo(this, ConnectorOrientation.Right, true, false, ValueTypeOutput.Count > index ? ValueTypeOutput[index] : ValueTypeInput[0]);
connector.XRatio = 1;
Output.Add(Output.Count, connector);
for (int i = 0; i < Output.Values.Count; i++)