Code archives/3D Graphics - Mesh/Remove individual triangles,vertices & isolated vertices

This code has been declared by its author to be Public Domain code.

Download source code

Remove individual triangles,vertices & isolated vertices by elias_t2003
for the functions to work you must redim the trilist and vertlist arrays before.
;REMOVE INDIVIDUAL TRIANGLES , VERTICES & ISOLATED VERTICES
;BY ELIAS TSIANTAS [elias_t]

;#########################################################################
;YOU NEED THESE ARRAYS AND TYPES
;the original no of tris and verts must be declared !!!

Dim Trilist(0,2);the triangle list
Dim Vertlist#(0,4);the vertex list


;common tri
Type ctri
Field id
End Type

;#########################################################################

;THEN YOU CAN CALL 1 OF THE 3 FOLLOWING FUNCTIONS


;remove a single triangle

Function removetri(surf,tri)
	numtris=CountTriangles(surf)
	For t=0 To numtris-1
		trilist(t,0)=TriangleVertex(surf,t,0)
		trilist(t,1)=TriangleVertex(surf,t,1)
		trilist(t,2)=TriangleVertex(surf,t,2)
	Next
	ClearSurface surf,False,True
	For t=0 To numtris-1
		If t<>tri Then 	AddTriangle(surf,trilist(t,0),trilist(t,1),trilist(t,2))
	Next
End Function	 





;remove a single vertex

Function removevert(surf,vert)

	numtris=CountTriangles(surf)

	For t=0 To numtris-1
		trilist(t,0)=TriangleVertex(surf,t,0)
		trilist(t,1)=TriangleVertex(surf,t,1)
		trilist(t,2)=TriangleVertex(surf,t,2)
	Next


	numverts=CountVertices(surf)

	For t=0 To numverts-1
		Vertlist#(t,0)=VertexX(surf,t)
		Vertlist#(t,1)=VertexY(surf,t)
		Vertlist#(t,2)=VertexZ(surf,t)
		
		Vertlist#(t,3)=VertexU(surf,t,0)
		Vertlist#(t,4)=VertexV(surf,t,0)
		
	Next

	ClearSurface surf,True,True
	
	For t=0 To numverts-1
		If t<>vert
		AddVertex (surf,Vertlist#(t,0),Vertlist#(t,1),Vertlist#(t,2),Vertlist#(t,3),Vertlist#(t,4) )
		EndIf
	Next

;find which triangles were connected to this vertex

	For t=0 To numtris-1
	
		If trilist(t,0)=vert Or trilist(t,1)=vert Or trilist(t,2)=vert
		common.ctri=New ctri
		common\id=t
		EndIf
		
	Next

;rebuild the trilist
	For t=0 To numtris-1
	
	If trilist(t,0)>vert Then trilist(t,0)=trilist(t,0)-1
	If trilist(t,1)>vert Then trilist(t,1)=trilist(t,1)-1
	If trilist(t,2)>vert Then trilist(t,2)=trilist(t,2)-1
	
	Next
	

;add triangles that were not connected to the removed vert

	For t=0 To numtris-1
		
		tis=0
		common.ctri=First ctri
		For common.ctri=Each ctri
		If t=common\id Then tis=1
		Next


		
		If tis=0
		AddTriangle(surf,trilist(t,0),trilist(t,1),trilist(t,2))
		EndIf
		
	Next


Delete Each ctri

End Function






;remove isolated vertices

Function remove_iso_verts(surf)

For k=0 To 2;3 waves [?] needed

	numtris=CountTriangles(surf)
	For t=0 To numtris-1
		trilist(t,0)=TriangleVertex(surf,t,0)
		trilist(t,1)=TriangleVertex(surf,t,1)
		trilist(t,2)=TriangleVertex(surf,t,2)
	Next
	
	
	
	numverts=CountVertices(surf)

	For i=0 To numverts-1
	
	tis=0
	
	For t=0 To numtris-1
		If i=trilist(t,0) Then tis=1
		If i=trilist(t,1) Then tis=1
		If i=trilist(t,2) Then tis=1
	Next
	
	If tis=0
	removevert(surf,i)
	EndIf
	
	Next


Next

End Function



;#########################################################################

Comments

None.

Code Archives Forum