请大侠们讨论一下CAD软件中图形类的设计(100分)

  • 主题发起人 主题发起人 游少爷
  • 开始时间 开始时间

游少爷

Unregistered / Unconfirmed
GUEST, unregistred user!
在CAD软件中,可以画一些基本的图形,如线、矩形、圆、多边形等,如果是这些规则的图形,
则类很好设计,比如线、矩形就保存两点端点的值,圆保存圆心和半径。
但在软件中,可以对这些图形进行许多操作,比如节点编辑、圆角、倒角,
使得这些图形变形了,那保存那些信息显然是不够的,类应该如何设计呢?
 
帮帮忙啊,大侠们。
 
我们的方法是建立一个虚类
TCadPt = class
dX,dY : double;
end;

TCADOBJ = class
PtList : TList; //存放TCadPt类
end;

在派生出很多的子类:
TCADLine = class(TCadObj)
TCADPoly = class(TCadObj)
TCADBezier = class(TCadObj)

图形对象的形状由PtList中的点决定(当然要转化为屏幕坐标),在画一些曲线的时候,在
临时生成画图的点序列,如贝塞尔和样条曲线等,但是地物的基础控制点是不变的,一直在
PtList中.

多讨论



 
可我的方法是建立一个图形抽象类,然后其它图形从该类继承。
TGlyph = class
private
FSelected: Boolean;
public
procedure Draw(Canvas: TCanvas); virtual; abstract;
procedure PtIntersect(p: TPoint); virtual; abstract;
procedure Select; virtual;
procedure UnSelect; virtual;
property Selected read FSelected write FSelected;
end;

TLine = class(TGlyph)
private
FOriginPt: TPoint;
FEndPt: TPoint;
public
constructor Create(AOriginPt, AEndPt: TPoint);
procedure Draw(Canvas: TCanvas); override;
procedure PtIntersect(p: TPoint); override;
property OriginPt: TPoint read FOrignPt write FOriginPt;
property EndPt: TPoint read FEndPt write FEndPt;
end;

TRectangle = class(TGlyph)
....
...

TCircle = class(TGlyph)
....
...


这样有什么不好的地方吗?


 
当然还有一个不规则的图形类,由那些基本的图形组成的。
 
我觉得我们的构思是一样的
 
接受答案了.
 
后退
顶部