Page MenuHome

Added Rip Edge move for curves
Needs RevisionPublic

Authored by Rohan Rathi (RohanRathi) on Mar 21 2017, 4:44 PM.

Details

Summary

I've added Rip Edge move and tested in every way I can.
Works in the exact same way as pressing ALT + D on a circle mesh, as can be seen from the Youtube video here:
https://www.youtube.com/watch?v=y-M6C9xlFAY

Would be happy to hear any improvements or suggestions :)

Diff Detail

Repository
rB Blender

Event Timeline

Hi Rohan,
Very useful addition :) I would be very happy with it as is.
For suggestion, enable the user to choose the start location of the new knot by riping under the mouse cursor (so with nothing selected, a knot is added under the mouse cursor).

Campbell Barton (campbellbarton) requested changes to this revision.Apr 4 2017, 2:26 AM

Hi, thanks for the patch - was testing in on a new curve with a single subdivision (selecting the center vertex). And I get a buffer overrun

=================================================================
==9439==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200003087c at pc 0x000001672035 bp 0x7ffe66249680 sp 0x7ffe66249678
READ of size 4 at 0x60200003087c thread T0
    #0 0x1672034 in curve_rip_edge_invoke /src/blender/source/blender/editors/curve/editcurve.c:6477
    #1 0xbbd0a4 in wm_macro_invoke_internal /src/blender/source/blender/windowmanager/intern/wm_operators.c:273
    #2 0xbbd529 in wm_macro_invoke /src/blender/source/blender/windowmanager/intern/wm_operators.c:296
    #3 0xb7cc3e in wm_operator_invoke /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1115
    #4 0xb820e6 in wm_handler_operator_call /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1767
    #5 0xb8479d in wm_handlers_do_intern /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2047
    #6 0xb85352 in wm_handlers_do /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2158
    #7 0xb87f4d in wm_event_do_handlers /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2493
    #8 0xb5c053 in WM_main /src/blender/source/blender/windowmanager/intern/wm.c:505
    #9 0xb4fb0c in main /src/blender/source/creator/creator.c:527
    #10 0x7f264a403510 in __libc_start_main (/usr/lib/libc.so.6+0x20510)
    #11 0xb4ed39 in _start (/src/cmake_debug/bin/blender+0xb4ed39)

0x60200003087c is located 0 bytes to the right of 12-byte region [0x602000030870,0x60200003087c)
allocated by thread T0 here:
    #0 0x7f264d543538 in __interceptor_malloc ../../../../gcc/libsanitizer/asan/asan_malloc_linux.cc:62
    #1 0x4a790e0 in MEM_lockfree_mallocN /src/blender/intern/guardedalloc/intern/mallocn_lockfree_impl.c:307
    #2 0x166fefa in curve_rip_edge_invoke /src/blender/source/blender/editors/curve/editcurve.c:6394
    #3 0xbbd0a4 in wm_macro_invoke_internal /src/blender/source/blender/windowmanager/intern/wm_operators.c:273
    #4 0xbbd529 in wm_macro_invoke /src/blender/source/blender/windowmanager/intern/wm_operators.c:296
    #5 0xb7cc3e in wm_operator_invoke /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1115
    #6 0xb820e6 in wm_handler_operator_call /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1767
    #7 0xb8479d in wm_handlers_do_intern /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2047
    #8 0xb85352 in wm_handlers_do /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2158
    #9 0xb87f4d in wm_event_do_handlers /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2493
    #10 0xb5c053 in WM_main /src/blender/source/blender/windowmanager/intern/wm.c:505
    #11 0xb4fb0c in main /src/blender/source/creator/creator.c:527
    #12 0x7f264a403510 in __libc_start_main (/usr/lib/libc.so.6+0x20510)

SUMMARY: AddressSanitizer: heap-buffer-overflow /src/blender/source/blender/editors/curve/editcurve.c:6477 in curve_rip_edge_invoke

I also tested in on the side of a nurbs surface which crashes

/src/blender/source/blender/editors/curve/editcurve.c:6538:29: runtime error: division by zero
=================================================================
==9533==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200009cfdc at pc 0x00000167432e bp 0x7ffc1f5a9540 sp 0x7ffc1f5a9538
READ of size 4 at 0x60200009cfdc thread T0
    #0 0x167432d in curve_rip_edge_invoke /src/blender/source/blender/editors/curve/editcurve.c:6623
    #1 0xbbd0a4 in wm_macro_invoke_internal /src/blender/source/blender/windowmanager/intern/wm_operators.c:273
    #2 0xbbd529 in wm_macro_invoke /src/blender/source/blender/windowmanager/intern/wm_operators.c:296
    #3 0xb7cc3e in wm_operator_invoke /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1115
    #4 0xb820e6 in wm_handler_operator_call /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1767
    #5 0xb8479d in wm_handlers_do_intern /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2047
    #6 0xb85352 in wm_handlers_do /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2158
    #7 0xb87f4d in wm_event_do_handlers /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2493
    #8 0xb5c053 in WM_main /src/blender/source/blender/windowmanager/intern/wm.c:505
    #9 0xb4fb0c in main /src/blender/source/creator/creator.c:527
    #10 0x7f595d3bb510 in __libc_start_main (/usr/lib/libc.so.6+0x20510)
    #11 0xb4ed39 in _start (/src/cmake_debug/bin/blender+0xb4ed39)

0x60200009cfdc is located 0 bytes to the right of 12-byte region [0x60200009cfd0,0x60200009cfdc)
allocated by thread T0 here:
    #0 0x7f59604fb538 in __interceptor_malloc ../../../../gcc/libsanitizer/asan/asan_malloc_linux.cc:62
    #1 0x4a790e8 in MEM_lockfree_mallocN /src/blender/intern/guardedalloc/intern/mallocn_lockfree_impl.c:307
    #2 0x1673513 in curve_rip_edge_invoke /src/blender/source/blender/editors/curve/editcurve.c:6544
    #3 0xbbd0a4 in wm_macro_invoke_internal /src/blender/source/blender/windowmanager/intern/wm_operators.c:273
    #4 0xbbd529 in wm_macro_invoke /src/blender/source/blender/windowmanager/intern/wm_operators.c:296
    #5 0xb7cc3e in wm_operator_invoke /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1115
    #6 0xb820e6 in wm_handler_operator_call /src/blender/source/blender/windowmanager/intern/wm_event_system.c:1767
    #7 0xb8479d in wm_handlers_do_intern /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2047
    #8 0xb85352 in wm_handlers_do /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2158
    #9 0xb87f4d in wm_event_do_handlers /src/blender/source/blender/windowmanager/intern/wm_event_system.c:2493
    #10 0xb5c053 in WM_main /src/blender/source/blender/windowmanager/intern/wm.c:505
    #11 0xb4fb0c in main /src/blender/source/creator/creator.c:527
    #12 0x7f595d3bb510 in __libc_start_main (/usr/lib/libc.so.6+0x20510)

SUMMARY: AddressSanitizer: heap-buffer-overflow /src/blender/source/blender/editors/curve/editcurve.c:6623 in curve_rip_edge_invoke

I think the tool should just report an error that surfaces aren't supported.

This revision now requires changes to proceed.Apr 4 2017, 2:26 AM
Rohan Rathi (RohanRathi) edited edge metadata.

I couldn't find any overflow though I don't have my debugging tools set properly.
I've cornered a possible fault causing the overflow and stopped rip from working on surfaces.

This revision now requires changes to proceed.Nov 13 2018, 7:24 PM
Charles Taaffe (CharlesTheFourth) requested changes to this revision.Nov 13 2018, 7:33 PM

When attempting to build this in visual studio on my windows machine I get an error at lines 6315 and 6322 in source/blender/editors/curve/editcurve.c

The error that occurs is as follows: 'initializing:' incompatible types - from void** to BezTriple. What can be done to resolve this issue because it does not allow the code to build currently as is?