关于矢量图组的区域缩放(0分)

  • 主题发起人 主题发起人 DickWu
  • 开始时间 开始时间
D

DickWu

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个可在运行时直接用鼠标拖动4个顶点和各条边的TSoPanel透明类,
类中保存了2组点的坐标(坐标是相对TSoPanle的父窗口的),TSoPanel
将这些点按顺序在父窗口的Canvas上绘制成2个多边型。
我的问题是:如何在运行的时候,当拖动该TSoPanel类的边或者顶点时,
对这2个多边型进行缩放?? 给个代码历程好不好?

我在这里问了不少问题,大部分问题没有解答,而且也不知道怎么收回分数,
为此浪费了我很多可用积分。所以现在只好先0分,问题解决后再发分,OK?
(千层雪??? 帮忙看看啊)

 
大家帮帮忙阿.
千堆雪? 在嘛? 也帮我看看?

今天我写了了如下的函数转换:
procedure ScalePoint(sA,sB,dA,dB:TPoint;var rA:TPoint);
var
aScale : single;
begin
if (rA.x - sA.x)<>0 then
begin
aScale := (sB.x - sA.x) / (rA.x - sA.x);
rA.x:= Round(((dB.x - dA.x)+aScale*dA.x)/aScale);
end
else
rA.x := dA.x;

if (rA.y - sA.y)<>0 then
begin
aScale := (sB.y - sA.y) / (rA.y - sA.y);
rA.y:= Round(((dB.y - dA.y)+aScale*dA.y)/aScale);
end
else
rA.y := dA.y;
end;
参数说明:
前面2个点是TSoPanel在Size前的左上和右下角的坐标,
后面2个点是Size后TSoPanel的左上和右下角的坐标,
最后一个可变参数rA是Size前TSoPanel那保存的某点的坐标。
在TSoPanel中有一个方法DoSizeChange,循环对内部所有数据点调用该函数。
我在TSoPanel的MouseMove中不断调用TSoPanel的DoSizeChange,

多拖动几次边框做大小位置的改变后,内部的多边形变形了,
估计可能是坐标在拖动过程中ScalePoint中浮点和整数转换的
误差造成的,当然,如果在MouseMove里不调用,只放在MouseUp
里调用,能减少转换次数,改善这个现象,但问题还是存在。

谁能解决这个阿??,我出300分,行嘛??

 
没人解答,自己琢磨着凑合着用,取消本帖
 
我不知道你做这个类的用途,但是如果你想做像画图里面那样的,有其他的办法,具体的过程大概是这样:
1)确定起点,当鼠标移动时,从起点到当前点做一矩形,
2)如果当前画的线和以前的有重合,采取异或运算,
3)鼠标松开时,显示矩形,
具体的代码我记不清了,如果你是这个意思,你可以给我E_Mail,我可以为你查查书
 
这个类保存2个多边形,并在上面画出来,象一个显示多边形的画板,
只是可能需要在运行的时候用鼠标做拉伸和缩放。
我发现在用上面的函数做运算的时候,多拉伸几次就变了形
 
后退
顶部