C# Class LibTessDotNet.Mesh

Inheritance: MeshUtils.Pooled
Mostrar archivo Open project: Ideefixze/TutorialUnityMultiplayer Class Usage Examples

Public Methods

Method Description
AddEdgeVertex ( LibTessDotNet.MeshUtils.Edge eOrg ) : LibTessDotNet.MeshUtils.Edge

Creates a new edge such that eNew == eOrg.Lnext and eNew.Dst is a newly created vertex. eOrg and eNew will have the same left face.

Connect ( LibTessDotNet.MeshUtils.Edge eOrg, LibTessDotNet.MeshUtils.Edge eDst ) : LibTessDotNet.MeshUtils.Edge

Creates a new edge from eOrg->Dst to eDst->Org, and returns the corresponding half-edge eNew. If eOrg->Lface == eDst->Lface, this splits one loop into two, and the newly created loop is eNew->Lface. Otherwise, two disjoint loops are merged into one, and the loop eDst->Lface is destroyed. If (eOrg == eDst), the new face will have only two edges. If (eOrg->Lnext == eDst), the old face is reduced to a single edge. If (eOrg->Lnext->Lnext == eDst), the old face is reduced to two edges.

Delete ( LibTessDotNet.MeshUtils.Edge eDel ) : void

Removes the edge eDel. There are several cases: if (eDel->Lface != eDel->Rface), we join two loops into one; the loop eDel->Lface is deleted. Otherwise, we are splitting one loop into two; the newly created loop will contain eDel->Dst. If the deletion of eDel would create isolated vertices, those are deleted as well.

MakeEdge ( ) : LibTessDotNet.MeshUtils.Edge

Creates one edge, two vertices and a loop (face). The loop consists of the two new half-edges.

MergeConvexFaces ( int maxVertsPerFace ) : void
Mesh ( ) : System
OnFree ( ) : void
Reset ( ) : void
Splice ( LibTessDotNet.MeshUtils.Edge eOrg, LibTessDotNet.MeshUtils.Edge eDst ) : void

Splice is the basic operation for changing the mesh connectivity and topology. It changes the mesh so that eOrg->Onext = OLD( eDst->Onext ) eDst->Onext = OLD( eOrg->Onext ) where OLD(...) means the value before the meshSplice operation. This can have two effects on the vertex structure: - if eOrg->Org != eDst->Org, the two vertices are merged together - if eOrg->Org == eDst->Org, the origin is split into two vertices In both cases, eDst->Org is changed and eOrg->Org is untouched. Similarly (and independently) for the face structure, - if eOrg->Lface == eDst->Lface, one loop is split into two - if eOrg->Lface != eDst->Lface, two distinct loops are joined into one In both cases, eDst->Lface is changed and eOrg->Lface is unaffected. Some special cases: If eDst == eOrg, the operation has no effect. If eDst == eOrg->Lnext, the new face will have a single edge. If eDst == eOrg->Lprev, the old face will have a single edge. If eDst == eOrg->Onext, the new vertex will have a single edge. If eDst == eOrg->Oprev, the old vertex will have a single edge.

SplitEdge ( LibTessDotNet.MeshUtils.Edge eOrg ) : LibTessDotNet.MeshUtils.Edge

Splits eOrg into two edges eOrg and eNew such that eNew == eOrg.Lnext. The new vertex is eOrg.Dst == eNew.Org. eOrg and eNew will have the same left face.

ZapFace ( LibTessDotNet.MeshUtils.Face fZap ) : void

Destroys a face and removes it from the global face list. All edges of fZap will have a NULL pointer as their left face. Any edges which also have a NULL pointer as their right face are deleted entirely (along with any isolated vertices this produces). An entire mesh can be deleted by zapping its faces, one at a time, in any order. Zapped faces cannot be used in further mesh operations!

Private Methods

Method Description
Check ( ) : void

Method Details

AddEdgeVertex() public method

Creates a new edge such that eNew == eOrg.Lnext and eNew.Dst is a newly created vertex. eOrg and eNew will have the same left face.
public AddEdgeVertex ( LibTessDotNet.MeshUtils.Edge eOrg ) : LibTessDotNet.MeshUtils.Edge
eOrg LibTessDotNet.MeshUtils.Edge
return LibTessDotNet.MeshUtils.Edge

Connect() public method

Creates a new edge from eOrg->Dst to eDst->Org, and returns the corresponding half-edge eNew. If eOrg->Lface == eDst->Lface, this splits one loop into two, and the newly created loop is eNew->Lface. Otherwise, two disjoint loops are merged into one, and the loop eDst->Lface is destroyed. If (eOrg == eDst), the new face will have only two edges. If (eOrg->Lnext == eDst), the old face is reduced to a single edge. If (eOrg->Lnext->Lnext == eDst), the old face is reduced to two edges.
public Connect ( LibTessDotNet.MeshUtils.Edge eOrg, LibTessDotNet.MeshUtils.Edge eDst ) : LibTessDotNet.MeshUtils.Edge
eOrg LibTessDotNet.MeshUtils.Edge
eDst LibTessDotNet.MeshUtils.Edge
return LibTessDotNet.MeshUtils.Edge

Delete() public method

Removes the edge eDel. There are several cases: if (eDel->Lface != eDel->Rface), we join two loops into one; the loop eDel->Lface is deleted. Otherwise, we are splitting one loop into two; the newly created loop will contain eDel->Dst. If the deletion of eDel would create isolated vertices, those are deleted as well.
public Delete ( LibTessDotNet.MeshUtils.Edge eDel ) : void
eDel LibTessDotNet.MeshUtils.Edge
return void

MakeEdge() public method

Creates one edge, two vertices and a loop (face). The loop consists of the two new half-edges.
public MakeEdge ( ) : LibTessDotNet.MeshUtils.Edge
return LibTessDotNet.MeshUtils.Edge

MergeConvexFaces() public method

public MergeConvexFaces ( int maxVertsPerFace ) : void
maxVertsPerFace int
return void

Mesh() public method

public Mesh ( ) : System
return System

OnFree() public method

public OnFree ( ) : void
return void

Reset() public method

public Reset ( ) : void
return void

Splice() public method

Splice is the basic operation for changing the mesh connectivity and topology. It changes the mesh so that eOrg->Onext = OLD( eDst->Onext ) eDst->Onext = OLD( eOrg->Onext ) where OLD(...) means the value before the meshSplice operation. This can have two effects on the vertex structure: - if eOrg->Org != eDst->Org, the two vertices are merged together - if eOrg->Org == eDst->Org, the origin is split into two vertices In both cases, eDst->Org is changed and eOrg->Org is untouched. Similarly (and independently) for the face structure, - if eOrg->Lface == eDst->Lface, one loop is split into two - if eOrg->Lface != eDst->Lface, two distinct loops are joined into one In both cases, eDst->Lface is changed and eOrg->Lface is unaffected. Some special cases: If eDst == eOrg, the operation has no effect. If eDst == eOrg->Lnext, the new face will have a single edge. If eDst == eOrg->Lprev, the old face will have a single edge. If eDst == eOrg->Onext, the new vertex will have a single edge. If eDst == eOrg->Oprev, the old vertex will have a single edge.
public Splice ( LibTessDotNet.MeshUtils.Edge eOrg, LibTessDotNet.MeshUtils.Edge eDst ) : void
eOrg LibTessDotNet.MeshUtils.Edge
eDst LibTessDotNet.MeshUtils.Edge
return void

SplitEdge() public method

Splits eOrg into two edges eOrg and eNew such that eNew == eOrg.Lnext. The new vertex is eOrg.Dst == eNew.Org. eOrg and eNew will have the same left face.
public SplitEdge ( LibTessDotNet.MeshUtils.Edge eOrg ) : LibTessDotNet.MeshUtils.Edge
eOrg LibTessDotNet.MeshUtils.Edge
return LibTessDotNet.MeshUtils.Edge

ZapFace() public method

Destroys a face and removes it from the global face list. All edges of fZap will have a NULL pointer as their left face. Any edges which also have a NULL pointer as their right face are deleted entirely (along with any isolated vertices this produces). An entire mesh can be deleted by zapping its faces, one at a time, in any order. Zapped faces cannot be used in further mesh operations!
public ZapFace ( LibTessDotNet.MeshUtils.Face fZap ) : void
fZap LibTessDotNet.MeshUtils.Face
return void