H
hug
Unregistered / Unconfirmed
GUEST, unregistred user!
TFieldInfo = record
FieldId: string;
FieldPoint: array of TPoint;
MAxMinPointArr:Array [0..1] of Tpoint;
TotalWidth:integer;
end;
type
TDisplayPoint= array of Tpoint;
type
TFFieldsInfo = class
do
tArr: array of TFieldInfo;
PrimalDotArr: array of TFieldInfo;
DisplayArr:array of Tpoint;
DisplayArrSize:integer;
我用数组保存图形的轮廓坐标,多个图形保存在纪录里面,
我在屏幕上划出了他们,由于需要,必须在屏幕上重新排列
他们的位置,排列后我想从屏幕的左上角(也就是从X德的最小值开始),
把所有轮廓的坐标放到相应的书组里面,
如从左边数第一个轮廓坐标放到
PrimalDotArr[0].FieldPoint[index]里面,
第2 个放到
PrimalDotArr[1].FieldPoint[index]里面,
.
.
.
其中MAxMinPointArr[index]保存的轮廓的左右边缘的点
我的代码如下:
经请各位帮我改一下:谢谢
procedure TLayoutForm.SpeedButton1Click(Sender: TObject);
var
MAxMinIndex,Index,DotIndex,NextIndex,NextDotIndex:integer;
BestrowFlag:boolean;
LftPoint:Tpoint;
IndexArray:Array of integer;
begin
LftPoint.X:=10000000;
Index:=0;
do
tIndex:=0;
BestrowFlag:=false;
MAxMinIndex:=0;
for Index:=0 to High(FFieldsInfo.DotArr)do
if LftPoint.X>FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X then
LftPoint.X:=FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X;//找到最左边的轮廓边缘
NextDotIndex:=Index;
setLength(IndexArray,MaxMinIndex+1);
IndexArray[MaxMinIndex]:=NextDotIndex;
LftPoint.X:=10000000;
for Index:=0 to High(FFieldsInfo.DotArr)do
if (LftPoint.X>FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X)
and(FFieldsInfo.DotArr[IndexArray[MaxMinIndex]].MAxMinPointArr[1].X
<FFieldsInfo.DotArr[Index].MaxMinPointArr[0].X) then
begin
LftPoint.X:=FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X;
NextDotIndex:=Index;
IndexArray[MAxMinIndex]:=NextDotIndex;
Inc(MAxMinIndex);
setLength(IndexArray,MaxMinIndex);
end;
setLength(FFieldsInfo.PrimalDotArr,MaxMinIndex);
setLength(FFieldsInfo.PrimalDotArr[MaxMinIndex-1].FieldPoint,
High(FFieldsInfo.DotArr[NextDotIndex].fieldpoint)+1);
fordo
tIndex:=0 to High(FFieldsInfo.DotArr[NextDotIndex].fieldpoint)do
begin
FFieldsInfo.PrimalDotArr[MaxMinIndex].FieldPoint[DotIndex].X
:= FFieldsInfo.DotArr[NextDotIndex].FieldPoint[DotIndex].X;
FFieldsInfo.PrimalDotArr[MaxMinIndex].FieldPoint[DotIndex].Y
:= FFieldsInfo.DotArr[NextDotIndex].FieldPoint[DotIndex].Y;
{if (FFieldsInfo.DotArr[Index].MAxMinPointArr[1].X>=
FFieldsInfo.DotArr[Index+1].MAxMinPointArr[0].X )
and(FFieldsInfo.DotArr[Index].MAxMinPointArr[1].Y>=
FFieldsInfo.DotArr[Index+1].MAxMinPointArr[0].Y) then
BestrowFlag:=true;}
end;
//if BestrowFlag then
ShowMessage('图形是否有覆盖!');
end;
FieldId: string;
FieldPoint: array of TPoint;
MAxMinPointArr:Array [0..1] of Tpoint;
TotalWidth:integer;
end;
type
TDisplayPoint= array of Tpoint;
type
TFFieldsInfo = class
do
tArr: array of TFieldInfo;
PrimalDotArr: array of TFieldInfo;
DisplayArr:array of Tpoint;
DisplayArrSize:integer;
我用数组保存图形的轮廓坐标,多个图形保存在纪录里面,
我在屏幕上划出了他们,由于需要,必须在屏幕上重新排列
他们的位置,排列后我想从屏幕的左上角(也就是从X德的最小值开始),
把所有轮廓的坐标放到相应的书组里面,
如从左边数第一个轮廓坐标放到
PrimalDotArr[0].FieldPoint[index]里面,
第2 个放到
PrimalDotArr[1].FieldPoint[index]里面,
.
.
.
其中MAxMinPointArr[index]保存的轮廓的左右边缘的点
我的代码如下:
经请各位帮我改一下:谢谢
procedure TLayoutForm.SpeedButton1Click(Sender: TObject);
var
MAxMinIndex,Index,DotIndex,NextIndex,NextDotIndex:integer;
BestrowFlag:boolean;
LftPoint:Tpoint;
IndexArray:Array of integer;
begin
LftPoint.X:=10000000;
Index:=0;
do
tIndex:=0;
BestrowFlag:=false;
MAxMinIndex:=0;
for Index:=0 to High(FFieldsInfo.DotArr)do
if LftPoint.X>FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X then
LftPoint.X:=FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X;//找到最左边的轮廓边缘
NextDotIndex:=Index;
setLength(IndexArray,MaxMinIndex+1);
IndexArray[MaxMinIndex]:=NextDotIndex;
LftPoint.X:=10000000;
for Index:=0 to High(FFieldsInfo.DotArr)do
if (LftPoint.X>FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X)
and(FFieldsInfo.DotArr[IndexArray[MaxMinIndex]].MAxMinPointArr[1].X
<FFieldsInfo.DotArr[Index].MaxMinPointArr[0].X) then
begin
LftPoint.X:=FFieldsInfo.DotArr[Index].MaxMinPointArr[1].X;
NextDotIndex:=Index;
IndexArray[MAxMinIndex]:=NextDotIndex;
Inc(MAxMinIndex);
setLength(IndexArray,MaxMinIndex);
end;
setLength(FFieldsInfo.PrimalDotArr,MaxMinIndex);
setLength(FFieldsInfo.PrimalDotArr[MaxMinIndex-1].FieldPoint,
High(FFieldsInfo.DotArr[NextDotIndex].fieldpoint)+1);
fordo
tIndex:=0 to High(FFieldsInfo.DotArr[NextDotIndex].fieldpoint)do
begin
FFieldsInfo.PrimalDotArr[MaxMinIndex].FieldPoint[DotIndex].X
:= FFieldsInfo.DotArr[NextDotIndex].FieldPoint[DotIndex].X;
FFieldsInfo.PrimalDotArr[MaxMinIndex].FieldPoint[DotIndex].Y
:= FFieldsInfo.DotArr[NextDotIndex].FieldPoint[DotIndex].Y;
{if (FFieldsInfo.DotArr[Index].MAxMinPointArr[1].X>=
FFieldsInfo.DotArr[Index+1].MAxMinPointArr[0].X )
and(FFieldsInfo.DotArr[Index].MAxMinPointArr[1].Y>=
FFieldsInfo.DotArr[Index+1].MAxMinPointArr[0].Y) then
BestrowFlag:=true;}
end;
//if BestrowFlag then
ShowMessage('图形是否有覆盖!');
end;