Открыть боковую панель
nikitronn
sverchok
Коммиты
688f49f3
Коммит
688f49f3
создал
Июн 26, 2021
по автору
Ilya Portnov
Просмотр файлов
Some api for Bezier curves.
владелец
058665de
Изменения
1
Скрыть пробелы
Построчно
Рядом
utils/curve/bezier.py
Просмотр файла @
688f49f3
...
@@ -9,7 +9,7 @@ import numpy as np
...
@@ -9,7 +9,7 @@ import numpy as np
from
sverchok.data_structure
import
zip_long_repeat
from
sverchok.data_structure
import
zip_long_repeat
from
sverchok.utils.math
import
binomial
from
sverchok.utils.math
import
binomial
from
sverchok.utils.geom
import
Spline
from
sverchok.utils.geom
import
Spline
,
bounding_box
from
sverchok.utils.nurbs_common
import
SvNurbsMaths
from
sverchok.utils.nurbs_common
import
SvNurbsMaths
from
sverchok.utils.curve.core
import
SvCurve
,
UnsupportedCurveTypeException
from
sverchok.utils.curve.core
import
SvCurve
,
UnsupportedCurveTypeException
from
sverchok.utils.curve.algorithms
import
concatenate_curves
from
sverchok.utils.curve.algorithms
import
concatenate_curves
...
@@ -272,16 +272,35 @@ class SvBezierCurve(SvCurve):
...
@@ -272,16 +272,35 @@ class SvBezierCurve(SvCurve):
result
.
append
(
third
)
result
.
append
(
third
)
return
result
return
result
def
reparametrize
(
self
,
new_t_min
,
new_t_max
):
return
self
.
to_nurbs
().
reparametrize
(
new_t_min
,
new_t_max
)
def
get_degree
(
self
):
def
get_degree
(
self
):
return
self
.
degree
return
self
.
degree
def
get_control_points
(
self
):
def
get_control_points
(
self
):
return
self
.
points
return
self
.
points
def
elevate_degree
(
self
,
delta
=
1
):
def
elevate_degree
(
self
,
delta
=
None
,
target
=
None
):
if
delta
is
None
and
target
is
None
:
delta
=
1
if
delta
is
not
None
and
target
is
not
None
:
raise
Exception
(
"Of delta and target, only one parameter can be specified"
)
degree
=
self
.
get_degree
()
if
delta
is
None
:
delta
=
target
-
degree
if
delta
<
0
:
raise
Exception
(
f
"Curve already has degree
{
degree
}
, which is greater than target
{
target
}
"
)
if
delta
==
0
:
return
self
points
=
elevate_bezier_degree
(
self
.
degree
,
self
.
points
,
delta
)
points
=
elevate_bezier_degree
(
self
.
degree
,
self
.
points
,
delta
)
return
SvBezierCurve
(
points
)
return
SvBezierCurve
(
points
)
def
get_bounding_box
(
self
):
return
bounding_box
(
self
.
get_control_points
())
def
to_nurbs
(
self
,
implementation
=
SvNurbsMaths
.
NATIVE
):
def
to_nurbs
(
self
,
implementation
=
SvNurbsMaths
.
NATIVE
):
knotvector
=
sv_knotvector
.
generate
(
self
.
degree
,
len
(
self
.
points
))
knotvector
=
sv_knotvector
.
generate
(
self
.
degree
,
len
(
self
.
points
))
return
SvNurbsMaths
.
build_curve
(
implementation
,
return
SvNurbsMaths
.
build_curve
(
implementation
,
...
@@ -425,10 +444,29 @@ class SvCubicBezierCurve(SvCurve):
...
@@ -425,10 +444,29 @@ class SvCubicBezierCurve(SvCurve):
degree
=
3
,
knotvector
=
knotvector
,
degree
=
3
,
knotvector
=
knotvector
,
control_points
=
control_points
)
control_points
=
control_points
)
def
elevate_degree
(
self
,
delta
=
1
):
def
elevate_degree
(
self
,
delta
=
None
,
target
=
None
):
if
delta
is
None
and
target
is
None
:
delta
=
1
if
delta
is
not
None
and
target
is
not
None
:
raise
Exception
(
"Of delta and target, only one parameter can be specified"
)
degree
=
self
.
get_degree
()
if
delta
is
None
:
delta
=
target
-
degree
if
delta
<
0
:
raise
Exception
(
f
"Curve already has degree
{
degree
}
, which is greater than target
{
target
}
"
)
if
delta
==
0
:
return
self
points
=
elevate_bezier_degree
(
3
,
self
.
get_control_points
(),
delta
)
points
=
elevate_bezier_degree
(
3
,
self
.
get_control_points
(),
delta
)
return
SvBezierCurve
(
points
)
return
SvBezierCurve
(
points
)
def
get_bounding_box
(
self
):
return
bounding_box
(
self
.
get_control_points
())
def
reparametrize
(
self
,
new_t_min
,
new_t_max
):
return
self
.
to_nurbs
().
reparametrize
(
new_t_min
,
new_t_max
)
def
concatenate
(
self
,
curve2
):
def
concatenate
(
self
,
curve2
):
curve2
=
SvNurbsMaths
.
to_nurbs_curve
(
curve2
)
curve2
=
SvNurbsMaths
.
to_nurbs_curve
(
curve2
)
if
curve2
is
None
:
if
curve2
is
None
:
...
...
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать