|
1 | 1 | (******************************************************************************)
|
2 | 2 | (* Wave function collapse (tile model) 17.01.2024 *)
|
3 | 3 | (* *)
|
4 |
| -(* Version : 0.05 *) |
| 4 | +(* Version : 0.06 *) |
5 | 5 | (* *)
|
6 | 6 | (* Author : Uwe Schächterle (Corpsman) *)
|
7 | 7 | (* *)
|
|
28 | 28 | (* 0.03 - Cleanup *)
|
29 | 29 | (* 0.04 - Add feature stop on miss *)
|
30 | 30 | (* 0.05 - Export as PNG *)
|
| 31 | +(* 0.06 - Export of big images *) |
31 | 32 | (* *)
|
32 | 33 | (******************************************************************************)
|
33 | 34 | // Inspired by https://www.youtube.com/watch?v=rI_y2GAlQFM
|
|
119 | 120 |
|
120 | 121 | Procedure OnCollapseCell(Sender: TObject);
|
121 | 122 | Procedure OnRenderTooLong(Sender: TObject);
|
| 123 | + Procedure RenderWFCToCanvas(Const aCanvas: TCanvas); |
122 | 124 | public
|
123 | 125 |
|
124 | 126 | End;
|
|
136 | 138 |
|
137 | 139 | Procedure TForm1.FormCreate(Sender: TObject);
|
138 | 140 | Begin
|
139 |
| - caption := 'Wave Function Collapse Demo ver. 0.05'; |
| 141 | + caption := 'Wave Function Collapse Demo ver. 0.06'; |
140 | 142 | // Aufräumen, der Entwickler Hilfen
|
141 | 143 | edit1.free;
|
142 | 144 | edit2.free;
|
|
199 | 201 | End;
|
200 | 202 |
|
201 | 203 | Procedure TForm1.PaintBox1Paint(Sender: TObject);
|
202 |
| -Var |
203 |
| - i, j: Integer; |
204 | 204 | Begin
|
205 | 205 | // Clear Back
|
206 |
| - PaintBox1.Canvas.Brush.Color := clRed; |
207 |
| - PaintBox1.Canvas.Rectangle(-1, -1, PaintBox1.Width + 1, PaintBox1.Height + 1); |
208 |
| - If Not assigned(wfc.Grid) Then exit; |
209 |
| - For i := 0 To high(wfc.Grid) Do Begin |
210 |
| - For j := 0 To high(wfc.Grid[i]) Do Begin |
211 |
| - If wfc.Grid[i, j].Index <> -1 Then Begin |
212 |
| - PaintBox1.Canvas.Draw(i * Images[0].Bitmap.Width, j * Images[0].Bitmap.Height, Images[wfc.Grid[i, j].Index].Bitmap); |
213 |
| - End; |
214 |
| - If (wfc.Grid[i, j].Forced And CheckBox2.Checked) Or |
215 |
| - (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) |
216 |
| - Then Begin |
217 |
| - PaintBox1.Canvas.Pen.Color := clred; |
218 |
| - If (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) Then Begin |
219 |
| - PaintBox1.Canvas.Pen.Color := clblue; |
220 |
| - End; |
221 |
| - PaintBox1.Canvas.MoveTo((i + 0) * Images[0].Bitmap.Width, (j + 0) * Images[0].Bitmap.Height); |
222 |
| - |
223 |
| - PaintBox1.Canvas.LineTo((i + 1) * Images[0].Bitmap.Width - 1, (j + 0) * Images[0].Bitmap.Height); |
224 |
| - PaintBox1.Canvas.LineTo((i + 1) * Images[0].Bitmap.Width - 1, (j + 1) * Images[0].Bitmap.Height - 1); |
225 |
| - PaintBox1.Canvas.LineTo((i + 0) * Images[0].Bitmap.Width, (j + 1) * Images[0].Bitmap.Height - 1); |
226 |
| - PaintBox1.Canvas.LineTo((i + 0) * Images[0].Bitmap.Width, (j + 0) * Images[0].Bitmap.Height); |
227 |
| - End; |
228 |
| - End; |
229 |
| - End; |
| 206 | + paintbox1.Canvas.Brush.Color := clRed; |
| 207 | + paintbox1.Canvas.Rectangle(-1, -1, PaintBox1.Width + 1, PaintBox1.Height + 1); |
| 208 | + RenderWFCToCanvas(PaintBox1.Canvas); |
230 | 209 | End;
|
231 | 210 |
|
232 | 211 | Procedure TForm1.Button1Click(Sender: TObject);
|
|
360 | 339 | PaintBox1.Invalidate;
|
361 | 340 | Application.ProcessMessages;
|
362 | 341 | End;
|
363 |
| - bm.Canvas.CopyRect(rect(0, 0, bm.Width, bm.Height), PaintBox1.Canvas, rect(0, 0, bm.Width, bm.Height)); |
| 342 | + // bm.Canvas.CopyRect(rect(0, 0, bm.Width, bm.Height), PaintBox1.Canvas, rect(0, 0, bm.Width, bm.Height)); |
| 343 | + RenderWFCToCanvas(bm.Canvas); |
364 | 344 | If f Then Begin
|
365 | 345 | CheckBox2.Checked := true;
|
366 | 346 | PaintBox1.Invalidate;
|
|
639 | 619 | Button6.Enabled := true;
|
640 | 620 | End;
|
641 | 621 |
|
| 622 | +Procedure TForm1.RenderWFCToCanvas(Const aCanvas: TCanvas); |
| 623 | +Var |
| 624 | + i, j: Integer; |
| 625 | +Begin |
| 626 | + If Not assigned(wfc.Grid) Then exit; |
| 627 | + For i := 0 To high(wfc.Grid) Do Begin |
| 628 | + For j := 0 To high(wfc.Grid[i]) Do Begin |
| 629 | + If wfc.Grid[i, j].Index <> -1 Then Begin |
| 630 | + aCanvas.Draw(i * Images[0].Bitmap.Width, j * Images[0].Bitmap.Height, Images[wfc.Grid[i, j].Index].Bitmap); |
| 631 | + End; |
| 632 | + If (wfc.Grid[i, j].Forced And CheckBox2.Checked) Or |
| 633 | + (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) |
| 634 | + Then Begin |
| 635 | + aCanvas.Pen.Color := clred; |
| 636 | + If (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) Then Begin |
| 637 | + aCanvas.Pen.Color := clblue; |
| 638 | + End; |
| 639 | + aCanvas.MoveTo((i + 0) * Images[0].Bitmap.Width, (j + 0) * Images[0].Bitmap.Height); |
| 640 | + |
| 641 | + aCanvas.LineTo((i + 1) * Images[0].Bitmap.Width - 1, (j + 0) * Images[0].Bitmap.Height); |
| 642 | + aCanvas.LineTo((i + 1) * Images[0].Bitmap.Width - 1, (j + 1) * Images[0].Bitmap.Height - 1); |
| 643 | + aCanvas.LineTo((i + 0) * Images[0].Bitmap.Width, (j + 1) * Images[0].Bitmap.Height - 1); |
| 644 | + aCanvas.LineTo((i + 0) * Images[0].Bitmap.Width, (j + 0) * Images[0].Bitmap.Height); |
| 645 | + End; |
| 646 | + End; |
| 647 | + End; |
| 648 | + |
| 649 | +End; |
| 650 | + |
642 | 651 | Procedure TForm1.Button4Click(Sender: TObject);
|
643 | 652 | Begin
|
644 | 653 | If SaveDialog1.Execute Then Begin
|
|
0 commit comments