Открыть боковую панель
nikitronn
sverchok
Коммиты
7db864a8
Коммит
7db864a8
создал
Ноя 04, 2019
по автору
Ilya Portnov
Просмотр файлов
Adaptive polygons: "donor per face" mode.
владелец
05251803
Изменения
1
Скрыть пробелы
Построчно
Рядом
nodes/modifier_make/adaptive_polygons_mk2.py
Просмотр файла @
7db864a8
...
...
@@ -28,6 +28,7 @@ from mathutils.geometry import barycentric_transform
from
sverchok.node_tree
import
SverchCustomTreeNode
from
sverchok.data_structure
import
(
updateNode
,
Vector_generate
,
Vector_degenerate
,
match_long_repeat
,
fullList
,
cycle_for_length
,
describe_data_shape
,
rotate_list
)
from
sverchok.utils.sv_bmesh_utils
import
bmesh_from_pydata
...
...
@@ -170,6 +171,17 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
items
=
ngon_modes
,
default
=
"QUADS"
,
update
=
updateNode
)
matching_modes
=
[
(
"LONG"
,
"Repeat"
,
"Make an iteration for each donor or recipient object - depending on which list is longer"
,
0
),
(
"PERFACE"
,
"Donor per face"
,
"If there are many donor objects, match each donor object with corresponding recipient object face"
,
1
)
]
matching_mode
:
EnumProperty
(
name
=
"Matching"
,
description
=
"How to match list of recipient objects with list of donor objects"
,
items
=
matching_modes
,
default
=
"LONG"
,
update
=
updateNode
)
join
:
BoolProperty
(
name
=
"Join"
,
description
=
"Output one joined mesh"
,
...
...
@@ -193,6 +205,7 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
def
draw_buttons
(
self
,
context
,
layout
):
layout
.
prop
(
self
,
"join"
)
layout
.
prop
(
self
,
"matching_mode"
)
def
draw_buttons_ext
(
self
,
context
,
layout
):
self
.
draw_buttons
(
context
,
layout
)
...
...
@@ -386,8 +399,16 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
def
_process
(
self
,
verts_recpt
,
faces_recpt
,
verts_donor
,
faces_donor
,
zcoefs
,
zoffsets
,
zrotations
,
wcoefs
,
facerots
,
mask
):
bm
=
bmesh_from_pydata
(
verts_recpt
,
None
,
faces_recpt
,
normal_update
=
True
)
bm
.
verts
.
ensure_lookup_table
()
# Original (unrotated) donor vertices
donor_verts_o
=
[
Vector
(
v
)
for
v
in
verts_donor
]
single_donor
=
self
.
matching_mode
==
'LONG'
if
single_donor
:
# Original (unrotated) donor vertices
donor_verts_o
=
[
Vector
(
v
)
for
v
in
verts_donor
]
verts_donor
=
[
verts_donor
]
faces_donor
=
[
faces_donor
]
fullList
(
verts_donor
,
len
(
faces_recpt
))
fullList
(
faces_donor
,
len
(
faces_recpt
))
X
,
Y
=
self
.
get_other_axes
()
Z
=
self
.
normal_axis_idx
()
...
...
@@ -399,9 +420,10 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
tri_vert_2
=
self
.
from2d
(
0.5
,
-
sqrt_3_6
)
tri_vert_3
=
self
.
from2d
(
0
,
sqrt_3_3
)
# We will be rotating the donor object around Z axis,
# so it's size along Z is not going to change.
z_size
=
diameter
(
donor_verts_o
,
Z
)
if
single_donor
:
# We will be rotating the donor object around Z axis,
# so it's size along Z is not going to change.
z_size
=
diameter
(
donor_verts_o
,
Z
)
verts_out
=
[]
faces_out
=
[]
...
...
@@ -410,13 +432,18 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
quad_vert_idxs
=
[
0
,
1
,
2
,
-
1
]
prev_angle
=
None
for
recpt_face
,
recpt_face_bm
,
zcoef
,
zoffset
,
angle
,
wcoef
,
facerot
,
m
in
zip
(
faces_recpt
,
bm
.
faces
,
zcoefs
,
zoffsets
,
zrotations
,
wcoefs
,
facerots
,
mask
):
face_data
=
zip
(
faces_recpt
,
bm
.
faces
,
verts_donor
,
faces_donor
,
zcoefs
,
zoffsets
,
zrotations
,
wcoefs
,
facerots
,
mask
)
for
recpt_face
,
recpt_face_bm
,
donor_verts_i
,
donor_faces_i
,
zcoef
,
zoffset
,
angle
,
wcoef
,
facerot
,
m
in
face_data
:
recpt_face_vertices_bm
=
[
bm
.
verts
[
i
]
for
i
in
recpt_face
]
if
not
single_donor
:
# Original (unrotated) donor vertices
donor_verts_o
=
[
Vector
(
v
)
for
v
in
donor_verts_i
]
z_size
=
diameter
(
donor_verts_o
,
Z
)
# We have to recalculate rotated vertices only if
# the rotation angle have changed.
if
prev_angle
is
None
or
angle
!=
prev_angle
:
if
prev_angle
is
None
or
angle
!=
prev_angle
or
not
single_donor
:
donor_verts_v
=
self
.
rotate_z
(
donor_verts_o
,
angle
)
if
self
.
xy_mode
==
'BOUNDS'
or
self
.
z_scale
==
'AUTO'
:
...
...
@@ -480,7 +507,6 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
recpt_face_vertices_bm
[
i2
].
co
],
[
tri_vert_1
/
wcoef
,
tri_vert_2
/
wcoef
,
tri_vert_3
/
wcoef
]
)
*
zcoef
#self.info("T: %s, %s, %s", tri_vert_1, tri_vert_2, tri_vert_3)
new_verts
=
[]
for
v
in
donor_verts_v
:
new_verts
.
append
(
self
.
interpolate_tri_3d
(
...
...
@@ -491,7 +517,7 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
recpt_face_bm
.
normal
,
v
,
zcoef
,
zoffset
))
verts_out
.
append
(
new_verts
)
faces_out
.
append
(
faces_
donor
)
faces_out
.
append
(
donor_
faces_
i
)
elif
map_mode
==
'QUAD'
:
# Quads processing mode.
...
...
@@ -548,7 +574,7 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
zcoef
,
zoffset
))
verts_out
.
append
(
new_verts
)
faces_out
.
append
(
faces_
donor
)
faces_out
.
append
(
donor_
faces_
i
)
bm
.
free
()
...
...
@@ -558,10 +584,10 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
if
not
any
(
output
.
is_linked
for
output
in
self
.
outputs
):
return
verts_
donor
_s
=
self
.
inputs
[
'VersR'
].
sv_get
()
faces_
donor
_s
=
self
.
inputs
[
'PolsR'
].
sv_get
()
verts_
recpt
_s
=
self
.
inputs
[
'VersD'
].
sv_get
()
faces_
recpt
_s
=
self
.
inputs
[
'PolsD'
].
sv_get
(
default
=
[[]]
)
verts_
recpt
_s
=
self
.
inputs
[
'VersR'
].
sv_get
()
faces_
recpt
_s
=
self
.
inputs
[
'PolsR'
].
sv_get
(
default
=
[[]]
)
verts_
donor
_s
=
self
.
inputs
[
'VersD'
].
sv_get
()
faces_
donor
_s
=
self
.
inputs
[
'PolsD'
].
sv_get
()
zcoefs_s
=
self
.
inputs
[
'Z_Coef'
].
sv_get
()
zoffsets_s
=
self
.
inputs
[
'Z_Offset'
].
sv_get
()
zrotations_s
=
self
.
inputs
[
'Z_Rotation'
].
sv_get
()
...
...
@@ -575,8 +601,11 @@ class SvAdaptivePolygonsNodeMk2(bpy.types.Node, SverchCustomTreeNode):
verts_out
=
[]
faces_out
=
[]
if
self
.
matching_mode
==
'PERFACE'
:
verts_donor_s
=
[
verts_donor_s
]
faces_donor_s
=
[
faces_donor_s
]
objects
=
match_long_repeat
([
verts_recpt_s
,
faces_recpt_s
,
verts_donor_s
,
faces_donor_s
,
zcoefs_s
,
zoffsets_s
,
zrotations_s
,
wcoefs_s
,
facerots_s
,
mask_s
])
for
verts_
donor
,
faces_
donor
,
verts_
recpt
,
faces_
recpt
,
zcoefs
,
zoffsets
,
zrotations
,
wcoefs
,
facerots
,
mask
in
zip
(
*
objects
):
for
verts_
recpt
,
faces_
recpt
,
verts_
donor
,
faces_
donor
,
zcoefs
,
zoffsets
,
zrotations
,
wcoefs
,
facerots
,
mask
in
zip
(
*
objects
):
fullList
(
zcoefs
,
len
(
faces_recpt
))
fullList
(
zoffsets
,
len
(
faces_recpt
))
fullList
(
zrotations
,
len
(
faces_recpt
))
...
...
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать