52
$\begingroup$

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

$\endgroup$
  • 27
    $\begingroup$ You 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. :) $\endgroup$ – noClue Feb 7 '18 at 14:24
  • $\begingroup$ Especially since time is money in the professional world. $\endgroup$ – Haunt_House Feb 7 '18 at 15:11
  • 13
    $\begingroup$ Perhaps 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. $\endgroup$ – Rich Sedman Feb 7 '18 at 15:25
  • $\begingroup$ 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: area51.stackexchange.com/proposals/116559/… $\endgroup$ – noClue Feb 7 '18 at 16:58
  • 2
    $\begingroup$ The extra curve objects addon that is part of a standard blender install , includes an arrow. $\endgroup$ – sambler Feb 10 '18 at 5:51

20 Answers 20

47
$\begingroup$

Unicode font

Copy the solid right arrow 🡆 from unicode arrows

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

$\endgroup$
  • $\begingroup$ I thought about something similar, but really it seemed too crazy :DDD $\endgroup$ – m.ardito Feb 7 '18 at 10:12
  • 4
    $\begingroup$ @ m.ardito With this question, there is no such thing as 'too crazy'. I eagerly await the first truly convoluted solutions. $\endgroup$ – Haunt_House Feb 7 '18 at 16:15
  • $\begingroup$ Note: make sure the font has a license you can use for personal/commercial use $\endgroup$ – LateralTerminal Feb 8 '18 at 15:18
  • 1
    $\begingroup$ @lat good thing to check. The font linked by the page linked by the answer is open source, so that seems to be satisfied. $\endgroup$ – John Dvorak Feb 8 '18 at 17:41
43
$\begingroup$

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...

$\endgroup$
  • 12
    $\begingroup$ Argh why didn't I think of this, its so simple! $\endgroup$ – 3pointedit Feb 10 '18 at 23:43
  • 1
    $\begingroup$ Once you see it, you can't unsee it. But you can beat it. $\endgroup$ – Haunt_House Feb 14 '18 at 16:49
24
$\begingroup$

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

$\endgroup$
  • $\begingroup$ 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. $\endgroup$ – batFINGER Feb 7 '18 at 10:44
  • $\begingroup$ Thanks! Yeah - having no end of trouble with the markup there. It's still not quite right but it will have to do. $\endgroup$ – Rich Sedman Feb 7 '18 at 10:49
  • 1
    $\begingroup$ meta.stackexchange.com/a/99637/305735 $\endgroup$ – batFINGER Feb 7 '18 at 11:02
  • 1
    $\begingroup$ Apart from the most efficient version, stuff like that is exactly what I was looking forward to. Cool! $\endgroup$ – Haunt_House Feb 7 '18 at 11:56
  • 1
    $\begingroup$ Also note you can use the ternary operator sin(u) if u < 3 else cos(u) in your expressions. $\endgroup$ – batFINGER Feb 11 '18 at 11:04
22
$\begingroup$

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

$\endgroup$
21
$\begingroup$

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

$\endgroup$
20
$\begingroup$

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.

$\endgroup$
  • $\begingroup$ 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. $\endgroup$ – Haunt_House Feb 9 '18 at 7:55
  • 2
    $\begingroup$ @Haunt_House peek $\endgroup$ – gandalf3 Feb 9 '18 at 7:56
18
$\begingroup$

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

$\endgroup$
  • 5
    $\begingroup$ Rip Fill, another one of all the science fiction I have missed catching. Thanks $\endgroup$ – Haunt_House Feb 6 '18 at 21:03
14
$\begingroup$

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...

$\endgroup$
  • $\begingroup$ Sigh, So many tools I never use and the gif makes it look so easy lol. $\endgroup$ – batFINGER Feb 7 '18 at 10:05
  • 1
    $\begingroup$ my poor 64kbit internet and the gifs of bandwidth death have a strained relationship ( : $\endgroup$ – Haunt_House Feb 7 '18 at 11:58
  • $\begingroup$ @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 :(( $\endgroup$ – m.ardito Feb 7 '18 at 12:27
9
$\begingroup$

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

$\endgroup$
8
$\begingroup$

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

$\endgroup$
8
$\begingroup$

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

$\endgroup$
7
$\begingroup$

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)

$\endgroup$
  • 1
    $\begingroup$ Or shift F3 paste into console. Removes steps 3 and step 5 $\endgroup$ – batFINGER Feb 9 '18 at 4:38
  • $\begingroup$ @batFINGER I tried that but could not get the multi line to work. $\endgroup$ – David Feb 9 '18 at 14:28
  • 6
    $\begingroup$ Does each character of the script count as a keypress/step? We need @Haunt_House to check the rulebook ;-) $\endgroup$ – Rich Sedman Feb 9 '18 at 21:00
  • $\begingroup$ 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. $\endgroup$ – Haunt_House Feb 10 '18 at 23:16
6
$\begingroup$

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...

$\endgroup$
  • $\begingroup$ 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. $\endgroup$ – Haunt_House Feb 9 '18 at 16:36
4
$\begingroup$

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

$\endgroup$
4
$\begingroup$

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.

$\endgroup$
  • $\begingroup$ That’s pretty neat! $\endgroup$ – Rich Sedman Feb 9 '18 at 22:37
  • $\begingroup$ 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. $\endgroup$ – Haunt_House Feb 10 '18 at 23:20
4
$\begingroup$
  • 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..

$\endgroup$
4
$\begingroup$

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

$\endgroup$
4
$\begingroup$

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. :-)

$\endgroup$
  • $\begingroup$ Clever. I do mean a single mesh, but since it's indistinguishible... $\endgroup$ – Haunt_House Feb 14 '18 at 16:33
  • $\begingroup$ 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. $\endgroup$ – David Feb 15 '18 at 16:43
4
$\begingroup$

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

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

$\endgroup$
3
$\begingroup$

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
$\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.