File size: 2,120 Bytes
8d991db
fac3209
8d991db
 
 
 
8fc4142
8d991db
 
 
 
 
 
 
 
fac3209
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8d991db
 
fac3209
8d991db
fac3209
8d991db
fac3209
 
8d991db
fac3209
7a4ca28
 
 
 
 
 
8d991db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"""pytorch3d.structures stub with catch-all."""
import torch
import warnings


def __getattr__(name):
    if name.startswith("__") and name.endswith("__"):
        raise AttributeError(name)
    warnings.warn(f"pytorch3d.structures stub: {name} not implemented", stacklevel=2)
    class _Dummy:
        def __init__(self, *a, **kw): pass
        def to(self, *a, **kw): return self
    _Dummy.__name__ = _Dummy.__qualname__ = name
    return _Dummy


class Meshes:
    def __init__(self, verts=None, faces=None, textures=None):
        if isinstance(verts, list):
            self._verts_list = [v if isinstance(v, torch.Tensor) else torch.tensor(v, dtype=torch.float32) for v in verts]
        elif isinstance(verts, torch.Tensor):
            self._verts_list = [verts]
        else:
            self._verts_list = []
        if isinstance(faces, list):
            self._faces_list = [f if isinstance(f, torch.Tensor) else torch.tensor(f, dtype=torch.long) for f in faces]
        elif isinstance(faces, torch.Tensor):
            self._faces_list = [faces]
        else:
            self._faces_list = []
        self.textures = textures
    def verts_list(self): return self._verts_list
    def faces_list(self): return self._faces_list
    def verts_packed(self):
        return torch.cat(self._verts_list, dim=0) if self._verts_list else torch.zeros(0, 3)
    def faces_packed(self):
        return torch.cat(self._faces_list, dim=0) if self._faces_list else torch.zeros(0, 3, dtype=torch.long)
    def num_verts_per_mesh(self):
        return torch.tensor([v.shape[0] for v in self._verts_list])
    def __len__(self): return len(self._verts_list)


class Pointclouds:
    def __init__(self, points=None, features=None, normals=None):
        self.points_list = points if isinstance(points, list) else ([points] if points is not None else [])
        self.features_list = features if isinstance(features, list) else ([features] if features is not None else [])
        self.normals_list = normals if isinstance(normals, list) else ([normals] if normals is not None else [])
    def to(self, device): return self