A .NET-based, all-in-one platform for precision laser processing

Highlights
- SCANLAB RTC Controllers
- RTC4 / RTC4e / RTC5 / RTC6 / RTC6e
- XL-SCAN (RTC6 + ACS via syncAXIS)
- Measurement and Profiling
- Log scanner trajectory and output signals with plotted graphs
- Powerful Marking Options
- Variable Polygon(Jump) Delay
- MoF (Marking on the Fly), 2nd head, 3D
- Sky Writing Mode 1/2/3 or 4
- Auto Delays by SCANAhead
- MultiBeam (1 Laser source + 2 AOM + 2 ScanHead)
- ALC(Automatic Laser Control) or Pulse on Demand
- Defined vector
- Ramp
- Speed dependent
- Set Velocity
- Actual Velocity
- Encoder dependent
- Encoder Speed
- Position dependent
- Table by distance and scale factor
- Also, SCANAhead, Encoder Speed Addition, Inverse Speed Correction, Backward Transformation, SDC+Skywriting combinations available
- Defined vector
- Scanner Field Correction
- 2D correction
- 3D correction for tilt, focus, coefficient a,b,c and stretch factors
- Laser Power Control
- Frequency, Duty Cycle, Analog, Digital
- Built-in vendor integrations: AdvancedOptoWave, Coherent, IPG, JPT, Photonics Industry, Spectra Physics and more
- Powermeters & Powermap
- Coherent (PowerMax), Thorlabs (via OPM), Ophir (via StarLab)
- Powermap-based output compensation
- Various Entities and Formats
- Point(s), Line, Arc, Polyline, Triangle, Rectangle, Spiral, Trepan, Spline
- Layer, Group, Block and BlockInsert
- Text, SiriusText, ImageText, Circular Text
- Image, DXF, HPGL, ZPL and Gerber files
- Barcodes: QR, DataMatrix, PDF417 and more
- 3D Mesh Format like as STL, OBJ, PLY
- Document ans pages
- Single document has multiple pages
- One document can be rendered for multiple view targets
- Open Architecture
- Editor, Marker and laser-source control code are open for customization
Major Changes
- 3D-printer (Additive Manufacturing) features: slicer integration and contour extraction
- Combine to use multiple hatch patterns with path optimizer
- Each property system by scanner pen and layer pen
- Various rendering modes (per-vertex, Z-depth, etc.)
- Fastest rendering speed with updated shader engine
- Switchable camera: orthographic / perspective
- Multi-page documents
- Built-in wafer, substrate editor
- Gerber file importer
- Available at multi-platform for net framework 4.8.1, net8.0, net9.0 and net10.0




Packages / DLLs
- SpiralLab.Sirius3.Dependencies — SCANLAB RTC4/5/6, syncAXIS runtime, fonts, sample data
- SpiralLab.Sirius3 — HAL controllers (scanner/laser/powermeter, etc.)
- SpiralLab.Sirius3.UI — Entities, 3D renderer, WinForms controls
Easy to update library files by NuGet package manager.



Platform targets
net481net8.0-windowsnet9.0-windowsnet10.0-windows
System Requirements
- Windows 10/11 (x64)
- GPU/Driver with OpenGL 3.3 support (latest drivers strongly recommended)
- SCANLAB drivers/runtimes installed (see versions below)
Dependencies
- SCANLAB
- RTC4: v2023.11.02
- RTC5: v2024.09.27
- RTC6: 2026.3.31 v1.24.0
- syncAXIS: 2023.03.09 v1.8.2
- .NET / OpenTK
net481- OpenTK 3.3.3
net8.0-windowsnet9.0-windowsnet10.0-windows- OpenTK 4.9.4
- OpenTK.Mathematics 4.9.4
- Common
- Newtonsoft.Json 13.0.4
- Microsoft.Extensions.Logging 8.0.1
- Microsoft.Extensions.Logging.Abstractions 8.0.3
Install Packages

