pytecplot 1.7.4__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytecplot
3
- Version: 1.7.4
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
- Requires-Python: >=3.8
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| is supported on the three latest releases of Python, 64-bit
79
- only. |PyTecplot| does not support 32 bit Python. Please refer to
80
- INSTALL.rst for installation instructions and environment setup. For the
81
- best experience, developers are encouraged to use the **latest version of
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,22 @@ 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
+
123
+ PyTecplot 1.7.5
124
+ ^^^^^^^^^^^^^^^
125
+
126
+ * Fixed: type handling of `ignore_divide_by_zero` argument in `execute_equation()`.
127
+
110
128
  PyTecplot 1.7.4
111
129
  ^^^^^^^^^^^^^^^
112
130
 
@@ -1,9 +1,9 @@
1
- pytecplot-1.7.4.dist-info/licenses/LICENSE.html,sha256=I240fAHgxqlSQn_eSmb9ktcS4hgugObDnHYQnlEPzt8,28492
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
- tecplot/constant.py,sha256=DJ641ugRqAQNd8uQITFbhbyEK3JwR9QhfG_CteUn5s4,8686
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=m28NzZOI2Idf7k94m2r0_AtcJ-BqtkqGyc1LpvMdhvU,1544
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
@@ -12,7 +12,7 @@ tecplot/annotation/image.py,sha256=6v_EUYQ1gUoHIqMlJXO68S8nSuvwSnPHePwRKmtmYM4,5
12
12
  tecplot/annotation/iter.py,sha256=s9rFJLhKgJKApxxTghRFBjT6Pmu6BAEfvB5QgBI4mNI,3709
13
13
  tecplot/annotation/polyline.py,sha256=bw-1LfpjfcHK7VZGTf7xrvHtzjlFJAegIYrU5GVdse0,12390
14
14
  tecplot/annotation/text.py,sha256=JFaaOJR1h6LyLt9vUVanQmakXtGZOguVdA-3oT8tWhQ,26471
15
- tecplot/data/__init__.py,sha256=apkztrNGBSS5cfyYSIYkrwU1eeRiO0GP4sHvryPJfVA,1937
15
+ tecplot/data/__init__.py,sha256=_fc25c9cRzTROoxSg0t6OqwKH9fwePVed-dvX8mXU4E,1968
16
16
  tecplot/data/array.py,sha256=wcGIaoVbSjSdwQP3DpXAOECHAmjTBurbmZvTodF5h1E,24246
17
17
  tecplot/data/create.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
18
18
  tecplot/data/dataset.py,sha256=MvM1vVf5NlHaDc3rI6mQV_mjNxOaGVuBsGGRtLXSG3I,81909
@@ -20,9 +20,9 @@ tecplot/data/extract.py,sha256=VqDqe_-VcQSKD-rRo4DSqohZElUan2dxuNlLRM_qE54,21891
20
20
  tecplot/data/face_neighbors.py,sha256=Bm77F87qtDcw2u1BWFNE9cRTc8FI9MS3Cw8YlaJsdkc,19440
21
21
  tecplot/data/facemap.py,sha256=Xhn77cZndfgUA9U014I4M_ecwj8bI98_A7DZC24-Jwk,31287
22
22
  tecplot/data/fe_cell_type.py,sha256=G2U0c1RBHvUP03_YjHGHaMk1JOkF-g9SlBlLkWXH2Yg,3911
23
- tecplot/data/load.py,sha256=mTZ-c3k-adQKYxm2tMRnzuQNwFLTOHCYYhKGwe4kd3o,109473
23
+ tecplot/data/load.py,sha256=eKbscSG3HxPxz_N0EbR2lz5ScbZSrkGQx3Ppd5lGFrI,114141
24
24
  tecplot/data/nodemap.py,sha256=AhSGO_Bmw3OB01UYKmjldTOci5rlUMGK_eiDrDHWrxk,36209
25
- tecplot/data/operate.py,sha256=oFBOzLPYnA8hUCaeiTdpPXdFlLZNLoQCb-EHcPE5iDA,42593
25
+ tecplot/data/operate.py,sha256=pRmFVFgUbxp07mtG_mLo8LKeQwuYYg6IUl8tWkg0PPU,42659
26
26
  tecplot/data/query.py,sha256=Ocr9h1I2bFuJFLVOFEqiCUnuxTzD4wnToNzYk996GhY,14807
27
27
  tecplot/data/save.py,sha256=iTmR7DJL3iUDgHOikFRPkMRejmZrNaeX7BHpZqhI4aY,16991
28
28
  tecplot/data/variable.py,sha256=xJCOO5ZeXCAFWKJYnC_mMxWKoy-oe3pE0EnHytZOwro,9437
@@ -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=2fOlr0Xb48oHO5-OTioxN0yls-2LCPbptzuCusnag9c,3950
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=wsj0EhnXEQePq7SRxLogcUClDWNVFaFyUSf20yuKTF4,5691
54
- tecplot/plot/fieldmap.py,sha256=o5XjjUDcUK55dieSSWYv7NzzMN0kXArFV2UuP86AFzE,76312
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=1QUCakVNMD2diThLnRJW7xsFfsy-RMLYmncGdv-P4Co,41154
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=WB2S4cHc0JB2wQrZSoEISpjvuXuQRZ_QXLuFaBNJuhk,60658
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=C2yUnta-ls0oN_7vM_qaXbZczFS4jWNsSypZX6CV3wk,53179
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=tvHnjGACyMsVN7WbYrtp8Lo9qRBQymYZlQ5BuyiBMQg,748
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=XeUIJRNVhQ6yQHPkpztnkAJQu-GytGG90FMXjZepKgk,19402
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=v6vBV_dCtZ6E-J3K4l27NCLF-eAlQddCqY3dgJ16ztE,54618
87
- tecplot/tecutil/tecutil.py,sha256=RkVV3MLDd38sXHO9wqNkk-LPIW_qG8vZFST8455rKnM,696363
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=HW05xfxIbSrnnpXic3DNUkXmMmo0e9Z-HhT3EoC_Mzg,37059
90
- tecplot/tecutil/tecutil_rpc.py,sha256=ypGDA5ktXNClT9trdK1ElGnhrsO-oTABncT2CdQkRDU,287428
91
- tecplot/tecutil/util.py,sha256=JgNpjE3J7Uz_QHqPrOxmHCwNnIojkZVfdKftVw_WUdo,12055
89
+ tecplot/tecutil/tecutil_connector.py,sha256=GzmdZ2yBn6HFzD-qB1ICz-dduocFnjkV6mmBvkn5qtc,37148
90
+ tecplot/tecutil/tecutil_rpc.py,sha256=bei8gcQPHRS1OgBZQdLSYdX6SF_M1WzAqhSp3kQK_sk,288068
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.7.4.dist-info/METADATA,sha256=kq8Y9ArAbkVPkrLVzXQyG9x7FLZXkqeBSrp6jOop6ks,23443
97
- pytecplot-1.7.4.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
98
- pytecplot-1.7.4.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
- pytecplot-1.7.4.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.0)
2
+ Generator: setuptools (84.2.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tecplot/constant.py CHANGED
@@ -354,7 +354,9 @@ class FEALoader:
354
354
  v461 = '461'
355
355
  v66051 = '66051'
356
356
  v131842 = '131842'
357
- Current = v131842
357
+ v134144 = '134144'
358
+ v196864 = '196864'
359
+ Current = v196864
358
360
 
359
361
 
360
362
  class FluentCFFLoader:
tecplot/data/__init__.py CHANGED
@@ -28,7 +28,8 @@ from .fe_cell_type import FECellType
28
28
  from .load import (load_cfx, load_tecplot, load_tecplot_szl, load_cgns,
29
29
  load_converge_cgns, load_converge_hdf5, load_converge_output,
30
30
  load_ensight, load_fluent, load_fluent_cff, load_fvcom,
31
- load_openfoam, load_plot3d, load_stl, load_telemac, load_vtk)
31
+ load_openfoam, load_plot3d, load_stl, load_telemac,
32
+ load_ugrid, load_vtk)
32
33
  from .nodemap import (ClassicNodemap, ClassicNodemapArray, Nodemap,
33
34
  NodemapSection, NodemapSectionArray)
34
35
  from .save import save_tecplot_ascii, save_tecplot_plt, save_tecplot_szl
tecplot/data/load.py CHANGED
@@ -996,6 +996,96 @@ def load_telemac(filenames=None,
996
996
  assign_strand_ids=True)
997
997
 
998
998
 
