I want to create a mesh like this:

object

with a vertex on every edge-crossing so that every face is kite (nearly rhombus) shaped.

The above image was created just by rotating the top of two cylinders in different directions and placing them on the same position.

two twisted cylinders

But here I wouldn't have these many small faces and the result of the overlapping twisted cylinders looks like this in solid display:

overlapping in solid

Can you please tell me if there is a way the create these kite-faces. Is there a tool that automatically creates a new vertex and a face for every intersection of edges?

  • 2
    For reference, this surface is called Hyperboloid of one sheet. The property that you've discovered (the surface can be approximated with the rotation of a long, thin flat polygon) makes this shape easy to build and it's the reason why powerplant cooling towers look like this. There are many experiments with this shape. – Eric Duminil Jul 22 at 20:01
up vote 16 down vote accepted

I think this solves the issue with moonbots answer. Use the TinyCAD addon to create vertices at the edge itersections

EDIT steps:

  1. rotate top face 90 degrees (R, Z, 90)
  2. duplicate (Shift-D) and mirror along any axis (e.g. Ctrl-M, X)
  3. press W and select TinyCADXALL
  4. press F to fill faces
  5. press W and select Remove Doubles

enter image description here

  • 2
    It’s difficult to follow what’s going on in that gif. It would be good to improve the answer to describe the steps in words. – Rich Sedman Jul 22 at 16:20
  • 2
    @Pharap we must have posted it around the same time, I didn't see your answer when i added mine – Johan Apes Jul 22 at 17:16
  • Sorry then, there was only moonbots answer when I started making the gif to mine – Johan Apes Jul 22 at 18:05
  • 3
    @Pharap 4 minutes difference is negligible considering how long it takes to write an answer. It happens. – Mast Jul 23 at 7:27

Edit: Ok this is not what you need. What you need is to use the TinyCad addon as explained in another answer. Anyway I thought you wanted this:

  • Create a cylinder and subdivide it horizontally
  • Triangulate with alt P
  • Delete vertical and horizontal edges: Select an edge and shift G > Select Similar > Direction, or if it's not enough select the Edge Loop with the B selector then shift G > Select Similar > Direction. Delete with X > Delete > Edge Loop. Now you only have triangles
  • Select the middle of your shape, activate the Proportional Editing, and squeeze with shift Z so it constraints on X and Z axis
  • If the shape is not symmetrical you can cut the top or the bottom half and copy bottom/top, rotate it 180° and merge with its opposite

Maybe there are cleaner solutions, I don't know ;)

enter image description here

  • 1
    Nice answer, but I'm not sure that with this method it would be possible to achieve the OP shape: edges look straight and doesn't rely on the fibonacci spiral pattern – Carlo Jul 22 at 15:00
  • oh ok I've missed something then ;) – moonboots Jul 22 at 15:02
  • Thank you for this detailed post. It is almost what I want to achieve. As @Carlo pointed out, there is only one problem I have with your solution: If you select a chain of edges from top to bottom (Alt-Click) it is not a straight connection between the upper and the lower end. – quiliup Jul 22 at 15:05
  • 1
    so I guess you could find a solution with the following question: How can I add vertices to intersection of two edges? blender.stackexchange.com/questions/2976/… – moonboots Jul 22 at 15:44

Take those two cylinders you've got, and apply the script discussed in this other answer to create points where the edges intersect each other:

How can I add vertices to intersection of two edges?

The script provided by @Zeffi:

import bmesh import bpy from mathutils import geometry

def add_vertex_to_intersection():

    obj = bpy.context.object
    me = obj.data
    bm = bmesh.from_edit_mesh(me)

    edges = [e for e in bm.edges if e.select]

    if len(edges) == 2:
        [[v1, v2], [v3, v4]] = [[v.co for v in e.verts] for e in edges]

        iv = geometry.intersect_line_line(v1, v2, v3, v4)
        iv = (iv[0] + iv[1]) / 2
        bm.verts.new(iv)
        bmesh.update_edit_mesh(me)

add_vertex_to_intersection()

The answer also discusses a similar option available from mesh_tiny_cad. Specifically the X part of the VTX operations:

X Operation

Or perhaps the XAll operation:

XAll Operation

Once the add-on is enabled, you can access it from the context menu like this:

XAll Context Menu

Your Answer

 
discard

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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