ply_writer Subroutine

private subroutine ply_writer(this)

Uses

Arguments

Type IntentOptional Attributes Name
type(history_stack_t), intent(inout) :: this

Source Code

    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