Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Floodfill 2018 febr. 12 12:02 #2273

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Köszi szépen, ennyi infó teljesen elég, a többi a fejlesztők dolga. :)
TVC-hez szinte a teljes irodalom itt van a gépemen, készülök feléleszteni a dolgokat egy jó emulátorral. :)
Üdvözlettel:
Gyula

Floodfill 2018 febr. 12 10:47 #2272

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 503
  • Köszönetek: 86
Utána jártam és úgy tűnik a TCanvas.FloodFill nincs kidolgozva a TCanvas Linux-os megvalósításában (üres az eljárás).
Helyette megpróbálhatod a GraphUtil unit-ban található FloodFill eljárást használni, bár ez nálam "range check error" hibát okoz.
Továbbá egy külső komponens ( BGRABitmap ) is szóba jöhet, melyben elvileg van lehetőség az összetett alakzatok kitöltésére . (Ezt most még nem próbáltam, időhiány miatt.)

+ Videoton-TVC-hez van egy könyvem :)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Floodfill 2018 febr. 12 10:47 #2271

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Ja, és eléggé őslénynek is számítok, mert Videoton-TVC géppel kezdtem és BASIC-kel, VT-DOS-ban Turbo Pascal 3.0-lal, Aztec C-vel, FIG Forth nyelvvel, csak ezek után jött az első PC. (Van itt valaki aki emlékszik még a TVC-re?)

Floodfill 2018 febr. 12 10:44 #2270

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Annyit azért hozzátennék az egészhez, hogy nem vagyok profi programozó, infótanár vagyok, szeretem a számítógépes grafikát, és mellesleg hobbiból programozgatok. Ezt korábban TP70-ben tettem, később Delphiben, majd áttértem Windowsról Linuxra és jött a FPC meg a Lazarus. Feltételezem, hogy az operációs rendszerek függvényeiben rejlenek az itt felvetett kérdések is. A floodfill probléma csak azért érdekes, mert átírásnál okoz fejtörést ha a konvertált progi nem működik, meg hát mert nem hagynak nyugodni a nyitott kérdések. Új program írásakor nem gond, használok helyette mást.

Floodfill 2018 febr. 12 10:10 #2269

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Egyszerű koordináta konverziók. Egy 1000x800-as mezőt transzformál a mindenkori canvas méretre.

function x(i:integer):integer;
begin
x:=(i*clientwidth) div 1000;
end;
function y(i:integer):integer;
begin
y:=((i*clientheight) div 800);
end;

Floodfill 2018 febr. 12 10:06 #2268

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Bocs, nem láttam ezt a kommentet. :) A többi kommentemben már válaszoltam.

Floodfill 2018 febr. 12 10:04 #2267

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Sejtettem, hogy az elhagyás nem okoz gondot. :)

Floodfill 2018 febr. 12 10:03 #2266

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Azokat nyugodtan elhagyhatod, elég az argumentumaikat beírni konstansként. Az y() és y() függvények csak relatív koordinátákat állít elő a form méretéből, és ha a formot átméretezzük, a rajz követi a form arányait.

Floodfill 2018 febr. 12 08:32 #2265

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 503
  • Köszönetek: 86
Ha kihagyom őket akkor le tudom fordítani és produkálja amit írtál... töprengek rajta... :)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Floodfill 2018 febr. 12 08:27 #2264

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 503
  • Köszönetek: 86
Hol vannak ezek az x() és y() függvények? Sajátod?
Ezek nélkül nem tudom tesztelni... Habár inkább úgy érzem, hogy valószínűleg semmit nem csinálnak és nincs rájuk szükség...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Floodfill 2018 febr. 11 21:16 #2263

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Egy nagyon lényeges momentumról megfeledkeztem, pedig talán ez a legfontosabb, mert nem véletlen, hogy a Delphi helyett a Lazarust használom: Windows helyett Linuxot használok. :) Lehet hogy "csak" az API hívás a ludas.

Floodfill 2018 febr. 11 19:51 #2262

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
...
pl. egy házikót kirajzoló kód ...
Delphiben működik, Lazarusban hibajelzés ugyan nincs, de nem színezi ki a tetőt:

