Nevron Forum
Back
Login
Register
Login
Register
Home
»
Nevron Vision for NET
»
Nevron Chart for .NET
»
AntiAlias causes lines to appear speckled
AntiAlias causes lines to appear speckled
Post Reply
AntiAlias causes lines to appear speckled
View
Flat Ascending
Flat Descending
Threaded
Options
Subscribe to topic
Print This Topic
Goto Topics Forum
Author
Message
Lance Levendowski
Lance Levendowski
posted 9 Years Ago
ANSWER
Topic Details
Group: Forum Members
Posts: 60,
Visits: 157
Setting NChartControl.Settings.ShapeRenderingMode to AntiAlias or HighQuality causes NLineSeries to have a speckled appearance when NCartesianChart.Enable3D = True.
Can this be prevented without the use of jittering?
Run the following example and toggle the CheckBoxes to observe the issue. Also notice that the chart changes size when NCartesianChart.Enable3D is toggled which is undesirable.
Public Class AntiAliasForm
Inherits Windows.Forms.Form
Private _ChartControl1 As Nevron.Chart.WinForm.NChartControl
Private WithEvents _CheckBox1 As Windows.Forms.CheckBox
Private WithEvents _CheckBox2 As Windows.Forms.CheckBox
Public Sub New()
Me.Size = New Drawing.Size(800, 624)
Me.StartPosition = FormStartPosition.CenterScreen
Dim chart As New Nevron.Chart.NCartesianChart
chart.Enable3D = True
chart.Projection.SetPredefinedProjection(Nevron.GraphicsCore.PredefinedProjection.Orthogonal)
Call AddLineSeries(250, 0.5#, Drawing.Color.Black, chart)
Dim chartBounds As New Drawing.Rectangle(0, 0, Me.ClientSize.Width, Me.ClientSize.Height - 24)
Me._ChartControl1 = New Nevron.Chart.WinForm.NChartControl
Me._ChartControl1.Charts.Clear()
Me._ChartControl1.Charts.Add(chart)
Me._ChartControl1.Anchor = AnchorStyles.Left Or AnchorStyles.Top Or AnchorStyles.Right Or AnchorStyles.Bottom
Me._ChartControl1.Bounds = chartBounds
Me._ChartControl1.Settings.JitterMode = Nevron.Chart.JitterMode.Disabled
'
'ISSUE: Setting NChartControl.Settings.ShapeRenderingMode to AntiAlias or HighQuality causes NLineSeries to have a speckled appearance when NCartesianChart.Enable3D = True.
Me._ChartControl1.Settings.ShapeRenderingMode = Nevron.GraphicsCore.ShapeRenderingMode.AntiAlias
'Me._ChartControl1.Settings.ShapeRenderingMode = Nevron.GraphicsCore.ShapeRenderingMode.HighQuality
'Me._ChartControl1.Settings.ShapeRenderingMode = Nevron.GraphicsCore.ShapeRenderingMode.HighSpeed
'
Me.Controls.Add(Me._ChartControl1)
Me._CheckBox1 = New Windows.Forms.CheckBox
Me._CheckBox1.Text = "Enable 3D"
Me._CheckBox1.Location = New Drawing.Point(0, Me._ChartControl1.Bottom)
Me._CheckBox1.AutoSize = True
Me._CheckBox1.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
Me._CheckBox1.Checked = Me._ChartControl1.Charts(0).Enable3D
Me.Controls.Add(Me._CheckBox1)
Me._CheckBox2 = New Windows.Forms.CheckBox
Me._CheckBox2.Text = "Enable AntiAlias"
Me._CheckBox2.Location = New Drawing.Point(Me._CheckBox1.Right + 4, Me._ChartControl1.Bottom)
Me._CheckBox2.AutoSize = True
Me._CheckBox2.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom
Me._CheckBox2.Checked = (Me._ChartControl1.Settings.ShapeRenderingMode = Nevron.GraphicsCore.ShapeRenderingMode.AntiAlias)
Me.Controls.Add(Me._CheckBox2)
End Sub
Private Sub AddLineSeries( _
ByVal count As Integer, _
ByVal phaseOffset As Double, _
ByVal color As Drawing.Color, _
ByVal chart As Nevron.Chart.NCartesianChart)
Dim series As New Nevron.Chart.NLineSeries
series.DataLabelStyle.Visible = False
series.BorderStyle.Color = color
series.BorderStyle.Width = New Nevron.GraphicsCore.NLength(2.5!)
'
Call Me.AddLineData(count, phaseOffset, series)
chart.Series.Add(series)
End Sub
Private Sub AddLineData( _
ByVal count As Integer, _
ByVal phaseOffset As Double, _
ByVal series As Nevron.Chart.NLineSeries)
Dim prevYVal As Double = 0
Dim prevXVal As Double = 0
Dim valueCount As Integer = series.Values.Count
If valueCount > 0 Then
prevYVal = CDbl(series.Values(valueCount - 1))
prevXVal = CDbl(series.XValues(valueCount - 1))
End If
Dim xValues As Double() = New Double(count - 1) {}
Dim yValues As Double() = New Double(count - 1) {}
Const constValue As Double = 0.5# 'Replaces the random value from the example.
Dim magnitude As Double = 0.01 + constValue * 5
' continuous
Dim angle As Double = 2 * Math.PI * phaseOffset
Dim phase As Double = 10 * (Math.PI * 2 * constValue) / count + 0.0001
Dim i As Integer = 0
Do While i < count
Dim yStep As Double = Math.Sin(angle) * magnitude
Dim xStep As Double = 0.01 + constValue * magnitude
If xStep < 0 Then
xStep = 0
End If
angle += phase
prevXVal += xStep
yValues(i) = prevYVal + yStep
xValues(i) = prevXVal
i += 1
Loop
series.Values.AddRange(yValues)
series.XValues.AddRange(xValues)
End Sub
Private Sub _CheckBox1_CheckedChanged(sender As Object, e As System.EventArgs) Handles _CheckBox1.CheckedChanged
Me._ChartControl1.Charts(0).Enable3D = Me._CheckBox1.Checked
Me._ChartControl1.Refresh()
End Sub
Private Sub _CheckBox2_CheckedChanged(sender As Object, e As System.EventArgs) Handles _CheckBox2.CheckedChanged
If (Me._CheckBox2.Checked) Then
Me._ChartControl1.Settings.ShapeRenderingMode = Nevron.GraphicsCore.ShapeRenderingMode.AntiAlias
Else
Me._ChartControl1.Settings.ShapeRenderingMode = Nevron.GraphicsCore.ShapeRenderingMode.Default
End If
End Sub
End Class
Reply
Like
0
Nevron Support
Nevron Support
posted 9 Years Ago
ANSWER
Post Details
Group: Administrators
Posts: 3.1K,
Visits: 4.2K
Hi Lance,
This appearance is caused by the OpenGL line rendering itself so there so not much we can do there. Regarding the size change - you can limit this effect by settings bounds mode to Fit:
chartchart.BoundsMode = Nevron.GraphicsCore.BoundsMode.Fit
Let us know if you meet any problems.
Best Regards,
Nevron Support Team
Reply
Like
0
GO
Merge Selected
Merge into selected topic...
Merge into merge target...
Merge into a specific topic ID...
Open Merge
Post Reply
Similar Topics
Post Quoted Reply
Reading This Topic
Login
Login
Remember Me
Reset Password
Resend Validation Email
Login
Explore
Messages
Mentions
Search