** Updated **
Mit diesen Funktionen kann man jederzeit die aktuelle Breite, Höhe oder Tiefe eines Meshes herausfinden. Als Parameter einfach das Entity-Handle angeben. Funktioniert auch bei Meshes, die Unterobjekte (Childs) haben.
Beispiel:
meshBreite# = GetMeshWidth(MyMesh)
meshHöhe# = GetMeshHeight(MyMesh)
meshTiefe# = GetMeshDepth(MyMesh)
Am einfachsten ist es, wenn ihr diesen Code als separate Datei speichert und mittels Include einbindet. Dann stehen euch die Funktionen zur Verfügung und euer eigentlicher Code bleibt schön sauber.
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN]
Function GetMeshWidth#(Obj%) Local surf%,i%,j% minx# = 10000 maxx# = -10000
If CountChildren(Obj) > 0 For h = 1 To CountChildren(Obj) Child% = GetChild(Obj,h) For i = 1 To CountSurfaces(Child) surf = GetSurface(Child,i) For j = 0 To CountVertices(surf)-1 If VertexX(surf,j)<minx Then minx=VertexX(surf,j) If VertexX(surf,j)>maxx Then maxx=VertexX(surf,j) Next Next Next Return (Abs(maxx-minx) * EntityScaleX(Obj)) End If For i = 1 To CountSurfaces(Obj) surf = GetSurface(Obj,i) For j = 0 To CountVertices(surf)-1 If VertexX(surf,j)<minx Then minx=VertexX(surf,j) If VertexX(surf,j)>maxx Then maxx=VertexX(surf,j) Next Next
Return (Abs(maxx-minx) * EntityScaleX(Obj)) End Function
Function GetMeshHeight#(Obj%) Local surf%,i%,j% miny# = 10000 maxy# = -10000
If CountChildren(Obj) > 0 For h = 1 To CountChildren(Obj) Child% = GetChild(Obj,h) For i = 1 To CountSurfaces(Child) surf = GetSurface(Child,i) For j = 0 To CountVertices(surf)-1 If VertexY(surf,j)<miny Then miny=VertexY(surf,j) If VertexY(surf,j)>maxy Then maxy=VertexY(surf,j) Next Next Next Return (Abs(maxy-miny) * EntityScaleY(Obj)) End If
For i = 1 To CountSurfaces(Obj) surf = GetSurface(Obj,i) For j = 0 To CountVertices(surf)-1 If VertexY(surf,j)<miny Then miny=VertexY(surf,j) If VertexY(surf,j)>maxy Then maxy=VertexY(surf,j) Next Next
Return (Abs(maxy-miny) * EntityScaleY(Obj)) End Function
Function GetMeshDepth#(Obj%) Local surf%,i%,j% minz# = 10000 maxz# = -10000
If CountChildren(Obj) > 0 For h = 1 To CountChildren(Obj) Child% = GetChild(Obj,h) For i = 1 To CountSurfaces(Child) surf = GetSurface(Child,i) For j = 0 To CountVertices(surf)-1 If VertexZ(surf,j)<minz Then minz=VertexZ(surf,j) If VertexZ(surf,j)>maxz Then maxz=VertexZ(surf,j) Next Next Next Return (Abs(maxz-minz) * EntityScaleZ(Obj)) End If
For i = 1 To CountSurfaces(Obj) surf = GetSurface(Obj,i) For j = 0 To CountVertices(surf)-1 If VertexZ(surf,j)<minz Then minz=VertexZ(surf,j) If VertexZ(surf,j)>maxz Then maxz=VertexZ(surf,j) Next Next
Return (Abs(maxz-minz) * EntityScaleZ(Obj)) End Function
Function EntityScaleX#(Obj%) Local vx#,vy#,vz# vx = GetMatElement(Obj, 0, 0) vy = GetMatElement(Obj, 0, 1) vz = GetMatElement(Obj, 0, 2) Return (Sqr(vx*vx + vy*vy + vz*vz)) End Function
Function EntityScaleY#(Obj%) Local vx#,vy#,vz# vx = GetMatElement(Obj, 1, 0) vy = GetMatElement(Obj, 1, 1) vz = GetMatElement(Obj, 1, 2) Return (Sqr(vx*vx + vy*vy + vz*vz)) End Function
Function EntityScaleZ#(Obj%) Local vx#,vy#,vz# vx = GetMatElement(Obj, 2, 0) vy = GetMatElement(Obj, 2, 1) vz = GetMatElement(Obj, 2, 2) Return (Sqr(vx*vx + vy*vy + vz*vz)) End Function
|