Articles in this section
Category / Section

SizeToContent option with different view origin

2 mins read

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

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied