Small bit of code ripped out of one of my race track editors shows a quick method of deleting single faces or faces within a another triangle,hope this helps.
`vertex test
`======================
`©P.Parkinson
`======================
`Main Source File
`*********************************
`enviroment set up
IF CHECK DISPLAY MODE(1024,768,32)
SET DISPLAY MODE 1024,768,32
h=DESKTOP HEIGHT()
w=DESKTOP WIDTH()
posx=w/2-512
posy=h/2-384
ELSE
SET DISPLAY MODE 640,480,32
h=DESKTOP HEIGHT()
w=DESKTOP WIDTH()
posx=w/2-320
posy=h/2-240
ENDIF
SET WINDOW POSITION posx,posy
SYNC ON
SYNC RATE 60
AUTOCAM OFF
``HIDE MOUSE
COLOR BACKDROP 0,0
SET TEXT FONT "Arial"
SET TEXT SIZE 20
SET TEXT TRANSPARENT
POSITION CAMERA 50,50,-50
POINT CAMERA 0,0,0
POSITION MOUSE SCREEN WIDTH()/2,SCREEN HEIGHT()/2
dummy=MOUSEMOVEX()
dummy=MOUSEMOVEY()
`*********************************
`declarations and setup starts here
Global wf=0
MAKE OBJECT PLAIN 1,32,32,64,64,274
SET OBJECT WIREFRAME 1,wf
sc_setupobject 1,0,0
LOCK VERTEXDATA FOR LIMB 1,0
global num_index
num_index=get vertexdata index count()
GLOBAL num_vertex
num_vertex=get vertexdata vertex count()
UNLOCK VERTEXDATA
DIM index_data(num_index)
TYPE vertex_type
posx AS FLOAT
posy AS FLOAT
posz AS FLOAT
u AS FLOAT
v as float
ENDTYPE
dim vertex_data(num_vertex) as vertex_type
LOCK VERTEXDATA FOR LIMB 1,0
FOR i=0 TO num_index-1
index_data(i)=get indexdata(i)
NEXT i
FOR v=0 TO num_vertex-1
vertex_data(v).posx=get vertexdata position x(v)
vertex_data(v).posy=get vertexdata position y(v)
vertex_data(v).posz=get vertexdata position z(v)
vertex_data(v).u=get vertexdata u(v)
vertex_data(v).v=get vertexdata v(v)
NEXT v
UNLOCK VERTEXDATA
GLOBAL marker=2
GLOBAL target=3
MAKE OBJECT CUBE marker,0.5
color object marker,rgb(255,0,0)
HIDE OBJECT marker
MAKE OBJECT CUBE target,1.0
HIDE OBJECT target
GLOBAL hit
`*********************************
`main loop starts here
DO
TEXT 0,0,"number of indexes "+str$(num_index)+" num faces "+str$(num_index/3)
TEXT 0,20,"number of vertexes "+str$(num_vertex)
POSITION OBJECT target,camera position x(),camera position y(),camera position z()
SET OBJECT TO CAMERA ORIENTATION target
MOVE OBJECT target,1000
hit=sc_raycast(0,camera position x(),camera position y(),camera position z(),object position x(target),object position y(target),object position z(target),0)
IF hit>0
px#=sc_getstaticcollisionx()
py#=sc_getstaticcollisiony()
pz#=sc_getstaticcollisionz()
nx#=sc_getcollisionnormalx()*1000.0
ny#=sc_getcollisionnormaly()*1000.0
nz#=sc_getcollisionnormalz()*1000.0
fc=sc_getfacehit()
POSITION OBJECT marker,px#,py#,pz#
POINT OBJECT marker,nx#,ny#,nz#
TEXT 0,40,"face hit "+str$(fc)
position mouse object screen x(marker),object screen y(marker)
ENDIF
IF hit>0 AND mouseclick()
move_index=fc*3+3
FOR i=move_index TO num_index
index_data(i-3)=index_data(i)
NEXT i
num_index=num_index-3
SC_REMOVEOBJECT 1
DELETE OBJECT 1
MAKE OBJECT NEW 1,num_vertex,num_index,274
LOCK VERTEXDATA FOR LIMB 1,0
FOR i=0 TO num_index-1
set indexdata i,index_data(i)
NEXT i
FOR v=0 TO num_vertex-1
set vertexdata position v,vertex_data(v).posx,vertex_data(v).posy,vertex_data(v).posz
set vertexdata uv v,vertex_data(v).u,vertex_data(v).v
NEXT v
UNLOCK VERTEXDATA
SET OBJECT WIREFRAME 1,wf
SET OBJECT NORMALS 1
sc_setupobject 1,0,0
ENDIF
IF SPACEKEY()
px1=rnd(32)-16:pz1=rnd(32)-16
px2=rnd(32)-16:pz2=rnd(32)-16
px3=rnd(32)-16:pz3=rnd(32)-16
MAKE OBJECT SPHERE 4,1
COLOR OBJECT 4,rgb(0,255,0)
POSITION OBJECT 4,px1,0,pz1
MAKE OBJECT SPHERE 5,1
COLOR OBJECT 5,rgb(0,0,255)
POSITION OBJECT 5,px2,0,pz2
MAKE OBJECT SPHERE 6,1
COLOR OBJECT 6,rgb(255,0,255)
POSITION OBJECT 6,px3,0,pz3
SYNC
` SYNC
` WHILE SPACEKEY()
`
` ENDWHILE
fc=0
id=0
DO
cpx1#=vertex_data(index_data(id)).posx
cpz1#=vertex_data(index_data(id)).posz
cpx2#=vertex_data(index_data(id+1)).posx
cpz2#=vertex_data(index_data(id+1)).posz
cpx3#=vertex_data(index_data(id+2)).posx
cpz3#=vertex_data(index_data(id+2)).posz
id=id+3
IF triangle_in_triangle(cpx1#,cpz1#,cpx2#,cpz2#,cpx3#,cpz3#,px1,pz1,px2,pz2,px3,pz3)
move_index=fc*3+3
FOR i=move_index TO num_index
index_data(i-3)=index_data(i)
NEXT i
num_index=num_index-3
id=id-3
dec fc
ENDIF
INC fc
if id>num_index-1 then exit
LOOP
SC_REMOVEOBJECT 1
DELETE OBJECT 1
MAKE OBJECT NEW 1,num_vertex,num_index,274
LOCK VERTEXDATA FOR LIMB 1,0
FOR i=0 TO num_index-1
set indexdata i,index_data(i)
NEXT i
FOR v=0 TO num_vertex-1
set vertexdata position v,vertex_data(v).posx,vertex_data(v).posy,vertex_data(v).posz
set vertexdata uv v,vertex_data(v).u,vertex_data(v).v
NEXT v
UNLOCK VERTEXDATA
SET OBJECT WIREFRAME 1,wf
SET OBJECT NORMALS 1
sc_setupobject 1,0,0
DELETE OBJECT 4
DELETE OBJECT 5
DELETE OBJECT 6
ENDIF
mouse_control(1.0)
TEXT 0,60,"fps "+str$(screen fps())
TEXT 0,80,"mouse to look around,wheel to zoom in out,LMB to delete poly"
TEXT 0,100,"space to delete a triangle section"
TEXT 0,120,"w wireframe on off"
IF INKEY$()="w"
INC wf
IF wf>1 THEN wf=0
SET OBJECT WIREFRAME 1,wf
SYNC
WHILE INKEY$()="w"
ENDWHILE
ENDIF
SYNC
LOOP
`*********************************
`functions start here
FUNCTION mouse_control(speed AS FLOAT)
XROTATE CAMERA CAMERA ANGLE X()+MOUSEMOVEY()
YROTATE CAMERA CAMERA ANGLE Y()+MOUSEMOVEX()
mz=mousemovez()
IF mz>0 THEN MOVE CAMERA speed
IF mz<0 THEN MOVE CAMERA (0-speed)
dummy=MOUSEMOVEX()
dummy=MOUSEMOVEY()
ENDFUNCTION
FUNCTION triangle_in_triangle(ax1 AS float,az1 as float,ax2 as float,az2 as float,ax3 as float,az3 as float,bx1 as float,bz1 as float,bx2 as float,bz2 as float,bx3 as float,bz3 as float)
LOCAL AB AS FLOAT
local BC as float
local CA as float
AB = ((az1-bz1)*(bx2-bx1)) - ((ax1-bx1)*(bz2-bz1))
BC = ((az1-bz2)*(bx3-bx2)) - ((ax1-bx2)*(bz3-bz2))
if AB * BC <= 0 then exitfunction 0
CA = (az1-bz3)*(bx1-bx3) - (ax1-bx3)*(bz1-bz3)
IF BC * CA <= 0 THEN EXITFUNCTION 0
AB = ((az2-bz1)*(bx2-bx1)) - ((ax2-bx1)*(bz2-bz1))
BC = ((az2-bz2)*(bx3-bx2)) - ((ax2-bx2)*(bz3-bz2))
if AB * BC <= 0 then exitfunction 0
CA = (az2-bz3)*(bx1-bx3) - (ax2-bx3)*(bz1-bz3)
IF BC * CA <= 0 THEN EXITFUNCTION 0
AB = ((az3-bz1)*(bx2-bx1)) - ((ax3-bx1)*(bz2-bz1))
BC = ((az3-bz2)*(bx3-bx2)) - ((ax3-bx2)*(bz3-bz2))
if AB * BC <= 0 then exitfunction 0
CA = (az3-bz3)*(bx1-bx3) - (ax3-bx3)*(bz1-bz3)
IF BC * CA <= 0 THEN EXITFUNCTION 0
ENDFUNCTION 1
it uses matrix1 and sparkys collision plugins