I strongly recommend you to simplify your basic surfaces right from the beginning, in order to keep the control points count at minumum, because all the secondary surfaces you add later will increase their complexity, hence the chances for errors. Using simple surfaces will also provide you with a greater control over the modification of your surfaces.
For example, you may want to extract your larger main surface and apply the
! _RemoveMultiKnot command. You will notice that it will remove a lot of unnecessary control points. However, keep in mind that in very rare occasions this command could make the surface worse as it removes some knots that the program “thinks” are unnecessary, but sometimes some random knot may be crucial for the general shape of the surface. Usually that command does very minor visual changes to the surface’s structure while being able to make it much simpler and easier to edit.
Similar command that simplifies a surface, but makes it considerably more smooth and with evenly distributed control points, is
! _RebuildUV. It’s main strength is that it lets you modify and existing surface only in one direction (you can flip it through the Command line options) while keeping the opposite direction intact.
I also recommend you to use the
! _EdgeContinuity tool that was introduced in Rhino 7. It will give you a better idea about the edge continuity and gap between adjacent surfaces.
Recently I used to crease similar shapes for a project, so if you want you may take a look at it and see if it could be helpful for you to try some of these techniques. They are not the best, but still worked perfectly fine for the purpose of CNC-milling a plug from the model.