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$
  • 1
    $\begingroup$ The red plane is the original mesh? How will you be changing the size of the object? $\endgroup$ – Denis Dec 3 '16 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 '16 at 23:58
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$
  • $\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 '16 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$ – Jan Kadeřábek Dec 4 '16 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$
  • $\begingroup$ I suppose inset and the add-on solve the constant width issue, but not the non-destructive editing part. $\endgroup$ – JakeD Dec 4 '16 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 '16 at 0:50
  • $\begingroup$ @MrZak Clever way of using solidify or bevel modifier maybe? $\endgroup$ – JakeD Dec 4 '16 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 '16 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$
  • 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 '16 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$
  • $\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 '16 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 '16 at 3:10
  • $\begingroup$ Please see this: chat.stackexchange.com/rooms/49549/… $\endgroup$ – JakeD Dec 4 '16 at 3:18

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.