9
$\begingroup$

I have been doing a lot of work with curves recently (mostly Bezier because of the greater control) and I have stumbled across an issue, I can't seem to find an equivalent option to Remove Doubles used for meshes. Is there a way to merge all vertices along a curve within a given distance?


For clarification, a double is considered two vertices in the same space (same coordinates), but part of different segment strings. For example, you may have a cyclic curve, three segments of which are duplicated, and not part of the one coherent whole of the cyclic curve.

$\endgroup$
  • 1
    $\begingroup$ do you mean like if you accidentally hit extrude on a point and don't realize it, and haven't moved it away, then yo have zombie points? $\endgroup$ – zeffii Jun 12 '15 at 17:37
  • $\begingroup$ @zeffii Exactly, you get weird black ghost lines, and ends up you have a whole string of them $\endgroup$ – VRM Jun 12 '15 at 17:46
  • 1
    $\begingroup$ You can only delete vertices or segments, not sure if it will work as expected if there was an option to merge vertices since it will have to create new values for the handles. $\endgroup$ – Denis Jun 12 '15 at 18:08
  • $\begingroup$ Would-be duplicate: blender.stackexchange.com/q/23152/599 $\endgroup$ – gandalf3 Jun 12 '15 at 18:34
  • $\begingroup$ Please describe in more detail by what you mean with 'doubles'. It can be interpreted in a few ways, and in some very un-useful ways. $\endgroup$ – zeffii Jun 12 '15 at 19:28
3
$\begingroup$

There is no equivalent to Remove Doubles for Bezier Curves. This is likely due to the difference in the nature of Curves versus Meshes. As Denis stated, if the two points have different handle positions, how should this be, um, handled? ;-) Should the handle positions be averaged together? Also, Remove Doubles can just merge vertices based on a distance threshold no matter how many edges are connected to it, but Curves are fundamentally different since a point cannot have more than two segments connected to it. Simply put, Curves are linear while Meshes are non-linear.

This doesn't necessarily mean such a feature couldn't be implemented, but it would have limited use cases, and for non-identical doubles it would have to make reaching assumptions about how you want your points merged. For example, if your Curve doesn't cross itself you may be alright, but if it does it could easily end up getting merged at the intersection and the path rerouted in an unexpected way. Here's a screen shot to illustrate what could happen hypothetically:

One possible undesirable effect that could occur if the Remove Doubles command were possible on Curves

In conclusion, it could be useful in cases where the doubles lie right on top of one another, but at higher distance thresholds could produce unexpected results. Such a feature could be useful for certain situations, such as for removing points lying on top of one another that you can't see.

For now, you could find such disconnected points by selecting at least one point on each of your curve segments you intend to keep, using Select Linked CtrlL, Hiding them H, then Select All A and Delete X the disconnected left-over points. Then Un-Hide AltH the segments you will keep.

$\endgroup$
3
$\begingroup$

I know what you mean, and I encountered this need just yesterday. While it is not in stock Blender, there is a feature for this in BlenderCAM:

https://github.com/vilemnovak/blendercam/wiki/Blendercam-Tools#c-remove-doubles

It's called "C-Remove Doubles" -- probably short for curve remove doubles. It works by converting the curve to a mesh, removing the doubles, then converting back again. There is a warning about it removing beziers so it might not do exactly what you want. But it worked for me.

$\endgroup$
0
$\begingroup$

Here is my equivalent of remove doubles on curve as addon:

https://github.com/crantisz/blender-curve-remove-doubles-addon

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.