我想在Delphi XE5中创建一个三角形网格结构。Delphi中的mesh类结构的最佳方式是什么?
主要TMyMesh类具有通用TObjectLists持有顶点列表,面等
比方说,我要计算财产以后为网格的每个人脸上。我可以让乘坐TMyMesh类照顾这个:
TMyVertex=class(TComponent)
Vertex: TPoint3D;
//other fields and methods
end;
TMyTriangleFace=class(TComponent)
Vertices: Array [0..2] of Integer;
//other fields and methods
end;
TMyMesh=class(TComponent)
ListOfVertices: TObjectList<TMyVertex>;
ListOfTriangleFaces: TObjectList<TMyTriangleFace>;
procedure CreateListOfTriangleFaces;
procedure DoSomethingWithTheFace(const FaceNumber: Integer);
procedure DoSomethingWithAllFaces;
end;
procedure TMyMesh.CreateListOfTriangleFaces;
begin
for i := 0 to NumberOfTriangleFaces-1 do
begin
ListOfTriangleFaces.Add(TMyTraingleFace.Add(nil));
end;
end;
procedure TMyMesh.DoSomethingWithTheFace(const AFaceNumber: Integer);
begin
AVertex:=ListOfVertices[ListOfFaces[AFaceNumber].Vertices[0]];
//do something
end;
procedure TMyMesh.DoSomethingWithAllFaces;
begin
for i := 0 to ListOfFaces.Count-1 do
begin
DoSomethingWithTheFace(i);
end;
end;
或者,我可以将其委托给TMyTriangleFace类:
TMyVertex=class(TComponent)
Vertex: TPoint3D;
//other fields and methods
end;
TMyTriangleFace=class(TComponent)
Vertices: Array [0..2] of Integer;
procedure DoSomethingWithTheFace;
//other fields and methods
end;
TMyMesh=class(TComponent)
ListOfVertices: TObjectList<TMyVertex>;
ListOfTriangleFaces: TObjectList<TMyTriangleFace>;
procedure CreateListOfTriangleFaces;
procedure DoSomethingWithAllFaces;
end;
procedure TMyTriangleFace.DoSomethingWithTheFace;
begin
AVertex:=TMyMesh(Owner).ListOfVertices[Vertices[0]];
//do something
end;
procedure TMyMesh.CreateListOfTriangleFaces;
begin
for i := 0 to NumberOfTriangleFaces-1 do
begin
ListOfTriangleFaces.Add(TMyTraingleFace.Add(Self));
end;
end;
procedure TMyMesh.DoSomethingWithAllFaces;
begin
for i := 0 to ListOfFaces.Count-1 do
begin
ListOfTriangleFaces[i].DoSomethingWithTheFace;
end;
end;
在这种情况下,我需要给TMyTriangleFace类访问ListOfVertices 。我可以通过在CreateListOfTriangleFaces过程中将TMyMesh作为所有者来传递。
在我的理解第二部分应该是更好的代码(德米特法)。但传递TMyMesh作为所有者可能不太好。
这样做的最佳做法是什么?也许这两种解决方案都走错了方向,还有更好的解决方案?
非常感谢!
您想要尽可能使用值。把所有东西都作为一个组件将导致可怕的性能。 –
此问题似乎无关紧要,因为它要求进行代码审查。 Code Review堆栈交换站点最好问这个问题。 –
看起来不像代码审查给我。确实存在大量代码示例,但本质上它是关于OOP方法与数据存储的关系。如果面向对象应该是粒度或简单的方法是有益的。 – Kromster