(meshfile)
| 112 | |
| 113 | |
| 114 | def loadobjtex(meshfile): |
| 115 | v = [] |
| 116 | vt = [] |
| 117 | f = [] |
| 118 | ft = [] |
| 119 | meshfp = open(meshfile, 'r') |
| 120 | for line in meshfp.readlines(): |
| 121 | data = line.strip().split(' ') |
| 122 | data = [da for da in data if len(da) > 0] |
| 123 | if not ((len(data) == 3) or (len(data) == 4) or (len(data) == 5)): |
| 124 | continue |
| 125 | if data[0] == 'v': |
| 126 | assert len(data) == 4 |
| 127 | |
| 128 | v.append([float(d) for d in data[1:]]) |
| 129 | if data[0] == 'vt': |
| 130 | if len(data) == 3 or len(data) == 4: |
| 131 | vt.append([float(d) for d in data[1:3]]) |
| 132 | if data[0] == 'f': |
| 133 | data = [da.split('/') for da in data] |
| 134 | if len(data) == 4: |
| 135 | f.append([int(d[0]) for d in data[1:]]) |
| 136 | ft.append([int(d[1]) for d in data[1:]]) |
| 137 | elif len(data) == 5: |
| 138 | idx1 = [1, 2, 3] |
| 139 | data1 = [data[i] for i in idx1] |
| 140 | f.append([int(d[0]) for d in data1]) |
| 141 | ft.append([int(d[1]) for d in data1]) |
| 142 | idx2 = [1, 3, 4] |
| 143 | data2 = [data[i] for i in idx2] |
| 144 | f.append([int(d[0]) for d in data2]) |
| 145 | ft.append([int(d[1]) for d in data2]) |
| 146 | meshfp.close() |
| 147 | |
| 148 | # torch need int64 |
| 149 | facenp_fx3 = np.array(f, dtype=np.int64) - 1 |
| 150 | ftnp_fx3 = np.array(ft, dtype=np.int64) - 1 |
| 151 | pointnp_px3 = np.array(v, dtype=np.float32) |
| 152 | uvs = np.array(vt, dtype=np.float32) |
| 153 | return pointnp_px3, facenp_fx3, uvs, ftnp_fx3 |
| 154 | |
| 155 | |
| 156 | # ============================================================================================== |
nothing calls this directly
no outgoing calls
no test coverage detected