999
+ @lock()
1000
+ def load_ugrid(filename,
1001
+ frame=None,
1002
+ read_data_option=ReadDataOption.Append,
1003
+ mapbc_filename=None,
1004
+ initial_plot_type=None):
1005
+ """Read a UGRID data file.
1006
+
1007
+ Parameters:
1008
+ filename (`pathlib.Path` or `str`): Path to exactly one UGRID file to be
1009
+ read. The filename must end with ``.b8.ugrid`` or ``.lb8.ugrid``.
1010
+ (See note below concerning absolute and relative paths.)
1011
+ frame (`Frame <tecplot.layout.Frame>`, optional): The `Frame
1012
+ <tecplot.layout.Frame>` to attach the resulting `Dataset`. If
1013
+ `None`, the currently active `Frame <tecplot.layout.Frame>` is used
1014
+ and the zones are appended by default.
1015
+ read_data_option (`ReadDataOption`, optional): Specify how the data
1016
+ is loaded into Tecplot. (default: `ReadDataOption.Append`)
1017
+
1018
+ Possible values are:
1019
+ * `ReadDataOption.ReplaceInActiveFrame`
1020
+ Remove the dataset from the active frame prior to reading in the
1021
+ new dataset. If other frames use the same `Dataset
1022
+ <tecplot.data.Dataset>` in the active frame, they will continue to
1023
+ use the old one.
1024
+ * `ReadDataOption.Append`
1025
+ Append to the existing `Dataset <tecplot.data.Dataset>`.
1026
+ * `ReadDataOption.Replace`
1027
+ Replace the `Dataset <tecplot.data.Dataset>` attached to the active
1028
+ frame and to all other frames that use the same `Dataset
1029
+ <tecplot.data.Dataset>`.
1030
+ mapbc_filename (`pathlib.Path` or `str`, optional): Optional MAPBC file
1031
+ used for boundary metadata. If provided, that file is used. If
1032
+ `None` (default), the loader looks for an exact companion
1033
+ ``.mapbc`` file with the same base name in the same directory.
1034
+ If the selected or auto-detected ``.mapbc`` file is malformed or its
1035
+ boundary IDs do not match the UGRID file, the loader warns and
1036
+ continues loading UGRID data without applying MAPBC metadata.
1037
+ initial_plot_type (`PlotType`, optional): Forces a specific type of
1038
+ plot upon loading of the data. To have |Tecplot 360| determine the
1039
+ most appropriate plot type for the data, use
1040
+ `PlotType.Automatic`. Possible values are: `PlotType.Automatic`
1041
+ (default), `Cartesian3D`, `Cartesian2D`, `XYLine`,
1042
+ `PlotType.Sketch`, `PolarLine`.
1043
+
1044
+ Returns:
1045
+ `Dataset <tecplot.data.Dataset>`: The `Dataset <tecplot.data.Dataset>` holding
1046
+ the loaded data.
1047
+
1048
+ .. note:: **Absolute and relative paths with PyTecplot**
1049
+
1050
+ Relative paths, when used within the PyTecplot API are always from
1051
+ Python's current working directory which can be obtained by calling
1052
+ :func:`os.getcwd()`. This is true for batch and `connected
1053
+ <tecplot.session.connect()>` modes. One exception to this is paths
1054
+ within a macro command or file which will be relative to the |Tecplot
1055
+ Engine|'s home directory, which is typically the |Tecplot 360|
1056
+ installation directory. Finally, when connected to a remote (non-local)
1057
+ instance of Tecplot 360, only absolute paths are allowed.
1058
+
1059
+ Note that backslashes must be escaped which is especially important for
1060
+ windows paths such as ``"C:\\\\Users"`` or ``"\\\\\\\\server\\\\path"``
1061
+ which will resolve to ``"C:\\Users"`` and ``"\\\\server\\path"``
1062
+ respectively. Alternatively, one may use Python's raw strings:
1063
+ ``r"C:\\Users"`` and ``r"\\\\server\\path"``
1064
+
1065
+ Load one UGRID file, or explicitly provide a MAPBC file::
1066
+
1067
+ >>> dataset = tecplot.data.load_ugrid('surface.b8.ugrid')
1068
+ >>> dataset = tecplot.data.load_ugrid(
1069
+ ... 'surface.b8.ugrid',
1070
+ ... mapbc_filename='surface.mapbc')
1071
+
1072
+ .. versionadded:: 2026.1
1073
+ Loading UGRID data requires Tecplot 360 2026 R1 or later.
1074
+
1075
+ .. versionadded:: 1.7.5
1076
+ """
1077
+ with StringList('STANDARDSYNTAX', '1.0') as instr:
1078
+ with tecutil.ArgList() as arglist:
1079
+ arglist[sv.DATASETREADER] = 'UGRID Loader'
1080
+ instr += ['FILENAME_UGRID', tecutil.normalize_path(filename)]
1081
+ if mapbc_filename is not None:
1082
+ instr += ['FILENAME_MAPBC', tecutil.normalize_path(mapbc_filename)]
1083
+ arglist[sv.FILENAMESORINSTRUCTIONS] = instr
1084
+ return _tecplot_loader_load_data(
1085
+ arglist, frame=frame, read_data_option=read_data_option,
1086
+ initial_plot_type=initial_plot_type)
1087
+
1088
+
999
1089
  @lock()
1000
1090
  def load_plot3d(grid_filenames=None,
1001
1091
  solution_filenames=None,
tecplot/data/operate.py CHANGED
@@ -151,7 +151,8 @@ def execute_equation(equation, zones=None, i_range=None, j_range=None,
151
151
 
152
152
  arglist[sv.VALUELOCATION] = value_location
153
153
  arglist[sv.VARDATATYPE] = variable_data_type
154
- arglist[sv.IGNOREDIVIDEBYZERO] = ignore_divide_by_zero
154
+ if ignore_divide_by_zero is not None:
155
+ arglist[sv.IGNOREDIVIDEBYZERO] = 1 if ignore_divide_by_zero else 0
155
156
 
156
157
  if not _tecutil.DataAlterX(arglist):
157
158
  raise TecplotSystemError()
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, color_spec, flatten_args, sv
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 blanking style control.
1591
+ """Clipping, blanking, and surface-flow style control.
1591
1592
 
1592
- This object controls value blanking and clipping from plane slices for
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 translucency style control.
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 blanking effects.
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 effects.
2110
+ """`FieldmapEffects3D`: Style control for surface-flow, blanking, and lighting.
2095
2111
  """
2096
2112
  return FieldmapEffects3D(self)
2097
2113
 
@@ -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, version
9
- from ..tecutil import Index, sv, color_spec
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.