|
1 | 1 | (******************************************************************************)
|
2 | 2 | (* Wave function collapse (tile model) 17.01.2024 *)
|
3 | 3 | (* *)
|
4 |
| -(* Version : 0.06 *) |
| 4 | +(* Version : 0.07 *) |
5 | 5 | (* *)
|
6 | 6 | (* Author : Uwe Schächterle (Corpsman) *)
|
7 | 7 | (* *)
|
|
29 | 29 | (* 0.04 - Add feature stop on miss *)
|
30 | 30 | (* 0.05 - Export as PNG *)
|
31 | 31 | (* 0.06 - Export of big images *)
|
| 32 | +(* 0.07 - show grid option *) |
32 | 33 | (* *)
|
33 | 34 | (******************************************************************************)
|
34 | 35 | // Inspired by https://www.youtube.com/watch?v=rI_y2GAlQFM
|
|
53 | 54 |
|
54 | 55 | TForm1 = Class(TForm)
|
55 | 56 | Button1: TButton;
|
| 57 | + Button10: TButton; |
| 58 | + Button11: TButton; |
56 | 59 | Button2: TButton;
|
57 | 60 | Button3: TButton;
|
58 | 61 | Button4: TButton;
|
|
64 | 67 | CheckBox1: TCheckBox;
|
65 | 68 | CheckBox2: TCheckBox;
|
66 | 69 | CheckBox3: TCheckBox;
|
| 70 | + CheckBox4: TCheckBox; |
67 | 71 | Edit1: TEdit;
|
68 | 72 | Edit2: TEdit;
|
69 | 73 | Edit3: TEdit;
|
|
77 | 81 | Label1: TLabel;
|
78 | 82 | Label2: TLabel;
|
79 | 83 | Label3: TLabel;
|
| 84 | + OpenDialog1: TOpenDialog; |
80 | 85 | OpenDialog2: TOpenDialog;
|
81 | 86 | OpenPictureDialog1: TOpenPictureDialog;
|
82 | 87 | PaintBox1: TPaintBox;
|
83 | 88 | SaveDialog1: TSaveDialog;
|
84 | 89 | SaveDialog2: TSaveDialog;
|
| 90 | + SaveDialog3: TSaveDialog; |
85 | 91 | ScrollBox1: TScrollBox;
|
| 92 | + Procedure Button10Click(Sender: TObject); |
| 93 | + Procedure Button11Click(Sender: TObject); |
86 | 94 | Procedure Button1Click(Sender: TObject);
|
87 | 95 | Procedure Button2Click(Sender: TObject);
|
88 | 96 | Procedure Button3Click(Sender: TObject);
|
|
94 | 102 | Procedure Button9Click(Sender: TObject);
|
95 | 103 | Procedure CheckBox2Click(Sender: TObject);
|
96 | 104 | Procedure CheckBox3Click(Sender: TObject);
|
| 105 | + Procedure CheckBox4Click(Sender: TObject); |
97 | 106 | Procedure Edit1KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
|
98 | 107 | Procedure Edit2KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
|
99 | 108 | Procedure Edit3KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
|
100 | 109 | Procedure Edit4KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
|
101 | 110 | Procedure Edit5KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
|
| 111 | + Procedure Edit6KeyPress(Sender: TObject; Var Key: char); |
102 | 112 | Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
|
103 | 113 | Procedure FormCreate(Sender: TObject);
|
104 | 114 | Procedure FormDestroy(Sender: TObject);
|
|
138 | 148 |
|
139 | 149 | Procedure TForm1.FormCreate(Sender: TObject);
|
140 | 150 | Begin
|
141 |
| - caption := 'Wave Function Collapse Demo ver. 0.06'; |
| 151 | + caption := 'Wave Function Collapse Demo ver. 0.07'; |
142 | 152 | // Aufräumen, der Entwickler Hilfen
|
143 | 153 | edit1.free;
|
144 | 154 | edit2.free;
|
|
240 | 250 | End;
|
241 | 251 | End;
|
242 | 252 |
|
| 253 | +Procedure TForm1.Button10Click(Sender: TObject); |
| 254 | +Var |
| 255 | + sl: TStringList; |
| 256 | + i, j: Integer; |
| 257 | +Begin |
| 258 | + If SaveDialog3.Execute Then Begin |
| 259 | + sl := TStringList.Create; |
| 260 | + sl.Clear; |
| 261 | + sl.add(edit6.text); |
| 262 | + sl.add(edit7.text); |
| 263 | + For i := 0 To high(wfc.Grid) Do Begin |
| 264 | + For j := 0 To high(wfc.Grid[i]) Do Begin |
| 265 | + If wfc.Grid[i, j].Forced Then Begin |
| 266 | + sl.Add(format('%d %d %d', [i, j, wfc.Grid[i, j].Index])); |
| 267 | + End; |
| 268 | + End; |
| 269 | + End; |
| 270 | + sl.SaveToFile(SaveDialog3.FileName); |
| 271 | + sl.free; |
| 272 | + End; |
| 273 | +End; |
| 274 | + |
| 275 | +Procedure TForm1.Button11Click(Sender: TObject); |
| 276 | +Var |
| 277 | + sl: TStringList; |
| 278 | + i: Integer; |
| 279 | + sa: TStringArray; |
| 280 | + x, y, z: LongInt; |
| 281 | +Begin |
| 282 | + If OpenDialog1.Execute Then Begin |
| 283 | + sl := TStringList.Create; |
| 284 | + sl.LoadFromFile(OpenDialog1.FileName); |
| 285 | + edit6.Text := sl[0]; |
| 286 | + edit7.Text := sl[1]; |
| 287 | + Button3.Click; |
| 288 | + For i := 2 To sl.count - 1 Do Begin |
| 289 | + sa := sl[i].Split(' '); |
| 290 | + x := strtoint(sa[0]); |
| 291 | + y := strtoint(sa[1]); |
| 292 | + z := strtoint(sa[2]); |
| 293 | + wfc.Grid[x, y].Forced := true; |
| 294 | + wfc.Grid[x, y].Index := z; |
| 295 | + End; |
| 296 | + PaintBox1.Invalidate; |
| 297 | + sl.free; |
| 298 | + End; |
| 299 | +End; |
| 300 | + |
243 | 301 | Procedure TForm1.Button2Click(Sender: TObject);
|
244 | 302 | Begin
|
245 | 303 | // Load System
|
|
370 | 428 | PaintBox1.Invalidate;
|
371 | 429 | End;
|
372 | 430 |
|
| 431 | +Procedure TForm1.CheckBox4Click(Sender: TObject); |
| 432 | +Begin |
| 433 | + PaintBox1.Invalidate; |
| 434 | +End; |
| 435 | + |
373 | 436 | Procedure TForm1.Edit1KeyUp(Sender: TObject; Var Key: Word; Shift: TShiftState);
|
374 | 437 | Var
|
375 | 438 | index: integer;
|
|
410 | 473 | Images[index].Prop := strtointdef(Tedit(sender).Text, 0);
|
411 | 474 | End;
|
412 | 475 |
|
| 476 | +Procedure TForm1.Edit6KeyPress(Sender: TObject; Var Key: char); |
| 477 | +Begin |
| 478 | + If key = #13 Then button3.Click; |
| 479 | +End; |
| 480 | + |
413 | 481 | Procedure TForm1.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
|
414 | 482 | Begin
|
415 | 483 | wfc.cancel := true;
|
|
630 | 698 | aCanvas.Draw(i * Images[0].Bitmap.Width, j * Images[0].Bitmap.Height, Images[wfc.Grid[i, j].Index].Bitmap);
|
631 | 699 | End;
|
632 | 700 | If (wfc.Grid[i, j].Forced And CheckBox2.Checked) Or
|
633 |
| - (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) |
| 701 | + (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) Or |
| 702 | + (CheckBox4.Checked) |
634 | 703 | Then Begin
|
635 | 704 | aCanvas.Pen.Color := clred;
|
636 | 705 | If (CheckBox3.Checked And (wfc.InvalidPos.X = i) And (wfc.InvalidPos.Y = j)) Then Begin
|
637 | 706 | aCanvas.Pen.Color := clblue;
|
638 | 707 | End;
|
| 708 | + If CheckBox4.Checked Then Begin |
| 709 | + aCanvas.Pen.Color := cllime; |
| 710 | + End; |
639 | 711 | aCanvas.MoveTo((i + 0) * Images[0].Bitmap.Width, (j + 0) * Images[0].Bitmap.Height);
|
640 |
| - |
641 | 712 | aCanvas.LineTo((i + 1) * Images[0].Bitmap.Width - 1, (j + 0) * Images[0].Bitmap.Height);
|
642 | 713 | aCanvas.LineTo((i + 1) * Images[0].Bitmap.Width - 1, (j + 1) * Images[0].Bitmap.Height - 1);
|
643 | 714 | aCanvas.LineTo((i + 0) * Images[0].Bitmap.Width, (j + 1) * Images[0].Bitmap.Height - 1);
|
|
0 commit comments