- Add references
SpiralLab.Sirius3.Dependencies(https://www.nuget.org/packages/SpiralLab.Sirius3.Dependencies)SpiralLab.Sirius3(https://www.nuget.org/packages/SpiralLab.Sirius3)SpiralLab.Sirius3.UI(https://www.nuget.org/packages/SpiralLab.Sirius3.UI)
- Create your devices like as scanner, laser, powermeter, marker, … and attach them to SiriusEditorControl.
- More example codes are https://github.com/labspiral/sirius3
Quick Start
#if OPENTK3
using OpenTK;
using DVec3 = OpenTK.Vector3d;
#elif OPENTK4
using OpenTK.Mathematics;
using DVec3 = OpenTK.Mathematics.Vector3d;
#endif
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Create winforms
CreateAndExecuteMainForm();
}
public CreateAndExecuteMainForm()
{
// Create a form and add SiriusEditorControl to the form
Form dynamicForm = new Form();
dynamicForm.SuspendLayout();
dynamicForm.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
dynamicForm.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
dynamicForm.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dynamicForm.Text = "DEMO - (c)SpiralLab";
dynamicForm.Size = new Size(1600, 1200);
dynamicForm.StartPosition = FormStartPosition.CenterScreen;
var editorControl = new SpiralLab.Sirius3.UI.WinForms.SiriusEditorControl();
editorControl.Dock = DockStyle.Fill;
dynamicForm.Controls.Add(editorControl);
dynamicForm.ResumeLayout(false);
dynamicForm.Load += (s, e) =>
{
// Initialize sirius3 library
SpiralLab.Sirius3.Core.Initialize();
// Create devices and initialize them, then register to editor control
bool success = true;
// Scanner control
string correctionFile = "cor_1to1.ct5";
string correctionPath = Path.Combine(SpiralLab.Sirius3.Config.CorrectionPath, correctionFile);
const var fov = 100.0;
var kfactor = Math.Pow(2, 20) / fov;
var index = 0;
var rtc = ScannerFactory.CreateRtc5(index, kfactor, LaserModes.Yag1, RtcSignalLevels.ActiveHigh, RtcSignalLevels.ActiveHigh, correctionPath);
success &= rtc.Initialize();
rtc.CtlFrequency(50 * 1000, 2);
rtc.CtlSpeed(100, 100);
// DIO control
var dIExt1 = IOFactory.CreateInputExtension1(rtc); success &= dIExt1.Initialize();
var dOExt1 = IOFactory.CreateOutputExtension1(rtc); success &= dOExt1.Initialize();
var dOExt2 = IOFactory.CreateOutputExtension2(rtc); success &= dOExt2.Initialize();
var dILaserPort = IOFactory.CreateInputLaserPort(rtc); success &= dILaserPort.Initialize();
var dOLaserPort = IOFactory.CreateOutputLaserPort(rtc); success &= dOLaserPort.Initialize();
// Powermeter control
double laserMaxPower = 20;
var powerMeter = PowerMeterFactory.CreateVirtual(index, laserMaxPower);
//var powerMeter = PowerMeterFactory.CreateCoherentPowerMax(index, 4);
//var powerMeter = PowerMeterFactory.CreateGentecEO(index, 3);
success &= powerMeter.Initialize();
// Laser control
var laser = LaserFactory.CreateVirtualDutyCycle(index, laserMaxPower, 0, 100);
//var laser = LaserFactory.Create ...
success &= laser.Initialize();
laser.Scanner = rtc;
// Powermap
var powerMap = PowerMapFactory.CreateDefault(index, "default");
powerMap.Reset1to1("10000", laserMaxPower);
laser.PowerMap = powerMap;
// Marker
var marker = MarkerFactory.CreateRtc(index);
//var marker = MarkerFactory.CreateRtcFast(index);
//var marker = MarkerFactory.CreateSyncAxis(index);
success &= marker.Initialize();
Debug.Assert(success);
// Register devices
editorControl.RegisterDevices(rtc, laser, powerMeter, dIExt1, dILaserPort, dOExt1, dOExt2, dOLaserPort, marker);
};
dynamicForm.FormClosing += (s, e) =>
{
var dlgResult = MessageBox.Show(this, $"Do you really want to terminate program ?", "WARNING", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dlgResult != DialogResult.Yes)
{
//editorControl.Marker?.Stop();
e.Cancel = true;
return;
}
// Dispose document
editorControl.Document?.Dispose();
// Dispose devices
editorControl.DisposeDevices();
// Clean-up sirius3 library
SpiralLab.Sirius3.Core.Cleanup();
};
Application.Run(dynamicForm);
}
}
License
- Commercial license required for production use.
- License : RTC instance count + [Options: MoF, MultiBeam or syncAXIS]
- Contact: hcchoi@spirallab.co.kr | https://spirallab.co.kr
- See LICENSE.txt and THIRD-PARTY-NOTICES.txt.
Without a license key, the library runs in 30-minute evaluation mode.