Discussions for "Better snapping and precision modeling"

I just about dropping this one here and hoping it will be implemented https://www.youtube.com/watch?v=XrEPpHGoKlk


I would love to see Nurbs tools in Blender, but I’m worried that this is out of the developers to-do list… :frowning:
Maybe a dedicated crowd funding for that could make it possible… :thinking: (Sorry for the offtopic)

Those snap proposals looks great though!


one thing at a time…
Meanwhile, precision modeling and better snap certainly go in that direction …
and then to be honest the nurbs seem to me a bit obsolete,
meshes with ngons technology can give more effective results if Booleans were developed better …

in fact, more than the nurbs, a visual feedback system would be needed to manage the “surfaces” and “segments” … a manipulation technique similar to that of moi 3D and obviously as a result tools similar to moi itself … in a sort of " fake nurbs edit mode ".
There is already a couple of addon that uses splines to make surfaces with curves similar to modeling via nurbs.

this application (shapr3d) mentioned in this tread makes the idea, I think that is the direction to be taken for CAD modeling …


i actually had a better idea in mind if this is going to be implemented by blender or as an add-in which i am considering creating it myself … here is what i am thinking :slight_smile:

  • the system will be based on drawing completely … with only 2 panels …
  • one panel for viewing the 3d result only.
  • the other for drawing …
  • after drawing we use another drawing to give the third dimension to part of the mesh.
  • colors will be used for sculpting in the drawing area … and the result will be live in the other panel …
  • we can easily join mesh parts … with or without constrains.
  • we can join mesh with another.
  • automatic way for giving the third dimension …
    but i think blender drawing tools should be improved first …
  • the implementation might be in the 2d template from file → new – menu item.
1 Like

just like Moi 3d, I think it’s inspiring to give an insight into how these applications handle snapping and precise modeling … I’ll post this tutorial that explores the functionality of Shapr3D, I think it helps a lot to clarify the ideas

1 Like

You can already see some of the changes commented on in the original post in the Snap Utitlties addon:

Remembering that these changes would be an early step (to solve the immediate problem).
Nurbs will benefit from these changes.
I agree that the snap on the rotate operator needs attention. But I think the idea of choosing a base point would be a good start before we propose new solutions.


and then the magic appears …
it seems like a great start!

that’s what made your video come to mind:

for an effective single edit mode that also has “fake nurbs”
I think you could have a single edit mode but with the addition of two other selection modes
1 “surfaces” which are the selection of entire surfaces (a collection of polygons that have the shape of the nurbs surface)
2 “loop Segments” that would be the selection of segments (a collection of edges polygons that can also form curves) similar to that of moi 3d

with obviously the right visual feedback for these two modes

so they would have:
vertex select, edge select, face select, surface select, segment select

I hope you understand the meaning of what I mean

Noki, you’re confusing nurbs with BREPs. Trimmed nurbs surfaces are used as an intermediate step to create a mesh for BREPs, but whenever you describe nurbs, you seem to be referring to solid modelling or BREP. Nurbs are just surfaces which can be trimmed, extruded, shaped in a freeform manner, etc. In other words there is not much more to these geometry types than what Blender is already capable of. BREPs are nondestructive representations of volumes defined by operations like projections, extrusions, sweeps, booleans, holes, and bevels which can be used to create or modify a solid volume, without a lot of the limitations you see on polygonal operations. For instance mesh booleans are non-associative, and have often fail when calculating co-planer faces or when multiple vertices sit in the same location. Mesh booleans usually require modifying the resulting mesh by hand to prepare the surface for later operations like bevels. BREPs don’t care about these limitations. They mathematically calculate the volume and represent it using nurbs surfaces which are then used to generate mesh surfaces for display, plotting, and renderin

This is off the topic of what I’m saying Blender is badly in need of. Believe me I would love for BREPs to be natively supported. A STEP importer would be nice,too. Because that would mean I could fully ditch Autodesk products, but that’s not what I’m really looking for here. I want a way to quickly place, rotate, and scale an object with enough precision that it is quick easy to make renderings of mechanical components and architecture, for instance, without a lot of headache. It is an achingly absent feature of Blender. One that isn’t missing from any other rendering software I’ve used in the last 20 years.

1 Like

I know what the nurbs are, and no I’m not confused …
If I talked about “fake nurbs” there’s a reason, and I think it’s an excellent solution around the corner and it’s to create a visual representation of “fake nurbs” that are created and processed by tools and manipulators that build mesh surfaces that are very similar to the shapes of the nurbs surfaces but would always be modeling mesh.
I mean a collection of tools that create surfaces similar to what this addon does

if I want to create a solid model this would be composed of so many “fake nurbs” surfaces (that are always mesh ) … the sense of all this would be to have the advantages of modeling nurbs made of Booleans,and trims operations (for this reason I wrote that they need better boolean) and modeling precision on mesh modeling.

is not necessary to have nurbs and not even breps, it’s something new that you could get “with little effort”

And I do not think it’s off-topic, otherwise what would you mean by “precision modeling”?

1 Like

All these fancy (and no doubt useful) features are being discussed while you can’t even change the snap increments in blender!

This is necessary.


just as a point of study and inspiration …
for those who have not already done so, take a look at how the creator of QBlocker has developed a discreet and interesting quick snapping method


mechanical blender author has created a series of many small snapping functions that since they fully follow the blender workflow philosophy, they should be taken into account, or at least take a look at his videos and his build as he operates, to draw from them positive ideas

I attach the link of his demonstration videos, just as a starting point for study


rhino snapping tools is very power full and good refrence for blender developer


1 Like

blender need smart track system can speed up modeling and precise
rhino have good smart track system


that mechanical Blender seems like a next gen thing. Is the development stalled from a couple of years ? will be only for 2.7 ?

I don’t know, it’s a project outside blender and managed by some guys who would like CAD in blender …
At the time there was no response from the main devs so they created this alternative version …
I hope that one day this series of patches will be considered (obviously updated to blender 2.8) because I believe they are really very valid.


My background:

Retired, but still only 62 years old.

Qualified Engineering Drawing Teacher, Mechanical Engineer, Mechanical Designer, IT Developer. Started in drawing office 1978, started with CAD 1981.

CAD Packages used: Intergraph IGDS, Bentley MicroSystems, Matra DataVision (Euclid), SolidWorks, IBM Catia, FreeCAD. AutoCAD in 1987, briefly - hated it!

As a design engineer I can see many things I would like in Blender to make drawing mechanical parts better (CAD Functions), along with the suggestions already made here, might I also add:

  1. Ability to extrude a vertex, or series of vertices, by a delta coordinate from its position, or by a delta length and rotational angle relative to the view plane.

So a workflow like: select vertex, extrude, key DC 1.2,1.4,0 extrudes the vertex 1.2 in X, 1.4 in Y and 0 in Z. Or key DR 1.3,45 extrudes the vertex 1.3 at an angle of 45 degrees relative to view positive X (3 O’clock).

  1. Ability to use a “Tentative Snap” (T-snap) to an existing vertex.

So a workflow like: select a vertex, T-snap any existing vertex, accept this location, or key a delta offset like DC 1.2,1.4,0 or DR 1.3,45. This gives us the ability to use another vertex on the model as a starting point for a delta offset.

  1. Ability to use an absolute 3 axis location.

So a workflow like: select a vertex, extrude, key XY = 1.4,2.6,3.0 this extrudes the vertex to the absolute coordinate given.

  1. Ability to input an absolute, or T-snap + delta input to place a new single vertex.

So a workflow like: add vertex, key XY 1.4,2.6,3.0 or T-Snap existing vertex and key DC 1.2,1.4,0, or key DR 1.3,45.

  1. Ability to add primitive shapes at absolute, or T-snap + delta input.

So a workflow like: add rectangle, key XY 0,0,0, key DC 2,1.3 creates a rectangle with the bottom left vertex at 0,0,0 and the top right vertex at 2.1,1.3,0.

It is assumed that 0 input need not be added, so DC ,3 means delta 3 in Y axis, for example. XY 0 means all inputs 0, etc.

  1. Close a polygon after so many vertices have been added.

So a workflow like; add vertex, extrude, key DC 1.2,0,0 key DC 0,1.4, etc, etc, some command to close the polygon, i.e. join the last vertex to the first one.

The ability to create a single vertex and then extrude it around a coordinate defined path then close it is a fundamental requirement for CAD. The ability to tentatively snap a vertex and use this to place a new vertex, or extrude an existing one will greatly improve the workflow and reduce the time taken to create geometry.

  1. The ability to create “parts” of geometry in a library. I know you can do this by creating objects in a blend file and then appending them, but the workflow is not CAD friendly.

So a workflow like; create a geometry - a bracket for example, that will be used extensively in the model, or in many models. Add this to a “Parts” library so it can be easily recalled later (think Pose Libraries…). Each part has an origin and is placed with the origin at the cursor location, or using a T-snap and delta input.

  1. Ability to extrude a vertex along the path defined by itself and the previous vertex, or to extend the vertex along the same path without adding a new one. So if you have an edge from 0,0 to 3.4,5.3, extrude this to make a straight line of three vertices, or move the end vertex in line with the path defined by the two vertices by a set distance, i.e. make the line a bit longer without changing the angle of the line.

Imaging here you have made a hydraulic cylinder at an angle of 23.45345 degrees to the horizontal and you want to make it 2cm longer, without that operation taking you half a day…

  1. Ability to rotate the view by a set amount, like say 46 degrees about its normal axis for example, or 37 degrees about the global X axis.

As a design engineer working on a drawing board, I would start with construction lines and work from there, I don’t see the need for this in Blender, if T-snap & delta inputs can be achieved. Things must line up in technical drawing, so T-snap is a must. In all the products I have worked with, Intergraph IGDS was the easiest to use to rapidly create precise geometry. It had a “T” button on the cursor and the ability to input 3 axis absolutes and delta offsets. It also had a Parts Library, although it was called a “Cells Library”.

