Anyone see any problems with this code, ideas, suggestions, whatever?
The code in question:
FUNCTION WeldVertices(obj AS INTEGER)
MAKE MESH FROM OBJECT 1,obj : LOCK VERTEXDATA FOR MESH 1 : imax=GET VERTEXDATA INDEX COUNT() : vmax=GET VERTEXDATA VERTEX COUNT() : ucount=-1 : imax2=imax : IF imax=0 then imax=vmax
DIM Index(imax-1)
FOR i=0 TO imax-1
IF imax2
Index(i)=GET INDEXDATA(i)
ELSE
Index(i)=i
ENDIF
check=1
FOR count=0 TO ucount
IF count/3.0=count/3 AND (ucount-1)/3.0=(ucount-1)/3 AND (i+1)/3.0=(i+1)/3 AND i>4
IF Index(count)=Index(i-2) AND Index(count+1)=Index(i-1) AND Index(count+2)=Index(i-0) THEN DEC ucount,2 : check=0 : EXIT
ELSE
xx#=GET VERTEXDATA POSITION X(Index(i)) : yy#=GET VERTEXDATA POSITION Y(Index(i)) : zz#=GET VERTEXDATA POSITION Z(Index(i)) : IF xx#=GET VERTEXDATA POSITION X(Index(count)) AND yy#=GET VERTEXDATA POSITION Y(Index(count)) AND zz#=GET VERTEXDATA POSITION Z(Index(count)) THEN SET INDEXDATA i,count : Index(i)=count : check=0 : EXIT
ENDIF
NEXT
IF check THEN INC ucount : SET VERTEXDATA POSITION ucount,GET VERTEXDATA POSITION X(Index(i)),GET VERTEXDATA POSITION Y(Index(i)),GET VERTEXDATA POSITION Z(Index(i)) : SET VERTEXDATA POSITION ucount,GET VERTEXDATA NORMALS X(Index(i)),GET VERTEXDATA NORMALS Y(Index(i)),GET VERTEXDATA NORMALS Z(Index(i)) : SET VERTEXDATA UV ucount,GET VERTEXDATA U(Index(i)),GET VERTEXDATA V(Index(i)) : SET VERTEXDATA DIFFUSE ucount,GET VERTEXDATA DIFFUSE(Index(i)) : SET INDEXDATA i,ucount
NEXT
DELETE MESH FROM VERTEXDATA ucount,vmax,0,0 : imax=imax2 : imax2=GET VERTEXDATA INDEX COUNT() : vmax2=GET VERTEXDATA VERTEX COUNT() : UNLOCK VERTEXDATA : DELETE MESH 1 : UNDIM Index()
ENDFUNCTION
Copy-Paste-Run code:
AUTOCAM OFF: SYNC ON
POSITION CAMERA 1,0,-3
GLOBAL x#,y#,z#,imax,imax2,vmax,vmax2,ucount,shape=3,temp
NewShape(2)
WeldVertices(1)
WHILE NOT ESCAPEKEY()
DisplayInfo() : key=SCANCODE() : IF key>1 AND key<9 THEN shape=key-1 : WHILE SCANCODE() : DisplayInfo() : ENDWHILE : NewShape(key-2) : WeldVertices(1)
ENDWHILE
DELETE OBJECT 1
DELETE OBJECT 2
END
FUNCTION WeldVertices(obj AS INTEGER)
MAKE MESH FROM OBJECT 1,obj : LOCK VERTEXDATA FOR MESH 1 : imax=GET VERTEXDATA INDEX COUNT() : vmax=GET VERTEXDATA VERTEX COUNT() : ucount=-1 : imax2=imax : IF imax=0 then imax=vmax
DIM Index(imax-1)
FOR i=0 TO imax-1
IF imax2
Index(i)=GET INDEXDATA(i)
ELSE
Index(i)=i
ENDIF
check=1
FOR count=0 TO ucount
IF count/3.0=count/3 AND (ucount-1)/3.0=(ucount-1)/3 AND (i+1)/3.0=(i+1)/3 AND i>4
IF Index(count)=Index(i-2) AND Index(count+1)=Index(i-1) AND Index(count+2)=Index(i-0) THEN DEC ucount,2 : check=0 : EXIT
ELSE
xx#=GET VERTEXDATA POSITION X(Index(i)) : yy#=GET VERTEXDATA POSITION Y(Index(i)) : zz#=GET VERTEXDATA POSITION Z(Index(i)) : IF xx#=GET VERTEXDATA POSITION X(Index(count)) AND yy#=GET VERTEXDATA POSITION Y(Index(count)) AND zz#=GET VERTEXDATA POSITION Z(Index(count)) THEN SET INDEXDATA i,count : Index(i)=count : check=0 : EXIT
ENDIF
NEXT
IF check THEN INC ucount : SET VERTEXDATA POSITION ucount,GET VERTEXDATA POSITION X(Index(i)),GET VERTEXDATA POSITION Y(Index(i)),GET VERTEXDATA POSITION Z(Index(i)) : SET VERTEXDATA POSITION ucount,GET VERTEXDATA NORMALS X(Index(i)),GET VERTEXDATA NORMALS Y(Index(i)),GET VERTEXDATA NORMALS Z(Index(i)) : SET VERTEXDATA UV ucount,GET VERTEXDATA U(Index(i)),GET VERTEXDATA V(Index(i)) : SET VERTEXDATA DIFFUSE ucount,GET VERTEXDATA DIFFUSE(Index(i)) : SET INDEXDATA i,ucount
NEXT
DELETE MESH FROM VERTEXDATA ucount,vmax,0,0 : imax=imax2 : imax2=GET VERTEXDATA INDEX COUNT() : vmax2=GET VERTEXDATA VERTEX COUNT() : UNLOCK VERTEXDATA : DELETE MESH 1 : UNDIM Index()
ENDFUNCTION
function DisplayInfo()
SET CURSOR 0,0
PRINT "Pressing 1-8 will change shape. Currently: "+str$(shape)
PRINT "Original Vertex Count : "+STR$(vmax)
PRINT "New Vertex Count : "+STR$(vmax2)
PRINT "Unique Vertex Count : "+STR$(ucount)
PRINT "Original Index Count : "+STR$(imax)
PRINT "New Index Count : "+STR$(imax2)
print temp
x#=WRAPVALUE(x#+1) : y#=WRAPVALUE(y#+.1) : z#=WRAPVALUE(z#+.01) : ROTATE OBJECT 1,x#,y#,z# : ROTATE OBJECT 2,x#,y#,z#
SYNC
ENDFUNCTION
FUNCTION NewShape(s AS INTEGER)
IF OBJECT EXIST(1) THEN DELETE OBJECT 1
IF OBJECT EXIST(2) THEN DELETE OBJECT 2
SELECT s
CASE 1 : MAKE OBJECT CONE 1,1 : MAKE OBJECT CONE 2,1 : ENDCASE
CASE 2 : MAKE OBJECT CUBE 1,1 : MAKE OBJECT CUBE 2,1 : ENDCASE
CASE 3 : MAKE OBJECT CYLINDER 1,1 : MAKE OBJECT CYLINDER 2,1 : ENDCASE
CASE 4 : MAKE OBJECT PLANE 1,1,1 : MAKE OBJECT PLANE 2,1,1 : ENDCASE
CASE 5 : MAKE OBJECT SPHERE 1,1 : MAKE OBJECT SPHERE 2,1 : ENDCASE
CASE 6 : MAKE OBJECT TRIANGLE 1,0,.5,0,-.5,-.5,0,.5,-.5,0 : MAKE OBJECT TRIANGLE 2,0,.5,0,-.5,-.5,0,.5,-.5,0 : ENDCASE
CASE DEFAULT : MAKE OBJECT BOX 1,1,1.25,1.5 : MAKE OBJECT BOX 2,1,1.25,1.5 : ENDCASE
ENDSELECT
POSITION OBJECT 2,2,0,0
ENDFUNCTION
Something still isn't quite right about it.