pytecplot 1.7.5__py3-none-any.whl → 1.8.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytecplot-1.7.5.dist-info → pytecplot-1.8.0.dist-info}/METADATA +20 -7
- {pytecplot-1.7.5.dist-info → pytecplot-1.8.0.dist-info}/RECORD +18 -18
- {pytecplot-1.7.5.dist-info → pytecplot-1.8.0.dist-info}/WHEEL +1 -1
- tecplot/plot/__init__.py +1 -1
- tecplot/plot/effects.py +175 -0
- tecplot/plot/fieldmap.py +23 -7
- tecplot/plot/isosurface.py +20 -3
- tecplot/plot/plot.py +33 -0
- tecplot/plot/slice.py +20 -2
- tecplot/tecutil/__init__.py +1 -1
- tecplot/tecutil/constant.py +12 -1
- tecplot/tecutil/sv.py +13 -1
- tecplot/tecutil/tecutil.py +1 -1
- tecplot/tecutil/tecutil_connector.py +4 -1
- tecplot/tecutil/util.py +61 -27
- tecplot/version.py +3 -2
- {pytecplot-1.7.5.dist-info → pytecplot-1.8.0.dist-info}/licenses/LICENSE.html +0 -0
- {pytecplot-1.7.5.dist-info → pytecplot-1.8.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pytecplot
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
4
4
|
Summary: A Python interface to Tecplot 360
|
|
5
5
|
Author-email: "Tecplot, Inc." <support@tecplot.com>
|
|
6
6
|
License-Expression: LicenseRef-Tecplot-Software-License
|
|
@@ -26,10 +26,12 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
26
26
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
27
27
|
Classifier: Programming Language :: Python
|
|
28
28
|
Classifier: Programming Language :: Python :: 3
|
|
29
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
29
30
|
Classifier: Programming Language :: Python :: 3.12
|
|
30
31
|
Classifier: Programming Language :: Python :: 3.13
|
|
31
32
|
Classifier: Programming Language :: Python :: 3.14
|
|
32
|
-
|
|
33
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
34
|
+
Requires-Python: >=3.11
|
|
33
35
|
Description-Content-Type: text/x-rst
|
|
34
36
|
License-File: LICENSE.html
|
|
35
37
|
Requires-Dist: protobuf>=3.20.0
|
|
@@ -75,11 +77,11 @@ Documentation
|
|
|
75
77
|
The full documentation is here: https://www.tecplot.com/docs/pytecplot
|
|
76
78
|
|
|
77
79
|
.. note::
|
|
78
|
-
|PyTecplot|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
Python**.
|
|
80
|
+
|PyTecplot| supports the Python versions actively maintained by the Python
|
|
81
|
+
Software Foundation, 64-bit only.
|
|
82
|
+
|PyTecplot| does not support 32 bit Python. Please refer to INSTALL.rst for
|
|
83
|
+
installation instructions and environment setup. For the best experience,
|
|
84
|
+
developers are encouraged to use the **latest supported version of Python**.
|
|
83
85
|
|
|
84
86
|
Quick Start
|
|
85
87
|
-----------
|
|
@@ -107,6 +109,17 @@ For more information, see |Tecplot 360s release notes|.
|
|
|
107
109
|
|
|
108
110
|
.. |Tecplot 360s release notes| replace:: `Tecplot 360's release notes <https://tecplot.com/products/tecplot-360/new-in-tecplot-360>`__
|
|
109
111
|
|
|
112
|
+
PyTecplot 1.8.0
|
|
113
|
+
^^^^^^^^^^^^^^^
|
|
114
|
+
|
|
115
|
+
* Added surface-flow effect controls, including line integral convolution, for
|
|
116
|
+
Tecplot 360 2026 R1 and later.
|
|
117
|
+
* Added `tp.data.load_ugrid()` for loading exactly one `.b8.ugrid` or
|
|
118
|
+
`.lb8.ugrid` file per call with an optional explicit `mapbc_filename`.
|
|
119
|
+
* Documented UGRID MAPBC behavior in the API reference, including companion
|
|
120
|
+
`.mapbc` auto-discovery when `mapbc_filename=None`.
|
|
121
|
+
* Current FEA loader version updated to v196864.
|
|
122
|
+
|
|
110
123
|
PyTecplot 1.7.5
|
|
111
124
|
^^^^^^^^^^^^^^^
|
|
112
125
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
pytecplot-1.
|
|
1
|
+
pytecplot-1.8.0.dist-info/licenses/LICENSE.html,sha256=I240fAHgxqlSQn_eSmb9ktcS4hgugObDnHYQnlEPzt8,28492
|
|
2
2
|
tecplot/__init__.py,sha256=iHAPbGDgIh7HtLWaWcDYfVS4TOsNrRSHyQa-H_6Li3g,3550
|
|
3
3
|
tecplot/constant.py,sha256=KoqTkjfi6xjxolWeYNSUXwh27iBR8DnemNnwdZ2s4GM,8740
|
|
4
4
|
tecplot/exception.py,sha256=YB4zeL0-07yCy4pyUqeFdNQ98nK11h2n3ZHHe58Od6s,6493
|
|
5
5
|
tecplot/macro.py,sha256=uE29ftjdr2HdlFVa9SS-1uBU8Di4W3PwquhI75LnvhM,13307
|
|
6
|
-
tecplot/version.py,sha256=
|
|
6
|
+
tecplot/version.py,sha256=4UuHbgyO35GNcD18udMY95wD3BPnaCXT_iZyOKKtuMw,1545
|
|
7
7
|
tecplot/annotation/__init__.py,sha256=FfL8JhlO6T9NTajVRtgXHp6A6PhjpO51gnVKlHMkzWA,333
|
|
8
8
|
tecplot/annotation/annotation.py,sha256=B7G-BkrQ4lYBpak9RR3u7Pvdci5MGLUvNo_MnJidyY4,8481
|
|
9
9
|
tecplot/annotation/geometry.py,sha256=3jnp_Ut1AQdhSUCMAJ1yFuL_epoGUoTny03cv0kl09k,12516
|
|
@@ -45,23 +45,23 @@ tecplot/legend/legend.py,sha256=FTx03o54awsytUUI2fu8db2oCWvG9L8_D6fymS-gd-Q,4022
|
|
|
45
45
|
tecplot/legend/line_legend.py,sha256=qim_xoNHB7gk-Hn7x6d5Yttd_zfFAaoA2KKqpD0S94Q,2121
|
|
46
46
|
tecplot/legend/rgb_coloring_legend.py,sha256=pDgPaQBtdV99Qz2tDkxc-FGXHmpBSfwZvtDrKXf3gus,9740
|
|
47
47
|
tecplot/legend/scatter_legend.py,sha256=_td5uXO2u3PxT-cCYfGlMVZWHuA4k9i75YYzvLdHv6E,4013
|
|
48
|
-
tecplot/plot/__init__.py,sha256=
|
|
48
|
+
tecplot/plot/__init__.py,sha256=kyez7N6l_bSdd3JodLS8BBxP9W_tfwCcuOBdYOjqxYo,3995
|
|
49
49
|
tecplot/plot/axes.py,sha256=ix_rANTSZdMXWfrBDeR5Zq4AWkJ1hXkog1ply6oSbPI,26962
|
|
50
50
|
tecplot/plot/axis.py,sha256=3cgOPbgQdCAWueqfjOpZUbPdhYLsw3bqw4Apm7vEaRQ,43264
|
|
51
51
|
tecplot/plot/blanking.py,sha256=j7iwZsiN78DiFzExR83iLk8m6LPFWTQx2ev7s_On3d8,20237
|
|
52
52
|
tecplot/plot/contour.py,sha256=tw-7YW27uwr-V17Ip5zvQtZXsbbG4ca-oILB2bCPu1k,44240
|
|
53
|
-
tecplot/plot/effects.py,sha256=
|
|
54
|
-
tecplot/plot/fieldmap.py,sha256=
|
|
53
|
+
tecplot/plot/effects.py,sha256=z6wUe7XmumsQ-PlUtm1bOtKPoDpSUNuUTjy058XM11A,11169
|
|
54
|
+
tecplot/plot/fieldmap.py,sha256=GcwxDN_TyBcdUquV3T5g0k1jXEeCkY3ZL16yGLgngCw,77023
|
|
55
55
|
tecplot/plot/grid.py,sha256=p8h2Tmu93aVunOww6VXSuK8onjf1HkYZRQEyApTJr_c,22463
|
|
56
56
|
tecplot/plot/hoe_settings.py,sha256=r_ZFwhWa0pes3bQwqcX6kpMWp7Q7_tLalCIHdIAUw8Y,1931
|
|
57
|
-
tecplot/plot/isosurface.py,sha256=
|
|
57
|
+
tecplot/plot/isosurface.py,sha256=Y8leSqYnqg-e_YHQ4ZMp4djOwZaLMfBJBE1QWBm13ms,41856
|
|
58
58
|
tecplot/plot/labels.py,sha256=ac8Dl37lGbkY78cJJo_aCuN9zslYZthSZqriTHGkPOs,10578
|
|
59
59
|
tecplot/plot/linemap.py,sha256=NHb83QTY1OzI2PO5D_HSlaAxuTrLJxH4fEpE-YQKPgY,63631
|
|
60
60
|
tecplot/plot/linking.py,sha256=HyetVeDsnUsGJtmWLURg6ylyCom0zR-0UubrVynB_fs,16775
|
|
61
|
-
tecplot/plot/plot.py,sha256=
|
|
61
|
+
tecplot/plot/plot.py,sha256=AxerHBcbVdk_K8wMkEtQ3Yulfii6rXFHggpjDPiMauE,61751
|
|
62
62
|
tecplot/plot/rgb_coloring.py,sha256=OfcIvhQ9Tm5TQylOUttX7QcNu3CHtETBpIz7gqa9GwY,9417
|
|
63
63
|
tecplot/plot/scatter.py,sha256=_Z7Kte2XSruGcDxEDETD3-4-ynYPvc85_W5jNSzG9lE,12610
|
|
64
|
-
tecplot/plot/slice.py,sha256=
|
|
64
|
+
tecplot/plot/slice.py,sha256=364P2jyWE-Qovgr6Lii_bU6G2fRNKhQH-NRBHryc5ZQ,53897
|
|
65
65
|
tecplot/plot/streamtrace.py,sha256=6x6yJgMgmtUAGUjqqaWWyMvIPjbRdvKjkqE6LKbDf_o,65581
|
|
66
66
|
tecplot/plot/symbol.py,sha256=6p28udpGG-rOKCAb9bgsk6kWHqXYPfAQ7W-jBrtmPaA,18422
|
|
67
67
|
tecplot/plot/ticks.py,sha256=Wx3myMFWJYqeE8uefTv3sZYBBAAcaK2Pg6v-0pBk56M,19252
|
|
@@ -74,26 +74,26 @@ tecplot/session/config.py,sha256=UrKiaP1HIZSO1J-eV-SEPZa0LvxK80eDcQanEZNeMtw,295
|
|
|
74
74
|
tecplot/session/session.py,sha256=xBvfy90k6WBbUTQEFBWLm4F53_DtKp14gC-uMO8q5Xs,17908
|
|
75
75
|
tecplot/session/state_changed.py,sha256=qefZrJDIO5gT8hvkrrRmq75rQwIFXKA12qrXx6TPiD4,7961
|
|
76
76
|
tecplot/session/style.py,sha256=djEwXG3H8_izU1Zsk5b7FlJo-WsxgLzb3N78YHCC7Us,17619
|
|
77
|
-
tecplot/tecutil/__init__.py,sha256=
|
|
77
|
+
tecplot/tecutil/__init__.py,sha256=5jki45DrpyEnes5lJr1lxIlfa17KEMX9yL7rvx8p7qc,783
|
|
78
78
|
tecplot/tecutil/arglist.py,sha256=Ls2PIplqW2mpjPEyUryeiGcKJrrAZNFHRupBHF3mOp4,9071
|
|
79
79
|
tecplot/tecutil/captured_output.py,sha256=_q4pFzQvQ736AO_PAVNxlEhzIaxgZV19sBrMuLkiCB4,6373
|
|
80
|
-
tecplot/tecutil/constant.py,sha256=
|
|
80
|
+
tecplot/tecutil/constant.py,sha256=P1bwpHlwAtOLw4Kdz1zHipEjVTEtKIy0Nv_5b3nmLQA,21935
|
|
81
81
|
tecplot/tecutil/index_set.py,sha256=oF4nLpeNOu0-F7RIQUO33WWKGIvK9O6T7lQBIALxRg0,3984
|
|
82
82
|
tecplot/tecutil/lock.py,sha256=rVa7hekZ7ZFZnvYgRGsWxZUty9JUbC2EZ-eO4vHzqlU,967
|
|
83
83
|
tecplot/tecutil/message_pb2.py,sha256=5LLHkC4o1hiXYx7FGPLFkPvN2YzVhPT7gfVNVJg_sEU,3668
|
|
84
84
|
tecplot/tecutil/preamble.py,sha256=wzpTPY3xyv8-cnWpp5q1ay0jlXRNmMEmC0UXN-xu0aU,2142
|
|
85
85
|
tecplot/tecutil/stringlist.py,sha256=GMuwiP0scuyLxEUbcJFIz4DU9TLAhNdjGHDWawGGT-o,3533
|
|
86
|
-
tecplot/tecutil/sv.py,sha256=
|
|
87
|
-
tecplot/tecutil/tecutil.py,sha256=
|
|
86
|
+
tecplot/tecutil/sv.py,sha256=2fWRyOzIMCLYFT7e0uLHVPTHBo-yhJeOENxh15jwmKo,55091
|
|
87
|
+
tecplot/tecutil/tecutil.py,sha256=1Gk0piCrUyhcEv04VQ0Pmw3YZxbAjg69gwQILYlFn_4,697201
|
|
88
88
|
tecplot/tecutil/tecutil_client.py,sha256=2ELrTJG2hlPoOMp6ud0bb6ciTSQTEhFpkA50QrMVB6c,23754
|
|
89
|
-
tecplot/tecutil/tecutil_connector.py,sha256=
|
|
89
|
+
tecplot/tecutil/tecutil_connector.py,sha256=GzmdZ2yBn6HFzD-qB1ICz-dduocFnjkV6mmBvkn5qtc,37148
|
|
90
90
|
tecplot/tecutil/tecutil_rpc.py,sha256=bei8gcQPHRS1OgBZQdLSYdX6SF_M1WzAqhSp3kQK_sk,288068
|
|
91
|
-
tecplot/tecutil/util.py,sha256=
|
|
91
|
+
tecplot/tecutil/util.py,sha256=wtcK1_tO4_6pKBsqYopoM5RJl35kPcYFY23kvn1tJZU,12559
|
|
92
92
|
tecplot/text/__init__.py,sha256=hXk-XwewRyS-yxif3Wx5FS1wO5Uh6WQpRgtUiUfjNo0,112
|
|
93
93
|
tecplot/text/font.py,sha256=tHMT2NGJC8rLCVCUdmxK0YN_f4hZpTevWIofwjAp7cs,6722
|
|
94
94
|
tecplot/text/label_format.py,sha256=24MOvWtVZ_SKdcU16i5yEfxC-hBipmNOLQwJ_kzDr3k,12328
|
|
95
95
|
tecplot/text/textbox.py,sha256=nwr0ReRC56MY5gB7Ie6UdDxrd_Os_ZI1_3n4bmOzalU,2882
|
|
96
|
-
pytecplot-1.
|
|
97
|
-
pytecplot-1.
|
|
98
|
-
pytecplot-1.
|
|
99
|
-
pytecplot-1.
|
|
96
|
+
pytecplot-1.8.0.dist-info/METADATA,sha256=gvwJlY-I2CjNQUlcF9QNlfRYtUTfM2tWUjJ8UmOTods,24173
|
|
97
|
+
pytecplot-1.8.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
98
|
+
pytecplot-1.8.0.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
|
|
99
|
+
pytecplot-1.8.0.dist-info/RECORD,,
|
tecplot/plot/__init__.py
CHANGED
|
@@ -11,7 +11,7 @@ from .blanking import IJKBlanking
|
|
|
11
11
|
from .contour import (ContourGroup, ContourColorCutoff, ContourColormapFilter,
|
|
12
12
|
ContourColormapOverride, ContourColormapZebraShade,
|
|
13
13
|
ContourLabels, ContourLevels, ContourLines)
|
|
14
|
-
from .effects import LightSource
|
|
14
|
+
from .effects import LightSource, LineIntegralConvolution, SurfaceFlowEffects
|
|
15
15
|
from .fieldmap import (FieldmapContour, FieldmapEdge, FieldmapEffects,
|
|
16
16
|
FieldmapEffects3D, Fieldmap, Cartesian2DFieldmap,
|
|
17
17
|
Cartesian2DFieldmapCollection, Cartesian3DFieldmap,
|
tecplot/plot/effects.py
CHANGED
|
@@ -1,7 +1,182 @@
|
|
|
1
1
|
from builtins import super
|
|
2
2
|
|
|
3
3
|
from ..tecutil import sv
|
|
4
|
+
from ..constant import *
|
|
4
5
|
from .. import session, tecutil, version
|
|
6
|
+
from ..exception import *
|
|
7
|
+
from ..tecutil import _require_surface_flow_effects_sdk
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SurfaceFlowEffects(session.Style):
|
|
11
|
+
"""Shared surface-flow effect settings for field-plot surfaces.
|
|
12
|
+
|
|
13
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
14
|
+
Surface-flow effects require Tecplot 360 2026 R1 or later.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def __init__(self, plot):
|
|
18
|
+
_require_surface_flow_effects_sdk()
|
|
19
|
+
self.plot = plot
|
|
20
|
+
super().__init__(sv.GLOBALSURFACEFLOWEFFECTS,
|
|
21
|
+
uniqueid=self.plot.frame.uid)
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def line_integral_convolution(self):
|
|
25
|
+
"""`LineIntegralConvolution`: Line integral convolution parameter settings.
|
|
26
|
+
|
|
27
|
+
Example usage::
|
|
28
|
+
|
|
29
|
+
>>> lic = plot.surface_flow_effects.line_integral_convolution
|
|
30
|
+
>>> lic.step_size = 0.9
|
|
31
|
+
"""
|
|
32
|
+
return LineIntegralConvolution(self)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class LineIntegralConvolution(session.Style):
|
|
36
|
+
"""Shared line integral convolution settings for field-plot surfaces.
|
|
37
|
+
|
|
38
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
39
|
+
Line integral convolution requires Tecplot 360 2026 R1 or later.
|
|
40
|
+
|
|
41
|
+
.. code-block:: python
|
|
42
|
+
:emphasize-lines: 18-24
|
|
43
|
+
|
|
44
|
+
import os
|
|
45
|
+
import tecplot
|
|
46
|
+
from tecplot.constant import *
|
|
47
|
+
|
|
48
|
+
examples_dir = tecplot.session.tecplot_examples_directory()
|
|
49
|
+
datafile = os.path.join(examples_dir, 'SimpleData', 'VortexShedding.plt')
|
|
50
|
+
dataset = tecplot.data.load_tecplot(datafile)
|
|
51
|
+
frame = dataset.frame
|
|
52
|
+
frame.plot_type = PlotType.Cartesian2D
|
|
53
|
+
|
|
54
|
+
plot = frame.plot()
|
|
55
|
+
|
|
56
|
+
plot.axes.x_axis.min = -0.004
|
|
57
|
+
plot.axes.x_axis.max = 0.004
|
|
58
|
+
plot.axes.y_axis.min = -0.004
|
|
59
|
+
plot.axes.y_axis.max = 0.004
|
|
60
|
+
|
|
61
|
+
plot.use_surface_flow_effect = True
|
|
62
|
+
|
|
63
|
+
fmap = plot.fieldmap(1)
|
|
64
|
+
fmap.effects.surface_flow_effect = SurfaceFlowEffect.LIC
|
|
65
|
+
|
|
66
|
+
lic = plot.surface_flow_effects.line_integral_convolution
|
|
67
|
+
lic.intensity = 0.95
|
|
68
|
+
|
|
69
|
+
tecplot.export.save_png('line_integral_convolution.png')
|
|
70
|
+
|
|
71
|
+
.. figure:: /_static/images/line_integral_convolution.png
|
|
72
|
+
:width: 300px
|
|
73
|
+
:figwidth: 300px
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
def __init__(self, surface_flow_effects):
|
|
77
|
+
self.surface_flow_effects = surface_flow_effects
|
|
78
|
+
self.plot = surface_flow_effects.plot
|
|
79
|
+
super().__init__(surface_flow_effects._sv, sv.LINEINTEGRALCONVOLUTION,
|
|
80
|
+
**surface_flow_effects._kw)
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def step_size(self):
|
|
84
|
+
"""`float`: Convolution step size."""
|
|
85
|
+
return self._get_style(float, sv.STEPSIZE)
|
|
86
|
+
|
|
87
|
+
@step_size.setter
|
|
88
|
+
def step_size(self, value):
|
|
89
|
+
self._set_style(float(value), sv.STEPSIZE)
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def num_steps(self):
|
|
93
|
+
"""`int`: Number of convolution steps."""
|
|
94
|
+
return self._get_style(int, sv.NUMSTEPS)
|
|
95
|
+
|
|
96
|
+
@num_steps.setter
|
|
97
|
+
def num_steps(self, value):
|
|
98
|
+
self._set_style(int(value), sv.NUMSTEPS)
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def intensity(self):
|
|
102
|
+
"""`float`: Line integral convolution intensity."""
|
|
103
|
+
return self._get_style(float, sv.INTENSITY)
|
|
104
|
+
|
|
105
|
+
@intensity.setter
|
|
106
|
+
def intensity(self, value):
|
|
107
|
+
self._set_style(float(value), sv.INTENSITY)
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def smoothing(self):
|
|
111
|
+
"""`int`: Smoothing pass count."""
|
|
112
|
+
return self._get_style(int, sv.SMOOTHING)
|
|
113
|
+
|
|
114
|
+
@smoothing.setter
|
|
115
|
+
def smoothing(self, value):
|
|
116
|
+
self._set_style(int(value), sv.SMOOTHING)
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def contrast_boost(self):
|
|
120
|
+
"""`float`: Line integral convolution contrast boost amount."""
|
|
121
|
+
return self._get_style(float, sv.CONTRASTBOOST)
|
|
122
|
+
|
|
123
|
+
@contrast_boost.setter
|
|
124
|
+
def contrast_boost(self, value):
|
|
125
|
+
self._set_style(float(value), sv.CONTRASTBOOST)
|
|
126
|
+
|
|
127
|
+
@property
|
|
128
|
+
def shading(self):
|
|
129
|
+
"""`float`: Line integral convolution surface shading amount."""
|
|
130
|
+
return self._get_style(float, sv.SHADING)
|
|
131
|
+
|
|
132
|
+
@shading.setter
|
|
133
|
+
def shading(self, value):
|
|
134
|
+
self._set_style(float(value), sv.SHADING)
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def color_mode(self):
|
|
138
|
+
"""`LICColorMode`: Line integral convolution compositing mode."""
|
|
139
|
+
return self._get_style(LICColorMode, sv.COLORMODE)
|
|
140
|
+
|
|
141
|
+
@color_mode.setter
|
|
142
|
+
def color_mode(self, value):
|
|
143
|
+
self._set_style(LICColorMode(value), sv.COLORMODE)
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def mask_threshold(self):
|
|
147
|
+
"""`float`: Line integral convolution mask threshold."""
|
|
148
|
+
return self._get_style(float, sv.LICMASKTHRESHOLD)
|
|
149
|
+
|
|
150
|
+
@mask_threshold.setter
|
|
151
|
+
def mask_threshold(self, value):
|
|
152
|
+
self._set_style(float(value), sv.LICMASKTHRESHOLD)
|
|
153
|
+
|
|
154
|
+
@property
|
|
155
|
+
def mask_fade_size(self):
|
|
156
|
+
"""`float`: Line integral convolution mask fade size."""
|
|
157
|
+
return self._get_style(float, sv.LICMASKFADESIZE)
|
|
158
|
+
|
|
159
|
+
@mask_fade_size.setter
|
|
160
|
+
def mask_fade_size(self, value):
|
|
161
|
+
self._set_style(float(value), sv.LICMASKFADESIZE)
|
|
162
|
+
|
|
163
|
+
@property
|
|
164
|
+
def use_mask_threshold(self):
|
|
165
|
+
"""`bool`: Enable the Line integral convolution mask threshold."""
|
|
166
|
+
return self._get_style(bool, sv.USELICMASKTHRESHOLD)
|
|
167
|
+
|
|
168
|
+
@use_mask_threshold.setter
|
|
169
|
+
def use_mask_threshold(self, value):
|
|
170
|
+
self._set_style(bool(value), sv.USELICMASKTHRESHOLD)
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def overlay_color(self):
|
|
174
|
+
"""`Color`: Line integral convolution overlay color used when color mode is Overlay."""
|
|
175
|
+
return self._get_style(Color, sv.OVERLAYCOLOR)
|
|
176
|
+
|
|
177
|
+
@overlay_color.setter
|
|
178
|
+
def overlay_color(self, value):
|
|
179
|
+
self._set_style(Color(value), sv.OVERLAYCOLOR)
|
|
5
180
|
|
|
6
181
|
|
|
7
182
|
class LightSource(session.Style):
|
tecplot/plot/fieldmap.py
CHANGED
|
@@ -11,7 +11,8 @@ from textwrap import dedent
|
|
|
11
11
|
from ..tecutil import _tecutil
|
|
12
12
|
from ..constant import *
|
|
13
13
|
from ..exception import *
|
|
14
|
-
from ..tecutil import Index, IndexSet,
|
|
14
|
+
from ..tecutil import (Index, IndexSet, _require_surface_flow_effects_sdk,
|
|
15
|
+
color_spec, flatten_args, sv)
|
|
15
16
|
from .. import session, tecutil
|
|
16
17
|
from . import symbol
|
|
17
18
|
|
|
@@ -1587,10 +1588,10 @@ class Fieldmap(FieldmapCollection):
|
|
|
1587
1588
|
|
|
1588
1589
|
|
|
1589
1590
|
class FieldmapEffects(session.SubStyle):
|
|
1590
|
-
"""Clipping and
|
|
1591
|
+
"""Clipping, blanking, and surface-flow style control.
|
|
1591
1592
|
|
|
1592
|
-
This object controls value blanking
|
|
1593
|
-
this fieldmap.
|
|
1593
|
+
This object controls value blanking, clipping from plane slices, and
|
|
1594
|
+
the ``surface_flow_effect`` setting for this fieldmap.
|
|
1594
1595
|
"""
|
|
1595
1596
|
def __init__(self, fieldmap):
|
|
1596
1597
|
self.fieldmap = fieldmap
|
|
@@ -1610,6 +1611,21 @@ class FieldmapEffects(session.SubStyle):
|
|
|
1610
1611
|
def value_blanking(self, value):
|
|
1611
1612
|
self._set_style(bool(value), sv.USEVALUEBLANKING)
|
|
1612
1613
|
|
|
1614
|
+
@property
|
|
1615
|
+
def surface_flow_effect(self):
|
|
1616
|
+
"""`SurfaceFlowEffect`: Surface-flow effect for this fieldmap.
|
|
1617
|
+
|
|
1618
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
1619
|
+
Surface-flow effects require Tecplot 360 2026 R1 or later.
|
|
1620
|
+
"""
|
|
1621
|
+
_require_surface_flow_effects_sdk()
|
|
1622
|
+
return self._get_style(SurfaceFlowEffect, sv.SURFACEFLOWEFFECT)
|
|
1623
|
+
|
|
1624
|
+
@surface_flow_effect.setter
|
|
1625
|
+
def surface_flow_effect(self, value):
|
|
1626
|
+
_require_surface_flow_effects_sdk()
|
|
1627
|
+
self._set_style(SurfaceFlowEffect(value), sv.SURFACEFLOWEFFECT)
|
|
1628
|
+
|
|
1613
1629
|
@property
|
|
1614
1630
|
def clip_planes(self):
|
|
1615
1631
|
tecutil.api_moved('FieldmapEffects.clip_planes',
|
|
@@ -1626,7 +1642,7 @@ class FieldmapEffects(session.SubStyle):
|
|
|
1626
1642
|
|
|
1627
1643
|
|
|
1628
1644
|
class FieldmapEffects3D(FieldmapEffects):
|
|
1629
|
-
"""Lighting and
|
|
1645
|
+
"""Lighting, translucency and surface-flow style control.
|
|
1630
1646
|
|
|
1631
1647
|
.. code-block:: python
|
|
1632
1648
|
:emphasize-lines: 24-26
|
|
@@ -1958,7 +1974,7 @@ class Cartesian2DFieldmapCollection(FieldmapCollection):
|
|
|
1958
1974
|
|
|
1959
1975
|
@property
|
|
1960
1976
|
def effects(self):
|
|
1961
|
-
"""`FieldmapEffects`: Style control for clipping and
|
|
1977
|
+
"""`FieldmapEffects`: Style control for clipping, blanking, and surface-flow effects.
|
|
1962
1978
|
"""
|
|
1963
1979
|
return FieldmapEffects(self)
|
|
1964
1980
|
|
|
@@ -2091,7 +2107,7 @@ class Cartesian3DFieldmapCollection(FieldmapCollection):
|
|
|
2091
2107
|
|
|
2092
2108
|
@property
|
|
2093
2109
|
def effects(self):
|
|
2094
|
-
"""`FieldmapEffects3D`: Style control for blanking and lighting
|
|
2110
|
+
"""`FieldmapEffects3D`: Style control for surface-flow, blanking, and lighting.
|
|
2095
2111
|
"""
|
|
2096
2112
|
return FieldmapEffects3D(self)
|
|
2097
2113
|
|
tecplot/plot/isosurface.py
CHANGED
|
@@ -5,8 +5,8 @@ from collections.abc import Iterable
|
|
|
5
5
|
from ..tecutil import _tecutil
|
|
6
6
|
from ..constant import *
|
|
7
7
|
from ..exception import *
|
|
8
|
-
from .. import session, tecutil
|
|
9
|
-
from ..tecutil import Index,
|
|
8
|
+
from .. import session, tecutil
|
|
9
|
+
from ..tecutil import Index, _require_surface_flow_effects_sdk, color_spec, sv
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class IsosurfaceGroupStyle(session.Style):
|
|
@@ -362,7 +362,7 @@ class IsosurfaceContour(IsosurfaceGroupStyle):
|
|
|
362
362
|
|
|
363
363
|
|
|
364
364
|
class IsosurfaceEffects(IsosurfaceGroupStyle):
|
|
365
|
-
"""Effects of the isosurface group.
|
|
365
|
+
"""Effects of the isosurface group, including surface-flow effects.
|
|
366
366
|
|
|
367
367
|
.. code-block:: python
|
|
368
368
|
:emphasize-lines: 21-23
|
|
@@ -451,6 +451,21 @@ class IsosurfaceEffects(IsosurfaceGroupStyle):
|
|
|
451
451
|
def lighting_effect(self, value):
|
|
452
452
|
self._set_style(LightingEffect(value), sv.LIGHTINGEFFECT)
|
|
453
453
|
|
|
454
|
+
@property
|
|
455
|
+
def surface_flow_effect(self):
|
|
456
|
+
"""`SurfaceFlowEffect`: Surface-flow mode for this isosurface group.
|
|
457
|
+
|
|
458
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
459
|
+
Surface-flow effects require Tecplot 360 2026 R1 or later.
|
|
460
|
+
"""
|
|
461
|
+
_require_surface_flow_effects_sdk()
|
|
462
|
+
return self._get_style(SurfaceFlowEffect, sv.SURFACEFLOWEFFECT)
|
|
463
|
+
|
|
464
|
+
@surface_flow_effect.setter
|
|
465
|
+
def surface_flow_effect(self, value):
|
|
466
|
+
_require_surface_flow_effects_sdk()
|
|
467
|
+
self._set_style(SurfaceFlowEffect(value), sv.SURFACEFLOWEFFECT)
|
|
468
|
+
|
|
454
469
|
@property
|
|
455
470
|
def surface_translucency(self):
|
|
456
471
|
"""`int`: Surface translucency of the isosurface group.
|
|
@@ -733,6 +748,8 @@ class IsosurfaceGroup(session.Style):
|
|
|
733
748
|
def effects(self):
|
|
734
749
|
"""`IsosurfaceEffects`: Settings for isosurface effects.
|
|
735
750
|
|
|
751
|
+
This includes ``surface_flow_effect``, translucency, and lighting.
|
|
752
|
+
|
|
736
753
|
Example usage::
|
|
737
754
|
|
|
738
755
|
>>> plot.isosurface(0).show = True
|
tecplot/plot/plot.py
CHANGED
|
@@ -341,6 +341,39 @@ class FieldPlot(Plot):
|
|
|
341
341
|
session.set_style(bool(show), sv.STREAMTRACELAYERS, sv.SHOW,
|
|
342
342
|
uniqueid=self.frame.uid)
|
|
343
343
|
|
|
344
|
+
@property
|
|
345
|
+
def use_surface_flow_effect(self):
|
|
346
|
+
"""`bool`: Enable field-layer surface-flow rendering for this frame.
|
|
347
|
+
|
|
348
|
+
Example usage::
|
|
349
|
+
|
|
350
|
+
>>> plot.use_surface_flow_effect = True
|
|
351
|
+
|
|
352
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
353
|
+
Surface-flow effects require Tecplot 360 2026 R1 or later.
|
|
354
|
+
"""
|
|
355
|
+
tecutil._require_surface_flow_effects_sdk()
|
|
356
|
+
return self._get_style(bool, sv.USESURFACEFLOWEFFECT)
|
|
357
|
+
|
|
358
|
+
@use_surface_flow_effect.setter
|
|
359
|
+
def use_surface_flow_effect(self, value):
|
|
360
|
+
tecutil._require_surface_flow_effects_sdk()
|
|
361
|
+
self._set_style(bool(value), sv.USESURFACEFLOWEFFECT)
|
|
362
|
+
|
|
363
|
+
@property
|
|
364
|
+
def surface_flow_effects(self):
|
|
365
|
+
"""`SurfaceFlowEffects`: Shared surface-flow effect settings.
|
|
366
|
+
|
|
367
|
+
Example usage::
|
|
368
|
+
|
|
369
|
+
>>> lic = plot.surface_flow_effects.line_integral_convolution
|
|
370
|
+
>>> lic.step_size = 0.9
|
|
371
|
+
|
|
372
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
373
|
+
Surface-flow effects require Tecplot 360 2026 R1 or later.
|
|
374
|
+
"""
|
|
375
|
+
return effects.SurfaceFlowEffects(self)
|
|
376
|
+
|
|
344
377
|
@property
|
|
345
378
|
def show_vector(self):
|
|
346
379
|
"""`bool`: Enable drawing of vectors.
|
tecplot/plot/slice.py
CHANGED
|
@@ -6,9 +6,10 @@ from collections.abc import Iterable
|
|
|
6
6
|
from warnings import warn
|
|
7
7
|
|
|
8
8
|
from ..tecutil import _tecutil, sv
|
|
9
|
+
from ..tecutil import _require_surface_flow_effects_sdk
|
|
9
10
|
from ..constant import *
|
|
10
11
|
from ..exception import *
|
|
11
|
-
from .. import session, tecutil
|
|
12
|
+
from .. import session, tecutil
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class SliceMesh(session.SubStyle):
|
|
@@ -183,7 +184,7 @@ class SliceShade(session.SubStyle):
|
|
|
183
184
|
|
|
184
185
|
|
|
185
186
|
class SliceEffects(session.SubStyle):
|
|
186
|
-
"""Slice effects for this slice.
|
|
187
|
+
"""Slice effects for this slice, including surface-flow effects.
|
|
187
188
|
|
|
188
189
|
.. code-block:: python
|
|
189
190
|
:emphasize-lines: 16-17
|
|
@@ -262,6 +263,21 @@ class SliceEffects(session.SubStyle):
|
|
|
262
263
|
def lighting_effect(self, value):
|
|
263
264
|
self._set_style(LightingEffect(value), sv.LIGHTINGEFFECT)
|
|
264
265
|
|
|
266
|
+
@property
|
|
267
|
+
def surface_flow_effect(self):
|
|
268
|
+
"""`SurfaceFlowEffect`: Surface-flow mode for this slice group.
|
|
269
|
+
|
|
270
|
+
.. versionadded:: 1.7, Tecplot 360 2026.1
|
|
271
|
+
Surface-flow effects require Tecplot 360 2026 R1 or later.
|
|
272
|
+
"""
|
|
273
|
+
_require_surface_flow_effects_sdk()
|
|
274
|
+
return self._get_style(SurfaceFlowEffect, sv.SURFACEFLOWEFFECT)
|
|
275
|
+
|
|
276
|
+
@surface_flow_effect.setter
|
|
277
|
+
def surface_flow_effect(self, value):
|
|
278
|
+
_require_surface_flow_effects_sdk()
|
|
279
|
+
self._set_style(SurfaceFlowEffect(value), sv.SURFACEFLOWEFFECT)
|
|
280
|
+
|
|
265
281
|
@property
|
|
266
282
|
def surface_translucency(self):
|
|
267
283
|
"""`int`: Surface translucency of the slice group.
|
|
@@ -992,6 +1008,8 @@ class SliceGroupCollection(session.Style):
|
|
|
992
1008
|
def effects(self):
|
|
993
1009
|
"""`SliceEffects`: Effects attributes for this slice group.
|
|
994
1010
|
|
|
1011
|
+
This includes ``surface_flow_effect``, translucency, and lighting.
|
|
1012
|
+
|
|
995
1013
|
Example usage::
|
|
996
1014
|
|
|
997
1015
|
>>> plot.slice(0).effects.use_translucency = True
|
tecplot/tecutil/__init__.py
CHANGED
|
@@ -11,6 +11,6 @@ from .util import (maxint64, minint64, maxuint64, IndexRange, Index, XY, XYZ,
|
|
|
11
11
|
lock_attributes, check_arglist_argtypes, color_spec, filled_slice,
|
|
12
12
|
array_to_str, ListWrapper, optional, split_macro,
|
|
13
13
|
normalize_filenames, normalize_path, temporary_closed_file,
|
|
14
|
-
api_changed, api_moved)
|
|
14
|
+
api_changed, api_moved, _require_surface_flow_effects_sdk)
|
|
15
15
|
|
|
16
16
|
ArgList = RemoteArgList
|
tecplot/tecutil/constant.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file was auto-generated on 2026-
|
|
2
|
+
# This file was auto-generated on 2026-09-21 by tecgen.
|
|
3
3
|
# IMPORTANT: DO NOT edit this file!
|
|
4
4
|
#
|
|
5
5
|
from enum import Enum as _Enum
|
|
@@ -729,6 +729,12 @@ class JPEGEncoding(_Enum):
|
|
|
729
729
|
Standard = 0
|
|
730
730
|
Progressive = 1
|
|
731
731
|
|
|
732
|
+
class LICColorMode(_Enum):
|
|
733
|
+
Multiply = 0
|
|
734
|
+
Blend = 1
|
|
735
|
+
Overlay = 2
|
|
736
|
+
Invert = 3
|
|
737
|
+
|
|
732
738
|
class LabelAlignment(_Enum):
|
|
733
739
|
ByAngle = 0
|
|
734
740
|
AlongAxis = 1
|
|
@@ -1115,6 +1121,11 @@ class Streamtrace(_Enum):
|
|
|
1115
1121
|
VolumeRod = 4
|
|
1116
1122
|
TwoDLine = 5
|
|
1117
1123
|
|
|
1124
|
+
class SurfaceFlowEffect(_Enum):
|
|
1125
|
+
None_ = 0
|
|
1126
|
+
LIC = 1
|
|
1127
|
+
WindMap = 2
|
|
1128
|
+
|
|
1118
1129
|
class SurfaceGenerationMethod(_Enum):
|
|
1119
1130
|
AllowQuads = 0
|
|
1120
1131
|
AllTriangles = 1
|
tecplot/tecutil/sv.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file was auto-generated on 2026-
|
|
2
|
+
# This file was auto-generated on 2026-11-04 by tecgen.
|
|
3
3
|
# IMPORTANT: DO NOT edit this file!
|
|
4
4
|
#
|
|
5
5
|
|
|
@@ -185,6 +185,7 @@ COLORMAPOVERRIDE = 'COLORMAPOVERRIDE'
|
|
|
185
185
|
COLORMAPOVERRIDEACTIVE = 'COLORMAPOVERRIDEACTIVE'
|
|
186
186
|
COLORMAPSHADERATIO = 'COLORMAPSHADERATIO'
|
|
187
187
|
COLORMAPTRANSFORMATION = 'COLORMAPTRANSFORMATION'
|
|
188
|
+
COLORMODE = 'LICCOLORMODE'
|
|
188
189
|
COLORPREFERENCESDIALOG = 'COLORPREFERENCESDIALOG'
|
|
189
190
|
COLORSPECTRUM = 'COLORSPECTRUM'
|
|
190
191
|
COMMAND = 'COMMAND'
|
|
@@ -214,6 +215,7 @@ CONTOURLEVELACTION = 'CONTOURLEVELACTION'
|
|
|
214
215
|
CONTOURLINEMODE = 'CONTOURLINEMODE'
|
|
215
216
|
CONTOURLINESTYLE = 'CONTOURLINESTYLE'
|
|
216
217
|
CONTOURTYPE = 'CONTOURTYPE'
|
|
218
|
+
CONTRASTBOOST = 'CONTRASTBOOST'
|
|
217
219
|
CONTROLALTEDDRAG = 'CONTROLALTEDDRAG'
|
|
218
220
|
CONTROLALTSHIFTEDDRAG = 'CONTROLALTSHIFTEDDRAG'
|
|
219
221
|
CONTROLLEDDRAG = 'CONTROLLEDDRAG'
|
|
@@ -557,6 +559,7 @@ GLOBALRGB = 'GLOBALRGB'
|
|
|
557
559
|
GLOBALSCATTER = 'GLOBALSCATTER'
|
|
558
560
|
GLOBALSLICE = 'GLOBALSLICE'
|
|
559
561
|
GLOBALSTREAM = 'GLOBALSTREAM'
|
|
562
|
+
GLOBALSURFACEFLOWEFFECTS = 'GLOBALSURFACEFLOWEFFECTS'
|
|
560
563
|
GLOBALTHREED = 'GLOBALTHREED'
|
|
561
564
|
GLOBALTHREEDVECTOR = 'GLOBALTHREEDVECTOR'
|
|
562
565
|
GLOBALTIME = 'GLOBALTIME'
|
|
@@ -785,6 +788,8 @@ LGRAINBOWMAP = 'LGRAINBOW'
|
|
|
785
788
|
LGSETUPSTR = 'LGSETUPSTR'
|
|
786
789
|
LGSPOOLCMD = 'LGSPOOLCMD'
|
|
787
790
|
LICENSEFILE = 'LICENSEFILE'
|
|
791
|
+
LICMASKFADESIZE = 'LICMASKFADESIZE'
|
|
792
|
+
LICMASKTHRESHOLD = 'LICMASKTHRESHOLD'
|
|
788
793
|
LIGHTINGEFFECT = 'LIGHTINGEFFECT'
|
|
789
794
|
LIGHTSOURCE = 'LIGHTSOURCE'
|
|
790
795
|
LIGHTSOURCEDIALOG = 'LIGHTSOURCEDIALOG'
|
|
@@ -796,6 +801,7 @@ LINEARINTERPMODE = 'LINEARINTERPMODE'
|
|
|
796
801
|
LINEARINTERPOLATIONDIALOG = 'LINEARINTERPOLATIONDIALOG'
|
|
797
802
|
LINEARTPROVIDER = 'LINEARTPROVIDER'
|
|
798
803
|
LINECONTOURGROUP = 'LINECONTOURGROUP'
|
|
804
|
+
LINEINTEGRALCONVOLUTION = 'LINEINTEGRALCONVOLUTION'
|
|
799
805
|
LINELAYERCONTROL = 'LINELAYERCONTROL'
|
|
800
806
|
LINELIFTFRACTION = 'LINELIFTFRACTION'
|
|
801
807
|
LINEMAP = 'LINEMAP'
|
|
@@ -1010,6 +1016,7 @@ OUTPUTBINARYDATAFILE = 'OUTPUTBINARYDATAFILE'
|
|
|
1010
1016
|
OUTPUTLAYOUTFILE = 'OUTPUTLAYOUTFILE'
|
|
1011
1017
|
OUTPUTLAYOUTPACKAGEFILE = 'OUTPUTLAYOUTPACKAGEFILE'
|
|
1012
1018
|
OVERLAYBARGRID = 'OVERLAYBARGRID'
|
|
1019
|
+
OVERLAYCOLOR = 'OVERLAYCOLOR'
|
|
1013
1020
|
P1 = 'P1'
|
|
1014
1021
|
P2 = 'P2'
|
|
1015
1022
|
P3 = 'P3'
|
|
@@ -1220,6 +1227,7 @@ SEQYLORBRMAP = 'SEQYLORBR'
|
|
|
1220
1227
|
SEQYLORRDMAP = 'SEQYLORRD'
|
|
1221
1228
|
SHADE = 'SHADE'
|
|
1222
1229
|
SHADETYPE = 'SHADETYPE'
|
|
1230
|
+
SHADING = 'SHADING'
|
|
1223
1231
|
SHAREVARWITHALLZONES = 'SHAREVARWITHALLZONES'
|
|
1224
1232
|
SHIFTEDDRAG = 'SHIFTEDDRAG'
|
|
1225
1233
|
SHOW = 'SHOW'
|
|
@@ -1317,6 +1325,7 @@ SMALLANGLE = 'SMALLANGLE'
|
|
|
1317
1325
|
SMALLSTEP = 'SMALLSTEP'
|
|
1318
1326
|
SMOOTHBNDRYCOND = 'SMOOTHBNDRYCOND'
|
|
1319
1327
|
SMOOTHDIALOG = 'SMOOTHDIALOG'
|
|
1328
|
+
SMOOTHING = 'SMOOTHING'
|
|
1320
1329
|
SMOOTHWEIGHT = 'SMOOTHWEIGHT'
|
|
1321
1330
|
SMRAINBOW = 'SMRAINBOW'
|
|
1322
1331
|
SMRAINBOWMAP = 'SMRAINBOW'
|
|
@@ -1384,6 +1393,7 @@ SUPERSAMPLEFACTOR = 'SUPERSAMPLEFACTOR'
|
|
|
1384
1393
|
SURFACECOLOR = 'SURFACECOLOR'
|
|
1385
1394
|
SURFACECOLORCONTRAST = 'SURFACECOLORCONTRAST'
|
|
1386
1395
|
SURFACEEFFECTS = 'SURFACEEFFECTS'
|
|
1396
|
+
SURFACEFLOWEFFECT = 'SURFACEFLOWEFFECT'
|
|
1387
1397
|
SURFACEGENERATIONMETHOD = 'SURFACEGENERATIONMETHOD'
|
|
1388
1398
|
SURFACERGBMAX = 'SURFACERGBMAX'
|
|
1389
1399
|
SURFACERGBMIN = 'SURFACERGBMIN'
|
|
@@ -1495,6 +1505,7 @@ USEINDEPENDENTCOLORMAP = 'USEINDEPENDENTCOLORMAP'
|
|
|
1495
1505
|
USEINDVARRANGE = 'USEINDVARRANGE'
|
|
1496
1506
|
USEINITIALPLOTDIALOG = 'USEINITIALPLOTDIALOG'
|
|
1497
1507
|
USEISOLATIN1FONTSINPS = 'USEISOLATIN1FONTSINPS'
|
|
1508
|
+
USELICMASKTHRESHOLD = 'USELICMASKTHRESHOLD'
|
|
1498
1509
|
USELIGHTINGEFFECT = 'USELIGHTINGEFFECT'
|
|
1499
1510
|
USELIGHTSOURCETOFILL = 'USELIGHTSOURCETOFILL'
|
|
1500
1511
|
USELINES = 'USELINES'
|
|
@@ -1523,6 +1534,7 @@ USESTROKEFONTSFOR3DTEXT = 'USESTROKEFONTSFOR3DTEXT'
|
|
|
1523
1534
|
USESTROKEFONTSFORSMALLTEXT = 'USESTROKEFONTSFORSMALLTEXT'
|
|
1524
1535
|
USESTROKEFONTSONSCREEN = 'USESTROKEFONTSONSCREEN'
|
|
1525
1536
|
USESUPERSAMPLEANTIALIASING = 'USESUPERSAMPLEANTIALIASING'
|
|
1537
|
+
USESURFACEFLOWEFFECT = 'USESURFACEFLOWEFFECT'
|
|
1526
1538
|
USESYMBOLS = 'USESYMBOLS'
|
|
1527
1539
|
USETECPLOTPRINTDRIVERS = 'USETECPLOTPRINTDRIVERS'
|
|
1528
1540
|
USETHICKERACTIVEFRAMEBORDERONSCREEN = 'USETHICKERACTIVEFRAMEBORDERONSCREEN'
|
tecplot/tecutil/tecutil.py
CHANGED
|
@@ -714,8 +714,10 @@ class TecUtilConnector(object):
|
|
|
714
714
|
if not self.started:
|
|
715
715
|
return False
|
|
716
716
|
lcc = self._license_check_count
|
|
717
|
+
if lcc == 0 and not self.handle.LicenseIsValid():
|
|
718
|
+
return False
|
|
717
719
|
self._license_check_count = 0 if lcc == 10000 else lcc + 1
|
|
718
|
-
return
|
|
720
|
+
return True
|
|
719
721
|
|
|
720
722
|
def acquire_license(self):
|
|
721
723
|
if self.connected:
|
|
@@ -733,6 +735,7 @@ class TecUtilConnector(object):
|
|
|
733
735
|
def release_license(self):
|
|
734
736
|
if not self.connected and self.license_is_valid:
|
|
735
737
|
self.handle.ReleaseLicense()
|
|
738
|
+
self._license_check_count = 0
|
|
736
739
|
|
|
737
740
|
@property
|
|
738
741
|
def license_expiration(self):
|
tecplot/tecutil/util.py
CHANGED
|
@@ -8,22 +8,34 @@ import re
|
|
|
8
8
|
import tempfile
|
|
9
9
|
import textwrap
|
|
10
10
|
import warnings
|
|
11
|
-
|
|
12
11
|
from collections.abc import Iterable
|
|
13
|
-
from ctypes import
|
|
12
|
+
from ctypes import POINTER, c_int, cast
|
|
14
13
|
|
|
15
|
-
from ..
|
|
14
|
+
from .. import version
|
|
16
15
|
from ..constant import Color
|
|
16
|
+
from ..exception import *
|
|
17
17
|
|
|
18
18
|
log = logging.getLogger(__name__)
|
|
19
19
|
|
|
20
|
-
maxint64 = 2**(64 - 1) - 1
|
|
20
|
+
maxint64 = 2 ** (64 - 1) - 1
|
|
21
21
|
minint64 = -maxint64 - 1
|
|
22
22
|
maxuint64 = 2**64 - 1
|
|
23
23
|
|
|
24
|
+
|
|
25
|
+
def _require_surface_flow_effects_sdk():
|
|
26
|
+
if __debug__:
|
|
27
|
+
_SURFACE_FLOW_EFFECTS_SDK_VERSION = (2026, 1)
|
|
28
|
+
if version.sdk_version_info < _SURFACE_FLOW_EFFECTS_SDK_VERSION:
|
|
29
|
+
raise TecplotOutOfDateEngineError(
|
|
30
|
+
_SURFACE_FLOW_EFFECTS_SDK_VERSION,
|
|
31
|
+
'Surface-flow effects require Tecplot 360 2026 R1 or later.',
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
24
35
|
IndexRange = collections.namedtuple('IndexRange', 'min max step')
|
|
25
36
|
IndexRange.__new__.__defaults__ = (None, None, None)
|
|
26
37
|
|
|
38
|
+
|
|
27
39
|
class Index(int):
|
|
28
40
|
"""Position identifier type.
|
|
29
41
|
|
|
@@ -35,12 +47,14 @@ class Index(int):
|
|
|
35
47
|
meaningful internally to the tecplot Python module.
|
|
36
48
|
"""
|
|
37
49
|
|
|
50
|
+
|
|
38
51
|
XY = collections.namedtuple('XY', ('x', 'y'))
|
|
39
52
|
XY.__new__.__defaults__ = (None, None)
|
|
40
53
|
|
|
41
54
|
XYZ = collections.namedtuple('XYZ', ('x', 'y', 'z'))
|
|
42
55
|
XYZ.__new__.__defaults__ = (None, None, None)
|
|
43
56
|
|
|
57
|
+
|
|
44
58
|
def flatten_args(*args):
|
|
45
59
|
flatargs = []
|
|
46
60
|
for a in args:
|
|
@@ -60,6 +74,7 @@ def inherited_property(cls):
|
|
|
60
74
|
def _copy_property(prop):
|
|
61
75
|
attr = getattr(cls, prop.__name__)
|
|
62
76
|
return property(attr.fget, attr.fset, attr.fdel, prop.__doc__)
|
|
77
|
+
|
|
63
78
|
return _copy_property
|
|
64
79
|
|
|
65
80
|
|
|
@@ -69,6 +84,7 @@ def lock_attributes(cls):
|
|
|
69
84
|
after __init__() is called.
|
|
70
85
|
"""
|
|
71
86
|
if __debug__:
|
|
87
|
+
|
|
72
88
|
def _setattr(self, name, value):
|
|
73
89
|
if not name.startswith('_') and name not in dir(self):
|
|
74
90
|
stacknames = [f[0].f_code.co_name for f in inspect.stack()[:3]]
|
|
@@ -77,6 +93,7 @@ def lock_attributes(cls):
|
|
|
77
93
|
classname = self.__class__.__name__
|
|
78
94
|
raise TecplotAttributeError(msg.format(classname, name))
|
|
79
95
|
return super(cls, self).__setattr__(name, value)
|
|
96
|
+
|
|
80
97
|
cls.__setattr__ = _setattr
|
|
81
98
|
return cls
|
|
82
99
|
|
|
@@ -98,15 +115,15 @@ def check_arglist_argtypes(function_name, *args):
|
|
|
98
115
|
|
|
99
116
|
def color_spec(color, plot=None):
|
|
100
117
|
"""
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
color_spec(Color.Blue, plot) --> Color.Blue
|
|
119
|
+
color_spec(Color.MultiColor, plot) --> plot.contour(0)
|
|
120
|
+
color_spec(Color.MultiColor2, plot) --> plot.contour(1)
|
|
121
|
+
color_spec(Color.Blue) --> Color.Blue
|
|
122
|
+
color_spec(plot.contour(0)) --> Color.MultiColor
|
|
123
|
+
color_spec(plot.contour(1)) --> Color.MultiColor2
|
|
124
|
+
|
|
125
|
+
color_spec(plot.rgb_coloring) --> Color.RGBColor
|
|
126
|
+
color_spec(Color.RGBColor, plot) --> plot.rgb_coloring
|
|
110
127
|
"""
|
|
111
128
|
if isinstance(color, Iterable):
|
|
112
129
|
return tuple([color_spec(c, plot) for c in color])
|
|
@@ -119,7 +136,8 @@ def color_spec(color, plot=None):
|
|
|
119
136
|
Color.MultiColor5: Index(4),
|
|
120
137
|
Color.MultiColor6: Index(5),
|
|
121
138
|
Color.MultiColor7: Index(6),
|
|
122
|
-
Color.MultiColor8: Index(7)
|
|
139
|
+
Color.MultiColor8: Index(7),
|
|
140
|
+
}
|
|
123
141
|
color_spec._multicolors = {v: k for k, v in color_spec._indexes.items()}
|
|
124
142
|
try:
|
|
125
143
|
if plot:
|
|
@@ -200,9 +218,17 @@ class ListWrapper(object):
|
|
|
200
218
|
Unlike textwrap.TextWrapper, items in the list are not broken over
|
|
201
219
|
multiple lines even if they contain spaces.
|
|
202
220
|
"""
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
221
|
+
|
|
222
|
+
def __init__(
|
|
223
|
+
self,
|
|
224
|
+
initial_indent='',
|
|
225
|
+
subsequent_indent=' ',
|
|
226
|
+
initial_width=70,
|
|
227
|
+
subsequent_width=70,
|
|
228
|
+
delim=',',
|
|
229
|
+
prefix='',
|
|
230
|
+
suffix='',
|
|
231
|
+
):
|
|
206
232
|
assert (len(prefix) + len(initial_indent)) < initial_width
|
|
207
233
|
assert (len(suffix) + len(subsequent_indent)) < subsequent_width
|
|
208
234
|
self.initial_indent = initial_indent
|
|
@@ -217,7 +243,7 @@ class ListWrapper(object):
|
|
|
217
243
|
ret = []
|
|
218
244
|
max_space = self.subsequent_width - len(self.subsequent_indent)
|
|
219
245
|
|
|
220
|
-
line =
|
|
246
|
+
line = '{}{}'.format(self.prefix, self.initial_indent)
|
|
221
247
|
|
|
222
248
|
itr = iter(str_list)
|
|
223
249
|
try:
|
|
@@ -242,7 +268,7 @@ class ListWrapper(object):
|
|
|
242
268
|
ret.append(line + self.suffix)
|
|
243
269
|
else:
|
|
244
270
|
ret.append(line)
|
|
245
|
-
ret.append(
|
|
271
|
+
ret.append('{}{}'.format(self.subsequent_indent, self.suffix))
|
|
246
272
|
return ret
|
|
247
273
|
|
|
248
274
|
def fill(self, str_list):
|
|
@@ -291,6 +317,7 @@ def normalize_path(nodepath, resolve=True):
|
|
|
291
317
|
if not isinstance(nodepath, pathlib.Path):
|
|
292
318
|
nodepath = pathlib.Path(str(nodepath))
|
|
293
319
|
from tecplot.tecutil import _tecutil_connector
|
|
320
|
+
|
|
294
321
|
if _tecutil_connector.connected:
|
|
295
322
|
if _tecutil_connector.client.host not in ['localhost', '127.0.0.1']:
|
|
296
323
|
if not nodepath.is_absolute():
|
|
@@ -333,29 +360,36 @@ def temporary_closed_file(suffix=None):
|
|
|
333
360
|
|
|
334
361
|
def api_changed(msg, version_changed, sdk_version_changed, warning=False):
|
|
335
362
|
detail = textwrap.indent(textwrap.dedent(msg), ' ')
|
|
336
|
-
msg =
|
|
363
|
+
msg = (
|
|
364
|
+
textwrap.dedent(f"""\
|
|
337
365
|
PyTecplot API Change (version {version_changed})
|
|
338
366
|
Tecplot 360 version: {sdk_version_changed}
|
|
339
|
-
|
|
367
|
+
""")
|
|
368
|
+
+ detail
|
|
369
|
+
)
|
|
340
370
|
if warning:
|
|
341
371
|
if __debug__:
|
|
342
|
-
msg +=
|
|
343
|
-
|
|
372
|
+
msg += (
|
|
373
|
+
'Please update your code as the legacy interface will\n'
|
|
374
|
+
+ 'be removed in the next major release of PyTecplot.'
|
|
375
|
+
)
|
|
344
376
|
warnings.warn(msg, TecplotFutureWarning)
|
|
345
377
|
else:
|
|
346
378
|
raise TecplotInterfaceChangeError(msg)
|
|
347
379
|
|
|
348
380
|
|
|
349
381
|
def api_moved(old, new, version_changed, sdk_version_changed, warning=False):
|
|
350
|
-
msg = textwrap.dedent(f
|
|
382
|
+
msg = textwrap.dedent(f"""\
|
|
351
383
|
PyTecplot API Change (version {version_changed})
|
|
352
384
|
Tecplot 360 version: {sdk_version_changed}
|
|
353
385
|
{old} has been moved to {new}
|
|
354
|
-
|
|
386
|
+
""")
|
|
355
387
|
if warning:
|
|
356
388
|
if __debug__:
|
|
357
|
-
msg +=
|
|
358
|
-
|
|
389
|
+
msg += (
|
|
390
|
+
'Please update your code as the legacy interface will\n'
|
|
391
|
+
+ 'be removed in the next major release of PyTecplot.'
|
|
392
|
+
)
|
|
359
393
|
warnings.warn(msg, TecplotFutureWarning)
|
|
360
394
|
else:
|
|
361
395
|
raise TecplotInterfaceChangeError(msg)
|
tecplot/version.py
CHANGED
|
@@ -27,14 +27,15 @@ when a docstring is present. In short, we will maintain backwards compatibility
|
|
|
27
27
|
of the public interface between all minor releases of the same major version
|
|
28
28
|
with the exception of internal changes that fix incorrect behavior or bugs.
|
|
29
29
|
"""
|
|
30
|
+
|
|
30
31
|
import collections
|
|
31
32
|
|
|
32
33
|
from .tecutil import _tecutil_connector
|
|
33
34
|
|
|
34
35
|
Version = collections.namedtuple('V', ['major', 'minor', 'patch', 'build'])
|
|
35
36
|
|
|
36
|
-
version = '1.
|
|
37
|
-
build = '
|
|
37
|
+
version = '1.8.0'
|
|
38
|
+
build = '3fdc04c'
|
|
38
39
|
version_info = Version(*[int(x) for x in version.split('.')], build=build or 0)
|
|
39
40
|
|
|
40
41
|
sdk_version_info = _tecutil_connector.sdk_version_info
|
|
File without changes
|
|
File without changes
|