Hi,
I am trying to recreate a fillet tool from ICEM Surf, it pretty much does the same as “Fillet Edge” with the options equal distance rails and curvature continuity, but it can also set the curvature radius at V parameter = 0.5 to a constant value.
Currently I isolate all curves in V-direction of the fillet and rebuild them with “Blend Curve”, then I change the BulgeA and BulgeB inputs by an equal value to change the curvature of the blend curve at parameter 0.5, I approximate the goal curvature/radius by implementing GeneticSharp in my component to control the Bulge-inputs.
Is there a mathematical solution to find the correct Bulge-inputs?
Given that the curvature and control points at the start and end of the blend curve in v_direction are already given and the curvature of the blend curve at 0.5 is set to a specific value.
I know that the Bulge-inputs are the same as the Beta2 parameters from the Barsky&DeRose continuity formulas, so a more mathematical algorithm would be fine by me.
Hi, you cannot create G2 curves and then rail it, and then expecting that you hold G2 for the surfaces. This is insufficient. You need to create a Coons-Patch and then probably rematch again. It depends a bit. Other than that, when I was writing my own matching component, I simply decided to measure the distance from p0 to q0 and then divide it by the amount of sections, where the factor then for the most equal subdivision is =1.0. I do increase the factor when making the vector longer and decrease the factor by making it shorter. I think in Rhinocommon, they do it a bit different. This is the reason you need to almost always modify each blend-curve in Rhino. But I’m not sure about the last statement.
Hi, my component actually maintains G2 continuity at the edges and I also don’t rail/sweep/loft any profiles. I remodify the control points of a G2 surface fillet in V direction, only changing the locations of the control points 1-4 of the V-directional curves by building blend curves over control point 0 and 5 with maintained curvature and tangential direction at 0 and 5 (see the second image).
Rhino uses the Barsky and DeRose algorithm to produce blend curves
where Beta1 is the Bulge-input of our blend curve component, beta2 btw is also valid but has to be added manually.
What I am trying to achieve is to mathematically find the Bulge-inputs to set the curvature at the V surface parameter 0.5 to a specific radius/curvature, to get a more homogenous curvature distribution.
Ah I see, still you cannot modify the location in one row, without loosing G2 at some places. In ICEM you can turn on the continuity deviation analysis and move some CV’s in tangent direction. You’ll see that the more curved the boundaries are, the easier you partially loose G2. A matching surface need to consider both, the U and V direction. This is fundamentally different to matching curves, and also why you need a Coons-Patch. Sometimes there is no solution within the tolerance. This is when you manually match (at least in Icem). You can also clearly see that your solution, shown in the image, is clearly not G2 anymore. Probably not even G1!
I abandoned GeneticSharp and used a while loop to approximate my beta parameters, this generates a far better tolerance and control point placement.
In ICEM you can turn on the continuity deviation analysis and move some CV’s in tangent direction. You’ll see that the more curved the boundaries are, the easier you partially loose G2.
This is fundamentally correct for for bezier surfaces, but Rhino generates B-spline surfaces for closed curved surfaces (linear surfaces are build as bezier surface!), meaning that the curves, that are created in U-direction have infinite derivatives(continuity), except for the knots, where they have degree=derivatives. The only point where your continuity can break is at the seam, due to the V-direction curve at beginning and end being different.
Ok, so you made basically one Nurbs-Patch out of the surfaces, so that in V (longer side) direction you always maintain C2 continuity. Still, do you also maintain it in U direction? I mean what I said is still valid in this direction. Sorry for not trying your solution. I spot a difference in the curvature in U direction, even if the overall curvature flow is nice, and looks almost the same. Do you still have G1 and G2 at U, Have you measured it? Interesting anyway…
The longer side is U-directional, the G2-Continuity in V(shorter)-direction is held by saving the tangent vector and curvature value at the control points connecting to the surfaces and G2-blending over them (can’t explain you everything since I am doing this for my diploma thesis at a strak company).
The curvature picture looks a bit different because the left one from ICEM has chord length 5 with radius 3 and the right one (mine) has chord length 4 and radius 4.
Apparently Rhino is a bit worse at producing fillet curves, so I couldn’t use chord length 5, which caused an uneven fillet.