Download Version 1.0.2: jj_SmartQuad 1.0.2


JJ_SmartQuad is based on the classic Lightwave SmartQuad plugin that would create a single planar quad from three selected vertices. JJ_SmartQuad extends the idea (with a huge nod to Seneca's SmartQuad modo script) so that you can create/recreate either a single quad or whole rows of quads from vertex or edge selections. The animated gifs below give you an idea of when and how to use the plugin. Key benefits:

  • Quick method to create quads
  • Optional 'Connect' parameter will hook up the quad to existing geometry
  • Will work on whole rows of quads (See: 'Row of Quads with Connect')
  • Works with both edges and points.

Single Quad from Edges
Select two contiguous edges and run JJ_SmartQuad and a new quad will be created in the same plane.

Row of Quads with Connect
Here a whole row of edges has been selected and the connect option used so that the new quads are created and then hooked into existing geometry.

Note the L shape of the selection which is acting as a guide for the quad placement (more on this later).

Row of Quads with Connect Around Corners
Here you can see that JJ_SmartQuad will 'go around corners'. More simply it will follow the contour of your edge/point selection. However, when it goes around 90 degree corners it doesn't create an extra quad to preserve the integrity of the grid's topology (hopefully in a later version).

Again, notice that there's an L Shape at one end of the selection. This is crucial to let the tool know where and how it should be creating quads.

What constitutes an L Shape
In this example you can pretty much see how JJ_SmartQuad attempts to understand your selection. It looks at either end of the selection and then makes a judgement on where the L Shape starts and then fills in the quads on that basis.

The L Shape doesn't have to be defined by an additional polygon - just by a change in direction. The tolerance is very, very small so you could create incredibly thin strips of polys this way! If you were crazy enough to do so...

JJ_SmartQuad installs two commands:
JJ_SmartQuad and JJ_SmartQuadC. The former generates an unconnected  poly/row of polys where the last vertex is not joined to existing geometry. See right.

The second command - JJ_SmartQuadC -  generates a poly/row of polys where the last vertex is connected to existing geometry. See right.

Connecting to Adjacent Geometry
By using connect you can 'force' the new polygon out of planarity and to connect to the nearest vertex.

If you end  up using SmartQuad there are going to be times when you don't get what you expected. The script tries to interpret the 'flow' of the topology by looking at the angles between adjacent polys. If your mesh is irregular then SmartQuad is likely to return irregular results.

You need to be careful not to confuse SmartQuad with ambiguous selections  i.e. where you have an L Shape at either end of the selection, for example or if your selection could be interpreted as looping around itself.

Most importantly, SmartQuad has been designed to only work with regular quad topology - if the edge comes into contact with tris or ngons the tool will find it impossible to assess the poly flow correctly.

How to Use jj_SmartQuad

When you place jj_SmartQuad into your plugins directory and either restart XSi or Update Plugins, the script creates two new commands which you can either drag on to a toolbar or use via keymapping.

jj_SmartQuad Unconnected Quad(s)
jj_SmartQuadC Connected Quad(s)

Notes on Usage

I think most of the time SmartQuad will be used to just quickly derive a single quad from a couple of edges. If you're using it to generate rows of quads then you need to understand the limitations: you need an L Shape; you can't have a double L Shape etc.

How to Install jj_SmartQuad

jj_SmartQuad is a Python script which means that you'll need a copy of Python installed on your machine and a copy of the PyWin32 extension.

Installing Python takes a couple of minutes. You can either download these separately from here:



or download a single bundle from ActiveState which does the complete install in one hit:

Once you've installed Python you just need to drag jj_VectorSnap into your plugin directory.


Then, go to File: Plugin Manager and hit 'Update All'. The commands should now be available.


Version 1.0.2:jj_SmartQuad 1.0.2
Updated Version. Released 10th March 2008.

01.Trapped bug in XSI 6.x with PointLocators

Version 1.0.1:jj_SmartQuad 1.0.1
Updated Version. Released 19th February 2008.

01.Fixed incorrect sequencing which could happen in certain circumstances
02.Trapped errors caused by a 'looping' selection

Version 1.0: jj_SmartQuad 1.0
Original Version. Released 14th February 2008.

Julian Johnson