What's the fastest and / or craziest way to model an arrow in Blender?

48

18

I'm curious about all the ways you can come up with a solution. I'm searching for the way with the least clicks and maybe the two runner ups. I made up some rules on how to count them:

  • A default installation should be used.
  • Changes in the UI don't count, so you can zoom or pan without adding steps. Changing the pivot point or similar actions count.
  • Every press of a mouse button or key counts.
  • Combos like ctrlLMB or shiftD count as one.
  • The arrow has to be symmetrical. Proportions don't matter, right angles do. The backside of the arrowhead has to be parallel.
  • to broaden the field a bit: extra verts are OK as long as they don't distort the shape.
  • Addons belong in the realm of the second question.
  • In case two answers have the same score, the one posted first gets the checkbox.

The second and more creative question: what's the craziest, least practical and goldbergish way to do it? Feel free to contribute. Any fun solution in between the extremes is probably interesting, too.

So, who manages the least clicks and how?

arrow

Haunt_House

Posted 2018-02-06T05:15:45.370

Reputation: 10 984

24You know... I think this setup could work well for a 3d modeler's version of code golf: create a given model in the least amount of clicks possible. That could be fun. :) – noClue – 2018-02-07T14:24:51.307

Especially since time is money in the professional world. – Haunt_House – 2018-02-07T15:11:25.750

12Perhaps we could have a new tag to indicate this kind of thing. Perhaps ‘Challenge’ or something similar. I don’t know what conventions (if any) are in place for other SE sites. Maybe a question for meta. – Rich Sedman – 2018-02-07T15:25:10.533

I think these types of questions deserve their own site. That way, you're not just limited to Blender. I actually created a proposal on Area 51. It's my first proposal, so some help would be appreciated. :) Here's the link: https://area51.stackexchange.com/proposals/116559/code-golf-for-3d-models?referrer=3ieFFc_SI5kUJP9oiNvN_A2

– noClue – 2018-02-07T16:58:58.580

I also created a new question on Blender Meta just in case people don't like the site idea: https://blender.meta.stackexchange.com/questions/2445/challenge-tag-create-a-simple-shape-in-as-few-clicks-as-possible

– noClue – 2018-02-07T17:42:27.197

Nice idea, although for try utility it would be nice to have the ends map to a curve object for continuous editing. Perhaps made as an array with a head object? – 3pointedit – 2018-02-09T12:10:22.420

2

The extra curve objects addon that is part of a standard blender install , includes an arrow.

– sambler – 2018-02-10T05:51:27.793

What actually made this question have 8k views when other questions have a 100 in the same time? – Haunt_House – 2018-02-13T23:49:31.110

Answers

43

Unicode font

Copy the solid right arrow from unicode arrows

Add a font, edit mode, select text, select font, paste arrow, extrude.

batFINGER

Posted 2018-02-06T05:15:45.370

Reputation: 21 567

I thought about something similar, but really it seemed too crazy :DDD – m.ardito – 2018-02-07T10:12:23.630

4@ m.ardito With this question, there is no such thing as 'too crazy'. I eagerly await the first truly convoluted solutions. – Haunt_House – 2018-02-07T16:15:32.080

Note: make sure the font has a license you can use for personal/commercial use – LateralTerminal – 2018-02-08T15:18:21.270

1@lat good thing to check. The font linked by the page linked by the answer is open source, so that seems to be satisfied. – John Dvorak – 2018-02-08T17:41:30.230

35

So I thought to myself: These answers are so amazing, but they're hard. Even I have trouble recreating them. I have to do something. I need to provide a simple and effortless answer and after a while, I found it.

Step 1: Create a seven sided Cylinder.

7-sided cylinder in front view

