Source code for aerocaps.geom
from abc import abstractmethod
import numpy as np
import aerocaps.iges.entity
[docs]
class Geometry:
"""Abstract geometry class"""
[docs]
def __init__(self, name: str, construction: bool = False):
"""
Abstract geometry class
Parameters
----------
name: str
Name of the geometric object. May be re-assigned a unique name when added to a
:obj:`~aerocaps.geom.geometry_container.GeometryContainer`
construction: bool
Whether this is a geometry used only for construction of other geometries. If ``True``, this
geometry will not be exported or plotted. Default: ``False``
"""
self._name = self._validate_name(name)
self._construction = construction
self.container = None # Geometry container associated with this geometry. This will be assigned after
# calling GeometryContainer.add_geometry
@property
def name(self) -> str:
"""
Gets the name assigned to the geometry
Returns
-------
str
Name of the geometry
"""
return self._name
@name.setter
def name(self, name: str):
"""
Sets the name of the geometry. This name might get modified with a higher index when adding to
a :obj:`~aerocaps.geom.geometry_container.GeometryContainer`
Parameters
----------
name: str
Name to assign
"""
self._name = self._validate_name(name)
@staticmethod
def _validate_name(name: str) -> str:
"""
Validates that the name is suitable for addition to a
:obj:`~aerocaps.geom.geometry_container.GeometryContainer`. If not, an exception is raised
Parameters
----------
name: str
Name to check
Returns
-------
name: str
Name of the object if an exception was not raised
"""
if "-" in name:
raise ValueError("Name must not contain dashes. Dashes are reserved for GeometryContainer indexing")
return name
@property
def construction(self) -> bool:
"""Whether this is a construction geometry (if so, it will not be plotted or exported)"""
return self._construction
@construction.setter
def construction(self, construction: bool):
"""Sets the construction property"""
self._construction = construction
[docs]
class Geometry2D(Geometry):
"""Two-dimensional abstract geometry class"""
pass
[docs]
class Geometry3D(Geometry):
"""Three-dimensional abstract geometry class"""
[docs]
@abstractmethod
def to_iges(self, *args, **kwargs) -> aerocaps.iges.entity.IGESEntity:
"""
Converts the geometric object to an IGES entity. To add this IGES entity to an ``.igs`` file,
use an :obj:`~aerocaps.iges.iges_generator.IGESGenerator`.
"""
pass
[docs]
class Surface(Geometry3D):
@abstractmethod
def evaluate(self, u: float, v: float) -> np.ndarray:
pass
@abstractmethod
def evaluate_point3d(self, u: float, v: float):
pass
@abstractmethod
def evaluate_grid(self, Nu: int, Nv: int) -> np.ndarray:
pass
[docs]
class InvalidGeometryError(Exception):
pass
[docs]
class NegativeWeightError(Exception):
pass