SizeToContent option with different view origin
SizeToContent option with different view origin
Syncfusion® Diagram supports SizeToContent option with 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 as True and also need to set false for the BoundaryConstraintsEnabled property.
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) { //Caluculates 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