4
$\begingroup$

Is there any way to non-destructively add an equal width border to a plane mesh? For example:

enter image description here

By non-destructively, I mean that editing the shape of the rectangular plane should also adjust the border automatically. Preferably, this would be done with modifiers, but modifiers aren't necessarily required.

$\endgroup$
2
  • 1
    $\begingroup$ The red plane is the original mesh? How will you be changing the size of the object? $\endgroup$
    – Denis
    Dec 3, 2016 at 23:11
  • $\begingroup$ Yes, the red plane would be the original. I would be changing aspect ratio in edit mode and scaling the object uniformly (in object mode). It will stay rectangular, though. $\endgroup$
    – JakeD
    Dec 3, 2016 at 23:58

4 Answers 4

4
$\begingroup$

For this specific case, this is my solution using Hooks & Vertex parenting. I am not sure whether there is an easier solution but this should work. I made 4 empties, each is parented to corresponding corner-vertex. Then for the border object, I made vertex groups also for each corner and used Hook modifiers to link them to empties.

enter image description here

Here is a version with copy rotation constraints to fix the rotation issues:

$\endgroup$
2
  • $\begingroup$ Thank you very much. This is exactly what I was looking for. So much material here for anyone wanting to setup a system like this. I would like to add that you can also add a copy rotation constraint to each empty that rotates them with the "Plane" so that it behaves correctly when rotated. $\endgroup$
    – JakeD
    Dec 4, 2016 at 3:01
  • $\begingroup$ Perfect! So we have finally found the solution :) Still I think there should be some easier method because this won't be very usable for more complex geometry as there is too much manual work to get it work. $\endgroup$ Dec 4, 2016 at 10:10
2
$\begingroup$

I would simply do it the opossite way - scale it to the final size and inset it to the initial size. Otherwise you can install this addon, which makes exactly what you need: https://raw.githubusercontent.com/Bombaba/BlenderPythonScripts/master/mesh_offset_edges.py

enter image description here

$\endgroup$
4
  • $\begingroup$ I suppose inset and the add-on solve the constant width issue, but not the non-destructive editing part. $\endgroup$
    – JakeD
    Dec 4, 2016 at 0:02
  • $\begingroup$ @pycoder for non-desctructive part you could use shape keys to rollback unneeded edits. Aside from that there doesn't seem to be other ways except from maybe kind of parenting with constraints and drivers (not sure what exactly), or e.g. Copy Transforms consrtraint. $\endgroup$
    – Mr Zak
    Dec 4, 2016 at 0:50
  • $\begingroup$ @MrZak Clever way of using solidify or bevel modifier maybe? $\endgroup$
    – JakeD
    Dec 4, 2016 at 1:02
  • $\begingroup$ @pycoder solidify modifier and 2 simple deform using tapper that compensate eachother, but as Mr Zak said will have to use drivers. The second answer would be much simpler. $\endgroup$
    – Denis
    Dec 4, 2016 at 1:27
2
$\begingroup$

I know of no way to do this using meshes, would using a Bezier object instead be an option?

Just create a separate open curve with the desired frame width, assign it as Bevel Object and edit away the original 'plane' while maintaining a proportional frame around it.

The section can have any shape you want, as long as you keep it as an open curve to maintain the plane fill. Otherwise if the fill is not an issue you can close it.

Bevel Object

$\endgroup$
1
  • 2
    $\begingroup$ +1 for working method. I considered using curves, but decided against it do to texturing difficulties. Jan provided a complete solution using mesh objects that works wonderfully for rectangular objects (it breaks down with parallelograms that are skewed, so this could be beneficial in that case). $\endgroup$
    – JakeD
    Dec 4, 2016 at 2:50
1
$\begingroup$

There is a way to do that with modifiers and drivers.

  1. Create a plane 1x1 units with applied scale.
  2. Add solidify modifier with minimal thickness.
  3. Add an empty in the center of the plane.
  4. Add 2 Simple Deform modifiers set to taper, one modifier locked to Y axis and the other to X. On both modifiers use the created empty to control the taper axis if necessary.

enter image description here

  1. In both Simple Deform modifiers add a driver to Deform Factor, while each driver will be using -1(Negative of frame thickness in blender units) divided by the axis scale of the object, corresponding to the taper direction.

enter image description here

enter image description here

$\endgroup$
3
  • $\begingroup$ I tried the blend that you posted and while it pseudo-works, it scales funny (like what would happen if you extrude > scale on a rectangular object). So while it works as is for square objects, this isn't really what I needed. I'll give +1 anyway for the well-designed answer. $\endgroup$
    – JakeD
    Dec 4, 2016 at 3:05
  • $\begingroup$ @pycoder It should scale properly in each axis, it looks funny at first, but if you check with the grid the thickness stays consistent. You can even add the scale of the empty as variable to control the thickness of the frame. $\endgroup$
    – Denis
    Dec 4, 2016 at 3:10
  • $\begingroup$ Please see this: chat.stackexchange.com/rooms/49549/… $\endgroup$
    – JakeD
    Dec 4, 2016 at 3:18

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .