├── App.config
├── LICENSE.txt
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
└── Settings.settings
├── README.md
├── WafermapControl
├── Wafermap.Designer.cs
├── Wafermap.cs
├── Wafermap.resx
└── WafermapTools.cs
├── WafermapDisplay.csproj
├── bin
└── Debug
│ ├── WafermapDisplay.dll
│ ├── WafermapDisplay.dll.config
│ └── WafermapDisplay.pdb
└── obj
└── Debug
├── DesignTimeResolveAssemblyReferences.cache
├── DesignTimeResolveAssemblyReferencesInput.cache
├── TempPE
└── Properties.Resources.Designer.cs.dll
├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
├── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
├── WAfermapDisplay.csproj.FileListAbsolute.txt
├── WAfermapDisplay.csproj.GenerateResource.Cache
├── WafermapDisplay.dll
├── WafermapDisplay.pdb
├── fratte.at.WafermapDisplay.Properties.Resources.resources
└── fratte.at.WafermapDisplay.Wafermap.resources
/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014, Florian Fratte
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice,
8 | this list of conditions and the following disclaimer.
9 | * Redistributions in binary form must reproduce the above copyright
10 | notice, this list of conditions and the following disclaimer in the
11 | documentation and/or other materials provided with the distribution.
12 | * Neither the name of fratte.at nor the names of its contributors may be
13 | used to endorse or promote products derived from this software without
14 | specific prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 | POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die mit einer Assembly verknüpft sind.
8 | [assembly: AssemblyTitle("fratte.at.WafermapDisplay")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("fratte.at.WafermapDisplay")]
13 | [assembly: AssemblyCopyright("Copyright © 2014")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("e6571189-9545-42fc-9342-abf3063a9068")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
33 | // übernehmen, indem Sie "*" eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.34011
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace fratte.at.WafermapDisplay.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
17 | ///
18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("fratte.at.WafermapDisplay.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:4.0.30319.34011
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace fratte.at.WafermapDisplay.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | WafermapDisplay
2 | ===============
3 |
4 | c# project providing a wafer map control
5 |
6 | This project aims to provide a way to visualize wafer map data in windows applications
7 | A wafer map is something specific to semiconductor industry and usually the data is coming from Wafer Probe using ATE
8 |
9 | A more detailed documentation is coming soon (as soon as I've got time to do it)
10 |
11 | Basically the useage should be quite self explaining
12 | In the meantime I'll just provide a snipped out of my test class:
13 |
14 | for (int waferNum = 0; waferNum < nrWafers; waferNum++)
15 | {
16 | // Create sample dataset
17 | int[,] data = new int[300, 300];
18 | Random binGenerator = new Random(waferNum);
19 | for (int x = 0; x < 300; x++)
20 | {
21 | for (int y = 0; y < 300; y++)
22 | {
23 | data[x, y] = binGenerator.Next(8);
24 | }
25 | }
26 | WafermapImpl wmap = new WafermapImpl();
27 | wmap.Dataset = data;
28 | wmap.Notchlocation = 90;
29 | wmap.MinimumSize = new Size(250,250);
30 |
31 | wmap.Interactive = true;
32 | //this.Controls.Add(wmap);
33 | flowLayoutPanel1.Controls.Add(wmap);
34 | }
35 |
36 | Here's the implementation class:
37 | class WafermapImpl : Wafermap
38 | {
39 |
40 | public override void dieEntered(int x, int y, int bincode)
41 | {
42 | // Do nothing
43 | }
44 |
45 | public override void dieClicked(int x, int y, int bincode, System.Windows.Forms.MouseButtons btn)
46 | {
47 | // Cast
48 |
49 | if (btn == MouseButtons.Left)
50 | {
51 | // Update dataset
52 | Dataset[x, y] = 2;
53 | // Show the changes
54 | updateDie(x, y, 2);
55 | }
56 | else
57 | {
58 | // Rotation test
59 | int rot=Rotation + 90;
60 | if (rot > 270)
61 | rot = rot - 360;
62 | Rotation = rot;
63 | Invalidate();
64 | }
65 | }
66 | }
67 | The 2 overwrittern methods get called by the Wafermap class when a die is clicked or when the mouse pointer enters
68 | a die in the visualization
69 |
--------------------------------------------------------------------------------
/WafermapControl/Wafermap.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace fratte.at.WafermapDisplay
2 | {
3 | partial class Wafermap
4 | {
5 | ///
6 | /// Erforderliche Designervariable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Verwendete Ressourcen bereinigen.
12 | ///
13 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Vom Komponenten-Designer generierter Code
24 |
25 | ///
26 | /// Erforderliche Methode für die Designerunterstützung.
27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.SuspendLayout();
32 | //
33 | // Wafermap
34 | //
35 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
37 | this.Name = "Wafermap";
38 | this.Load += new System.EventHandler(this.Wafermap_Load);
39 | this.ResumeLayout(false);
40 |
41 | }
42 |
43 | #endregion
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/WafermapControl/Wafermap.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Drawing;
5 | using System.Data;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 | using System.Drawing.Drawing2D;
11 |
12 | namespace fratte.at.WafermapDisplay
13 | {
14 |
15 |
16 | public partial class Wafermap : UserControl
17 | {
18 | private String tooSmallString = "TOO SMALL";
19 |
20 | public String TooSmallString
21 | {
22 | get { return tooSmallString; }
23 | set { tooSmallString = value; }
24 | }
25 |
26 | private String noDataString = "NO DATA";
27 |
28 | public String NoDataString
29 | {
30 | get { return noDataString; }
31 | set { noDataString = value; }
32 | }
33 |
34 |
35 |
36 | private int translation_x=0;
37 |
38 | public int TranslationX
39 | {
40 | get { return translation_x; }
41 | set { translation_x = value; }
42 | }
43 |
44 | private int translation_y=0;
45 |
46 | public int TranslationY
47 | {
48 | get { return translation_y; }
49 | set { translation_y = value; }
50 | }
51 |
52 | private int rotation;
53 |
54 | public int Rotation
55 | {
56 | get { return rotation; }
57 | set { if (value % 90 == 0 && value >= 0 && value < 360)
58 | rotation = value;
59 | else
60 | throw new ArgumentException("Rotation has to be 0, 90, 180 or 270 degrees (Is "+value+")");
61 |
62 |
63 | }
64 | }
65 |
66 |
67 | private float zoom;
68 |
69 | public float Zoom
70 | {
71 | get { return zoom; }
72 | set { zoom = value; }
73 | }
74 | private int notchLocation = 0;
75 |
76 | public int Notchlocation
77 | {
78 | get { return notchLocation; }
79 | set {
80 | if (value % 90 == 0 && value >= 0 && value <= 270)
81 | notchLocation = value;
82 | else
83 | throw new ArgumentException("NotchLocation has to be 0, 90, 180 or 270 degrees (Is "+value+")");
84 | }
85 | }
86 |
87 | private int[,] dataset;
88 |
89 | public int[,] Dataset
90 | {
91 | get { return dataset; }
92 | set { dataset = value; }
93 | }
94 |
95 | private Color[] colors;
96 |
97 | public Color[] Colors
98 | {
99 | get { return colors; }
100 | set { colors = value; }
101 | }
102 |
103 |
104 |
105 | public Wafermap()
106 | {
107 | zoom=1f;
108 | InitializeComponent();
109 | SetStyle(ControlStyles.ResizeRedraw, true);
110 | DoubleBuffered = true;
111 | setupDefaultColors();
112 | registerEvents();
113 | }
114 |
115 |
116 |
117 | private void setupDefaultColors()
118 | {
119 | // Just some sample colors to get started
120 | colors = new Color[255];
121 | colors[0] = Color.Green;
122 | colors[1] = Color.Red;
123 | colors[2] = Color.Yellow;
124 | colors[3] = Color.Blue;
125 | colors[4] = Color.Orange;
126 | colors[5] = Color.Magenta;
127 | colors[6] = Color.DarkBlue;
128 | colors[7] = Color.Pink;
129 | colors[50] = Color.Black;
130 | }
131 |
132 | private void Wafermap_Load(object sender, EventArgs e)
133 | {
134 | this.Dock = DockStyle.Fill;
135 | }
136 |
137 | private bool isScaled;
138 |
139 | public bool IsScaled
140 | {
141 | get { return isScaled; }
142 |
143 | }
144 |
145 | private int scaleFactor;
146 |
147 | public int ScaleFactor
148 | {
149 | get { return scaleFactor; }
150 | }
151 |
152 |
153 | // We need some globals to be available for calculations
154 | RectangleF boundingBox_;
155 | SizeF dieSize_;
156 |
157 | protected override void OnPaint(PaintEventArgs e)
158 | {
159 |
160 |
161 | // set rotation
162 | e.Graphics.RotateTransform((float)rotation);
163 | if(rotation!=0)
164 | {
165 | // When we rotate, we also have to translate
166 | switch (rotation)
167 | {
168 | case 90:
169 | e.Graphics.TranslateTransform(0, -boundingBox_.Width);
170 | break;
171 | case 180:
172 | e.Graphics.TranslateTransform(-boundingBox_.Width,-boundingBox_.Height);
173 | break;
174 | case 270:
175 | e.Graphics.TranslateTransform(-boundingBox_.Height, 0);
176 | break;
177 | }
178 | }
179 | // set additional translation
180 | e.Graphics.TranslateTransform(translation_x, translation_y);
181 |
182 | // Use antialias
183 | e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
184 |
185 | // Here comes everything that has to be calculated on each resize/redraw
186 | // Just do this calculations once
187 | // Let's find the best Size for the outline
188 | float w = this.Width*zoom;
189 | float h = this.Height*zoom;
190 |
191 | float size = w < h ? w : h;
192 | // Wafersize is size-2 because we're not drawing the first and the last pixels
193 | SizeF wafersize = new SizeF(size - 2, size - 2);
194 | PointF starting = new PointF((w - size) / 2f, (h - size) / 2f);
195 | RectangleF boundingBox = new RectangleF(starting, wafersize);
196 | boundingBox_ = boundingBox;
197 |
198 | // Create graphics path.
199 | GraphicsPath clipPath = new GraphicsPath();
200 | clipPath.AddEllipse(boundingBox);
201 | // Set clipping region to path.
202 | e.Graphics.SetClip(clipPath, CombineMode.Replace);
203 |
204 |
205 | drawCircle(e.Graphics,boundingBox);
206 | drawNotch(e.Graphics, boundingBox, notchLocation);
207 |
208 | // Let's calculate everything needed for drawing the dies
209 | if (dataset != null && dataset.Length > 0)
210 | {
211 | int maxX = dataset.GetLength(0);
212 | int maxY = dataset.GetLength(1);
213 | float sizeX = boundingBox.Width / (float)maxX;
214 | float sizeY = boundingBox.Height / (float)maxY;
215 |
216 | int every = 1;
217 |
218 | // If dieSizeX or dieSizeY is less then 2 pixels
219 | // take only every nth die
220 | while (sizeX <= 2 || sizeY <= 2)
221 | {
222 | every = every * 2;
223 | sizeX = boundingBox.Width / (float)(maxX/every);
224 | sizeY = boundingBox.Height / (float)(maxY/every);
225 | }
226 | SizeF dieSize = new SizeF(sizeX, sizeY);
227 | dieSize_ = dieSize;
228 | // If every != 1 we recalculate the input data
229 | // Otherwise we pass the original dataset
230 | // Caveat: We must not overwrite the original dataset ;)
231 | if (every > 1)
232 | {
233 | // Create a new dataset
234 | // Get the highest bin code in x/y to x/y + every as result for x/y
235 | // First set the property
236 | isScaled = true;
237 | scaleFactor = every;
238 | drawDies(e.Graphics, boundingBox, fratte.at.WafermapDisplay.WafermapTools.scaleArray(dataset,every), dieSize);
239 | // Print "Too small" message
240 | FontFamily myFontFamily = new FontFamily("Arial");
241 | Font myFont = new Font(myFontFamily,
242 | 10,
243 | FontStyle.Bold,
244 | GraphicsUnit.Pixel);
245 |
246 | e.Graphics.DrawString(tooSmallString, myFont, new SolidBrush(Color.Red), boundingBox.Location);
247 |
248 | }
249 | else
250 | {
251 | // Properties
252 | isScaled = false;
253 | scaleFactor = 1;
254 |
255 | // Simply draw the die
256 | drawDies(e.Graphics, boundingBox, dataset, dieSize);
257 | }
258 | }
259 | else
260 | {
261 | // Display "No Data" message
262 | FontFamily myFontFamily = new FontFamily("Arial");
263 | Font myFont = new Font(myFontFamily,
264 | 10,
265 | FontStyle.Bold,
266 | GraphicsUnit.Pixel);
267 |
268 | e.Graphics.DrawString(noDataString, myFont,new SolidBrush( Color.Red), boundingBox.Location);
269 | }
270 |
271 |
272 | }
273 |
274 | // Try to reuse - only instantiated once
275 | SolidBrush waferFillbrush = new SolidBrush(Color.Silver);
276 | Pen blackPen = new Pen(Color.Black);
277 | SolidBrush notchFillBrush = new SolidBrush(Color.Black);
278 | private void drawCircle(Graphics g, RectangleF boundingBox)
279 | {
280 | g.FillEllipse(waferFillbrush, boundingBox);
281 | g.DrawEllipse(blackPen, boundingBox);
282 | }
283 |
284 | private void drawNotch(Graphics g, RectangleF boundingBox, int location)
285 | {
286 | // Draw the notch (Phyical property on the wafer for alignment. Can be at 0, 90, 180, 270 degrees
287 | // starting from 0° at the bottom CCW)
288 | // The Shape is fixed to a cut circle
289 | float size=boundingBox.Width
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/WafermapControl/WafermapTools.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace fratte.at.WafermapDisplay
8 | {
9 | class WafermapTools
10 | {
11 | public static int[,] scaleArray(int[,]data, int scale){
12 | // Create the scaled array
13 | int[,] newdata = new int[(int)Math.Ceiling((double)data.GetLength(0) / (double)scale), (int)Math.Ceiling((double)data.GetLength(1) / (double)scale)];
14 | // Fill the array
15 | int temp = newdata.GetLength(0);
16 | int temp1 = newdata.GetLength(1);
17 | for (int x = 0; x < temp; x++)
18 | {
19 | for (int y = 0; y < temp1; y++)
20 | {
21 | // Slice array
22 | newdata[x, y] = getMaxArray(data,x,y,scale);
23 | }
24 | }
25 | return newdata;
26 | }
27 |
28 | private static int getMaxArray(int[,] data, int xFrom, int yFrom, int size){
29 | int temp = data.GetLength(0);
30 | int temp1 = data.GetLength(1);
31 | int max = 0;
32 |
33 | if (xFrom + size < temp)
34 | temp = xFrom + size;
35 | if (yFrom + size < temp1)
36 | temp1 = yFrom + size;
37 |
38 | for (int x = xFrom; x < temp; x++)
39 | {
40 | for (int y = yFrom; y < temp1; y++)
41 | {
42 | if (data[x, y] > max)
43 | {
44 | max = data[x, y];
45 | }
46 | }
47 | }
48 | return max;
49 | }
50 |
51 | public double getYield(int[,] data, int[] goodBins, int[] ignoreBins)
52 | {
53 | double y = -1.00;
54 | int total = 0;
55 | int good = 0;
56 | foreach (int bin in data)
57 | {
58 | if (!ignoreBins.Contains(bin))
59 | {
60 | total += 1;
61 | if (goodBins.Contains(bin))
62 | {
63 | good += 1;
64 | }
65 | }
66 | }
67 | y = (double)good / (double)total;
68 | return y;
69 | }
70 | }
71 |
72 |
73 |
74 | }
75 |
--------------------------------------------------------------------------------
/WafermapDisplay.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {303C3301-3E16-4E88-991B-68AD9D66B11C}
8 | Library
9 | Properties
10 | fratte.at.WafermapDisplay
11 | WafermapDisplay
12 | v4.5
13 | 512
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | UserControl
53 |
54 |
55 | Wafermap.cs
56 |
57 |
58 |
59 | ResXFileCodeGenerator
60 | Resources.Designer.cs
61 | Designer
62 |
63 |
64 | True
65 | Resources.resx
66 | True
67 |
68 |
69 | Wafermap.cs
70 |
71 |
72 | SettingsSingleFileGenerator
73 | Settings.Designer.cs
74 |
75 |
76 | True
77 | Settings.settings
78 | True
79 |
80 |
81 |
82 |
83 |
84 |
85 |
92 |
--------------------------------------------------------------------------------
/bin/Debug/WafermapDisplay.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/bin/Debug/WafermapDisplay.dll
--------------------------------------------------------------------------------
/bin/Debug/WafermapDisplay.dll.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/bin/Debug/WafermapDisplay.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/bin/Debug/WafermapDisplay.pdb
--------------------------------------------------------------------------------
/obj/Debug/DesignTimeResolveAssemblyReferences.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/DesignTimeResolveAssemblyReferences.cache
--------------------------------------------------------------------------------
/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
--------------------------------------------------------------------------------
/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
--------------------------------------------------------------------------------
/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
--------------------------------------------------------------------------------
/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
--------------------------------------------------------------------------------
/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
--------------------------------------------------------------------------------
/obj/Debug/WAfermapDisplay.csproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 | c:\users\florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\bin\Debug\WAfermapDisplay.pdb
2 | c:\users\florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\obj\Debug\WAfermapDisplay.csproj.GenerateResource.Cache
3 | c:\users\florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\obj\Debug\WAfermapDisplay.pdb
4 | C:\Users\Florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\obj\Debug\fratte.at.WafermapDisplay.Properties.Resources.resources
5 | C:\Users\Florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\obj\Debug\fratte.at.WafermapDisplay.Wafermap.resources
6 | C:\Users\Florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\bin\Debug\WafermapDisplay.dll.config
7 | C:\Users\Florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\bin\Debug\WafermapDisplay.dll
8 | C:\Users\Florian\documents\visual studio 2013\Projects\WAfermapDisplay\WAfermapDisplay\obj\Debug\WafermapDisplay.dll
9 |
--------------------------------------------------------------------------------
/obj/Debug/WAfermapDisplay.csproj.GenerateResource.Cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/WAfermapDisplay.csproj.GenerateResource.Cache
--------------------------------------------------------------------------------
/obj/Debug/WafermapDisplay.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/WafermapDisplay.dll
--------------------------------------------------------------------------------
/obj/Debug/WafermapDisplay.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/WafermapDisplay.pdb
--------------------------------------------------------------------------------
/obj/Debug/fratte.at.WafermapDisplay.Properties.Resources.resources:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/fratte.at.WafermapDisplay.Properties.Resources.resources
--------------------------------------------------------------------------------
/obj/Debug/fratte.at.WafermapDisplay.Wafermap.resources:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/8forbidden/WafermapDisplay/f9f28c68cef344d87cea81086725ac98e0831c91/obj/Debug/fratte.at.WafermapDisplay.Wafermap.resources
--------------------------------------------------------------------------------