subroutine ply_writer(this)
use constants, only : fileplace
use utils, only : str
type(history_stack_t), intent(inout) :: this
integer :: io, counter, i, u
logical :: res
type(vec4) :: v
inquire(file=trim(fileplace)//this%filename, exist=res)
if(res)then
open(newunit=u,file=trim(fileplace)//this%filename, status="old", position="append")
else
open(newunit=u,file=trim(fileplace)//this%filename, status="new")
write(u,"(a)") "ply"//new_line("a")//"format ascii 1.0"//new_line("a")//"element vertex "//str(this%size)
write(u,"(a)") "property float x"
write(u,"(a)") "property float y"
write(u,"(a)") "property float z"
write(u,"(a)") "element edge"
write(u,"(a)") "property int vertex1"
write(u,"(a)") "property int vertex2"
write(u,"(a)") "end_header"
end if
inquire(file=trim(fileplace)//this%filename//"2", exist=res)
if(res)then
open(newunit=io,file=trim(fileplace)//this%filename//"2", status="old", position="append")
else
open(newunit=io,file=trim(fileplace)//this%filename//"2", status="new")
end if
counter = this%vertex_counter
do i = 1, this%size-1
write(io, "(2(i0,1x))") counter, counter+1
counter = counter + 1
this%edge_counter = this%edge_counter + 1
end do
close(io)
do while(.not. this%empty())
v = this%pop()
write(u, "(3(es15.8e2,1x))") v%x, v%y, v%z
this%vertex_counter = this%vertex_counter + 1
end do
close(u)
end subroutine ply_writer