f 行の頂点参照を抽出し、v/vt/vn 形式から頂点インデックスのみを取り出す。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | line |
OBJ面行( |
||
| integer(kind=i32), | intent(in) | :: | nvert |
負インデックス解決に使う現在有効な頂点数。 |
||
| integer(kind=i32), | intent(out), | allocatable | :: | idx(:) |
subroutine parse_face_line(line, nvert, idx) character(len=*), intent(in) :: line integer(i32), intent(in) :: nvert integer(i32), allocatable, intent(out) :: idx(:) character(len=:), allocatable :: s integer :: pos, first, last, slash, k integer(i32) :: vi s = trim(adjustl(line)) allocate (idx(count_face_tokens(s))) pos = 3 do k = 1, size(idx) call next_face_token(s, pos, first, last) slash = index(s(first:last), '/') if (slash > 0) last = first + slash - 2 read (s(first:last), *) vi if (vi < 0) vi = nvert + vi + 1 if (vi <= 0 .or. vi > nvert) error stop "OBJ face index out of range" idx(k) = vi end do end subroutine parse_face_line