Skip to content
84 changes: 81 additions & 3 deletions src/ansys/speos/core/opt_prop.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,49 @@ def set_volume_opaque(self) -> OptProp:
self._vop_template.opaque.SetInParent()
return self

def set_volume_optic(
@property
def volume_optic(
self,
index: float = 1.5,
absorption: float = 0,
constringence: Optional[float] = None,
) -> OptProp:
"""
Transparent colorless material without bulk scattering.

Parameters
----------
index : float
Refractive index.
By default, ``1.5``.
absorption : float
Absorption coefficient value. mm-1.
By default, ``0``.
constringence : float, optional
Abbe number.
By default, ``None``, means no constringence.

Returns
-------
ansys.speos.core.opt_prop.OptProp
Optical property.
"""
if self._vop_template is None:
self._vop_template = ProtoVOPTemplate(
name=self._name + ".VOP",
description=self._sop_template.description,
metadata=self._sop_template.metadata,
)
self._vop_template.optic.index = index
self._vop_template.optic.absorption = absorption
if constringence is not None:
self._vop_template.optic.constringence = constringence
else:
self._vop_template.optic.ClearField("constringence")
return self.volume_optic

@volume_optic.setter
def volume_optic(
self,
index: float = 1.5,
absorption: float = 0,
Expand Down Expand Up @@ -207,7 +249,6 @@ def set_volume_optic(
self._vop_template.optic.constringence = constringence
else:
self._vop_template.optic.ClearField("constringence")
return self

# Deactivated due to a bug on SpeosRPC server side
# def set_volume_nonhomogeneous(
Expand Down Expand Up @@ -267,7 +308,8 @@ def set_volume_library(self, path: str) -> OptProp:
self._vop_template.library.material_file_uri = path
return self

def set_geometries(
@property
def geometries(
self,
geometries: Optional[List[Union[GeoRef, body.Body, face.Face, part.Part.SubPart]]] = None,
) -> OptProp:
Expand Down Expand Up @@ -296,11 +338,47 @@ def set_geometries(
else:
msg = f"Type {type(gr)} is not supported as Optical property geometry input."
raise TypeError(msg)

# I a lost here as to how to return this property correctly
self._material_instance.geometries.geo_paths[:] = [
gp.to_native_link() for gp in geo_paths
]
return self

@geometries.setter
def geometries(
self,
geometries: Optional[List[Union[GeoRef, body.Body, face.Face, part.Part.SubPart]]] = None,
) -> OptProp:
"""Select geometries on which the optical properties will be applied.

Parameters
----------
geometries : List[ansys.speos.core.geo_ref.GeoRef], optional
List of geometries. Giving an empty list means "All geometries"
By default, ``None``, means "no geometry".

Returns
-------
ansys.speos.core.opt_prop.OptProp
Optical property.
"""
if geometries is None:
self._material_instance.ClearField("geometries")
else:
geo_paths = []
for gr in geometries:
if isinstance(gr, GeoRef):
geo_paths.append(gr)
elif isinstance(gr, (face.Face, body.Body, part.Part.SubPart)):
geo_paths.append(gr.geo_path)
else:
msg = f"Type {type(gr)} is not supported as Optical property geometry input."
raise TypeError(msg)
self._material_instance.geometries.geo_paths[:] = [
gp.to_native_link() for gp in geo_paths
]

def _to_dict(self) -> dict:
out_dict = {}

Expand Down
Loading