2222
2323"""Field."""
2424
25+ from __future__ import annotations
26+
27+ from typing import TYPE_CHECKING
28+
2529import numpy as np
2630
2731from ansys import dpf
2832from ansys .dpf .core import dimensionality , errors , meshed_region , scoping , time_freq_support
29- from ansys .dpf .core .common import _get_size_of_list , locations , natures , types
33+ from ansys .dpf .core .common import (
34+ _get_size_of_list ,
35+ locations ,
36+ natures ,
37+ shell_layers as eshell_layers ,
38+ types ,
39+ )
3040from ansys .dpf .core .field_base import _FieldBase , _LocalFieldBase
3141from ansys .dpf .core .field_definition import FieldDefinition
3242from ansys .dpf .gate import (
3646 field_capi ,
3747 field_grpcapi ,
3848)
49+ from ansys .dpf .gate .errors import DPFServerException
50+
51+ if TYPE_CHECKING : # pragma: nocover
52+ from ansys .dpf .core .dpf_operator import Operator
53+ from ansys .dpf .core .meshed_region import MeshedRegion
54+ from ansys .dpf .core .results import Result
3955
4056
4157class Field (_FieldBase ):
@@ -500,7 +516,14 @@ def to_nodal(self):
500516 op .inputs .connect (self )
501517 return op .outputs .field ()
502518
503- def plot (self , shell_layers = None , deform_by = None , scale_factor = 1.0 , ** kwargs ):
519+ def plot (
520+ self ,
521+ shell_layers : eshell_layers = None ,
522+ deform_by : Union [Field , Result , Operator ] = None ,
523+ scale_factor : float = 1.0 ,
524+ meshed_region : MeshedRegion = None ,
525+ ** kwargs ,
526+ ):
504527 """Plot the field or fields container on the mesh support if it exists.
505528
506529 Warning
@@ -522,21 +545,24 @@ def plot(self, shell_layers=None, deform_by=None, scale_factor=1.0, **kwargs):
522545
523546 Parameters
524547 ----------
525- shell_layers : shell_layers, optional
548+ shell_layers:
526549 Enum used to set the shell layers if the model to plot
527- contains shell elements. The default is ``None`` .
528- deform_by : Field, Result, Operator, optional
550+ contains shell elements. Defaults to the top layer .
551+ deform_by:
529552 Used to deform the plotted mesh. Must output a 3D vector field.
530- Defaults to None.
531- scale_factor : float, optional
532- Scaling factor to apply when warping the mesh. Defaults to 1.0.
533- **kwargs : optional
553+ scale_factor:
554+ Scaling factor to apply when warping the mesh.
555+ meshed_region:
556+ Mesh to plot the field on.
557+ **kwargs:
534558 Additional keyword arguments for the plotter. For additional keyword
535559 arguments, see ``help(pyvista.plot)``.
536560 """
537561 from ansys .dpf .core .plotter import Plotter
538562
539- pl = Plotter (self .meshed_region , ** kwargs )
563+ if meshed_region is None :
564+ meshed_region = self .meshed_region
565+ pl = Plotter (meshed_region , ** kwargs )
540566 return pl .plot_contour (
541567 self ,
542568 shell_layers ,
@@ -691,16 +717,23 @@ def field_definition(self):
691717 def field_definition (self , value ):
692718 return self ._set_field_definition (value )
693719
694- def _get_meshed_region (self ):
720+ def _get_meshed_region (self ) -> MeshedRegion :
695721 """Retrieve the meshed region.
696722
697723 Returns
698724 -------
699725 :class:`ansys.dpf.core.meshed_region.MeshedRegion`
700726
701727 """
728+ try :
729+ support = self ._api .csfield_get_support_as_meshed_region (self )
730+ except DPFServerException as e :
731+ if "the field doesn't have this support type" in str (e ):
732+ support = None
733+ else :
734+ raise e
702735 return meshed_region .MeshedRegion (
703- mesh = self . _api . csfield_get_support_as_meshed_region ( self ) ,
736+ mesh = support ,
704737 server = self ._server ,
705738 )
706739
@@ -736,7 +769,7 @@ def time_freq_support(self, value):
736769 self ._api .csfield_set_support (self , value )
737770
738771 @property
739- def meshed_region (self ):
772+ def meshed_region (self ) -> MeshedRegion :
740773 """Meshed region of the field.
741774
742775 Return
@@ -747,8 +780,8 @@ def meshed_region(self):
747780 return self ._get_meshed_region ()
748781
749782 @meshed_region .setter
750- def meshed_region (self , value ):
751- self ._set_support (value , "MESHED_REGION" )
783+ def meshed_region (self , value : MeshedRegion ):
784+ self ._set_support (support = value , support_type = "MESHED_REGION" )
752785
753786 def __add__ (self , field_b ):
754787 """Add two fields.
0 commit comments