Step 2: Build this ordinary and straightforward armature (shouldn't take long) and connect it to the circle.

simple armature a la Watt

Step 3: Push the Bone that has the shape of a modeled arrow (khm) up a bit.

Finished rig

I mean, it doesn't get much easier than pushing a bone up a bit.

To explain:

The orange and red ones are simple 2 bone IK-chains pointing to the mover arrow.

The green ones are parented to the orange ones and move with them. They are not necessary but it's a bit clearer that way. You could parent dark blue directly to orange with offset.

Dark blue is parented to green.

The blue ones are again simple 2 bone IK chains pointing to the light blue targets.

The yellow circle bones sit in the middle of the dark blue bones and are the only ones having deform enabled.

The tricky bit is to find the right lengths for red and orange so that a single bone moves all the green bones just the right amount.

James Watt has discovered this green/dark blue/light blue lever for his steam engines. It's called Watt's linkage. It enables the yellow circles to move pretty much in a straight line. It's still used in trains to keep the wheels from moving back and forth.

The orientation and length of the blue bones isn't just random. I simply put the tips on the arrow verts and the roots on the circle verts. Then I duplicated and rotated them 90 degrees to get the linkage with it's required right angles. Yes, simple rotation of a bone with start and end on a circle would have been enough, but meh...

Haunt_House

Posted 2018-02-06T05:15:45.370

Reputation: 10 984

10Argh why didn't I think of this, its so simple! – 3pointedit – 2018-02-10T23:43:54.423

1Once you see it, you can't unsee it. But you can beat it. – Haunt_House – 2018-02-14T16:49:59.443

23

Here's a fairly crazy method.... create it mathematically using the Add Mesh: Extra Objects addon.

  1. Enable the addon (Extra Objects)
  2. Add a Mesh/Maths Function/Z Surface
  3. Enter the equation as
(((x*x)**0.5)<0.25-(y-0.5))*(y>0)+(y<0)*(x<0.5)*(x>-0.5)

Optionally increase the step sizes for better resolution

This should produce something like this :

Z Surface Arrow

To explain the equation a little, it consists of two sections - one for the 'head' of the arrow (where y>0) and the other for the 'stem' of the arrow (where y<0) - and these conditionals are multiplied together to act as logical 'and' operations. For the stem, the equation

(x<0.5)*(x>-0.5) 

gives a high point whenever X is greater than -0.5 and also less than 0.5. For the head, we calculate the distance of the X coordinate from the axis

((x*x)**0.5)

(ie, sqrt(x ^ 2) - which is effectively the same as an 'abs(...)' function) and combine this with the Y coordinate to create the diagonal.

If you really wanted to you could use a Boolean modifier with a cube to chop off the excess around the base of the arrow where Z=0.


Taking this further, here's a 3d version using the XYZ Function Surface in place of the Z Surface :

3d arrow

The key here is the equation :

(v>-2)*(v<0)*0.5+(v>=0)*(1-v)

which creates the profile of the arrow from the 'v' coordinate. This is then multiplied by cos(u) and sin(u) for the X and Z coordinates to rotate the profile around the Y axis. Y is generated directly from v to give the arrow length. Note that U ranges from 0 to 2*pi for a full rotation and V ranges from -2 (the back of the arrow) to 1.0 (the tip of the arrow) matching the constants in the equation (-2 = the back of the arrow, 0.5 the thickness of the 'tail', 1 the tip of the arrow, with the back of the head at zero. The 'v>-2' closes the back of the arrow by collapsing down to 0 for v = -2.


One (final) edit - using a helper function to simplify the repeated equation and adjusting to produce a more traditional 'extruded'-shaped arrow, but using a step size of 4, adjusting the start/end values, and adding a conditional to the X Equation (note the specific settings in the left-hand panel).

extruded-shaped arrow

Rich Sedman

Posted 2018-02-06T05:15:45.370

Reputation: 22 163

Might save that one as a preset. IMO definitely the craziest so far. Do you find code markup doesn't work after a numbered list? Had that hassle yesterday. – batFINGER – 2018-02-07T10:44:03.103

Thanks! Yeah - having no end of trouble with the markup there. It's still not quite right but it will have to do. – Rich Sedman – 2018-02-07T10:49:44.107

1https://meta.stackexchange.com/a/99637/305735 – batFINGER – 2018-02-07T11:02:06.903

@batFINGER Thanks - that's a good one to know. Thanks for the edit. – Rich Sedman – 2018-02-07T11:06:25.557

1Apart from the most efficient version, stuff like that is exactly what I was looking forward to. Cool! – Haunt_House – 2018-02-07T11:56:59.297

1Also note you can use the ternary operator sin(u) if u &lt; 3 else cos(u) in your expressions. – batFINGER – 2018-02-11T11:04:01.150

22

You can do this in 8 steps, or 7 steps if the arrow tip may be squished. 11 or 9 if drag counts as two atomic operations.

  • tab - switch to edit mode
  • Select mode: edge select
  • altctrlright click - select all edges oriented along the X axis
  • ctrlI - invert selection
  • subdivide from the tool shelf
  • ctrl drag edge from (0, 1, 1) to (0, 0, 2)
  • ctrl drag edge from (0, 1, -1) to (0, 0, -2)

Last step is only needed if the tip has to have a right angle

  • ctrl drag edge from (0, 1, 0) to (0, 2, 0)

enter image description here

John Dvorak

Posted 2018-02-06T05:15:45.370

Reputation: 361

21

Cylinder "triangular prism" approach.

Add a cylinder with 3 vertices

enter image description here

Edit mode, face select, select y axis normal face, loop cut 2, drops us back into edge select mode with new edges selected.
shortcut for Loop cut slideCtrlR2EnterEnter

enter image description here

go back to face select mode, select middle face and extrude in y direction. EY drag.

enter image description here

batFINGER

Posted 2018-02-06T05:15:45.370

Reputation: 21 567

18

Fewest clicks? Bah. Here's how you do it without even editing the default cube, the only solution for the truly lazy:

enter image description here

Conforms to Default Cubism rules.

gandalf3

Posted 2018-02-06T05:15:45.370

Reputation: 115 932

What software did you use to make that gif? It's much slimmer than the usual suspects that basically make a page unloadable for low bandwidth users. – Haunt_House – 2018-02-09T07:55:48.000

2

@Haunt_House peek

– gandalf3 – 2018-02-09T07:56:49.107

17

Another way:

start with a standard cube

enter image description here

scale on x

enter image description here

make a loop cut at x center

enter image description here

select top/bottom front edges

enter image description here

and scale on Z 0 (to merge them)

enter image description here

then select center loop top/bottom edges and use "rip fill"

enter image description here

then scale on Z

enter image description here

enter image description here

here is an even faster way to do the same thing: lasso select, extrude, scale to zero, rip fill.

enter image description here

m.ardito

Posted 2018-02-06T05:15:45.370

Reputation: 10 184

5Rip Fill, another one of all the science fiction I have missed catching. Thanks – Haunt_House – 2018-02-06T21:03:08.447

14

Adding a separate answer as it is a completely different/crazy way: knife tool (with ZC modifers) comes to rescue, here:

enter image description here

Steps:

  1. add a simple plane
  2. enter edit mode
  3. press K to enter knife tool, then press ZC to activate "cut through" and "cut staight" knife mode
  4. start cutting the diagonal, then cut three more lines to shape the arrow 'base'
  5. press enter to finalize the cut
  6. now press C and select 4 edges to be deleted
  7. delete the edges pressing X
  8. select all and extrude on Z

and an even different one, where simpler tools are used

enter image description here

Steps:

  1. add a simple plane
  2. in edit mode, select all and duplicate with shiftD
  3. X1 to shift the duplicated face to 1BU right
  4. press R45 to rotate it 45°
  5. now select the undesired vertex and press X then select "dissolve vertices" (now you have a quad face next to a tri face)
  6. now select all and extrude on Z

as for the crazyest, you could cut the shape from a cube with booleans, or draw an arrow shape with GP tools, then convert to mesh and extrude...

m.ardito

Posted 2018-02-06T05:15:45.370

Reputation: 10 184

Sigh, So many tools I never use and the gif makes it look so easy lol. – batFINGER – 2018-02-07T10:05:47.310

1my poor 64kbit internet and the gifs of bandwidth death have a strained relationship ( : – Haunt_House – 2018-02-07T11:58:39.350

@Haunt_House I've added detailed steps, to make it more clear. If not enough I'll add step-by-step images, it'll just take longer - sorry for you 64kbit net :(( – m.ardito – 2018-02-07T12:27:56.267

9

Install curve galore addon

Shift+A Add curve -> Curve profile -> Arrow

enter image description here

Press F6 for detail

Press Alt+C convert to mesh

Press Del Limited Dissolve

Select all the faces Press E to extude

enter image description here

enter image description here

atek

Posted 2018-02-06T05:15:45.370

Reputation: 4 374

8

Here's a method modelling from a plane and adding a solidify modifier. Technically I think this is 13 steps - although you might rule some of them as combined (eg, Merge/At Centre - does that count as 2 or only 1?) :

  1. Create plane (Add/Mesh/Plane)
  2. Edit mode (Tab)
  3. Click Subdivide in tool shelf
  4. Increase subdivision to 2
  5. Select none (A)
  6. Choose 'Edge' mode
  7. Select two opposite corner edges (for arrow stem) - using Ctrl-Drag to lasso select
  8. Delete Vertices
  9. Shift+Alt-Right-Click to select the 'front' edge
  10. Merge (Alt+M)
  11. At Centre
  12. Object Mode
  13. Add Modifier/Solidify

Technically that's it, although the thickness might not be immediately apparent. Increase the Thickness of the Solidify modifier as desired.

animated

Rich Sedman

Posted 2018-02-06T05:15:45.370

Reputation: 22 163

8

There aren't any answer with curves yet (besides the Curve Galore add-on), so let's do it with curves!

  1. Add a Bezier Curve (Shift + A)
  2. Go in to Edit Mode (Tab)
  3. Straighten the curve (S + Y + 0 + Enter)
  4. Set Pivot Point to Individual Origins (. with Pie Menus)
  5. Collapse handles to points (S + 0 + Enter )
  6. Select 1 point (Box select with B)
  7. Extrude (E + Enter)
  8. In the N panel, set the Radius to 4
  9. Extrude again, this time moving the point further along the x-axis
  10. Set the Radius for the new point to 4.
  11. In the Curve panel of the Properties editor, set the Fill to Full
  12. Set the Bevel Depth to 0.2
  13. Set the Radius Interpolation to Ease

You can optionally increase the Resolution for a smoother arrow.

Gif:

enter image description here

Scott Milner

Posted 2018-02-06T05:15:45.370

Reputation: 3 459

7

Pretty sure this is the shortest method here yet. Thanks to batFINGER it is down to only five three steps!

  1. copy the code below
  2. (in blender) press ShiftF4
  3. paste in the code

Perfect arrow with nice clean topology (no double vertices or edges), and its easier and faster then any other method.

verts = [(-0.305, -0.305, -0.183),
 (-0.305, -0.305,  0.183),
 (-0.305,  0.305, -0.183),
 (-0.305,  0.305,  0.183),
 ( 0.305, -0.305, -0.183),
 ( 0.305, -0.305,  0.183),
 ( 0.305,  0.305, -0.183),
 ( 0.305,  0.305,  0.183),
 (-0.496,  0.305, -0.183),
 (-0.496,  0.305,  0.183),
 ( 0.496,  0.305, -0.183),
 ( 0.496,  0.305,  0.183),
 ( 0,     0.861, -0.183),
 ( 0,     0.861,  0.183)]

faces = [[1, 3, 2, 0],
[7, 5, 4, 6],
[5, 1, 0, 4],
[2, 8, 12, 10, 6, 4, 0],
[7, 6, 10, 11],
[3, 9, 8, 2],
[11, 10, 12, 13],
[9, 13, 12, 8],
[7, 11, 13, 9, 3, 1, 5]]

mesh_data = bpy.data.meshes.new("Arrow")
mesh_data.from_pydata(verts, [], faces)
mesh_data.update()

obj = bpy.data.objects.new("Arrow", mesh_data)

scene = bpy.context.scene
scene.objects.link(obj)
for ob in bpy.context.selected_objects:
    ob.select = False

obj.select = True
bpy.context.scene.objects.active = obj
#end script

Yes the ending comment does something. (It saves a press of Enter)

David

Posted 2018-02-06T05:15:45.370

Reputation: 35 002

1Or shift F3 paste into console. Removes steps 3 and step 5 – batFINGER – 2018-02-09T04:38:49.567

@batFINGER I tried that but could not get the multi line to work. – David – 2018-02-09T14:28:41.907

6Does each character of the script count as a keypress/step? We need @Haunt_House to check the rulebook ;-) – Rich Sedman – 2018-02-09T21:00:28.527

Yeah, the point about addons actually was meant to incluse any scripts. In the end, the contest isn't half as interesting as the wealth of approaches that arrives here. And it's much cleaner mesh creation than what I usually hack together. I like it. – Haunt_House – 2018-02-10T23:16:30.310

6

Adding another weird one, since I read that proportion does not matter much, just different from any else above

enter image description here ie:

  • having vertex snap activated,
  • add a 7-circle (preset as default),
  • edit mode, then fill its face with F
  • then grab 2 vertices
  • X-scale to align with base ones
  • Y-translate to align with top arrow ends
  • select all, Z-extrude

another one

enter image description here

  • either start from a basic plane, and subdivide 3 times, or from a grid with 5/5 subdivisions (faster if a default preset)
  • select 6 top left/right vertices with a single C drag gesture
  • press X and dissolve vertices
  • select 4 bottom left/right vertices
  • press X and delete vertices

forgive me adding third (fourth and fifth method) answer, yesterday I just got fired after 17 years... I need some kind of fun... and thinking something else...

m.ardito

Posted 2018-02-06T05:15:45.370

Reputation: 10 184

OK, few things. I had the first solution (7point circle) already on my screen and it's a good one since it's so minimalistic (only selection and scaling is needed) and yes, it meets all criteria. If it helps you clear your head, just create more. Ideally in separate answers, maybe. If you are interested in getting pointers to what is necessary to build your own busines as risk free as possible, I can give you some pointers that do not seem to be common knowledge although they're obvious. I'll help if I can. – Haunt_House – 2018-02-09T16:36:45.323

4

Nobody has mentioned starting with with Nurbs Surfaces yet, so just for fun, here's another way starting a surface wedge (does require extra curves addon):

  1. Convert to mesh Ctrl+C

  2. Fill both empty faces with F (two steps I guess)

  3. Scale on Y axis to desired size and rotate 90 degrees
  4. Add two loop cuts with Ctrl+R to create the base
  5. Extrude loop cuts with E to desired amount to create the base of the arrow
  6. Recalculate normals with Ctrl+N
  7. Turn on auto smooth

enter image description here

Timaroberts

Posted 2018-02-06T05:15:45.370

Reputation: 5 271

4

Inspired by the numerous cool examples (John's in particular), here's two attempts of my own.

First I tried this:

1 SHIFTA Add Cube.

enter image description here

2 TAB for Editmode

3 & 4 W1 to subdivide it

enter image description here

5 CTRLSHIFTLMBLasso-Deselect all but the right corner verts

enter image description here

6 G and CTRL to move them one unit to the left

enter image description here

7 SY(RETURN) to scale them up a bit

enter image description here

enter image description here

After that, I thought... this can go the other way, too:

5 Lasso Deselect ONLY the corner verts

enter image description here

6 G and CTRL to move them one unit to the right

enter image description here

7 SY(RETURN) to scale them down a bit

enter image description here

enter image description here

If I obeyed my own rules, I think there would be more keypresses to count. But I don't count my answers anyway. I just wanna add to the variety with a bit of Lasso Select.

Haunt_House

Posted 2018-02-06T05:15:45.370

Reputation: 10 984

That’s pretty neat! – Rich Sedman – 2018-02-09T22:37:14.210

It's simply old. I'm not sure but it might just work even in 2.12 if you substitute lasso select with circle select, B B back then. – Haunt_House – 2018-02-10T23:20:09.623

4

  • Add a circle, change the number of vertices to 3.

  • Subdivide one of the edges by 2

  • Extrude the newly created vertices.

  • Select all and extrude vertically (or use a solidify modifier)

    enter image description here

Terrible topology with a big and ugly n-gon, but there was no requirement on the question quads..

cegaton

Posted 2018-02-06T05:15:45.370

Reputation: 62 499

4

Here's an alternative solution using a Skin modifier. Essentially, create a line of vertices and set the radius on each to create the arrow.

  1. Starting with the default cube, got into Edit mode (Tab) and select Merge/At Centre to create a single vertex.

  2. Extrude the single vertex in the required direction - E5Enter (this will default to the 'X' direction)

  3. Select all (shift-rightclick the other vertex or press A twice), click Subdivide, and change number of cuts to 2

string of vertices

  1. Add Skin modifier (optionally switch to wireframe mode - although this isn't strictly necessary))

  2. Adjust Mean Radius X to set the 'depth' of the arrow

  3. Select the 'front' vertex. Set Mean Radius Y to zero

set point to zero

  1. Select the next vertex. Set Mean Radius Y to the maximum width of the 'head'.

set head width

  1. Select the next vertex. Set Mean Radius Y to the width of the stem. Grab the vertex and move it very close to to the previous vertex (to make as close to 90 degrees as possible) - as close as possible to length/numedges, so for an arrow of length 5 with 4 evenly spaced vertices (from the subdivide) = 5/(4-1) = 5/3 = 1.66666, so, say, GX1.65Enter

set head back

  1. Select the last vertex and set the Mean Radius Y to the width of the stem.

final

Rich Sedman

Posted 2018-02-06T05:15:45.370

Reputation: 22 163

4

Throw four Modifiers on the default Cube and add an Empty.

Arrow made from the default Cube using 4 Modifiers plus an Empty

Mentalist

Posted 2018-02-06T05:15:45.370

Reputation: 9 882

4

Let's go simpler. Nowhere in the question's rules does it state that the arrow must be a single object. That is an assumption, and doing away with that assumption will allow us to refine our approach.

With that in consideration, here is what I believe to be the solution with the fewest steps:

How to create the simplest arrow: Step 1: Add a Cylinder with three vertices. Step 2: Move the "Cylinder" two Blender Units on the Y axis. Step 3: Set the Cylinder's Radius to two. That's it!

Of course, you can add complexity if you wish. You can Join the two objects into a single mesh, or Boolean them together. But those steps are not required to satisfy the problem. :-)

Mentalist

Posted 2018-02-06T05:15:45.370

Reputation: 9 882

Clever. I do mean a single mesh, but since it's indistinguishible... – Haunt_House – 2018-02-14T16:33:00.033

and because you are setting all the parameters in the add cylinder operator, you could (maybe) count this as one step. Nice one. I'd count this as 4 steps. – David – 2018-02-15T16:43:38.007

3

Here's one more that's all quads just for fun, add mesh -extra objects addon should be enabled for the triangle object.

  1. Add a triangle Add mesh>math funtion>triangle and change the face to 6 sided quads
  2. Extrude the base of the arrow
  3. Select all and extrude downward to prevent flipped normals enter image description here

Timaroberts

Posted 2018-02-06T05:15:45.370

Reputation: 5 271