fake-bpy-module 20241103__py3-none-any.whl → 20241111__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.
Potentially problematic release.
This version of fake-bpy-module might be problematic. Click here for more details.
- addon_utils/__init__.pyi +28 -13
- bl_console_utils/autocomplete/complete_calltip/__init__.pyi +1 -2
- bl_console_utils/autocomplete/complete_import/__init__.pyi +3 -6
- bl_console_utils/autocomplete/complete_namespace/__init__.pyi +1 -2
- bl_console_utils/autocomplete/intellisense/__init__.pyi +2 -6
- bl_operators/image_as_planes/__init__.pyi +12 -39
- bl_operators/uvcalc_transform/__init__.pyi +4 -42
- bl_operators/wm/__init__.pyi +8 -0
- bl_ui/generic_ui_list/__init__.pyi +2 -1
- bl_ui/properties_grease_pencil_common/__init__.pyi +0 -7
- bl_ui/space_userpref/__init__.pyi +2 -2
- blf/__init__.pyi +3 -5
- bmesh/types/__init__.pyi +22 -33
- bmesh/utils/__init__.pyi +6 -16
- bpy/app/icons/__init__.pyi +5 -11
- bpy/app/translations/__init__.pyi +7 -14
- bpy/msgbus/__init__.pyi +7 -8
- bpy/ops/curves/__init__.pyi +16 -0
- bpy/ops/nla/__init__.pyi +1 -1
- bpy/ops/sequencer/__init__.pyi +3 -0
- bpy/path/__init__.pyi +6 -16
- bpy/props/__init__.pyi +122 -135
- bpy/types/__init__.pyi +365 -604
- bpy/utils/__init__.pyi +30 -29
- bpy/utils/previews/__init__.pyi +1 -2
- bpy/utils/units/__init__.pyi +1 -2
- bpy_extras/anim_utils/__init__.pyi +5 -12
- bpy_extras/bmesh_utils/__init__.pyi +1 -2
- bpy_extras/image_utils/__init__.pyi +2 -5
- bpy_extras/io_utils/__init__.pyi +8 -14
- bpy_extras/mesh_utils/__init__.pyi +14 -29
- bpy_extras/object_utils/__init__.pyi +1 -1
- bpy_extras/view3d_utils/__init__.pyi +3 -10
- {fake_bpy_module-20241103.dist-info → fake_bpy_module-20241111.dist-info}/METADATA +1 -1
- {fake_bpy_module-20241103.dist-info → fake_bpy_module-20241111.dist-info}/RECORD +56 -56
- freestyle/chainingiterators/__init__.pyi +2 -7
- freestyle/functions/__init__.pyi +4 -16
- freestyle/types/__init__.pyi +29 -63
- freestyle/utils/ContextFunctions/__init__.pyi +2 -2
- freestyle/utils/__init__.pyi +1 -2
- gpu/__init__.pyi +19 -5
- gpu/matrix/__init__.pyi +2 -2
- gpu/state/__init__.pyi +16 -8
- gpu/types/__init__.pyi +14 -29
- gpu_extras/batch/__init__.pyi +9 -9
- gpu_extras/presets/__init__.pyi +4 -11
- idprop/types/__init__.pyi +1 -2
- imbuf/__init__.pyi +2 -4
- mathutils/__init__.pyi +30 -95
- mathutils/bvhtree/__init__.pyi +13 -17
- mathutils/geometry/__init__.pyi +26 -45
- mathutils/interpolate/__init__.pyi +2 -2
- mathutils/kdtree/__init__.pyi +13 -28
- rna_info/__init__.pyi +1 -2
- {fake_bpy_module-20241103.dist-info → fake_bpy_module-20241111.dist-info}/WHEEL +0 -0
- {fake_bpy_module-20241103.dist-info → fake_bpy_module-20241111.dist-info}/top_level.txt +0 -0
bmesh/utils/__init__.pyi
CHANGED
|
@@ -20,7 +20,7 @@ def edge_rotate(edge: bmesh.types.BMEdge, ccw: bool = False) -> bmesh.types.BMEd
|
|
|
20
20
|
:rtype: bmesh.types.BMEdge
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
def edge_split(edge: bmesh.types.BMEdge, vert: bmesh.types.BMVert, fac: float)
|
|
23
|
+
def edge_split(edge: bmesh.types.BMEdge, vert: bmesh.types.BMVert, fac: float):
|
|
24
24
|
"""Split an edge, return the newly created data.
|
|
25
25
|
|
|
26
26
|
:param edge: The edge to split.
|
|
@@ -30,7 +30,6 @@ def edge_split(edge: bmesh.types.BMEdge, vert: bmesh.types.BMVert, fac: float) -
|
|
|
30
30
|
:param fac: The point on the edge where the new vert will be created [0 - 1].
|
|
31
31
|
:type fac: float
|
|
32
32
|
:return: The newly created (edge, vert) pair.
|
|
33
|
-
:rtype: tuple
|
|
34
33
|
"""
|
|
35
34
|
|
|
36
35
|
def face_flip(faces):
|
|
@@ -51,10 +50,10 @@ def face_split(
|
|
|
51
50
|
face: bmesh.types.BMFace,
|
|
52
51
|
vert_a: bmesh.types.BMVert,
|
|
53
52
|
vert_b: bmesh.types.BMVert,
|
|
54
|
-
coords
|
|
53
|
+
coords=(),
|
|
55
54
|
use_exist: bool = True,
|
|
56
55
|
example: bmesh.types.BMEdge | None = None,
|
|
57
|
-
)
|
|
56
|
+
):
|
|
58
57
|
"""Face split with optional intermediate points.
|
|
59
58
|
|
|
60
59
|
:param face: The face to cut.
|
|
@@ -63,27 +62,21 @@ def face_split(
|
|
|
63
62
|
:type vert_a: bmesh.types.BMVert
|
|
64
63
|
:param vert_b: Second vertex to cut in the face (face must contain the vert).
|
|
65
64
|
:type vert_b: bmesh.types.BMVert
|
|
66
|
-
:param coords: Optional
|
|
67
|
-
:type coords: list[float]
|
|
65
|
+
:param coords: Optional sequence of 3D points in between vert_a and vert_b.
|
|
68
66
|
:param use_exist: .Use an existing edge if it exists (Only used when coords argument is empty or omitted)
|
|
69
67
|
:type use_exist: bool
|
|
70
68
|
:param example: Newly created edge will copy settings from this one.
|
|
71
69
|
:type example: bmesh.types.BMEdge | None
|
|
72
70
|
:return: The newly created face or None on failure.
|
|
73
|
-
:rtype: tuple[bmesh.types.BMFace, bmesh.types.BMLoop]
|
|
74
71
|
"""
|
|
75
72
|
|
|
76
|
-
def face_split_edgenet(
|
|
77
|
-
face: bmesh.types.BMFace, edgenet: bmesh.types.BMEdge
|
|
78
|
-
) -> tuple[bmesh.types.BMFace, ...]:
|
|
73
|
+
def face_split_edgenet(face: bmesh.types.BMFace, edgenet):
|
|
79
74
|
"""Splits a face into any number of regions defined by an edgenet.
|
|
80
75
|
|
|
81
76
|
:param face: The face to split.The face to split.
|
|
82
77
|
:type face: bmesh.types.BMFace
|
|
83
78
|
:param edgenet: Sequence of edges.
|
|
84
|
-
:type edgenet: bmesh.types.BMEdge
|
|
85
79
|
:return: The newly created faces.
|
|
86
|
-
:rtype: tuple[bmesh.types.BMFace, ...]
|
|
87
80
|
"""
|
|
88
81
|
|
|
89
82
|
def face_vert_separate(
|
|
@@ -147,9 +140,7 @@ def vert_dissolve(vert: bmesh.types.BMVert) -> bool:
|
|
|
147
140
|
:rtype: bool
|
|
148
141
|
"""
|
|
149
142
|
|
|
150
|
-
def vert_separate(
|
|
151
|
-
vert: bmesh.types.BMVert, edges: bmesh.types.BMEdge
|
|
152
|
-
) -> tuple[bmesh.types.BMVert, ...]:
|
|
143
|
+
def vert_separate(vert: bmesh.types.BMVert, edges: bmesh.types.BMEdge):
|
|
153
144
|
"""Separate this vertex at every edge.
|
|
154
145
|
|
|
155
146
|
:param vert: The vert to be separated.
|
|
@@ -157,7 +148,6 @@ def vert_separate(
|
|
|
157
148
|
:param edges: The edges to separated.
|
|
158
149
|
:type edges: bmesh.types.BMEdge
|
|
159
150
|
:return: The newly separated verts (including the vertex passed).
|
|
160
|
-
:rtype: tuple[bmesh.types.BMVert, ...]
|
|
161
151
|
"""
|
|
162
152
|
|
|
163
153
|
def vert_splice(vert: bmesh.types.BMVert, vert_target: bmesh.types.BMVert):
|
bpy/app/icons/__init__.pyi
CHANGED
|
@@ -2,28 +2,22 @@ import typing
|
|
|
2
2
|
import collections.abc
|
|
3
3
|
import typing_extensions
|
|
4
4
|
|
|
5
|
-
def new_triangles(
|
|
6
|
-
range: tuple | None,
|
|
7
|
-
coords: collections.abc.Sequence[bytes] | None,
|
|
8
|
-
colors: collections.abc.Sequence[bytes] | None,
|
|
9
|
-
) -> int:
|
|
5
|
+
def new_triangles(range, coords: bytes | None, colors: bytes | None) -> int:
|
|
10
6
|
"""Create a new icon from triangle geometry.
|
|
11
7
|
|
|
12
8
|
:param range: Pair of ints.
|
|
13
|
-
:type range: tuple | None
|
|
14
9
|
:param coords: Sequence of bytes (6 floats for one triangle) for (X, Y) coordinates.
|
|
15
|
-
:type coords:
|
|
16
|
-
:param colors: Sequence of
|
|
17
|
-
:type colors:
|
|
10
|
+
:type coords: bytes | None
|
|
11
|
+
:param colors: Sequence of bytes (12 for one triangles) for RGBA.
|
|
12
|
+
:type colors: bytes | None
|
|
18
13
|
:return: Unique icon value (pass to interface icon_value argument).
|
|
19
14
|
:rtype: int
|
|
20
15
|
"""
|
|
21
16
|
|
|
22
|
-
def new_triangles_from_file(filepath
|
|
17
|
+
def new_triangles_from_file(filepath) -> int:
|
|
23
18
|
"""Create a new icon from triangle geometry.
|
|
24
19
|
|
|
25
20
|
:param filepath: File path.
|
|
26
|
-
:type filepath: str | None
|
|
27
21
|
:return: Unique icon value (pass to interface icon_value argument).
|
|
28
22
|
:rtype: int
|
|
29
23
|
"""
|
|
@@ -67,74 +67,67 @@ def locale_explode(locale):
|
|
|
67
67
|
:return: A tuple (language, country, variant, language_country, language@variant).
|
|
68
68
|
"""
|
|
69
69
|
|
|
70
|
-
def pgettext(msgid: str | None, msgctxt
|
|
70
|
+
def pgettext(msgid: str | None, msgctxt=None):
|
|
71
71
|
"""Try to translate the given msgid (with optional msgctxt).
|
|
72
72
|
|
|
73
73
|
:param msgid: The string to translate.
|
|
74
74
|
:type msgid: str | None
|
|
75
75
|
:param msgctxt: The translation context (defaults to BLT_I18NCONTEXT_DEFAULT).
|
|
76
|
-
:type msgctxt: str | None
|
|
77
76
|
:return: The translated string (or msgid if no translation was found).
|
|
78
77
|
"""
|
|
79
78
|
|
|
80
|
-
def pgettext_data(msgid: str | None, msgctxt
|
|
79
|
+
def pgettext_data(msgid: str | None, msgctxt=None):
|
|
81
80
|
"""Try to translate the given msgid (with optional msgctxt), if new data name's translation is enabled.
|
|
82
81
|
|
|
83
82
|
:param msgid: The string to translate.
|
|
84
83
|
:type msgid: str | None
|
|
85
84
|
:param msgctxt: The translation context (defaults to BLT_I18NCONTEXT_DEFAULT).
|
|
86
|
-
:type msgctxt: str | None
|
|
87
85
|
:return: The translated string (or msgid if no translation was found).
|
|
88
86
|
"""
|
|
89
87
|
|
|
90
|
-
def pgettext_iface(msgid: str | None, msgctxt
|
|
88
|
+
def pgettext_iface(msgid: str | None, msgctxt=None):
|
|
91
89
|
"""Try to translate the given msgid (with optional msgctxt), if labels' translation is enabled.
|
|
92
90
|
|
|
93
91
|
:param msgid: The string to translate.
|
|
94
92
|
:type msgid: str | None
|
|
95
93
|
:param msgctxt: The translation context (defaults to BLT_I18NCONTEXT_DEFAULT).
|
|
96
|
-
:type msgctxt: str | None
|
|
97
94
|
:return: The translated string (or msgid if no translation was found).
|
|
98
95
|
"""
|
|
99
96
|
|
|
100
|
-
def pgettext_n(msgid: str | None, msgctxt
|
|
97
|
+
def pgettext_n(msgid: str | None, msgctxt=None):
|
|
101
98
|
"""Extract the given msgid to translation files. This is a no-op function that will only mark the string to extract, but not perform the actual translation.
|
|
102
99
|
|
|
103
100
|
:param msgid: The string to extract.
|
|
104
101
|
:type msgid: str | None
|
|
105
102
|
:param msgctxt: The translation context (defaults to BLT_I18NCONTEXT_DEFAULT).
|
|
106
|
-
:type msgctxt: str | None
|
|
107
103
|
:return: The original string.
|
|
108
104
|
"""
|
|
109
105
|
|
|
110
|
-
def pgettext_rpt(msgid: str | None, msgctxt
|
|
106
|
+
def pgettext_rpt(msgid: str | None, msgctxt=None):
|
|
111
107
|
"""Try to translate the given msgid (with optional msgctxt), if reports' translation is enabled.
|
|
112
108
|
|
|
113
109
|
:param msgid: The string to translate.
|
|
114
110
|
:type msgid: str | None
|
|
115
111
|
:param msgctxt: The translation context (defaults to BLT_I18NCONTEXT_DEFAULT).
|
|
116
|
-
:type msgctxt: str | None
|
|
117
112
|
:return: The translated string (or msgid if no translation was found).
|
|
118
113
|
"""
|
|
119
114
|
|
|
120
|
-
def pgettext_tip(msgid: str | None, msgctxt
|
|
115
|
+
def pgettext_tip(msgid: str | None, msgctxt=None):
|
|
121
116
|
"""Try to translate the given msgid (with optional msgctxt), if tooltips' translation is enabled.
|
|
122
117
|
|
|
123
118
|
:param msgid: The string to translate.
|
|
124
119
|
:type msgid: str | None
|
|
125
120
|
:param msgctxt: The translation context (defaults to BLT_I18NCONTEXT_DEFAULT).
|
|
126
|
-
:type msgctxt: str | None
|
|
127
121
|
:return: The translated string (or msgid if no translation was found).
|
|
128
122
|
"""
|
|
129
123
|
|
|
130
|
-
def register(module_name: str | None, translations_dict
|
|
124
|
+
def register(module_name: str | None, translations_dict):
|
|
131
125
|
"""Registers an addon's UI translations.
|
|
132
126
|
|
|
133
127
|
:param module_name: The name identifying the addon.
|
|
134
128
|
:type module_name: str | None
|
|
135
129
|
:param translations_dict: A dictionary built like that:
|
|
136
130
|
{locale: {msg_key: msg_translation, ...}, ...}
|
|
137
|
-
:type translations_dict: dict | None
|
|
138
131
|
"""
|
|
139
132
|
|
|
140
133
|
def unregister(module_name: str | None):
|
bpy/msgbus/__init__.pyi
CHANGED
|
@@ -59,23 +59,22 @@ def publish_rna(key):
|
|
|
59
59
|
:param key: Represents the type of data being subscribed to
|
|
60
60
|
|
|
61
61
|
Arguments include
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
62
|
+
- A property instance.
|
|
63
|
+
- A struct type.
|
|
64
|
+
- A tuple representing a (struct, property name) pair.
|
|
65
65
|
"""
|
|
66
66
|
|
|
67
|
-
def subscribe_rna(key, owner
|
|
67
|
+
def subscribe_rna(key, owner, args, notify, options=set()):
|
|
68
68
|
"""Register a message bus subscription. It will be cleared when another blend file is
|
|
69
69
|
loaded, or can be cleared explicitly via `bpy.msgbus.clear_by_owner`.
|
|
70
70
|
|
|
71
71
|
:param key: Represents the type of data being subscribed to
|
|
72
72
|
|
|
73
73
|
Arguments include
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
74
|
+
- A property instance.
|
|
75
|
+
- A struct type.
|
|
76
|
+
- A tuple representing a (struct, property name) pair.
|
|
77
77
|
:param owner: Handle for this subscription (compared by identity).
|
|
78
|
-
:type owner: typing.Any | None
|
|
79
78
|
:param options: Change the behavior of the subscriber.
|
|
80
79
|
|
|
81
80
|
PERSISTENT when set, the subscriber will be kept when remapping ID data.
|
bpy/ops/curves/__init__.pyi
CHANGED
|
@@ -402,6 +402,22 @@ def select_linked(
|
|
|
402
402
|
:type undo: bool | None
|
|
403
403
|
"""
|
|
404
404
|
|
|
405
|
+
def select_linked_pick(
|
|
406
|
+
override_context: bpy.types.Context | dict[str, typing.Any] | None = None,
|
|
407
|
+
execution_context: int | str | None = None,
|
|
408
|
+
undo: bool | None = None,
|
|
409
|
+
*,
|
|
410
|
+
deselect: bool | None = False,
|
|
411
|
+
):
|
|
412
|
+
"""Select all points in the curve under the cursor
|
|
413
|
+
|
|
414
|
+
:type override_context: bpy.types.Context | dict[str, typing.Any] | None
|
|
415
|
+
:type execution_context: int | str | None
|
|
416
|
+
:type undo: bool | None
|
|
417
|
+
:param deselect: Deselect, Deselect linked control points rather than selecting them
|
|
418
|
+
:type deselect: bool | None
|
|
419
|
+
"""
|
|
420
|
+
|
|
405
421
|
def select_more(
|
|
406
422
|
override_context: bpy.types.Context | dict[str, typing.Any] | None = None,
|
|
407
423
|
execution_context: int | str | None = None,
|
bpy/ops/nla/__init__.pyi
CHANGED
|
@@ -116,7 +116,7 @@ def bake(
|
|
|
116
116
|
:type only_selected: bool | None
|
|
117
117
|
:param visual_keying: Visual Keying, Keyframe from the final transformations (with constraints applied)
|
|
118
118
|
:type visual_keying: bool | None
|
|
119
|
-
:param clear_constraints: Clear Constraints, Remove all constraints from keyed object/bones
|
|
119
|
+
:param clear_constraints: Clear Constraints, Remove all constraints from keyed object/bones. To get a correct bake with this setting Visual Keying should be enabled
|
|
120
120
|
:type clear_constraints: bool | None
|
|
121
121
|
:param clear_parents: Clear Parents, Bake animation onto the object then clear parents (objects only)
|
|
122
122
|
:type clear_parents: bool | None
|
bpy/ops/sequencer/__init__.pyi
CHANGED
|
@@ -1606,6 +1606,7 @@ def select_box(
|
|
|
1606
1606
|
ymax: int | None = 0,
|
|
1607
1607
|
wait_for_input: bool | None = True,
|
|
1608
1608
|
mode: typing.Literal["SET", "ADD", "SUB"] | None = "SET",
|
|
1609
|
+
tweak: bool | None = False,
|
|
1609
1610
|
include_handles: bool | None = False,
|
|
1610
1611
|
ignore_connections: bool | None = False,
|
|
1611
1612
|
):
|
|
@@ -1635,6 +1636,8 @@ def select_box(
|
|
|
1635
1636
|
SUB
|
|
1636
1637
|
Subtract -- Subtract existing selection.
|
|
1637
1638
|
:type mode: typing.Literal['SET','ADD','SUB'] | None
|
|
1639
|
+
:param tweak: Tweak, Make box select pass through to sequence slide when the cursor is hovering on a strip
|
|
1640
|
+
:type tweak: bool | None
|
|
1638
1641
|
:param include_handles: Select Handles, Select the strips and their handles
|
|
1639
1642
|
:type include_handles: bool | None
|
|
1640
1643
|
:param ignore_connections: Ignore Connections, Select strips individually whether or not they are connected
|
bpy/path/__init__.pyi
CHANGED
|
@@ -9,15 +9,12 @@ import collections.abc
|
|
|
9
9
|
import typing_extensions
|
|
10
10
|
import bpy.types
|
|
11
11
|
|
|
12
|
-
def abspath(
|
|
13
|
-
path, *, start: bytes | str | None = None, library: bpy.types.Library | None = None
|
|
14
|
-
) -> str:
|
|
12
|
+
def abspath(path, *, start=None, library: bpy.types.Library | None = None) -> str:
|
|
15
13
|
"""Returns the absolute path relative to the current blend file
|
|
16
14
|
using the "//" prefix.
|
|
17
15
|
|
|
18
16
|
:param start: Relative to this path,
|
|
19
17
|
when not set the current filename is used.
|
|
20
|
-
:type start: bytes | str | None
|
|
21
18
|
:param library: The library this path is from. This is only included for
|
|
22
19
|
convenience, when the library is not None its path replaces start.
|
|
23
20
|
:type library: bpy.types.Library | None
|
|
@@ -32,14 +29,13 @@ def basename(path) -> str:
|
|
|
32
29
|
:rtype: str
|
|
33
30
|
"""
|
|
34
31
|
|
|
35
|
-
def clean_name(name
|
|
32
|
+
def clean_name(name, *, replace: str = "_") -> str:
|
|
36
33
|
"""Returns a name with characters replaced that
|
|
37
34
|
may cause problems under various circumstances,
|
|
38
35
|
such as writing to a file.All characters besides A-Z/a-z, 0-9 are replaced with "_"
|
|
39
36
|
or the replace argument if defined.
|
|
40
37
|
|
|
41
38
|
:param name: The path name.
|
|
42
|
-
:type name: bytes | str
|
|
43
39
|
:param replace: The replacement for non-valid characters.
|
|
44
40
|
:type replace: str
|
|
45
41
|
:return: The cleaned name.
|
|
@@ -94,17 +90,16 @@ def ensure_ext(filepath: str, ext: str, *, case_sensitive: bool = False) -> str:
|
|
|
94
90
|
:rtype: str
|
|
95
91
|
"""
|
|
96
92
|
|
|
97
|
-
def is_subdir(path
|
|
93
|
+
def is_subdir(path, directory) -> bool:
|
|
98
94
|
"""Returns true if path in a subdirectory of directory.
|
|
99
95
|
Both paths must be absolute.
|
|
100
96
|
|
|
101
97
|
:param path: An absolute path.
|
|
102
|
-
:type path: bytes | str
|
|
103
98
|
:return: Whether or not the path is a subdirectory.
|
|
104
99
|
:rtype: bool
|
|
105
100
|
"""
|
|
106
101
|
|
|
107
|
-
def module_names(path: str, *, recursive: bool = False, package: str = "")
|
|
102
|
+
def module_names(path: str, *, recursive: bool = False, package: str = ""):
|
|
108
103
|
"""Return a list of modules which can be imported from path.
|
|
109
104
|
|
|
110
105
|
:param path: a directory to scan.
|
|
@@ -114,7 +109,6 @@ def module_names(path: str, *, recursive: bool = False, package: str = "") -> li
|
|
|
114
109
|
:param package: Optional string, used as the prefix for module names (without the trailing ".").
|
|
115
110
|
:type package: str
|
|
116
111
|
:return: a list of string pairs (module_name, module_file).
|
|
117
|
-
:rtype: list[str]
|
|
118
112
|
"""
|
|
119
113
|
|
|
120
114
|
def native_pathsep(path: str) -> str:
|
|
@@ -126,25 +120,21 @@ def native_pathsep(path: str) -> str:
|
|
|
126
120
|
:rtype: str
|
|
127
121
|
"""
|
|
128
122
|
|
|
129
|
-
def reduce_dirs(dirs
|
|
123
|
+
def reduce_dirs(dirs):
|
|
130
124
|
"""Given a sequence of directories, remove duplicates and
|
|
131
125
|
any directories nested in one of the other paths.
|
|
132
126
|
(Useful for recursive path searching).
|
|
133
127
|
|
|
134
128
|
:param dirs: Sequence of directory paths.
|
|
135
|
-
:type dirs: list[str]
|
|
136
129
|
:return: A unique list of paths.
|
|
137
|
-
:rtype: list[str]
|
|
138
130
|
"""
|
|
139
131
|
|
|
140
|
-
def relpath(path
|
|
132
|
+
def relpath(path, *, start=None) -> str:
|
|
141
133
|
"""Returns the path relative to the current blend file using the "//" prefix.
|
|
142
134
|
|
|
143
135
|
:param path: An absolute path.
|
|
144
|
-
:type path: bytes | str
|
|
145
136
|
:param start: Relative to this path,
|
|
146
137
|
when not set the current filename is used.
|
|
147
|
-
:type start: bytes | str | None
|
|
148
138
|
:return: The relative path.
|
|
149
139
|
:rtype: str
|
|
150
140
|
"""
|