I don’t see these additions as a large amount of work by the way, just some additional key-ins and the T-snap to make life such easier. The other function I used extensively in those days was “Copy Parallel” - this we have with the “Offset Edges” add-on, so this should be included as well. I also like the ability to select two vertices and join them with an edge, I am not sure if Blender can do this easily, I know we can select two unconnected edge strings and make a face of them, but this is not quite the same thing…

While I am on a flow here, could we also add the ability to create shapes within shapes as holes without having to add a least two edges from inside loop to outside loop, thus creating two Ngons that don’t have holes…

I think that basic, efficient draughting techniques have been lost in not only 3D modelling packages like Blender, but also many CAD packages, the old ways were not always the best, but they certainly had a lot of merit. Systems in the 1980’s had to be very efficient and fast to compete with a good draughtsman and had to run on computer systems that were toys (think VAX PDP 11’s) compared with today’s machines.

Let me know if anyone agrees with me, I am more than willing to expand these ideas, if they are thought relevant still, otherwise I can always enjoy my retirement!

Cheers, Clock.


Oh, I forgot this one:

I would call this “Extend/Trim to Intersection” - select the two edges in the set and the system puts the intersecting vertex in place then trims/extends the edges to this point. I have shown three possible scenarios of this requirement.

Cheers, Clock.


OK just a quick test to see how easy this intersection lark is going to be:

I am on holiday with only my wife’s MacAir, so only have access to Blender 2.79. I made an object with several edges, to test it worked on selected edges only. You can see the new vertex at the intersection point. This is the code in a simple Animation Nodes Script node:

import bpy
import bmesh
import numpy as np
mesh = obj.data
verts = mesh.vertices
edges = [e for e in obj.data.edges if e.select]
lv1 = edges[0].vertices
lv2 = edges[1].vertices
# Working in X-Z plane
a1 = (round(verts[lv1[0]].co[0],4),round(verts[lv1[0]].co[2],4))
# Get Y value
yV = round(verts[lv1[0]].co[1],4)
a2 = (round(verts[lv1[1]].co[0],4),round(verts[lv1[1]].co[2],4))
b1 = (round(verts[lv2[0]].co[0],4),round(verts[lv2[0]].co[2],4))
b2 = (round(verts[lv2[1]].co[0],4),round(verts[lv2[1]].co[2],4))
# Get Intersection
s = np.vstack([a1,a2,b1,b2])
h = np.hstack((s, np.ones((4, 1))))
l1 = np.cross(h[0], h[1])
l2 = np.cross(h[2], h[3])
x, y, z = np.cross(l1, l2)
if z == 0:
    # Parallel Lines
    int = (float('inf'), float('inf'))
int =  (x/z, yV, y/z)
# Create Intersection Vertex
bm = bmesh.new()

There is no “Stupid User” testing in there, like making sure the edges are co-planar, but I can always do this later when I get home, or leave it to the experts… I guess next I will need to move the nearest vertices to the intersection, or simply delete them and re-define the edges. Further development on holiday will be curtailed now as it is “Gin & Tonic” O’Clock. :cocktail:

Cheers, Clock. :stuck_out_tongue_winking_eye:


It seems I cannot post any more replies until someone replies to me (new user), so here is another function:

Merde! I can only post one image in a reply here, so you will have to wait to see the picture… Thousands of posts on Blender Artists, but not trusted here yet…

In this one I have moved the square end a set distance along the angle of the centre section, i.e. expanded the object along its centre section axis, which lies at approx 13.24052 degrees to the horizontal. Try doing that with native Blender in 2.5 milliseconds!

When I get home I will make a “CAD Functions” node to do these functions, using Exec buttons. The maths behind them so far is pretty easy, if you know your numpy, geometry, etc principles. Perhaps, if you would like to reply here with other functions required, I can make a CAD Node and release this on my GitHub.

As you will see from this link, my work has been with MIDI, Sound, DAW functions mainly and some other useful bits for Animation Nodes. I see no reason why this cannot just be a AN CAD sub-section to start with, then maybe it can be included in Blender, or Everything Nodes, at some later stage, if there is sufficient interest.

I am still keen to explore the possibility of adding extra key-ins to vertex placement/extrusion, like an Absolute XYZ, or Delta-Coordinate, or Delta Distance-Angle.

I shall await responses!


I haven’t dug deep enough into the codebase to layout a concrete plan, but I think that, if we can separate transform orientations and alignment orientations under the hood, we can expand the existing snap system to cover a lot of “snap-to/align-to projected intersection” scenarios we’ve seen in this thread.

Some of the other things you mention, like transforming from an offset position and extruding at a relative angle, could (theoretically) be implemented with gizmos and the active tool system. You can abuse them as pseudo-modals to take data from selections and create transformation matrices at relative angles.