from typing import Any, Final

from Base.Metadata import constmethod, export
from Data import object

@export(
    Father="ComplexGeoDataPy",
    Twin="PointKernel",
    TwinPointer="PointKernel",
    Include="Mod/Points/App/Points.h",
    Namespace="Points",
    FatherInclude="App/ComplexGeoDataPy.h",
    FatherNamespace="Data",
    Constructor=True,
)
class Points(object):
    """
    Points() -- Create an empty points object.

    This class allows one to manipulate the Points object by adding new points, deleting facets, importing from an STL file,
    transforming and much more.

    Author: Juergen Riegel (Juergen.Riegel@web.de)
    License: LGPL-2.1-or-later
    """

    @constmethod
    def copy(self) -> Any:
        """Create a copy of this points object"""
        ...

    def read(self) -> Any:
        """Read in a points object from file."""
        ...

    @constmethod
    def write(self) -> Any:
        """Write the points object into file."""
        ...

    @constmethod
    def writeInventor(self) -> Any:
        """Write the points in OpenInventor format to a string."""
        ...

    def addPoints(self) -> Any:
        """add one or more (list of) points to the object"""
        ...

    @constmethod
    def fromSegment(self) -> Any:
        """Get a new point object from a given segment"""
        ...

    @constmethod
    def fromValid(self) -> Any:
        """Get a new point object from points with valid coordinates (i.e. that are not NaN)"""
        ...
    CountPoints: Final[int]
    """Return the number of vertices of the points object."""

    Points: Final[list]
    """A collection of points
With this attribute it is possible to get access to the points of the object

for p in pnt.Points:
	print p"""
