isl-org / Open3D

Open3D: A Modern Library for 3D Data Processing
http://www.open3d.org
Other
11.55k stars 2.32k forks source link

AttributeError: module 'open3d' has no attribute 'edges_to_lineset' #5631

Open rakrsh opened 2 years ago

rakrsh commented 2 years ago

Checklist

Describe the issue

I am trying to run the code snippet from the documentation for mesh properties: http://www.open3d.org/docs/release/tutorial/geometry/mesh.html

image https://github.com/ravikr1/open3d-examples/blob/main/mesh/mesh_properties.py

Steps to reproduce the bug

import open3d as o3dtut
import numpy as np
import copy

def check_properties(name, mesh):
    mesh.compute_vertex_normals()

    edge_manifold = mesh.is_edge_manifold(allow_boundary_edges=True)
    edge_manifold_boundary = mesh.is_edge_manifold(allow_boundary_edges=False)
    vertex_manifold = mesh.is_vertex_manifold()
    self_intersecting = mesh.is_self_intersecting()
    watertight = mesh.is_watertight()
    orientable = mesh.is_orientable()

    print(name)
    print(f"  edge_manifold:          {edge_manifold}")
    print(f"  edge_manifold_boundary: {edge_manifold_boundary}")
    print(f"  vertex_manifold:        {vertex_manifold}")
    print(f"  self_intersecting:      {self_intersecting}")
    print(f"  watertight:             {watertight}")
    print(f"  orientable:             {orientable}")

    geoms = [mesh]
    if not edge_manifold:
        edges = mesh.get_non_manifold_edges(allow_boundary_edges=True)
        geoms.append(o3dtut.edges_to_lineset(mesh, edges, (1, 0, 0)))
    if not edge_manifold_boundary:
        edges = mesh.get_non_manifold_edges(allow_boundary_edges=False)
        geoms.append(o3dtut.edges_to_lineset(mesh, edges, (0, 1, 0)))
    if not vertex_manifold:
        verts = np.asarray(mesh.get_non_manifold_vertices())
        pcl = o3dtut.geometry.PointCloud(
            points=o3dtut.utility.Vector3dVector(np.asarray(mesh.vertices)[verts]))
        pcl.paint_uniform_color((0, 0, 1))
        geoms.append(pcl)
    if self_intersecting:
        intersecting_triangles = np.asarray(
            mesh.get_self_intersecting_triangles())
        intersecting_triangles = intersecting_triangles[0:1]
        intersecting_triangles = np.unique(intersecting_triangles)
        print("  # visualize self-intersecting triangles")
        triangles = np.asarray(mesh.triangles)[intersecting_triangles]
        edges = [
            np.vstack((triangles[:, i], triangles[:, j]))
            for i, j in [(0, 1), (1, 2), (2, 0)]
        ]
        edges = np.hstack(edges).T
        edges = o3dtut.utility.Vector2iVector(edges)
        geoms.append(o3dtut.edges_to_lineset(mesh, edges, (1, 0, 1)))
    o3dtut.visualization.draw_geometries(geoms, mesh_show_back_face=True)

knot_mesh_data = o3dtut.data.KnotMesh()
knot_mesh = o3dtut.io.read_triangle_mesh(knot_mesh_data.path)
check_properties('KnotMesh', knot_mesh)
check_properties('Mobius', o3dtut.geometry.TriangleMesh.create_mobius(twists=1))
check_properties("non-manifold edge", o3dtut.get_non_manifold_edge_mesh())
check_properties("non-manifold vertex", o3dtut.get_non_manifold_vertex_mesh())
check_properties("open box", o3dtut.get_open_box_mesh())
check_properties("intersecting_boxes", o3dtut.get_intersecting_boxes_mesh())

Error message

File "mesh_properties.py", line 56, in check_properties('Mobius', o3dtut.geometry.TriangleMesh.create_mobius(twists=1)) File "mesh_properties.py", line 29, in check_properties geoms.append(o3dtut.edges_to_lineset(mesh, edges, (0, 1, 0))) AttributeError: module 'open3d' has no attribute 'edges_to_lineset'

Expected behavior

No response

Open3D, Python and System information

- Operating system: Ubuntu 20.04 / macOS 10.15 / Windows 10 64-bit
- Python version: Python 3.8 / output from `import sys; print(sys.version)`
- Open3D version: output from python: `print(open3d.__version__)`
- System architecture: x86 / arm64 / apple-silicon / jetson / rpi
- Is this a remote workstation?: yes or no
- How did you install Open3D?: pip / conda / build from source
- Compiler version (if built from source): gcc 7.5 / clang 7.0

Additional information

No response

saurabheights commented 8 months ago
  1. Dont import open3d as o3dtut. - import open3d as o3dtut

  2. The code for edges_to_lineset is available here: https://github.com/isl-org/Open3D/blob/main/docs/jupyter/open3d_tutorial.py. This code is not a part of open3d package when installed but is also available in https://github.com/isl-org/Open3D/blob/main/examples/python/open3d_example.py#L30 which is part of open3d.

>>> from open3d.examples import open3d_example
>>> open3d_example.edges_to_lineset()