7

I have an SVG file that I imported into Blender that uses curves. The image is split into multiple sections and I cannot figure out how to extrude multiple curves at once.

I tried selecting all of the curves by type and then tried to extrude but it only extrudes one curve. Does anyone know why?

Gunslinger
  • 6,392
  • 2
  • 28
  • 40
user199022
  • 71
  • 1
  • 1
  • 2

3 Answers3

7

You can have one curve object with multiple segments or you can have multiple curve objects each with one segment. Sounds like you have multiple curve objects, in which case you need to extrude each object separately. You could joint multiple curve objects into one by selecting them all and pressing CtrlJ so that they all use the same extrude setting.

With multiple objects you can see that each one has it's own item in the outliner.

enter image description here

After joining them all together there is only one item.

enter image description here

sambler
  • 55,387
  • 3
  • 59
  • 192
5

Your curves are independent objects. You can extrude, or set any of the other parameters, on all of those objects simultaneously by selecting them all, then holding Alt while dragging in the numerical field on the active object. The same applies to all values you can set in the GUI.

Robin Betts
  • 76,260
  • 8
  • 77
  • 190
  • This is gold. I think I knew this a while back but forgot. Side note for animation, it seems that this ALT method does not directly work to key-frame multiple objects. Thanks! – Coby Randal Mar 04 '20 at 17:09
  • @CobyRandal Ahhh .. thanks! Your comment will fill in for anyone else looking (I was thinking more from a modeller's POV) There must be other areas where it doesn't apply, too. – Robin Betts Mar 04 '20 at 18:50
3

I just bumped into this problem, importing an SVG with hundreds of curves, and it seems the easiest would be to write a script. Choose "Python console" in the "Editor type" tab, and in there, to see what sort of objects you have, you can do this in the console to see relationships:

>>> import inspect
>>> inspect.getmembers(bpy.context)
... bpy.data.objects['Curve.044'], bpy.data.objects['Curve.043'], ...

>>> inspect.getmembers(bpy.data.objects[0])
[... ('cycles_visibility', bpy.data.objects['Curve'].cycles_visibility), ('data', bpy.data.curves['_x30_.1.0']), ('delta_location', Vector((0.0, 0.0, 0.0))), ...('mode', 'OBJECT'), ... ('name', 'Curve'), ('parent', None), ...

>>> inspect.getmembers(bpy.data.objects[0].data)
[... ('dimensions', '2D'), ('eval_time', 0.0), ('extrude', 0.0), ... ('name', '_x30_.1.0'), ....

So, say to see curve properties printed in the console, you'd copy this snippet and paste it in the Python console (and press Enter twice to execute):

import re # needs to be pasted only once
for ix in bpy.data.objects:
  if re.match(r'^Curve', ix.name): # curve object
    print(ix.name)
    print("  ", ix.data, ix.data.name, ix.data.extrude )

Here for my example I get:

...
Curve.038
   <bpy_struct, Curve("_x30_.1.38")> _x30_.1.38 0.0
Curve.039
   <bpy_struct, Curve("_x30_.1.39")> _x30_.1.39 0.0
Curve.040
   <bpy_struct, Curve("Curve")> Curve 0.0
Curve.041
   <bpy_struct, Curve("Curve.001")> Curve.001 0.0
...

... which means that the names of Curve objects and curve "meshes"/paths are not guaranteed to be consistent! So here you might want to rename once first, by running this script through the terminal:

for ix in bpy.data.objects:
  if re.match(r'^Curve', ix.name): # curve object
    ix.name = "MyCurve." + ix.name
    ix.data.name = '_myCurve_' + ix.data.name

... and then you could paste something like this small function (again, hit ENTER twice after pasting, so it is properly parsed into memory):

def changeCurvesExtrude(inExtrd):
  for ix in bpy.data.objects:
    if re.match(r'^MyCurve', ix.name): # curve object
      ix.data.extrude = inExtrd

... and finally you can call from the Python console:

>>> changeCurvesExtrude(0.015)

... and have only the required curves change their Extrude parameter (you can use up and down arrow keys to show the last command in the prompt, so you can change the numeric parameter there more easily)

sdaau
  • 413
  • 3
  • 13