Открыть боковую панель
nikitronn
sverchok
Коммиты
77e4670e
Не подтверждена
Коммит
77e4670e
создал
Сен 13, 2021
по автору
Durman
Зафиксировано автором
GitHub
Сен 13, 2021
Просмотр файлов
Merge pull request #4341 from nortikin/fix_index_to_mask_node
Index to mask node refactoring
владельцы
4f3a5a0b
3e4426f8
Изменения
1
Скрыть пробелы
Построчно
Рядом
nodes/list_masks/index_to_mask.py
Просмотр файла @
77e4670e
...
@@ -15,62 +15,17 @@
...
@@ -15,62 +15,17 @@
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
#
# ##### END GPL LICENSE BLOCK #####
# ##### END GPL LICENSE BLOCK #####
from
itertools
import
cycle
import
numpy
as
np
import
numpy
as
np
import
bpy
import
bpy
from
bpy.props
import
IntProperty
,
BoolProperty
from
bpy.props
import
IntProperty
,
BoolProperty
from
sverchok.data_structure
import
updateNode
from
sverchok.node_tree
import
SverchCustomTreeNode
from
sverchok.node_tree
import
SverchCustomTreeNode
from
sverchok.utils.handling_nodes
import
NodeProperties
,
SockTypes
,
SocketProperties
,
initialize_node
,
WrapNode
node
=
WrapNode
()
node
.
props
.
data_to_mask
=
NodeProperties
(
bpy_props
=
BoolProperty
(
name
=
"Data masking"
,
description
=
"Use data to define mask length"
,
default
=
False
))
node
.
props
.
is_topo_mask
=
NodeProperties
(
bpy_props
=
BoolProperty
(
name
=
"Topo mask"
,
description
=
"data consists of verts or polygons / edges. "
"Otherwise the two vertices will be masked as [[[T, T, T], [F, F, F]]] instead of [[T, F]]"
,
default
=
False
))
node
.
props
.
output_numpy
=
NodeProperties
(
bpy_props
=
BoolProperty
(
name
=
"Output NumPy"
,
description
=
"Output Numpy arrays in stead of regular python lists"
,
default
=
False
))
node
.
props
.
index
=
NodeProperties
(
bpy_props
=
IntProperty
(
name
=
"Index"
))
node
.
props
.
mask_size
=
NodeProperties
(
bpy_props
=
IntProperty
(
name
=
'Mask Length'
,
default
=
10
,
min
=
2
))
node
.
inputs
.
index
=
SocketProperties
(
name
=
"Index"
,
socket_type
=
SockTypes
.
STRINGS
,
prop
=
node
.
props
.
index
,
deep_copy
=
False
)
node
.
inputs
.
mask_size
=
SocketProperties
(
name
=
"Mask size"
,
socket_type
=
SockTypes
.
STRINGS
,
prop
=
node
.
props
.
mask_size
,
deep_copy
=
False
,
show_function
=
lambda
:
not
node
.
props
.
data_to_mask
)
node
.
inputs
.
data_to_mask
=
SocketProperties
(
name
=
"Data masking"
,
socket_type
=
SockTypes
.
STRINGS
,
deep_copy
=
False
,
mandatory
=
True
,
show_function
=
lambda
:
node
.
props
.
data_to_mask
)
node
.
outputs
.
mask
=
SocketProperties
(
name
=
"Mask"
,
socket_type
=
SockTypes
.
STRINGS
)
@
initialize_node
(
node
)
class
SvIndexToMaskNode
(
bpy
.
types
.
Node
,
SverchCustomTreeNode
):
class
SvIndexToMaskNode
(
bpy
.
types
.
Node
,
SverchCustomTreeNode
):
''' Create mask list from index '''
''' Create mask list from index '''
bl_idname
=
'SvIndexToMaskNode'
bl_idname
=
'SvIndexToMaskNode'
...
@@ -78,6 +33,33 @@ class SvIndexToMaskNode(bpy.types.Node, SverchCustomTreeNode):
...
@@ -78,6 +33,33 @@ class SvIndexToMaskNode(bpy.types.Node, SverchCustomTreeNode):
bl_icon
=
'OUTLINER_OB_EMPTY'
bl_icon
=
'OUTLINER_OB_EMPTY'
sv_icon
=
'SV_INDEX_TO_MASK'
sv_icon
=
'SV_INDEX_TO_MASK'
def
data_to_mask_update
(
self
,
context
):
self
.
inputs
[
'Mask size'
].
hide_safe
=
self
.
data_to_mask
self
.
inputs
[
'Data masking'
].
hide_safe
=
not
self
.
data_to_mask
updateNode
(
self
,
context
)
data_to_mask
:
BoolProperty
(
name
=
"Data masking"
,
description
=
"Use data to define mask length"
,
default
=
False
,
update
=
data_to_mask_update
)
is_topo_mask
:
BoolProperty
(
name
=
"Topo mask"
,
default
=
False
,
update
=
updateNode
,
description
=
"data consists of verts or polygons / edges. "
"Otherwise the two vertices will be masked as [[[T, T, T], [F, F, F]]] instead of [[T, F]]"
)
output_numpy
:
BoolProperty
(
name
=
"Output NumPy"
,
default
=
False
,
update
=
updateNode
,
description
=
"Output Numpy arrays in stead of regular python lists"
)
# socket properties
index
:
IntProperty
(
name
=
"Index"
,
update
=
updateNode
)
mask_size
:
IntProperty
(
name
=
'Mask Length'
,
default
=
10
,
min
=
2
,
update
=
updateNode
)
def
sv_init
(
self
,
context
):
self
.
inputs
.
new
(
"SvStringsSocket"
,
"Index"
).
prop_name
=
"index"
self
.
inputs
.
new
(
"SvStringsSocket"
,
"Mask size"
).
prop_name
=
"mask_size"
self
.
inputs
.
new
(
"SvStringsSocket"
,
"Data masking"
).
hide_safe
=
True
self
.
outputs
.
new
(
"SvStringsSocket"
,
"Mask"
)
def
draw_buttons
(
self
,
context
,
layout
):
def
draw_buttons
(
self
,
context
,
layout
):
col
=
layout
.
column
(
align
=
True
)
col
=
layout
.
column
(
align
=
True
)
col
.
prop
(
self
,
"data_to_mask"
,
toggle
=
True
)
col
.
prop
(
self
,
"data_to_mask"
,
toggle
=
True
)
...
@@ -92,17 +74,38 @@ class SvIndexToMaskNode(bpy.types.Node, SverchCustomTreeNode):
...
@@ -92,17 +74,38 @@ class SvIndexToMaskNode(bpy.types.Node, SverchCustomTreeNode):
layout
.
prop
(
self
,
'output_numpy'
)
layout
.
prop
(
self
,
'output_numpy'
)
def
process
(
self
):
def
process
(
self
):
if
not
node
.
props
.
data_to_mask
:
# upgrade old nodes
mask
=
np
.
zeros
(
int
(
node
.
inputs
.
mask_size
[
0
]),
dtype
=
bool
)
if
'mask size'
in
self
.
inputs
:
else
:
self
.
inputs
[
'mask size'
].
name
=
'Mask size'
if
node
.
props
.
is_topo_mask
:
if
'data to mask'
in
self
.
inputs
:
mask
=
np
.
zeros
(
len
(
node
.
inputs
.
data_to_mask
),
dtype
=
bool
)
self
.
inputs
[
'data to mask'
].
name
=
'Data masking'
if
'mask'
in
self
.
outputs
:
self
.
outputs
[
'mask'
].
name
=
'Mask'
index
=
self
.
inputs
[
"Index"
].
sv_get
(
deepcopy
=
False
,
default
=
[])
mask_size
=
self
.
inputs
[
'Mask size'
].
sv_get
(
deepcopy
=
False
,
default
=
cycle
([
None
]))
data_to_mask
=
self
.
inputs
[
'Data masking'
].
sv_get
(
deepcopy
=
False
,
default
=
[]
if
self
.
data_to_mask
else
cycle
([
None
]))
masks
=
[]
for
ind
,
mask
,
data
in
zip
(
index
,
mask_size
,
data_to_mask
):
if
not
self
.
data_to_mask
:
mask
=
mask
[
0
]
if
mask
is
not
None
else
0
mask
=
np
.
zeros
(
int
(
mask
),
dtype
=
bool
)
else
:
else
:
# inconsistent mode with Sverchok data structure, should be reconsidered in MK2 version
if
self
.
is_topo_mask
:
mask
=
np
.
zeros_like
(
node
.
inputs
.
data_to_mask
,
dtype
=
bool
)
mask
=
np
.
zeros
(
len
(
data
),
dtype
=
bool
)
else
:
# inconsistent mode with Sverchok data structure, should be reconsidered in MK2 version
mask
=
np
.
zeros_like
(
data
,
dtype
=
bool
)
mask
[
node
.
inputs
.
index
]
=
True
mask
[
ind
]
=
True
if
node
.
props
.
output_numpy
:
masks
.
append
(
mask
)
node
.
outputs
.
mask
=
mask
if
self
.
output_numpy
:
self
.
outputs
[
'Mask'
].
sv_set
(
masks
)
else
:
else
:
node
.
outputs
.
mask
=
mask
.
tolist
()
self
.
outputs
[
'Mask'
].
sv_set
([
m
.
tolist
()
for
m
in
masks
])
register
,
unregister
=
bpy
.
utils
.
register_classes_factory
([
SvIndexToMaskNode
])
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать