2
$\begingroup$

I'm trying to create an even thickness border line around the edges of booleans in a plane.

This is working except i've noticed that at locations where a vertex lies along the middle of an edge, it causes a bulge in the curve to mesh curve.

How can i make sure it's perfectly even thickness all the way around (with sharp edges at the corners, re-sampling creates rounded edges.)

enter image description here

$\endgroup$

1 Answer 1

4
$\begingroup$

If you take a closer look, the Curve Circle which you are using as profile is set to a radius of 0.012, and only where the curve bulges the diameter is 0.024 m actually. The reason is not that it gets too thick where the vertices inbetween are, the corners are too thin. Because there the curve tangents are $\pm$45° to the horizontal and vertical edges, so they have a diagonal width of 0.024 m. And I do not know if you have looked at the curves only from the front view or also from the side and top view: the cross section on the corner points is not circular, but ellipsoid. Only the intermediate points' cross sections are circular.

But first of all to avoid bulging, I would get rid of those intermediate points. They cannot be avoided when using a Boolean operation to cut holes into the plane, because a hole always needs (at least) two connecting edges to the surrounding geometry.

However, to get the curve for the frame you do not have to use edges from the holes. You can take another Mesh Boolean node set to Intersect to cut out planes where the holes are - these will not have any intermediate vertices. Just note that for whatever reason you will need a Realize Instances node to convert the Collection Info output (Boolean Difference works with instances, Intersect does not).

Then you can plug these planes into a Mesh to Curve and Curve to Mesh node with a Curve Circle as profile just like before but now there is no more bulging:

new frame

But as mentioned before, the radius is smaller than 0.012 which you have set for the profile curve, this is because the circle gets flattened in Y direction by the diagonal curve tangent:

flattened profile

What you might expect is that setting the circle's Radius to 0.012 will result in a diameter of 0.024 of the frame like on the left, but what you actually get is the result on the right, because due to the 45° tangents on the corner points, the circle profile gets squeezed in Y direction to a factor of $\frac{1}{\sqrt{2}}$.

expectation vs. result

Now speaking in terms of scale, the diagonal has a scale of 1 times the circle radius, but the height of the profile is only $\frac{1}{\sqrt{2}}$ times the given radius as seen on the left in the following image. But if you want to be able to set the diameter of the frame directly with the settings of the Curve Circle > Radius value, you want the scale to be like the right side:

scale

The mathematics behind this are quite simple. In a right triangle we know that

$$a^2 + b^2 = c^2$$

$a$ and $b$ are the dashed red lines in the image above and $c$ is the green line. And with $a=b$ in this case this means

$$2a^2=c^2\implies c=\sqrt{2a^2}$$

and with using the desired scale so that $a=1$ this results in

$$c=\sqrt{2}.$$

Long story short, to get the frame with the correct thickness, we have to multiply the Y dimension of the Curve Circle with $\sqrt{2}$ and we do this with a Transform Geometry node (by the way, you do not have to take a rounded value for the Y scale, you can enter sqrt(2) directly into the value field):

transform geometry

The X value should be 1, the Y value sqrt(2) as said before and the Z value does not matter since the Curve Circle is 2-dimensional. Now the frame has the correct radius and a circular cross section.

$\endgroup$

You must log in to answer this question.

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