with canvas do begin
//alap
brush.color:=clblue;
rectangle(0,0,clientwidth,y(650));
brush.color:=clgreen;
rectangle(0,y(650),clientwidth,clientheight);
//fal
brush.color:=clwhite;
rectangle(x(150),y(450),x(350),y(650));
rectangle(x(350),y(450),x(700),y(650));
//ajtó,ablak
rectangle(x(200),y(500),x(300),y(600));
rectangle(x(550),y(500),x(650),y(600));
rectangle(x(400),y(500),x(500),y(650));
//homlokzat,tető
moveto(x(700),y(450));
lineto(x(600),y(300));
lineto(x(250),y(300));
lineto(x(150),y(450));
moveto(x(250),y(300));
lineto(x(350),y(450));
brush.color:=clgray;
floodfill(x(250),y(440),clblack,fsborder);
brush.color:=clred;
floodfill(x(500),y(440),clblack,fsborder);
brush.color:=clblack;
ellipse(x(230),y(370),x(270),y(410));
//kémény
brush.color:=clred;
rectangle(x(400),y(200),x(450),y(300));
end;

Lazarusban csak így működik:

with canvas do begin
//alap
brush.color:=clblue;
rectangle(0,0,clientwidth,y(650));
brush.color:=clgreen;
rectangle(0,y(650),clientwidth,clientheight);
//fal
brush.color:=clwhite;
rectangle(x(150),y(450),x(350),y(650));
rectangle(x(350),y(450),x(700),y(650));
//ajtó,ablak
rectangle(x(200),y(500),x(300),y(600));
rectangle(x(550),y(500),x(650),y(600));
rectangle(x(400),y(500),x(500),y(650));
//tetõ
Brush.Color := clMaroon;
Polygon([Point(x(700),y(450)), Point(x(600),y(300)), Point(x(250),y(300)), Point(x(350),y(450))]);
//homlokzat
Brush.Color := clgray;
Polygon([Point(x(250),y(300)), Point(x(350),y(450)), Point(x(150),y(450))]);
brush.color:=clblack;
ellipse(x(230),y(370),x(270),y(410));
//kémény
brush.color:=clred;
rectangle(x(400),y(200),x(450),y(300));
end;

Itt a polygonra való átírás nem nyűg, de ha a sokszög csúcsai pl. metszéspontok, vagy paraméterezettek, illetve számítottak, akkor már nagyon is nyűg.
Mondjuk ez alapvetően akkor érdekes, ha más forrásból akarok Lazarusba átemelni és kipróbálni egy programot. Új proginál nyilván magam oldom meg.

Floodfill 2018 febr. 11 19:21 #2261

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Szia :)
Jó a kérdés. Eleddig - lévén, hogy Delphiben és Lazarusban próbálkoztam - csak a canvas funkcióival találkoztam, és ezt is azon belül tapasztaltam.
( Itt az ideje, hogy körülnézzek más helyeken is. :) )

Floodfill 2018 febr. 11 19:07 #2260

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 503
  • Köszönetek: 86
Szia!
Több floodfill() eljárás is elérhető különböző helyeken (unit, class stb.), pl. Graph, LclIntf, TCanvas és egyebek...
Pontosan melyikre gondolsz?
+ Mellékelj egy rövid forráskódot ami bemutatja a problémát!
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Floodfill 2018 febr. 11 17:28 #2259

  • kelgyo
  • kelgyo profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Sziasztok
Több régi grafikus programomat írtam át Delphiből Lazarusba, de a neten talált delphis forrásprogramokat is előszeretettel fogalmazom át Lazarusba.
Több programban szerepel a floodfill grafikus funkció, ami a Delphi verzióban hibátlanul működik, Lazarusban se jelez a rendszer hibát, de nem látható semmi eredménye, így feltételezem, hogy a paraméterezésében lehet a hiba, esetleg a floodfill (még) nincs implementálva a Lazarusban. Polygon funkcióra átírva működik, de ha változók vannak a csúcspontokban, akkor elég nyűgös átírni. Keresgéltem a neten a témában, de erről semmit nem találtam.
Nektek mi a tapasztalatotok, illetve mi lehet a megoldás, ha ragaszkodni szeretnék az eredeti funkcióhoz?
Előre is köszönöm.

  • Oldal:
  • 1