关于图元的合并(200分)

  • 主题发起人 主题发起人 mayong
  • 开始时间 开始时间
M

mayong

Unregistered / Unconfirmed
GUEST, unregistred user!
本人一直想编一个小CAD程序,思想是:
1、建立 GObj 由 TObject 派生
2、建立 TLine, TArc......... 由GObj 派生
3、建立 Method: Add, Delete, Pick......
4、一直很顺利
5、把几个图元(如TLine, TArc等)合并为一个图元,没招了

各位看官,给提示一个思路:关于图元的合并
 
改用Windows的Region概念如何?应该可以实现
 
想了一下,如果用Region,无法保存

不如这样,在你的类体系中再加一层,TGraphicManager
用TList之类保存多个TGObj,
一般情况下每个TGraphicManager保存一个TGObj,
如果要合并,就把两个TGraphicManager的List内容合并

如何?
 
肯定要在 GObj 和 图元类之间再加一个类,这个类要有类似TList包容器,
也有GObj特性...
我不知如何设计,使之既能合并图元,也可以再分开
 
找到老乡了,可惜不能给你帮助!
 
我也有这方面的想法,如果你愿意,交个朋友,我与你共同开发如何。
我的email是 zw70@ynmail.com
 
用TList保存对象你不会吗???

把两个TList的内容合并
或者把一个TList的内容拆开
那不是太容易了??
 
提供思路:

从 GObj 派生出 TDrawBlock 类
class TDrawBlock : public GObj
{
... ...
visual void Draw(void);
visual void MoveTo(TPoint aPoint);

TList m_objects;

... ...
};
m_objects 是一个图元的列表;
重载 TDrawObj 的绘制函数 Draw ,移动函数 MoveTo 等函数。
就可以得到合并的图元,也就是图块的重画,移动等操作。
 
type
GGroup=class;

GObj=class
public
function CheckCusorIn(APoint:TPoint):Boolean;virtual;abstract;
procedure DrawObj(ACanvas:TCanvas);virtual;abstract;
procedure ClearObj(ACanvas:TCanvas);virtual;abstract;
constructor Create(AOwner:GGroup);
destructor Destroy;override;
....
end;

GLine=class(GObj)
private
FStart:TPoint;
FEnd:TPoint;
FColor:TColor;
public
procedure DrawObj(ACanvas:TCanvas);override;
procedure ClearObj(ACanvas:TCanvas);override;
function CheckCursorIn(APoint:TPoint):Boolean;override;
published
property StartPoint:TPoint read FStart;
...
end;

GGroup=class(GObj)
private
FObjs:TList;
public
function CheckCursorIn(APoint:TPoint):Boolean;override;
procedure DrawObj(ACanvas:TCanvas);override;
procedure ClearObj(ACanvas:TCanvas);override;
procedure Delete(AObj:GObj);
procedure Insert(AObj:GObj);
procedure BringFront(AObj:GObj);
procedure SendBack(AObj:GObj);
constructor Create(Owner:TComponent);
destructor Destroy;override;
published
....
end;
.
.
.
.
 
谢谢 Hexi 和 Mumin
我似乎有点眉目了
再听听,48小时后本话题结束好吗
 
忘了忘了,应该谢谢大家,
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
871
DelphiTeacher的专栏
D
D
回复
0
查看
945
DelphiTeacher的专栏
D
后退
顶部