SizeToContent option with different view origin
SizeToContent option with different view origin
Syncfusion® Diagram supports the SizeToContent option with a different view origin. If your requirement is to limit the diagram size based on the bounds of the node availability, the SizeToContent property must be set to True, and you also need to set the BoundaryConstraintsEnabled property to False.
The below code snippet shows how to limit the diagram’s size based on the bounds of the node availability.
[C#]
diagram1.Model.SizeToContent = true; diagram1.Model.BoundaryConstraintsEnabled = false;
[VB]
diagram1.Model.SizeToContent = True diagram1.Model.BoundaryConstraintsEnabled = False
If the requirement is to achieve the old behavior (i.e. the Left Top corner will remains in the same place) it is necessary to customize the Controller. In the customized Controller class need to override the GetBoundingRect method in order to achieve old behavior.
The below code snippet shows how to achieve the old behavior by overriding GetBoundingRect method.
[C#]
public override System.Drawing.RectangleF GetBoundingRect(System.Collections.ICollection nodes, MeasureUnits units)
{
Model model = this.Model;
// Get model node collection
NodeCollection modelNodes = Model.Nodes;// Get content bounds
RectangleF rcNodeBounds;
RectangleF returnBounds = new RectangleF(m_originoffset.ToPointF(), SizeF.Empty);foreach (Node node in modelNodes)
{
// Calculates the total bounds of the model content
rcNodeBounds = ((IUnitIndependent)node).GetBoundingRectangle(model.MeasurementUnits, false);
returnBounds = RectangleF.Union(returnBounds, rcNodeBounds);
}
// Updates the position of the origin based on the model content
m_originoffset.Width -= returnBounds.X;
m_originoffset.Height -= returnBounds.Y;// Updates the Model's size
returnBounds.Width = Math.Max(model.MinimumSize.Width + m_originoffset.Width, returnBounds.Width);
returnBounds.Height = Math.Max(model.MinimumSize.Height + m_originoffset.Height, returnBounds.Height);
return returnBounds;
}
[VB]
Public Overrides Function GetBoundingRect(ByVal nodes As System.Collections.ICollection, ByVal units As MeasureUnits) As System.Drawing.RectangleF Dim model As Model = Me.Model ' get model node collection Dim modelNodes As NodeCollection = Model.Nodes ' get content bounds Dim rcNodeBounds As RectangleF Dim returnBounds As New RectangleF(m_originoffset.ToPointF(), SizeF.Empty) For Each node As Node In modelNodes 'Caluculates the total bounds of the model content rcNodeBounds = (CType(node, IUnitIndependent)).GetBoundingRectangle(model.MeasurementUnits, False) returnBounds = RectangleF.Union(returnBounds, rcNodeBounds) Next node 'Updates the position of the origin based on the model content. m_originoffset.Width -= returnBounds.X m_originoffset.Height -= returnBounds.Y 'Updates the Model's size returnBounds.Width = Math.Max(model.MinimumSize.Width + m_originoffset.Width, returnBounds.Width) returnBounds.Height = Math.Max(model.MinimumSize.Height + m_originoffset.Height, returnBounds.Height) Return returnBounds End Function
Conclusion
I hope you enjoyed learning about SizeToContent option with different view origin.
You can refer to WinForms Diagram feature tour page to learn about its other groundbreaking feature representations and documentation, and how to quickly get started for configuration specifications. You can also explore our WinForms Diagram example to understand how to create and manipulate data.
For current customers, you can check out our components from the License and Downloads page. If you are new to Syncfusion®, you can try our 30-day free trial to check out our other controls.
If you have any queries or require clarifications, please let us know in the comments section below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!