TedToolkit.Hexa.Raii.ImPlot
2026.5.28
dotnet add package TedToolkit.Hexa.Raii.ImPlot --version 2026.5.28
NuGet\Install-Package TedToolkit.Hexa.Raii.ImPlot -Version 2026.5.28
<PackageReference Include="TedToolkit.Hexa.Raii.ImPlot" Version="2026.5.28" />
<PackageVersion Include="TedToolkit.Hexa.Raii.ImPlot" Version="2026.5.28" />
<PackageReference Include="TedToolkit.Hexa.Raii.ImPlot" />
paket add TedToolkit.Hexa.Raii.ImPlot --version 2026.5.28
#r "nuget: TedToolkit.Hexa.Raii.ImPlot, 2026.5.28"
#:package TedToolkit.Hexa.Raii.ImPlot@2026.5.28
#addin nuget:?package=TedToolkit.Hexa.Raii.ImPlot&version=2026.5.28
#tool nuget:?package=TedToolkit.Hexa.Raii.ImPlot&version=2026.5.28
TedToolkit.Hexa.Raii.ImPlot
RAII-style scope wrappers for Hexa.NET.ImPlot, enabling safe and ergonomic use of ImPlot's Begin/End and Push/Pop API pairs via C# using statements.
Part of the TedToolkit.Hexa.Raii project.
Installation
dotnet add package TedToolkit.Hexa.Raii.ImPlot
Overview
ImPlot requires paired calls such as BeginPlot/EndPlot, BeginSubplots/EndSubplots, PushStyleColor/PopStyleColor, etc. These wrappers guarantee the matching cleanup function is always invoked when a scope exits, using readonly ref struct types that implement IDisposable.
Each wrapper:
- Returns a stack-allocated
readonly ref struct— zero heap allocation - Exposes a
Succeedproperty (andbooloperators) for conditional content rendering - Accepts an optional
enableparameter to skip theBegin/Endpair entirely - Is marked
AggressiveInliningfor zero overhead
Usage
using TedToolkit.Hexa.Raii;
// Basic plot
using var plot = ImPlotRaii.Plot("My Plot");
if (plot)
{
ImPlot.PlotLine("Series 1", ref xData[0], ref yData[0], count);
}
// With size and flags
using var plot = ImPlotRaii.Plot("My Plot", new Vector2(400, 300), ImPlotFlags.NoLegend);
if (plot)
{
ImPlot.PlotBars("Bars", ref data[0], count);
}
// Subplots
using var subplots = ImPlotRaii.Subplots("##subplots", rows: 2, cols: 2, new Vector2(-1, 400));
if (subplots)
{
for (int i = 0; i < 4; i++)
{
using var subplot = ImPlotRaii.Plot($"Plot {i}");
if (subplot)
{
// ...
}
}
}
// Style push/pop
using (ImPlotRaii.StyleColor(ImPlotCol.Line, new Vector4(1, 0.5f, 0, 1)))
using (ImPlotRaii.Colormap(ImPlotColormap.Viridis))
{
// Plots rendered here use the custom style
}
Available Scopes
| Method | Wraps | Cleanup |
|---|---|---|
Plot |
ImPlot.BeginPlot |
ImPlot.EndPlot |
Subplots |
ImPlot.BeginSubplots |
ImPlot.EndSubplots |
AlignedPlots |
ImPlot.BeginAlignedPlots |
ImPlot.EndAlignedPlots |
LegendPopup |
ImPlot.BeginLegendPopup |
ImPlot.EndLegendPopup |
Window |
ImPlot.Begin |
ImPlot.End |
Item |
ImPlot.BeginItem |
ImPlot.EndItem |
StyleColor |
ImPlot.PushStyleColor |
ImPlot.PopStyleColor |
StyleVar |
ImPlot.PushStyleVar |
ImPlot.PopStyleVar |
Colormap |
ImPlot.PushColormap |
ImPlot.PopColormap |
PlotClipRect |
ImPlot.PushPlotClipRect |
ImPlot.PopPlotClipRect |
Target Frameworks
net6.0 · net7.0 · net8.0 · net9.0 · net10.0 · netstandard2.0 · netstandard2.1
License
Licensed under the GNU Lesser General Public License v3.0.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Hexa.NET.ImPlot (>= 2.2.9)
- System.Runtime.CompilerServices.Unsafe (>= 6.1.2)
-
.NETStandard 2.1
- Hexa.NET.ImPlot (>= 2.2.9)
- System.Runtime.CompilerServices.Unsafe (>= 6.1.2)
-
net10.0
- Hexa.NET.ImPlot (>= 2.2.9)
-
net6.0
- Hexa.NET.ImPlot (>= 2.2.9)
-
net7.0
- Hexa.NET.ImPlot (>= 2.2.9)
-
net8.0
- Hexa.NET.ImPlot (>= 2.2.9)
-
net9.0
- Hexa.NET.ImPlot (>= 2.2.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.5.28 | 134 | 5/28/2026 |
| 2026.4.8 | 123 | 4/8/2026 |
| 2026.4.4 | 116 | 4/4/2026 |
| 2026.1.30.2 | 129 | 1/30/2026 |
| 2026.1.30.1 | 118 | 1/30/2026 |
| 2026.1.30 | 126 | 1/30/2026 |
| 2026.1.29.2 | 120 | 1/29/2026 |
| 2026.1.29.1 | 130 | 1/29/2026 |