Ciao a tutti.
Per rendere portabile una cosina che ho scritto in Delphi qualche anno fa, mi sono scontrato in una piccola conversione delle API di Windows.
rgn := CreatePolygonRgn(p, 4, ALTERNATE);
assert(rgn <> 0);
Result := RectInRegion(rgn, rect);
DeleteObject(rgn);
Si parla di vedere se un rettangolo è contenuto in un'altro (alla base dell'algoritmo c'è questa esigenza).
Esistono alcune API già convertite ... quella in rosso (RectInRegion) no... ho googlato tutta ieri sera, e pensavo di convertire il codice Wine in FreePascal/LCL. Ho iniziato a fare l'analisi del codice di Wine, ma devo convertirne mezzo ... e non ne ho voglia (troppo codice da debugare poi ... per una singola funzione ...).
Suggerimenti e idee?
Se non esiste l'api portabile di riferimento, come devo convertire il codice?
Funzione :
function TShapeRelation.intersectsSeg(rect :TRect; index :Integer) :Boolean;
var
numNodes :Integer;
rgn :THandle;
p :array[0..3] of TPoint;
p1, p2 :TPoint;
begin
Result := False;
if self = nil then
exit;
if FDst = nil then
exit;
if (FDst.Shape = nil) then
exit;
numNodes := FNodes.Count;
if index = 0 then
p1 := FSrc.Point
else
p1 := TCPoint(FNodes[index - 1]).Point;
if index = numNodes then
p2 := FDst.point
else
p2 := TCPoint(FNodes[index]).Point;
CalcSafeBox(p1, p2, handleSize, p);
rgn := CreatePolygonRgn(p, 4, ALTERNATE);
assert(rgn <> 0);
Result := RectInRegion(rgn, rect);
DeleteObject(rgn);
end;
Questa applicazione avevo intenzione di rilasciarla su repository del forum.
Magari un giorno lo si potrà integrare con lazarus per come tool grafico (Delphi Architect ...), ma questo lo farà qualcun'altro :D
Grassssie.