Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-08-28 07:37:05 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-08-28 07:37:05 +0300
commit94d6b54826f4bb7c5de1666c416bd5b19534cdd5 (patch)
tree762d6a63e4f4ccce199b7a66112885864a7286d9 /source/blender/editors/curve/editcurve.c
parentbc2830a3ce15de65bc231a79f167bb32404f3c80 (diff)
parent1725e46cee167d615db6be1dba64090459ac2321 (diff)
Merge branch 'blender-v2.90-release' into master
Diffstat (limited to 'source/blender/editors/curve/editcurve.c')
-rw-r--r--source/blender/editors/curve/editcurve.c105
1 files changed, 65 insertions, 40 deletions
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index 4e12063544e..fb102574a85 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -2172,12 +2172,22 @@ bool ed_editnurb_extrude_flag(EditNurb *editnurb, const short flag)
return ok;
}
+static void calc_duplicate_actnurb(const ListBase *editnurb, const ListBase *newnurb, Curve *cu)
+{
+ cu->actnu = BLI_listbase_count(editnurb) + BLI_listbase_count(newnurb);
+}
+
static bool calc_duplicate_actvert(
const ListBase *editnurb, const ListBase *newnurb, Curve *cu, int start, int end, int vert)
{
+ if (cu->actvert == -1) {
+ calc_duplicate_actnurb(editnurb, newnurb, cu);
+ return true;
+ }
+
if ((start <= cu->actvert) && (end > cu->actvert)) {
+ calc_duplicate_actnurb(editnurb, newnurb, cu);
cu->actvert = vert;
- cu->actnu = BLI_listbase_count(editnurb) + BLI_listbase_count(newnurb);
return true;
}
return false;
@@ -2427,26 +2437,31 @@ static void adduplicateflagNurb(
}
if (cu->actnu == i) {
- for (b = 0, diffa = 0; b < newv; b++, diffa += nu->pntsu - newu) {
- starta = b * nu->pntsu + a;
- if (calc_duplicate_actvert(editnurb,
- newnurb,
- cu,
- cu->actvert,
- starta,
- cu->actvert % nu->pntsu + newu +
- b * newnu->pntsu)) {
- /* actvert in cyclicu selection */
- break;
- }
- if (calc_duplicate_actvert(editnurb,
- newnurb,
- cu,
- starta,
- starta + newu,
- cu->actvert - starta + b * newnu->pntsu)) {
- /* actvert in 'current' iteration selection */
- break;
+ if (cu->actvert == -1) {
+ calc_duplicate_actnurb(editnurb, newnurb, cu);
+ }
+ else {
+ for (b = 0, diffa = 0; b < newv; b++, diffa += nu->pntsu - newu) {
+ starta = b * nu->pntsu + a;
+ if (calc_duplicate_actvert(editnurb,
+ newnurb,
+ cu,
+ cu->actvert,
+ starta,
+ cu->actvert % nu->pntsu + newu +
+ b * newnu->pntsu)) {
+ /* actvert in cyclicu selection */
+ break;
+ }
+ if (calc_duplicate_actvert(editnurb,
+ newnurb,
+ cu,
+ starta,
+ starta + newu,
+ cu->actvert - starta + b * newnu->pntsu)) {
+ /* actvert in 'current' iteration selection */
+ break;
+ }
}
}
}
@@ -2474,16 +2489,21 @@ static void adduplicateflagNurb(
/* general case if not handled by cyclicu or cyclicv */
if (cu->actnu == i) {
- for (b = 0, diffa = 0; b < newv; b++, diffa += nu->pntsu - newu) {
- starta = b * nu->pntsu + a;
- if (calc_duplicate_actvert(editnurb,
- newnurb,
- cu,
- starta,
- starta + newu,
- cu->actvert - (a / nu->pntsu * nu->pntsu + diffa +
- (starta % nu->pntsu)))) {
- break;
+ if (cu->actvert == -1) {
+ calc_duplicate_actnurb(editnurb, newnurb, cu);
+ }
+ else {
+ for (b = 0, diffa = 0; b < newv; b++, diffa += nu->pntsu - newu) {
+ starta = b * nu->pntsu + a;
+ if (calc_duplicate_actvert(editnurb,
+ newnurb,
+ cu,
+ starta,
+ starta + newu,
+ cu->actvert - (a / nu->pntsu * nu->pntsu + diffa +
+ (starta % nu->pntsu)))) {
+ break;
+ }
}
}
}
@@ -2510,15 +2530,20 @@ static void adduplicateflagNurb(
/* check for actvert in the unused cyclicuv selection */
if (cu->actnu == i) {
- for (b = 0, diffa = 0; b < newv; b++, diffa += nu->pntsu - newu) {
- starta = b * nu->pntsu;
- if (calc_duplicate_actvert(editnurb,
- newnurb,
- cu,
- starta,
- starta + newu,
- cu->actvert - (diffa + (starta % nu->pntsu)))) {
- break;
+ if (cu->actvert == -1) {
+ calc_duplicate_actnurb(editnurb, newnurb, cu);
+ }
+ else {
+ for (b = 0, diffa = 0; b < newv; b++, diffa += nu->pntsu - newu) {
+ starta = b * nu->pntsu;
+ if (calc_duplicate_actvert(editnurb,
+ newnurb,
+ cu,
+ starta,
+ starta + newu,
+ cu->actvert - (diffa + (starta % nu->pntsu)))) {
+ break;
+ }
}
}
}