7
$\begingroup$

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?

$\endgroup$
2
  • $\begingroup$ Try adding a screenshot here, better to be a file. :) I just wonder how you extrude it. $\endgroup$ Mar 7, 2014 at 5:25
  • $\begingroup$ They are possibly different objects. Do you select them in object mode or edit mode? $\endgroup$
    – Gunslinger
    Mar 7, 2014 at 6:53

3 Answers 3

7
$\begingroup$

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

$\endgroup$
2
  • $\begingroup$ Most of the objects are supposed to be different colors. When I do this and extrude, they all turn to one color. $\endgroup$
    – user199022
    Mar 7, 2014 at 23:06
  • 1
    $\begingroup$ You can assign different materials to parts of a curve the same as assigning materials to separate faces of a mesh. See the answer here $\endgroup$
    – sambler
    Mar 8, 2014 at 3:50
5
$\begingroup$

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.

$\endgroup$
2
  • $\begingroup$ 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! $\endgroup$ Mar 4, 2020 at 17:09
  • $\begingroup$ @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. $\endgroup$
    – Robin Betts
    Mar 4, 2020 at 18:50
3
$\begingroup$

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)

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .