diff --git a/CHANGELOG.md b/CHANGELOG.md
index ffff8183..297d3e57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,34 @@
# Changelog
+## 04/06/2020 - v0.4.2.1 - Beta
+
+* (Add) PrusaSlicer Printer "AnyCubic Photon"
+* (Add) PrusaSlicer Printer "Elegoo Mars Saturn"
+* (Add) PrusaSlicer Printer "Elegoo Mars"
+* (Add) PrusaSlicer Printer "EPAX X10"
+* (Add) PrusaSlicer Printer "EPAX X133 4K Mono"
+* (Add) PrusaSlicer Printer "EPAX X156 4K Color"
+* (Add) PrusaSlicer Printer "Peopoly Phenom L"
+* (Add) PrusaSlicer Printer "Peopoly Phenom Noir"
+* (Add) PrusaSlicer Printer "Peopoly Phenom"
+* (Add) PrusaSlicer Printer "Phrozen Shuffle 4K"
+* (Add) PrusaSlicer Printer "Phrozen Shuffle Lite"
+* (Add) PrusaSlicer Printer "Phrozen Shuffle XL"
+* (Add) PrusaSlicer Printer "Phrozen Shuffle"
+* (Add) PrusaSlicer Printer "Phrozen Sonic"
+* (Add) PrusaSlicer Printer "Phrozen Transform"
+* (Add) PrusaSlicer Printer "QIDI Shadow5.5"
+* (Add) PrusaSlicer Printer "QIDI Shadow6.0 Pro"
+* (Add) "Detect" text to compute layers button
+* (Add) "Repair" islands button on Islands tab
+* (Add) "Highlight islands" button on layer toolbar
+* (Add) Possible error cath on island computation
+* (Add) After load new file layer is rotated or not based on it width, landscape will not rotate while portrait will
+* (Improvement) Highlighted islands now also show AA pixels as a darker yellow
+* (Improvement) Island detection now need a certain number of touching pixels to consider a island or not, ie: i can't lay on only one pixel
+* (Fix) Island detection now don't consider dark fadded AA pixels as safe land
+* (Fix) Epax X1 printer properties
+
## 03/06/2020 - v0.4.2 - Beta
* (Add) Zoom times information
diff --git a/ImportPrinters.bat b/ImportPrinters.bat
index e44eacce..dbd8b9e9 100644
--- a/ImportPrinters.bat
+++ b/ImportPrinters.bat
@@ -7,6 +7,23 @@ SET files[0]=EPAX X1.ini
SET files[1]=Phrozen Sonic Mini.ini
SET files[2]=Zortrax Inkspire.ini
SET files[3]=Nova3D Elfin.ini
+SET files[4]=AnyCubic Photon.ini
+SET files[5]=Elegoo Mars.ini
+SET files[6]=Elegoo Mars Saturn.ini
+SET files[7]=EPAX X10.ini
+SET files[8]=EPAX X133 4K Mono.ini
+SET files[9]=EPAX X156 4K Color.ini
+SET files[10]=Peopoly Phenom.ini
+SET files[11]=Peopoly Phenom L.ini
+SET files[12]=Peopoly Phenom Noir.ini
+SET files[13]=QIDI Shadow5.5.ini
+SET files[14]=QIDI Shadow6.0 Pro.ini
+SET files[15]=Phrozen Shuffle.ini
+SET files[16]=Phrozen Shuffle Lite.ini
+SET files[17]=Phrozen Shuffle XL.ini
+SET files[18]=Phrozen Shuffle 4K.ini
+SET files[19]=Phrozen Sonic.ini
+SET files[20]=Phrozen Transform.ini
echo PrusaSlicer Printers Instalation
echo This will replace printers, all changes will be discarded
diff --git a/PrusaSL1Reader/LayerManager.cs b/PrusaSL1Reader/LayerManager.cs
index 48e80640..711fa2d1 100644
--- a/PrusaSL1Reader/LayerManager.cs
+++ b/PrusaSL1Reader/LayerManager.cs
@@ -244,24 +244,27 @@ public Layer NextLayer()
///
/// Gets all islands start pixel location for this layer
+ /// https://www.geeksforgeeks.org/find-number-of-islands/
///
/// holding all islands coordinates
- public List GetIslandsLocation()
+ public List GetIslandsLocation(uint requiredPixelsToSupportIsland = 5)
{
- // https://www.geeksforgeeks.org/find-number-of-islands/
+ if (requiredPixelsToSupportIsland == 0)
+ requiredPixelsToSupportIsland = 1;
// These arrays are used to
// get row and column numbers
// of 8 neighbors of a given cell
List result = new List();
- List pixels = new List();
+ List pixels = new List();
if (Index == 0) return result;
sbyte[] rowNbr = { -1, -1, -1, 0, 0, 1, 1, 1 };
sbyte[] colNbr = { -1, 0, 1, -1, 1, -1, 0, 1 };
const uint minPixel = 10;
- bool presetOnPrevious;
+ const uint minPixelForSupportIsland = 200;
int pixelIndex;
+ uint islandSupportingPixels;
var image = Image;
byte[] bytes = null;
@@ -322,14 +325,15 @@ void DFS(int y2, int x2)
!visited[tempy2, tempx2])
{
visited[tempy2, tempx2] = true;
- point = new System.Drawing.Point(tempx2, tempy2);
+ point = new Point(tempx2, tempy2);
pixels.Add(point);
queue.Enqueue(point);
- if (!presetOnPrevious && !ReferenceEquals(previousBytes, null))
+ islandSupportingPixels += previousBytes[pixelIndex] >= minPixelForSupportIsland ? 1u : 0;
+ /*if (!presetOnPrevious)
{
- if (previousBytes[pixelIndex] >= minPixel) presetOnPrevious = true;
- }
+ if (previousBytes[pixelIndex] >= minPixelForSupportIsland) presetOnPrevious = true;
+ }*/
}
}
}
@@ -351,18 +355,14 @@ void DFS(int y2, int x2)
// found, Visit all cells in this
// island and increment island count
pixels.Clear();
- pixels.Add(new System.Drawing.Point(x, y));
- presetOnPrevious = previousBytes[pixelIndex] >= minPixel;
+ pixels.Add(new Point(x, y));
+ islandSupportingPixels = previousBytes[pixelIndex] >= minPixelForSupportIsland ? 1u : 0;
DFS(y, x);
//count++;
- if (!presetOnPrevious)
- {
- result.Add(new LayerIsland(this, pixels.ToArray()));
- //count++;
- }
-
- presetOnPrevious = false;
+ if (islandSupportingPixels >= requiredPixelsToSupportIsland) continue; // Not a island, bounding is strong
+ if (islandSupportingPixels > 0 && pixels.Count < requiredPixelsToSupportIsland && islandSupportingPixels >= Math.Max(1, pixels.Count / 2)) continue; // Not a island
+ result.Add(new LayerIsland(this, pixels.ToArray()));
}
}
}
diff --git a/PrusaSL1Reader/PrusaSL1Reader.csproj b/PrusaSL1Reader/PrusaSL1Reader.csproj
index e57bfe9a..4c1c9641 100644
--- a/PrusaSL1Reader/PrusaSL1Reader.csproj
+++ b/PrusaSL1Reader/PrusaSL1Reader.csproj
@@ -7,9 +7,9 @@
https://github.com/sn4k3/PrusaSL1Viewer
https://github.com/sn4k3/PrusaSL1Viewer
- 0.4.2.0
- 0.4.2.0
- 0.4.2
+ 0.4.2.1
+ 0.4.2.1
+ 0.4.2.1
Open, view, edit, extract and convert DLP/SLA files generated from Slicers
diff --git a/PrusaSL1Viewer/FrmMain.Designer.cs b/PrusaSL1Viewer/FrmMain.Designer.cs
index 0b0ff2a8..4c2de3b2 100644
--- a/PrusaSL1Viewer/FrmMain.Designer.cs
+++ b/PrusaSL1Viewer/FrmMain.Designer.cs
@@ -69,6 +69,8 @@ private void InitializeComponent()
this.tsLayerImageLayerDifference = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.tsLayerPreviewTime = new System.Windows.Forms.ToolStripLabel();
+ this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator();
+ this.tsLayerImageHighlightIslands = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.tsLayerImageLayerOutline = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();
@@ -113,9 +115,11 @@ private void InitializeComponent()
this.tsIslandsPrevious = new System.Windows.Forms.ToolStripButton();
this.tsIslandsCount = new System.Windows.Forms.ToolStripLabel();
this.tsIslandsNext = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();
this.tsIslandsRefresh = new System.Windows.Forms.ToolStripButton();
- this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
this.tsIslandsRemove = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
+ this.tsIslandsRepair = new System.Windows.Forms.ToolStripButton();
this.imageList16x16 = new System.Windows.Forms.ImageList(this.components);
this.menu.SuspendLayout();
this.mainTable.SuspendLayout();
@@ -154,7 +158,7 @@ private void InitializeComponent()
this.helpToolStripMenuItem});
this.menu.Location = new System.Drawing.Point(0, 0);
this.menu.Name = "menu";
- this.menu.Size = new System.Drawing.Size(1631, 24);
+ this.menu.Size = new System.Drawing.Size(1684, 24);
this.menu.TabIndex = 0;
this.menu.Text = "menuStrip1";
//
@@ -297,6 +301,7 @@ private void InitializeComponent()
//
// menuToolsRepairLayers
//
+ this.menuToolsRepairLayers.Enabled = false;
this.menuToolsRepairLayers.Image = global::PrusaSL1Viewer.Properties.Resources.Wrench_16x16;
this.menuToolsRepairLayers.Name = "menuToolsRepairLayers";
this.menuToolsRepairLayers.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Alt)
@@ -367,9 +372,9 @@ private void InitializeComponent()
//
// statusBar
//
- this.statusBar.Location = new System.Drawing.Point(0, 761);
+ this.statusBar.Location = new System.Drawing.Point(0, 764);
this.statusBar.Name = "statusBar";
- this.statusBar.Size = new System.Drawing.Size(1631, 22);
+ this.statusBar.Size = new System.Drawing.Size(1684, 22);
this.statusBar.TabIndex = 1;
this.statusBar.Text = "statusStrip1";
//
@@ -380,7 +385,7 @@ private void InitializeComponent()
this.sbLayers.LargeChange = 1;
this.sbLayers.Location = new System.Drawing.Point(0, 0);
this.sbLayers.Name = "sbLayers";
- this.sbLayers.Size = new System.Drawing.Size(124, 670);
+ this.sbLayers.Size = new System.Drawing.Size(124, 673);
this.sbLayers.TabIndex = 4;
this.sbLayers.ValueChanged += new System.EventHandler(this.sbLayers_ValueChanged);
//
@@ -398,7 +403,7 @@ private void InitializeComponent()
this.mainTable.Name = "mainTable";
this.mainTable.RowCount = 1;
this.mainTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
- this.mainTable.Size = new System.Drawing.Size(1631, 737);
+ this.mainTable.Size = new System.Drawing.Size(1684, 740);
this.mainTable.TabIndex = 5;
//
// splitContainer1
@@ -406,7 +411,7 @@ private void InitializeComponent()
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer1.IsSplitterFixed = true;
- this.splitContainer1.Location = new System.Drawing.Point(1504, 3);
+ this.splitContainer1.Location = new System.Drawing.Point(1557, 3);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
@@ -417,8 +422,8 @@ private void InitializeComponent()
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.lbLayers);
- this.splitContainer1.Size = new System.Drawing.Size(124, 731);
- this.splitContainer1.SplitterDistance = 670;
+ this.splitContainer1.Size = new System.Drawing.Size(124, 734);
+ this.splitContainer1.SplitterDistance = 673;
this.splitContainer1.TabIndex = 0;
//
// lbLayers
@@ -449,8 +454,8 @@ private void InitializeComponent()
//
this.scCenter.Panel2.Controls.Add(this.pbLayers);
this.scCenter.Panel2MinSize = 18;
- this.scCenter.Size = new System.Drawing.Size(1095, 731);
- this.scCenter.SplitterDistance = 702;
+ this.scCenter.Size = new System.Drawing.Size(1148, 734);
+ this.scCenter.SplitterDistance = 705;
this.scCenter.TabIndex = 4;
//
// pbLayer
@@ -461,7 +466,7 @@ private void InitializeComponent()
this.pbLayer.Name = "pbLayer";
this.pbLayer.PanMode = Cyotek.Windows.Forms.ImageBoxPanMode.Left;
this.pbLayer.ShowPixelGrid = true;
- this.pbLayer.Size = new System.Drawing.Size(1095, 677);
+ this.pbLayer.Size = new System.Drawing.Size(1148, 680);
this.pbLayer.TabIndex = 7;
this.pbLayer.Zoomed += new System.EventHandler(this.pbLayer_Zoomed);
this.pbLayer.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbLayer_MouseMove);
@@ -478,6 +483,8 @@ private void InitializeComponent()
this.tsLayerImageLayerDifference,
this.toolStripSeparator6,
this.tsLayerPreviewTime,
+ this.toolStripSeparator14,
+ this.tsLayerImageHighlightIslands,
this.toolStripSeparator7,
this.tsLayerImageLayerOutline,
this.toolStripSeparator9,
@@ -488,7 +495,7 @@ private void InitializeComponent()
this.tsLayerImageMouseLocation});
this.tsLayer.Location = new System.Drawing.Point(0, 0);
this.tsLayer.Name = "tsLayer";
- this.tsLayer.Size = new System.Drawing.Size(1095, 25);
+ this.tsLayer.Size = new System.Drawing.Size(1148, 25);
this.tsLayer.TabIndex = 6;
this.tsLayer.Text = "Layer Menu";
//
@@ -558,6 +565,24 @@ private void InitializeComponent()
this.tsLayerPreviewTime.Text = "Preview Time";
this.tsLayerPreviewTime.ToolTipText = "Layer Resolution";
//
+ // toolStripSeparator14
+ //
+ this.toolStripSeparator14.Name = "toolStripSeparator14";
+ this.toolStripSeparator14.Size = new System.Drawing.Size(6, 25);
+ //
+ // tsLayerImageHighlightIslands
+ //
+ this.tsLayerImageHighlightIslands.Checked = true;
+ this.tsLayerImageHighlightIslands.CheckOnClick = true;
+ this.tsLayerImageHighlightIslands.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.tsLayerImageHighlightIslands.Image = global::PrusaSL1Viewer.Properties.Resources.island_16x16;
+ this.tsLayerImageHighlightIslands.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.tsLayerImageHighlightIslands.Name = "tsLayerImageHighlightIslands";
+ this.tsLayerImageHighlightIslands.Size = new System.Drawing.Size(63, 22);
+ this.tsLayerImageHighlightIslands.Text = "Islands";
+ this.tsLayerImageHighlightIslands.ToolTipText = "Highlight islands on current layer.\r\nValid only if Islands are calculated.";
+ this.tsLayerImageHighlightIslands.Click += new System.EventHandler(this.ItemClicked);
+ //
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
@@ -622,7 +647,7 @@ private void InitializeComponent()
this.pbLayers.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbLayers.Location = new System.Drawing.Point(0, 0);
this.pbLayers.Name = "pbLayers";
- this.pbLayers.Size = new System.Drawing.Size(1095, 25);
+ this.pbLayers.Size = new System.Drawing.Size(1148, 25);
this.pbLayers.Step = 1;
this.pbLayers.TabIndex = 6;
//
@@ -637,7 +662,7 @@ private void InitializeComponent()
this.tabControlLeft.Location = new System.Drawing.Point(3, 3);
this.tabControlLeft.Name = "tabControlLeft";
this.tabControlLeft.SelectedIndex = 0;
- this.tabControlLeft.Size = new System.Drawing.Size(394, 731);
+ this.tabControlLeft.Size = new System.Drawing.Size(394, 734);
this.tabControlLeft.TabIndex = 5;
//
// tbpThumbnailsAndInfo
@@ -647,7 +672,7 @@ private void InitializeComponent()
this.tbpThumbnailsAndInfo.Location = new System.Drawing.Point(4, 23);
this.tbpThumbnailsAndInfo.Name = "tbpThumbnailsAndInfo";
this.tbpThumbnailsAndInfo.Padding = new System.Windows.Forms.Padding(3);
- this.tbpThumbnailsAndInfo.Size = new System.Drawing.Size(386, 704);
+ this.tbpThumbnailsAndInfo.Size = new System.Drawing.Size(386, 707);
this.tbpThumbnailsAndInfo.TabIndex = 0;
this.tbpThumbnailsAndInfo.Text = "Information";
this.tbpThumbnailsAndInfo.UseVisualStyleBackColor = true;
@@ -670,7 +695,7 @@ private void InitializeComponent()
//
this.scLeft.Panel2.Controls.Add(this.lvProperties);
this.scLeft.Panel2.Controls.Add(this.tsProperties);
- this.scLeft.Size = new System.Drawing.Size(380, 698);
+ this.scLeft.Size = new System.Drawing.Size(380, 701);
this.scLeft.SplitterDistance = 425;
this.scLeft.TabIndex = 4;
//
@@ -764,7 +789,7 @@ private void InitializeComponent()
this.lvProperties.HideSelection = false;
this.lvProperties.Location = new System.Drawing.Point(0, 25);
this.lvProperties.Name = "lvProperties";
- this.lvProperties.Size = new System.Drawing.Size(380, 244);
+ this.lvProperties.Size = new System.Drawing.Size(380, 247);
this.lvProperties.TabIndex = 1;
this.lvProperties.UseCompatibleStateImageBehavior = false;
this.lvProperties.View = System.Windows.Forms.View.Details;
@@ -830,7 +855,7 @@ private void InitializeComponent()
this.tabPageGCode.ImageKey = "GCode-16x16.png";
this.tabPageGCode.Location = new System.Drawing.Point(4, 23);
this.tabPageGCode.Name = "tabPageGCode";
- this.tabPageGCode.Size = new System.Drawing.Size(386, 704);
+ this.tabPageGCode.Size = new System.Drawing.Size(386, 707);
this.tabPageGCode.TabIndex = 2;
this.tabPageGCode.Text = "GCode";
this.tabPageGCode.UseVisualStyleBackColor = true;
@@ -843,7 +868,7 @@ private void InitializeComponent()
this.tbGCode.Name = "tbGCode";
this.tbGCode.ReadOnly = true;
this.tbGCode.ScrollBars = System.Windows.Forms.ScrollBars.Both;
- this.tbGCode.Size = new System.Drawing.Size(386, 679);
+ this.tbGCode.Size = new System.Drawing.Size(386, 682);
this.tbGCode.TabIndex = 1;
//
// tsGCode
@@ -896,7 +921,7 @@ private void InitializeComponent()
this.tabPageIslands.Location = new System.Drawing.Point(4, 23);
this.tabPageIslands.Name = "tabPageIslands";
this.tabPageIslands.Padding = new System.Windows.Forms.Padding(3);
- this.tabPageIslands.Size = new System.Drawing.Size(386, 704);
+ this.tabPageIslands.Size = new System.Drawing.Size(386, 707);
this.tabPageIslands.TabIndex = 3;
this.tabPageIslands.Text = "Islands";
this.tabPageIslands.UseVisualStyleBackColor = true;
@@ -915,7 +940,7 @@ private void InitializeComponent()
this.lvIslands.HideSelection = false;
this.lvIslands.Location = new System.Drawing.Point(3, 28);
this.lvIslands.Name = "lvIslands";
- this.lvIslands.Size = new System.Drawing.Size(380, 673);
+ this.lvIslands.Size = new System.Drawing.Size(380, 676);
this.lvIslands.TabIndex = 8;
this.lvIslands.UseCompatibleStateImageBehavior = false;
this.lvIslands.View = System.Windows.Forms.View.Details;
@@ -947,9 +972,11 @@ private void InitializeComponent()
this.tsIslandsPrevious,
this.tsIslandsCount,
this.tsIslandsNext,
+ this.toolStripSeparator13,
this.tsIslandsRefresh,
+ this.tsIslandsRemove,
this.toolStripSeparator12,
- this.tsIslandsRemove});
+ this.tsIslandsRepair});
this.tsIslands.Location = new System.Drawing.Point(3, 3);
this.tsIslands.Name = "tsIslands";
this.tsIslands.Size = new System.Drawing.Size(380, 25);
@@ -987,24 +1014,23 @@ private void InitializeComponent()
this.tsIslandsNext.ToolTipText = "Show next island";
this.tsIslandsNext.Click += new System.EventHandler(this.ItemClicked);
//
+ // toolStripSeparator13
+ //
+ this.toolStripSeparator13.Name = "toolStripSeparator13";
+ this.toolStripSeparator13.Size = new System.Drawing.Size(6, 25);
+ //
// tsIslandsRefresh
//
this.tsIslandsRefresh.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
- this.tsIslandsRefresh.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.tsIslandsRefresh.Enabled = false;
this.tsIslandsRefresh.Image = global::PrusaSL1Viewer.Properties.Resources.refresh_16x16;
this.tsIslandsRefresh.ImageTransparentColor = System.Drawing.Color.Magenta;
this.tsIslandsRefresh.Name = "tsIslandsRefresh";
- this.tsIslandsRefresh.Size = new System.Drawing.Size(23, 22);
- this.tsIslandsRefresh.Text = "Update";
+ this.tsIslandsRefresh.Size = new System.Drawing.Size(61, 22);
+ this.tsIslandsRefresh.Text = "Detect";
this.tsIslandsRefresh.ToolTipText = "Compute Islands";
this.tsIslandsRefresh.Click += new System.EventHandler(this.ItemClicked);
//
- // toolStripSeparator12
- //
- this.toolStripSeparator12.Name = "toolStripSeparator12";
- this.toolStripSeparator12.Size = new System.Drawing.Size(6, 25);
- //
// tsIslandsRemove
//
this.tsIslandsRemove.Enabled = false;
@@ -1016,6 +1042,24 @@ private void InitializeComponent()
this.tsIslandsRemove.ToolTipText = "Remove selected islands";
this.tsIslandsRemove.Click += new System.EventHandler(this.ItemClicked);
//
+ // toolStripSeparator12
+ //
+ this.toolStripSeparator12.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripSeparator12.Name = "toolStripSeparator12";
+ this.toolStripSeparator12.Size = new System.Drawing.Size(6, 25);
+ //
+ // tsIslandsRepair
+ //
+ this.tsIslandsRepair.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.tsIslandsRepair.Enabled = false;
+ this.tsIslandsRepair.Image = global::PrusaSL1Viewer.Properties.Resources.Wrench_16x16;
+ this.tsIslandsRepair.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.tsIslandsRepair.Name = "tsIslandsRepair";
+ this.tsIslandsRepair.Size = new System.Drawing.Size(60, 22);
+ this.tsIslandsRepair.Text = "Repair";
+ this.tsIslandsRepair.ToolTipText = "Attempt to repair islands";
+ this.tsIslandsRepair.Click += new System.EventHandler(this.ItemClicked);
+ //
// imageList16x16
//
this.imageList16x16.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList16x16.ImageStream")));
@@ -1030,7 +1074,7 @@ private void InitializeComponent()
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(1631, 783);
+ this.ClientSize = new System.Drawing.Size(1684, 786);
this.Controls.Add(this.mainTable);
this.Controls.Add(this.statusBar);
this.Controls.Add(this.menu);
@@ -1170,6 +1214,10 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripButton tsIslandsRemove;
private System.Windows.Forms.ToolStripMenuItem menuTools;
private System.Windows.Forms.ToolStripMenuItem menuToolsRepairLayers;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator13;
+ private System.Windows.Forms.ToolStripButton tsIslandsRepair;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator14;
+ private System.Windows.Forms.ToolStripButton tsLayerImageHighlightIslands;
}
}
diff --git a/PrusaSL1Viewer/FrmMain.cs b/PrusaSL1Viewer/FrmMain.cs
index 7918c9dc..9adba1bb 100644
--- a/PrusaSL1Viewer/FrmMain.cs
+++ b/PrusaSL1Viewer/FrmMain.cs
@@ -735,13 +735,13 @@ private void ItemClicked(object sender, EventArgs e)
/************************
* Islands Menu *
***********************/
- if(ReferenceEquals(sender, tsIslandsRefresh))
+ if (ReferenceEquals(sender, tsIslandsPrevious))
{
- if (MessageBox.Show("Are you sure you want to compute islands?", "Islands Compute",
- MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return;
-
- ComputeIslands();
-
+ if (!tsIslandsPrevious.Enabled) return;
+ int index = Convert.ToInt32(tsIslandsCount.Tag);
+ lvIslands.SelectedItems.Clear();
+ lvIslands.Items[--index].Selected = true;
+ lvIslands_ItemActivate(lvIslands, null);
return;
}
@@ -755,15 +755,6 @@ private void ItemClicked(object sender, EventArgs e)
return;
}
- if (ReferenceEquals(sender, tsIslandsPrevious))
- {
- if (!tsIslandsPrevious.Enabled) return;
- int index = Convert.ToInt32(tsIslandsCount.Tag);
- lvIslands.SelectedItems.Clear();
- lvIslands.Items[--index].Selected = true;
- lvIslands_ItemActivate(lvIslands, null);
- return;
- }
if (ReferenceEquals(sender, tsIslandsRemove))
{
@@ -813,10 +804,26 @@ private void ItemClicked(object sender, EventArgs e)
return;
}
+ if (ReferenceEquals(sender, tsIslandsRepair))
+ {
+ ItemClicked(menuToolsRepairLayers, e);
+ return;
+ }
+
+ if (ReferenceEquals(sender, tsIslandsRefresh))
+ {
+ if (MessageBox.Show("Are you sure you want to compute islands?", "Islands Compute",
+ MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return;
+
+ ComputeIslands();
+
+ return;
+ }
+
/************************
* Layer Menu *
***********************/
- if (ReferenceEquals(sender, tsLayerImageRotate) || ReferenceEquals(sender, tsLayerImageLayerDifference) || ReferenceEquals(sender, tsLayerImageLayerOutline))
+ if (ReferenceEquals(sender, tsLayerImageRotate) || ReferenceEquals(sender, tsLayerImageLayerDifference) || ReferenceEquals(sender, tsLayerImageHighlightIslands) || ReferenceEquals(sender, tsLayerImageLayerOutline))
{
sbLayers_ValueChanged(sbLayers, null);
return;
@@ -854,7 +861,6 @@ private void ItemClicked(object sender, EventArgs e)
private void sbLayers_ValueChanged(object sender, EventArgs e)
{
- if (ReferenceEquals(SlicerFile, null)) return;
ShowLayer(ActualLayer);
}
@@ -1170,6 +1176,10 @@ void ProcessFile(string fileName)
return;
}
+
+ ActualLayerImage = SlicerFile[0].Image;
+ tsLayerImageRotate.Checked = ActualLayerImage.Height > ActualLayerImage.Width;
+
if (!ReferenceEquals(SlicerFile.ConvertToFormats, null))
{
foreach (var fileFormatType in SlicerFile.ConvertToFormats)
@@ -1239,6 +1249,7 @@ void ProcessFile(string fileName)
menuMutate.Enabled =
menuTools.Enabled =
+ tsIslandsRepair.Enabled =
tsIslandsRefresh.Enabled =
true;
@@ -1250,14 +1261,14 @@ void ProcessFile(string fileName)
//ShowLayer(0);
+ tabControlLeft.SelectedIndex = 0;
+ tsLayerResolution.Text = $"{{Width={SlicerFile.ResolutionX}, Height={SlicerFile.ResolutionY}}}";
+
sbLayers.SmallChange = 1;
sbLayers.Minimum = 0;
sbLayers.Maximum = (int)SlicerFile.LayerCount - 1;
sbLayers.Value = sbLayers.Maximum;
- tabControlLeft.SelectedIndex = 0;
- tsLayerResolution.Text = $"{{Width={SlicerFile.ResolutionX}, Height={SlicerFile.ResolutionY}}}";
-
RefreshInfo();
@@ -1341,6 +1352,7 @@ void RefreshInfo()
void ShowLayer(uint layerNum)
{
+ if (ReferenceEquals(SlicerFile, null)) return;
try
{
// OLD
@@ -1402,6 +1414,36 @@ void ShowLayer(uint layerNum)
//watch.Restart();
var imageBmp = image.ToBitmap();
+
+
+ if (tsLayerImageHighlightIslands.Checked && !ReferenceEquals(Islands, null) && Islands.Count > ActualLayer)
+ {
+ var islands = Islands[ActualLayer];
+
+ foreach (var island in islands)
+ {
+ if (ReferenceEquals(island, null)) continue; // Removed islands
+ foreach (var pixel in island)
+ {
+ int x = pixel.X;
+ int y = pixel.Y;
+
+ if (tsLayerImageRotate.Checked)
+ {
+ x = ActualLayerImage.Height - 1 - pixel.Y;
+ y = pixel.X;
+ }
+
+ var alpha = ActualLayerImage[pixel.X, pixel.Y].PackedValue;
+ if (alpha == 0) continue;
+ // alpha, Color.Yellow
+ alpha = Math.Max((byte)70, alpha);
+ imageBmp.SetPixel(x, y, Color.FromArgb(alpha, alpha, 0));
+ }
+ }
+ }
+
+
pbLayer.Image = imageBmp;
pbLayer.Image.Tag = image;
//Debug.WriteLine(watch.ElapsedMilliseconds);
@@ -1436,33 +1478,6 @@ void ShowLayer(uint layerNum)
//var islands = SlicerFile.LayerManager.GetAllIslands();
//Debug.WriteLine(islands.Length);
- if (!ReferenceEquals(Islands, null) && Islands.Count > ActualLayer)
- {
- var islands = Islands[ActualLayer];
-
- foreach (var island in islands)
- {
- if(ReferenceEquals(island, null)) continue; // Removed islands
- foreach (var pixel in island)
- {
- int x = pixel.X;
- int y = pixel.Y;
-
- if (tsLayerImageRotate.Checked)
- {
- x = ActualLayerImage.Height - 1 - pixel.Y;
- y = pixel.X;
- }
-
- if(ActualLayerImage[pixel.X, pixel.Y].PackedValue == 0) continue;
- imageBmp.SetPixel(x, y, Color.Yellow);
- }
-
- }
-
-
- }
-
watch.Stop();
tsLayerPreviewTime.Text = $"{watch.ElapsedMilliseconds}ms";
lbLayers.Text = $"{SlicerFile.GetHeightFromLayer(layerNum)} / {SlicerFile.TotalHeight}mm\n{layerNum} / {SlicerFile.LayerCount-1}\n{percent}%";
@@ -1706,8 +1721,10 @@ private void ComputeIslands()
Islands = SlicerFile.LayerManager.GetAllIslands();
result = true;
}
- catch (Exception)
+ catch (Exception ex)
{
+ MessageBox.Show(ex.Message, "Error while trying compute islands", MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
}
finally
{
@@ -1724,23 +1741,34 @@ private void ComputeIslands()
lvIslands.BeginUpdate();
uint count = 0;
- for (uint layerIndex = 0; layerIndex < SlicerFile.LayerCount; layerIndex++)
+
+ try
{
- ListViewGroup group = new ListViewGroup($"Layer {layerIndex} - {Islands[layerIndex].Count} Islands");
- for (var i = 0; i < Islands[layerIndex].Count; i++)
+ for (uint layerIndex = 0; layerIndex < SlicerFile.LayerCount; layerIndex++)
{
- count++;
- var island = Islands[layerIndex][i];
- TotalIslands++;
- ListViewItem item = new ListViewItem(group) {Text = count.ToString()};
- item.SubItems.Add((i + 1).ToString());
- item.SubItems.Add($"{island.X}, {island.Y}");
- item.SubItems.Add(island.Size.ToString());
- item.Tag = island;
- lvIslands.Groups.Add(group);
- lvIslands.Items.Add(item);
+ ListViewGroup group = new ListViewGroup($"Layer {layerIndex} - {Islands[layerIndex].Count} Islands");
+ for (var i = 0; i < Islands[layerIndex].Count; i++)
+ {
+ count++;
+ var island = Islands[layerIndex][i];
+ TotalIslands++;
+ ListViewItem item = new ListViewItem(group) { Text = count.ToString() };
+ item.SubItems.Add((i + 1).ToString());
+ item.SubItems.Add($"{island.X}, {island.Y}");
+ item.SubItems.Add(island.Size.ToString());
+ item.Tag = island;
+ lvIslands.Groups.Add(group);
+ lvIslands.Items.Add(item);
+ }
}
}
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Error while trying compute islands", MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ throw;
+ }
+
lvIslands.EndUpdate();
UpdateIslandsInfo();
diff --git a/PrusaSL1Viewer/FrmMain.resx b/PrusaSL1Viewer/FrmMain.resx
index c61c35a9..2b9d6835 100644
--- a/PrusaSL1Viewer/FrmMain.resx
+++ b/PrusaSL1Viewer/FrmMain.resx
@@ -139,67 +139,67 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAK
- DgAAAk1TRnQBSQFMAgEBBAEAAUgBAgFIAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2
+ DQAAAk1TRnQBSQFMAgEBBAEAAYABAgGAAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AZgADUAGjA1IBqQNS
AakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1ABo1wAAxYBHgMjATMDIwEz
AyMBMwMjATMDGAEhAwIBAwwAA1UBtANZAccDLwFJAwABAQMbASYDHAEnAxwBJwMcAScDHAEnAxwBJwMc
AScDHAEnAxwBJwMcAScDHAEnAwIBAwQAA1IBqTAAA1IBqRAAAycBOgMwAUwDMAFMAzABTAMwAUwDMAFM
- AzABTAMwAUwDMAFMAycBOhwAAwQBBgMjATMDUgGpAbMBWAEeAf8BsgFXARwB/wGyAVYBHAH/AbMBVwEd
+ AzABTAMwAUwDMAFMAycBOhwAAwQBBgMjATMDUgGpAbMBUQEXAf8BsgFQARUB/wGyAU8BFQH/AbMBUAEW
Af8CWAFWAbkDKQE/AwQBBgsAAf8DAAH/A0MBdwMpAT4DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
AwAB/wMAAf8DAAH/AwAB/wMyAVEEAANSAakEAANQAZ0DUwGqA1MBqgNTAaoDUwGqA1MBqgNTAaoDUAGd
- DAADUgGpEAADTgH7AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/AwYB/wMGAf8DTgH7GAADBQEHAzABTAGz
- AVcBHQH/AdkBswGMAf8B9QHfAcUB/wH+Ae4B2AH/Af4B7gHYAf8B+gHnAc8B/wHZAbMBjAH/AbMBVwEc
+ DAADUgGpEAADTgH7AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DTgH7GAADBQEHAzABTAGz
+ AVABFgH/AdkBswGMAf8B9QHfAcUB/wH+Ae4B2AH/Af4B7gHYAf8B+gHnAc8B/wHZAbMBjAH/AbMBUAEV
Af8CMQEwAU0DAgEDBAADUQGiA1YBtgMqAUAEAAMQARUDEQEXAxEBFwMRARcDEQEXAxEBFwMRARcDEQEX
- AxEBFwMRARcDEAEWCAADUgGpBAADUAGdA1MBqgNTAaoDHwEsHAADUgGpEAADBgH/AwYB/wMGAf8DBgH/
- AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/GAACMQEwAU0BtwGBASYB/wHqAc0BrAH/AfoB5QHLAf8B+AHh
- AcYB/wH2AeABxAH/AfYB3wHEAf8B9wHhAcUB/wH6AeUBywH/Ae8B1QG3Af8BswFXAR0B/wMgAS4EAAMK
- AQ4DEQEXAwABATgAA1IBqTAAA1IBqRAAAwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/
- AwYB/xgAAmoBRAH5AeUBxwGkAf8B9wHfAcIB/wHzAdsBuwH/AfMB2gG7Af8B8wHbAbwB/wHzAdsBvAH/
- AfMB2wG8Af8B8wHcAb0B/wH2AeEBwwH/AdUBrwGEAf8CWAFWAbkEAANSAfQDAAH/Az4BbAMOARMDQgF2
- A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0IBdgMUARsEAANSAakDIgEyA1IBqQNS
- AakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQMiATIDUgGpEAADBgH/AwYB/wMGAf8DBgH/
- AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/GAABtAFZAR8C/wHwAdwC/wHvAdwB/wH+AesB1wH/AfkB5AHK
- Af8B8QHWAbQB/wHxAdYBswH/AfEB1gG0Af8B8QHWAbQB/wHyAdgBtgH/AfMB2QG3Af8BswFZAR8B/wcA
- Af4DAAH/A0MBdwMeASsDVwHFA1kBxwNZAccDWQHHA1kBxwNZAccDWQHHA1kBxwNZAccDWQHHA1gBxgMm
- ATkEAANSAakDNAFVAzQBVSAAAzQBVQM0AVUDUgGpEAADBgH/AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/
- AwYB/wMGAf8DBgH/GAADSAGFAbgBggEmAf8BxwGXAUIB/wHPAaUBVAH/Ae0B0gG0Af8B/QHoAdIB/wHv
- AdIBrQH/Ae4B0gGsAf8B7gHSAa0B/wHuAdIBrQH/AfUB3AG8Af8BswFXAR4B/wQAAzMBUwM8AWcDFAEc
- OAADUgGpAzQBVQM0AVUDRgGAA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA0UBfwM0AVUDNAFVA1IBqRAA
- AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/AwYB/xAAAwoBDgMhATEDIwEzAyMBMwIx
- ATABTQMzAVMBswFWARkB/wHjAcUBogH/AfkB4wHJAf8B6wHOAaQB/wHrAc4BpgH/AesBzgGlAf8B9wHf
- AcAB/wGzAVcBHQH/BAADMwFTAzwBZwMUARw4AANSAakDNAFVAzQBVQM/AW4DMgFQEAADJwE7A0QBfAM0
- AVUDNAFVA1IBqRAAAwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/AwYB/wwAAwoBDgM/
- AW0DXAH4AYUBiQGNAf8BWQFcAYQB/wNfAfMDOgFiAwkBDAGzAVYBGQH/Ae0B0QG0Af8B6QHJAZ0B/wHp
- AckBnQH/AekByAGbAf8B/AHoAdIB/wGzAVgBHgH/BwAB/gMAAf8DQwF3Ax8BLANXAcUDWQHHA1kBxwNZ
- AccDWQHHA1kBxwNZAccDWQHHA1kBxwNZAccDWAHGAyYBOQQAA1IBqQM0AVUDNAFVAwUBBwNVAbUDEQEX
- A1IBqQMpAT4EAANQAZ8DEQEXAzQBVQM0AVUDUgGpEAADBgH/AwYB/wMGAf8DBgH/AwYB/wMGAf8DBgH/
- AwYB/wMGAf8DBgH/DAADPgFrA4AB/wLSAdEB/wHvAe4B7QH/Au8B7gH/AdIB0wHSAf8BWwGAAYEB/wM6
- AWADMgFQAdABpwFZAf8B6gHJAZwB/wHkAcMBkgH/AfIB1wG1Af8B2gG2AZAB/wJTAVIBqAQAA1IB9AMA
- Af8DPgFsAw4BEwNCAXUDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3AxQBGwQA
- A1IBqQM0AVUDNAFVBAADPAFoA1YBvgMjATQDVQG1AxIBGQNRAaAEAAM0AVUDNAFVA1IBqRAAAwYB/wMG
- Af8DBgH/AwYB/wMGAf8DBgH/AwoB/wMPAf8DDwH/A1wB3wwAA1wB+ALNAcwB/wHjAeIB4QH/Ad8B3gHd
- Af8B3wHeAd0B/wHjAeIB4QH/A8wB/wNnAfIDGQEjAcgBmAFFAf8B8wHaAbcB/wHxAdYBsgH/Af4B7QHZ
- Af8BtwGBASUB/wMKAQ0EAAMKAQ4DEQEXAwABATgAA1IBqQM0AVUDNAFVAwABAQMtAUYDCgEOBAADOQFf
- A1wBzgMoATwEAAM0AVUDNAFVA1IBqRAAAwYB/wOCAf8DJQH/Aw8B/wMGAf8DBgH/AxkB/wMgAf8DXAHf
- AxcBIAwAA1YB/wHjAeIB4QH/AdcB1gHUAf8B1wHWAdQB/wHXAdYB1AH/AdcB1gHUAf8B4gHhAeAB/wGD
- AYgBjQH/BAABtwGAASIC/wHwAdwB/wH6AeYBzgH/AcEBkAE5Af8DQAFuCAADUQGiA1YBtgMqAUAEAAMQ
- ARUDEQEXAxEBFwMRARcDEQEXAxEBFwMRARcDEQEXAxEBFwMRARcDEAEWCAADUgGpAzQBVQM0AVUDMwFT
- A1IBpgNKAYwHAAEBA0cBgwgAAzQBVQM0AVUDUgGpEAADBgH/A5kB/wOFAf8DMgH/AwYB/wMGAf8DGQH/
- A1wB3wMXASAQAANWAf8B8gHxAfAB/wHPAc0BywH/AdABzgHLAf8B0AHOAcsB/wHPAc0BywH/AfIC8AH/
- AVoBgQGFAf8EAAM3AVsBtAFZAR8B/wG0AVkBHgH/A0ABbw8AAf8DAAH/A0MBdwMpAT4DAAH/AwAB/wMA
- Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMyAVEEAANSAakDNAFVAzQBVQMRARcDUAGe
- AyQBNhQAAzQBVQM0AVUDUgGpEAADUAH7AxEB/wMRAf8DEQH/AwYB/wMGAf8DXAHfAxcBIBQAA2IB9gHb
- AtoB/wHoAecB5gH/AdEBzwHOAf8B0QHPAc4B/wHoAecB5gH/AdsC2gH/A2IB9iAAA1UBtANZAccDLwFJ
- AwABAQMbASYDHAEnAxwBJwMcAScDHAEnAxwBJwMcAScDHAEnAxwBJwMcAScDHAEnAwIBAwQAA1IBqQMi
- ATIDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpAyIBMgNSAakQAAMgAS4DKQE/
- AykBPwMpAT8DKQE/AykBPwMRARcYAAMuAUgDgAH/AdgC1wH/AfcC9gH/AfcC9gH/AdgC1wH/A4AB/wMu
- AUhkAANQAaMDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUAGj
- SAADLgFIA2IB9gNVAf8DVQH/A2IB9gMuAUgkAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYA
- AQEWAAP/gQAC/wGAAQEC/wH8AQcCAAG/Af0B4AEHAfABAwIAAaABHQHgAQcB4AEBARABAQGhAf0B4AEH
- AeABAQEfAf8BvwH9AeABBwHgAQECAAGAAQEB4AEHAeABAQIAAY8B8QHgAQcB4AEBAR8B/wGAAQEB4AEH
- AYABAQEfAf8BgwHBAeABBwEAAQECAAGAAUEB4AEHAQABAQIAAYgBEQHgAQcBAAEBAR8B/wGBAREB4AEH
- AQABgwEQAQEBgQExAeABDwEAAYcCAAGBAfEB4AEfAQAB/wIAAYABAQHgAT8BAAP/AYABAQL/AYEB/ws=
+ AxEBFwMRARcDEAEWCAADUgGpBAADUAGdA1MBqgNTAaoDHwEsHAADUgGpEwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMAAf8DAAH/AwAB/xgAAjEBMAFNAbcBgQEfAf8B6gHNAawB/wH6AeUBywH/AfgB4QHG
+ Af8B9gHgAcQB/wH2Ad8BxAH/AfcB4QHFAf8B+gHlAcsB/wHvAdUBtwH/AbMBUAEWAf8DIAEuBAADCgEO
+ AxEBFwMAAQE4AANSAakwAANSAakTAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
+ GAACagFEAfkB5QHHAaQB/wH3Ad8BwgH/AfMB2wG7Af8B8wHaAbsB/wHzAdsBvAH/AfMB2wG8Af8B8wHb
+ AbwB/wHzAdwBvQH/AfYB4QHDAf8B1QGvAYQB/wJYAVYBuQQAA1IB9AMAAf8DPgFsAw4BEwNCAXYDQwF3
+ A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQgF2AxQBGwQAA1IBqQMiATIDUgGpA1IBqQNS
+ AakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpAyIBMgNSAakTAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMAAf8DAAH/GAABtAFSARgC/wHwAdwC/wHvAdwB/wH+AesB1wH/AfkB5AHKAf8B8QHW
+ AbQB/wHxAdYBswH/AfEB1gG0Af8B8QHWAbQB/wHyAdgBtgH/AfMB2QG3Af8BswFSARgB/wcAAf4DAAH/
+ A0MBdwMeASsDVwHFA1kBxwNZAccDWQHHA1kBxwNZAccDWQHHA1kBxwNZAccDWQHHA1gBxgMmATkEAANS
+ AakDNAFVAzQBVSAAAzQBVQM0AVUDUgGpEwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/
+ AwAB/xgAA0gBhQG4AYIBHwH/AccBlwE7Af8BzwGlAU0B/wHtAdIBtAH/Af0B6AHSAf8B7wHSAa0B/wHu
+ AdIBrAH/Ae4B0gGtAf8B7gHSAa0B/wH1AdwBvAH/AbMBUAEXAf8EAAMzAVMDPAFnAxQBHDgAA1IBqQM0
+ AVUDNAFVA0YBgANSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNFAX8DNAFVAzQBVQNSAakTAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/EAADCgEOAyEBMQMjATMDIwEzAjEBMAFNAzMBUwGz
+ AU8BEgH/AeMBxQGiAf8B+QHjAckB/wHrAc4BpAH/AesBzgGmAf8B6wHOAaUB/wH3Ad8BwAH/AbMBUAEW
+ Af8EAAMzAVMDPAFnAxQBHDgAA1IBqQM0AVUDNAFVAz8BbgMyAVAQAAMnATsDRAF8AzQBVQM0AVUDUgGp
+ EwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwAAwoBDgM/AW0DXAH4AYUBiQGN
+ Af8BUgFVAYQB/wNfAfMDOgFiAwkBDAGzAU8BEgH/Ae0B0QG0Af8B6QHJAZ0B/wHpAckBnQH/AekByAGb
+ Af8B/AHoAdIB/wGzAVEBFwH/BwAB/gMAAf8DQwF3Ax8BLANXAcUDWQHHA1kBxwNZAccDWQHHA1kBxwNZ
+ AccDWQHHA1kBxwNZAccDWAHGAyYBOQQAA1IBqQM0AVUDNAFVAwUBBwNVAbUDEQEXA1IBqQMpAT4EAANQ
+ AZ8DEQEXAzQBVQM0AVUDUgGpEwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wwA
+ Az4BawOAAf8C0gHRAf8B7wHuAe0B/wLvAe4B/wHSAdMB0gH/AVQBgAGBAf8DOgFgAzIBUAHQAacBUgH/
+ AeoByQGcAf8B5AHDAZIB/wHyAdcBtQH/AdoBtgGQAf8CUwFSAagEAANSAfQDAAH/Az4BbAMOARMDQgF1
+ A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwNDAXcDQwF3A0MBdwMUARsEAANSAakDNAFVAzQBVQQA
+ AzwBaANWAb4DIwE0A1UBtQMSARkDUQGgBAADNAFVAzQBVQNSAakTAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAwH/AwgB/wMIAf8DXAHfDAADXAH4As0BzAH/AeMB4gHhAf8B3wHeAd0B/wHfAd4B3QH/AeMB4gHh
+ Af8DzAH/A2cB8gMZASMByAGYAT4B/wHzAdoBtwH/AfEB1gGyAf8B/gHtAdkB/wG3AYEBHgH/AwoBDQQA
+ AwoBDgMRARcDAAEBOAADUgGpAzQBVQM0AVUDAAEBAy0BRgMKAQ4EAAM5AV8DXAHOAygBPAQAAzQBVQM0
+ AVUDUgGpEwAB/wOCAf8DHgH/AwgB/wMAAf8DAAH/AxIB/wMZAf8DXAHfAxcBIAwAA08B/wHjAeIB4QH/
+ AdcB1gHUAf8B1wHWAdQB/wHXAdYB1AH/AdcB1gHUAf8B4gHhAeAB/wGDAYgBjQH/BAABtwGAARsC/wHw
+ AdwB/wH6AeYBzgH/AcEBkAEyAf8DQAFuCAADUQGiA1YBtgMqAUAEAAMQARUDEQEXAxEBFwMRARcDEQEX
+ AxEBFwMRARcDEQEXAxEBFwMRARcDEAEWCAADUgGpAzQBVQM0AVUDMwFTA1IBpgNKAYwHAAEBA0cBgwgA
+ AzQBVQM0AVUDUgGpEwAB/wOZAf8DhQH/AysB/wMAAf8DAAH/AxIB/wNcAd8DFwEgEAADTwH/AfIB8QHw
+ Af8BzwHNAcsB/wHQAc4BywH/AdABzgHLAf8BzwHNAcsB/wHyAvAB/wFTAYEBhQH/BAADNwFbAbQBUgEY
+ Af8BtAFSARcB/wNAAW8PAAH/AwAB/wNDAXcDKQE+AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
+ Af8DAAH/AwAB/wMAAf8DMgFRBAADUgGpAzQBVQM0AVUDEQEXA1ABngMkATYUAAM0AVUDNAFVA1IBqRAA
+ A1AB+wMKAf8DCgH/AwoB/wMAAf8DAAH/A1wB3wMXASAUAANiAfYB2wLaAf8B6AHnAeYB/wHRAc8BzgH/
+ AdEBzwHOAf8B6AHnAeYB/wHbAtoB/wNiAfYgAANVAbQDWQHHAy8BSQMAAQEDGwEmAxwBJwMcAScDHAEn
+ AxwBJwMcAScDHAEnAxwBJwMcAScDHAEnAxwBJwMCAQMEAANSAakDIgEyA1IBqQNSAakDUgGpA1IBqQNS
+ AakDUgGpA1IBqQNSAakDUgGpA1IBqQMiATIDUgGpEAADIAEuAykBPwMpAT8DKQE/AykBPwMpAT8DEQEX
+ GAADLgFIA4AB/wHYAtcB/wH3AvYB/wH3AvYB/wHYAtcB/wOAAf8DLgFIZAADUAGjA1IBqQNSAakDUgGp
+ A1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1IBqQNSAakDUgGpA1ABo0gAAy4BSANiAfYDTgH/A04B/wNi
+ AfYDLgFIJAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAv8BgAEBAv8B/AEH
+ AgABvwH9AeABBwHwAQMCAAGgAR0B4AEHAeABAQEQAQEBoQH9AeABBwHgAQEBHwH/Ab8B/QHgAQcB4AEB
+ AgABgAEBAeABBwHgAQECAAGPAfEB4AEHAeABAQEfAf8BgAEBAeABBwGAAQEBHwH/AYMBwQHgAQcBAAEB
+ AgABgAFBAeABBwEAAQECAAGIAREB4AEHAQABAQEfAf8BgQERAeABBwEAAYMBEAEBAYEBMQHgAQ8BAAGH
+ AgABgQHxAeABHwEAAf8CAAGAAQEB4AE/AQAD/wGAAQEC/wGBAf8L
@@ -211,9 +211,6 @@
551, 17
-
- 765, 17
-
diff --git a/PrusaSL1Viewer/Properties/AssemblyInfo.cs b/PrusaSL1Viewer/Properties/AssemblyInfo.cs
index 26e6c5da..0f73198d 100644
--- a/PrusaSL1Viewer/Properties/AssemblyInfo.cs
+++ b/PrusaSL1Viewer/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.4.2.0")]
-[assembly: AssemblyFileVersion("0.4.2.0")]
+[assembly: AssemblyVersion("0.4.2.1")]
+[assembly: AssemblyFileVersion("0.4.2.1")]
diff --git a/PrusaSL1Viewer/Properties/Resources.Designer.cs b/PrusaSL1Viewer/Properties/Resources.Designer.cs
index 35663ce8..f4654075 100644
--- a/PrusaSL1Viewer/Properties/Resources.Designer.cs
+++ b/PrusaSL1Viewer/Properties/Resources.Designer.cs
@@ -240,6 +240,16 @@ internal static System.Drawing.Bitmap Global_Network_icon_16x16 {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap island_16x16 {
+ get {
+ object obj = ResourceManager.GetObject("island-16x16", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
diff --git a/PrusaSL1Viewer/Properties/Resources.resx b/PrusaSL1Viewer/Properties/Resources.resx
index 2d1d5715..79c59b02 100644
--- a/PrusaSL1Viewer/Properties/Resources.resx
+++ b/PrusaSL1Viewer/Properties/Resources.resx
@@ -121,12 +121,12 @@
..\Images\Error-128x128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Images\Cancel-24x24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Images\layers-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Images\gui\mutation_closing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Images\eye-24x24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -214,6 +214,9 @@
..\Images\SaveAs-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Images\delete-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Images\pointer-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -223,13 +226,13 @@
..\Images\gui\mutation_blackhat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Images\gui\mutation_closing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Images\Cancel-24x24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Images\Donate-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Images\delete-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Images\island-16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/PrusaSL1Viewer/PrusaSL1Viewer.csproj b/PrusaSL1Viewer/PrusaSL1Viewer.csproj
index 66038f77..c3479c02 100644
--- a/PrusaSL1Viewer/PrusaSL1Viewer.csproj
+++ b/PrusaSL1Viewer/PrusaSL1Viewer.csproj
@@ -290,6 +290,7 @@
+
diff --git a/PrusaSlicer/printer/AnyCubic Photon.ini b/PrusaSlicer/printer/AnyCubic Photon.ini
new file mode 100644
index 00000000..733c4647
--- /dev/null
+++ b/PrusaSlicer/printer/AnyCubic Photon.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 18:24:42 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 68.04
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1440
+display_width = 120.96
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 155
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLiftHeight_5\nBottomLiftSpeed_40\nLiftHeight_5\nLiftingSpeed_60\nRetractSpeed_150\nBottomLightOffDelay_2\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/EPAX X1.ini b/PrusaSlicer/printer/EPAX X1.ini
index 45c1d401..31d5f8e4 100644
--- a/PrusaSlicer/printer/EPAX X1.ini
+++ b/PrusaSlicer/printer/EPAX X1.ini
@@ -1,9 +1,9 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-04-12 at 18:36:19 UTC
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 18:28:00 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
bed_custom_texture =
-bed_shape = 0x0,115x0,115x65,0x65
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
default_sla_material_profile = Prusa Orange Tough 0.05
default_sla_print_profile = 0.05 Normal
display_height = 68.04
@@ -25,7 +25,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLiftHeight_5\nBottomLiftSpeed_60\nLiftHeight_5\nLiftingSpeed_60\nRetractSpeed_150\nBottomLightOffDelay_2\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X1\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_2\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_40\nLiftingSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/EPAX X10.ini b/PrusaSlicer/printer/EPAX X10.ini
new file mode 100644
index 00000000..37fd0cc2
--- /dev/null
+++ b/PrusaSlicer/printer/EPAX X10.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 18:43:30 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,216.57x0,216.57x135.36,0x135.36
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 135.36
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1600
+display_width = 216.57
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 250
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X10\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_12\nBottomLiftHeight_7\nLiftHeight_7\nBottomLiftSpeed_40\nLiftingSpeed_60\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/EPAX X133 4K Mono.ini b/PrusaSlicer/printer/EPAX X133 4K Mono.ini
new file mode 100644
index 00000000..cdf8b6c2
--- /dev/null
+++ b/PrusaSlicer/printer/EPAX X133 4K Mono.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:32:19 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,216.576x0,216.576x135.36,0x135.36
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 135.36
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 216.576
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 400
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X133-4KMONO\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_10\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftingSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/EPAX X156 4K Color.ini b/PrusaSlicer/printer/EPAX X156 4K Color.ini
new file mode 100644
index 00000000..02c37349
--- /dev/null
+++ b/PrusaSlicer/printer/EPAX X156 4K Color.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:33:06 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,345.6x0,345.6x194.4,0x194.4
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 194.4
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 345.6
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 400
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_EPAX\nPRINTER_MODEL_X156-4KCOLOR\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_40\nLiftingSpeed_40\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Elegoo Mars Saturn.ini b/PrusaSlicer/printer/Elegoo Mars Saturn.ini
new file mode 100644
index 00000000..0eb9b91c
--- /dev/null
+++ b/PrusaSlicer/printer/Elegoo Mars Saturn.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:24:54 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,192x0,192x120,0x120
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 120
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 2560
+display_pixels_y = 1600
+display_width = 192
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 200
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_SATURN\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_7\nBottomLiftSpeed_70\nLiftingSpeed_70\nRetractSpeed_70\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Elegoo Mars.ini b/PrusaSlicer/printer/Elegoo Mars.ini
new file mode 100644
index 00000000..eeed32e7
--- /dev/null
+++ b/PrusaSlicer/printer/Elegoo Mars.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 18:44:02 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 68.04
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1440
+display_width = 120.96
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 150
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_MARS\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_5\nLiftHeight_5\nBottomLiftSpeed_90\nLiftingSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Peopoly Phenom L.ini b/PrusaSlicer/printer/Peopoly Phenom L.ini
new file mode 100644
index 00000000..60a211d0
--- /dev/null
+++ b/PrusaSlicer/printer/Peopoly Phenom L.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:41:06 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,345.6x0,345.6x194.4,0x194.4
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 194.4
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 345.6
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 400
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_L\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_9\nBottomLiftSpeed_32\nLiftingSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Peopoly Phenom Noir.ini b/PrusaSlicer/printer/Peopoly Phenom Noir.ini
new file mode 100644
index 00000000..93f24f51
--- /dev/null
+++ b/PrusaSlicer/printer/Peopoly Phenom Noir.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:41:22 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,293.76x0,293.76x165.24,0x165.24
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 165.24
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 293.76
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 400
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM_NOIR\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_36\nLiftingSpeed_45\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Peopoly Phenom.ini b/PrusaSlicer/printer/Peopoly Phenom.ini
new file mode 100644
index 00000000..aa9a4b38
--- /dev/null
+++ b/PrusaSlicer/printer/Peopoly Phenom.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:23:09 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,276.48x0,276.48x155.52,0x155.52
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 155.52
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 276.48
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 400
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PEOPOLY\nPRINTER_MODEL_PHENOM\n\nSTART_CUSTOM_VALUES\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_15\nLiftHeight_12\nBottomLiftSpeed_36\nLiftingSpeed_48\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Phrozen Shuffle 4K.ini b/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
new file mode 100644
index 00000000..b2ded0e0
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Shuffle 4K.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:24:40 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 68.04
+display_mirror_x = 0
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 120.96
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 170
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_4K\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Phrozen Shuffle Lite.ini b/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
new file mode 100644
index 00000000..dae3165b
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Shuffle Lite.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:27:07 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.32x0,120.32x67.68,0x67.68
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 67.68
+display_mirror_x = 0
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1440
+display_width = 120.32
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 170
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_LITE\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Phrozen Shuffle XL.ini b/PrusaSlicer/printer/Phrozen Shuffle XL.ini
new file mode 100644
index 00000000..93152d51
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Shuffle XL.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:26:36 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,192x0,192x120,0x120
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 120
+display_mirror_x = 0
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 2560
+display_pixels_y = 1600
+display_width = 192
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 200
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE_4K\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_100\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Phrozen Shuffle.ini b/PrusaSlicer/printer/Phrozen Shuffle.ini
new file mode 100644
index 00000000..5d2cfacb
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Shuffle.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:14:00 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.32x0,120.32x67.68,0x67.68
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 67.68
+display_mirror_x = 0
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1440
+display_width = 120.32
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 200
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SHUFFLE\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Phrozen Sonic Mini.ini b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
index 89a571bf..cd284c3a 100644
--- a/PrusaSlicer/printer/Phrozen Sonic Mini.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
@@ -1,4 +1,4 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-05-26 at 15:23:26 UTC
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:29:16 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
@@ -25,7 +25,7 @@ min_exposure_time = 1
min_initial_exposure_time = 1
print_host =
printer_model = SL1
-printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONICMINI\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_7\nBottomLiftHeight_6\nBottomLiftSpeed_100\nLiftHeight_5\nLiftingSpeed_100\nRetractSpeed_200\nBottomLightOffDelay_7\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC_MINI\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_7\nBottomLightOffDelay_7\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
printer_settings_id =
printer_technology = SLA
printer_variant = default
diff --git a/PrusaSlicer/printer/Phrozen Sonic.ini b/PrusaSlicer/printer/Phrozen Sonic.ini
new file mode 100644
index 00000000..7806b943
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Sonic.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:29:10 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 68.04
+display_mirror_x = 0
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 1920
+display_pixels_y = 1080
+display_width = 120.96
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 170
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_SONIC\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_6\nBottomLightOffDelay_6\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_100\nRetractSpeed_200\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/Phrozen Transform.ini b/PrusaSlicer/printer/Phrozen Transform.ini
new file mode 100644
index 00000000..65406bd8
--- /dev/null
+++ b/PrusaSlicer/printer/Phrozen Transform.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 22:32:45 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,291.84x0,291.84x164.16,0x164.16
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 164.16
+display_mirror_x = 0
+display_mirror_y = 0
+display_orientation = landscape
+display_pixels_x = 3840
+display_pixels_y = 2160
+display_width = 291.84
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 400
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_PHROZEN\nPRINTER_MODEL_TRANSFORM\n\nSTART_CUSTOM_VALUES\nLayerOffTime_10\nBottomLightOffDelay_10\nBottomLiftHeight_10\nLiftHeight_8\nBottomLiftSpeed_65\nLiftingSpeed_65\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/QIDI Shadow5.5.ini b/PrusaSlicer/printer/QIDI Shadow5.5.ini
new file mode 100644
index 00000000..20d573d8
--- /dev/null
+++ b/PrusaSlicer/printer/QIDI Shadow5.5.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:10:30 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 68.04
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1440
+display_width = 120.96
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 150
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW5.5\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_80\nLiftHeight_5\nBottomLiftSpeed_65\nLiftingSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480
diff --git a/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini b/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
new file mode 100644
index 00000000..a6332b66
--- /dev/null
+++ b/PrusaSlicer/printer/QIDI Shadow6.0 Pro.ini
@@ -0,0 +1,37 @@
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-04 at 21:12:51 UTC
+absolute_correction = 0
+area_fill = 50
+bed_custom_model =
+bed_custom_texture =
+bed_shape = 0x0,132.48x0,132.48x74.52,0x74.52
+default_sla_material_profile = Prusa Orange Tough 0.05
+default_sla_print_profile = 0.05 Normal
+display_height = 74.52
+display_mirror_x = 1
+display_mirror_y = 0
+display_orientation = portrait
+display_pixels_x = 2560
+display_pixels_y = 1440
+display_width = 132.48
+elefant_foot_compensation = 0.2
+elefant_foot_min_width = 0.2
+fast_tilt_time = 5
+gamma_correction = 1
+inherits = Original Prusa SL1
+max_exposure_time = 120
+max_initial_exposure_time = 300
+max_print_height = 150
+min_exposure_time = 1
+min_initial_exposure_time = 1
+print_host =
+printer_model = SL1
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_QIDI\nPRINTER_MODEL_SHADOW6.0PRO\n\nSTART_CUSTOM_VALUES\nFLIP_XY\nLayerOffTime_0\nBottomLightOffDelay_0\nBottomLiftHeight_80\nLiftHeight_5\nBottomLiftSpeed_100\nLiftingSpeed_65\nRetractSpeed_65\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+printer_settings_id =
+printer_technology = SLA
+printer_variant = default
+printer_vendor =
+printhost_apikey =
+printhost_cafile =
+relative_correction = 1,1
+slow_tilt_time = 8
+thumbnails = 400x400,800x480