22
22
23
23
"""Field."""
24
24
25
+ from __future__ import annotations
26
+
27
+ from typing import TYPE_CHECKING
28
+
25
29
import numpy as np
26
30
27
31
from ansys import dpf
28
32
from 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
+ )
30
40
from ansys .dpf .core .field_base import _FieldBase , _LocalFieldBase
31
41
from ansys .dpf .core .field_definition import FieldDefinition
32
42
from ansys .dpf .gate import (
36
46
field_capi ,
37
47
field_grpcapi ,
38
48
)
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
39
55
40
56
41
57
class Field (_FieldBase ):
@@ -500,7 +516,14 @@ def to_nodal(self):
500
516
op .inputs .connect (self )
501
517
return op .outputs .field ()
502
518
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
+ ):
504
527
"""Plot the field or fields container on the mesh support if it exists.
505
528
506
529
Warning
@@ -522,21 +545,24 @@ def plot(self, shell_layers=None, deform_by=None, scale_factor=1.0, **kwargs):
522
545
523
546
Parameters
524
547
----------
525
- shell_layers : shell_layers, optional
548
+ shell_layers:
526
549
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:
529
552
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:
534
558
Additional keyword arguments for the plotter. For additional keyword
535
559
arguments, see ``help(pyvista.plot)``.
536
560
"""
537
561
from ansys .dpf .core .plotter import Plotter
538
562
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 )
540
566
return pl .plot_contour (
541
567
self ,
542
568
shell_layers ,
@@ -691,16 +717,23 @@ def field_definition(self):
691
717
def field_definition (self , value ):
692
718
return self ._set_field_definition (value )
693
719
694
- def _get_meshed_region (self ):
720
+ def _get_meshed_region (self ) -> MeshedRegion :
695
721
"""Retrieve the meshed region.
696
722
697
723
Returns
698
724
-------
699
725
:class:`ansys.dpf.core.meshed_region.MeshedRegion`
700
726
701
727
"""
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
702
735
return meshed_region .MeshedRegion (
703
- mesh = self . _api . csfield_get_support_as_meshed_region ( self ) ,
736
+ mesh = support ,
704
737
server = self ._server ,
705
738
)
706
739
@@ -736,7 +769,7 @@ def time_freq_support(self, value):
736
769
self ._api .csfield_set_support (self , value )
737
770
738
771
@property
739
- def meshed_region (self ):
772
+ def meshed_region (self ) -> MeshedRegion :
740
773
"""Meshed region of the field.
741
774
742
775
Return
@@ -747,8 +780,8 @@ def meshed_region(self):
747
780
return self ._get_meshed_region ()
748
781
749
782
@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" )
752
785
753
786
def __add__ (self , field_b ):
754
787
"""Add two fields.
0 commit comments