Follow Along: Model a Cylinder Head
Transcript
Welcome to nTop Learns training on Introduction to Modeling Using Curves and Profiles. In today’s training, we’re going to learn how to make the part on our screen solely inside of nTop using our new curve and profile features. We’re going to be following the steps listed as sections in our notebook here to the left. So we’re first going to start with a raw extrusion, perform an extruded cut, then a revolve cut, add in our bolt holes, and then finally create a channel with a poly curve cut. Modeling an nTop is made easiest when we’re able to use our reusable custom blocks. So we’re going to be using five different ones throughout today’s training.
They’re listed as Line By Direction, Rectangle Fillet Center Points, Mirror Spline Rectangle, and Symmetric Spline. To show off why we’re going to use these and kind of what is the underlying method to using these, if I create a line and I isolate and I hit Z to zoom fit to screen, I can see my line is created by two points. But oftentimes, I want to create a line by a single point and then a direction and magnitude to translate that second point.
If I wanted to do that with this original Line block, I would have to do a Translate Object block. I’d have to make one point into a variable. Then I’d have to translate and specify a vector with a different magnitude and direction every time. And this can turn into a two, three, or even four block process that I’d need to repeat every single time I’d want to use this throughout my notebook. Instead, I made a single custom block called Line By Direction, which allows me to start with a point, specify a direction, and then a magnitude on top of this, making this a simple one-block process. Every time I want to create this line to look how we actually created any of the custom blocks used in this file, you can right-click on any of them, say “open custom block,” and we can see our four block process in between where we translate and multiply our unit vector with a magnitude. Again, feel free to do this with any of the included custom blocks in this file or open the downloadable files attached at that same link.
To start off in our first section, then we’re going to start under raw extrusion. And basically, if I open up our sample part once again, I can see we’re basically going to start with a rounded rectangle profile that we will extrude. So my first block that I’m going to introduce is going to be our Rectangle block. And I’ll search for this in my notebook. If I isolate on this rectangle, I can see we have inputs for a center point, width, height, and corner radius. I’m going to remain having this centered at our 000 origin. But I’m actually going to make a variable for our width, height, and corner radius. I’ll right-click on any of these inputs and I’m going to name this profile width, then profile height, and then corner radius.
After I’ve done this, I’m then going to change these values to 600 mm for our width, 600 mm for our height, and then finally 70 mm for our fillet radius. When I do this, then I can see the output of our rounded rectangle on our screen. If I were to do this with lines and arcs in nTop, that would be a totally fine workflow as well. But packaging this all up into a rectangle workflow allows this to be a really quick, seamless process. Once I have this, I can then right-click on my rectangle, make this a variable, and I’ll name this raw profile.
To finish up this section, then I’m simply going to use an Extrude Profile block to actually extrude this profile normal to the plane that we’ve started it on. And I’ll make a variable for our distance, and I’ll name that extrusion distance. And I’ll extrude this 600 mm upwards, giving us a 600 x 600 x 600 rounded rectangular object.
Now that we’ve finished our first raw extrusion section here, we’re going to move on to our second section, where we’re going to be creating an extruded cut of this spline and spline open profile that we see here. I’m going to isolate my raw extrusion once again, and now I’m going to start with my next section.
In this section, I’m actually going to declare some of the scalar variables before we actually create the Blocks to help give us some guiding principles. If I isolate my sample part once again, I can see that I have variables here such as my spline width, the total height of my cut, as well as the width of my cut. So those are going to be the three variables that I define. I’ll type scalar variable in here, and I’ll Ctrl+C and Ctrl+V twice to copy and paste. I’ll then create my spline height variable, my spline width variable, and my cut width variable.
We’re also going to create two more variables that are actually dependent on some of the variables we’ve already created. This is going to be the straight line width, or the width from where my fillet begins on one side of my rectangle to the other. And then also the offset from this fillet begin point here to where I want my spline to begin. So to get our straight line width, I’m simply going to multiply my corner fillet radius, my corner radius from above by two, and then subtract that from my total profile width.
I’ll then right-click on this Block, make this a variable, and I’ll name this straight line width. Now that I have my straight line width, then I can much more easily get this edge offset right here, simply by subtracting my cut width or the width of my spline cut here from my straight line width, and then dividing that by two because we have that space on either side. And I will name this then my edge offset.
If I want to see what this looks like actually loaded, I can create a value for my cut width, which I’ll specify as 300 mm here. And now I can see that we need to offset this cut by 80 mm on each side to get our final result. I’ll collapse these two Blocks then, and we’re going to create our first spline. I’m going to do this by using another custom Block that I’ve loaded in called Symmetric Spline. This will create a spline with a tangency vector at both the start and end point for this given direction. We can also then control the distance along our tangent vector that our second and third control points will be as well as the degree of our spline as well. So basically, if we think about it, we just need to specify our start and end point as well as our tangency vector, which is going to be 1, 0, 0 in this case, and then our control point distance.
To start off, I’m going to choose a start point from our actual rectangle, which is going to be the start of this fillet here. And then I’ll create my spline located here and then offset by our edge offset. So to find my start point, I’m going to isolate my raw profile from above, and I’m going to enter the properties. Inside of this, I’m going to go inside my polycurves list, then inside the list element of the polycurve, then inside the properties of that individual polycurve, and then inside the vertices. Once I’m in the list elements of the vertices, as I hover over each vertex, I can see the point actually show up in the viewport. Once I get to the verticy that I want, which is going to be five in the list, I’m going to pull that out into my notebook, and I’m going to name this my spline start point.
I’ll then drag this Block into my start point input of my Symmetric Spline Block to create our endpoint. Then all I need to do is translate this start point by our spline height and our spline width. So I’ll load a Translate Block. I’ll drop in our point, and for the vector, I’ll type in a Vector Block. And I’m going to add my spline height to my Y and my spline width to my X. These values I’m going to make 50 mm for each of them, and then I’ll adjust the units of my spline, excuse me, of my vector. And now I can see that that translated point is viewable in the viewport. I’ll then use this as the endpoint for my tangency vector. I’ll specify 1, 0, 0, meaning that the tangent at both ends of my spline are going to be pointing in our horizontal direction. And for my control point distance, I’m actually going to have these control points located exactly halfway in between. So if I divide my spline width by two, that’s going to be the distance along our tangents that these control points will be located. If I drop this into my input and view the spline, I can see the two-degree version here, but I’m actually going to up the degree of my spline to give us a more smooth shape. I’ll right-click, make this a variable, and I’m going to name this raw spline one.
I’ll then collapse this Block to save room in my notebook, and we’re going to translate this spline by the edge offset to actually give us our finished spline. I’ll choose another Translate Object Block, drop in my raw spline one, and for the vector then, I’ll load in a Vector Block. And I want to translate it by my edge offset in the X. I’ll change the units then of my vector, drop this into my Translate Object, and now I can see our spline has been offset by our edge offset value. I’ll make this a variable, and I’ll name this spline one.
To create our second spline, now if I turn off the visibility of our raw spline in our point, I can see we actually just want to mirror this spline across our central plane. So we can use the included custom Block Mirror Spline. To use this Block, all I’m going to do is drop in our spline one, and then I’m going to make a Plane From Normal Variable, excuse me, Block. I can see when this plane loads that we’re actually facing our Z direction, but we actually want this plane to face our X direction. So I’ll simply flip my normal here. And since our rectangle was centered on 0, 0 and always will be, I can just leave this here. And if I drop my plane here, I can see we get a mirrored version of our original spline across that plane. I’ll make this a variable, and I’ll name this spline two.
To connect these two splines, then I’m going to use a Line Block to connect these. Then I can just enter the properties of each one of our splines, and if I hover over the start and end points, I can select the one at the top of each spline, which is going to be our two end points. And this will then create a line that connects in between. I’ll make this a variable, and I’ll name this cut line.
To make the open profile that we can use to do this extruded cut, I’m going to use the Profile From Curves block. With this, we can drop in our curves into this list of curves. And if I isolate this block, I can see that we actually have these darkened regions emanating kind of from each side of our curve. I can see that this is a little bit opposite of what I wanted to use for extruded cut, and I actually wanted the internal region to be referenced on the other side.
So to do this, I can actually just flip the normal. So instead of 001, we can use 0 01, or I can flip back and forth to influence these. Since this is the plane that our profile is on, I can see when I flip that plane, then the dark region of our open profile changes and now our profile is ready to go. I’ll make this a variable, and I’ll name this cut profile. And even though this is an open profile, if I actually hit F to view the field viewer of this open profile and change to our implicit color map, I can see, although the profile is open, our field actually exists infinitely following the tangents at the end of our profile here. Meaning, this will perform extremely well for an implicit extruded cut. I’ll close our field viewer, and now I’ll load in an Extruded Cut block for our profile. I’ll simply choose our cut profile. And for our target, then I’m going to choose our raw extrusion from above. If we isolate this body, then I can see we’ve actually performed our extrude cut on that raw extrusion now, and we’re ready to move to the next section. I’ll make this a variable, and I’ll name this cut extrusion.
In our next section now, we’re going to be creating a revolved cut around the top of our body to give us this curved and then cylindrical look. We’re going to have two variables in this section. One is R1, which is the radius of our cut at exactly halfway around our body. And the second will be R2, which will be the radius of the cut a quarter of the way up our body. I’ll create these variables by making two scalar variables. I’ll copy and paste, and I’ll name it R1 and R2.
I’m also going to create an axis that goes through the center of our part, and I’m going to say that the center point of my axis is at the center point of our bounding box from our cut extrusion. I’ll right-click, make this a variable, and I’ll name this center axis. And we’re going to use this to do our revolve cut later on. First, to create this open profile, we’re going to create an angled line from R2 to R1 away from our center and then a straight line from R1 to the top of our part. I’ll load in a line variable, and we’re going to translate the center point of this axis to give us R2 for our first point. So I’ll choose a Translate block, and I’m going to translate the center point of our axis by a vector that is going to be R2, excuse me, R1 away from our body. I’ll pull our vector in. And since this is going to be in our X direction, I’ll say R1 is going to be my X distance. And if I choose 400 mm for our R1 and I adjust the units of my vector, I can see our start point has been translated to the side. I’ll use this as the start point of our first line. For our second point, I’ll choose another Translate Object block, and this one I’m going to be translating both in the Z and in the X. As I create another vector block, I’ll be translating by R2, which is going to be 250 mm. And I’ll adjust our units. And in the Z, I’m going to be translating up by a quarter of our extrusion distance. This means if I divide my extrusion distance by four, this will be our Z distance that we are translating. If I pull this vector into my translation, and the object I’m translating will be the origin of my axis, I can see our second point is located at this corner. I’ll pull this block in, and now I can see my first line has been created, and I’ll make this a variable named angled line.
I’ll collapse this block, and then we’ll move on to creating our straight line. To do this, I’m going to use the Line By Direction block, which is a custom block included in the file. For our start point, I’ll select the end point from our previous line. And for our direction, I’ll choose 0 01 since we’re going vertically upwards. For the magnitude, then we’re again going to open up our angled line block, and I’m simply going to copy and paste our extrusion distance divided by 4 since that’s the rest of the distance that we need to use. If I click on this block, I can see our blue outline here signifies that this line has been made. And if I right-click, make this a variable and name it straight line, I can see our open profile is ready to be created. I’ll then choose Profile From Curves. I’ll add another to our list, and I’ll drop in my angled line and my straight line. I can then see that our open profile has been created on the right side of our body, meaning this is what we intended, so we don’t need to change the normal. But now I’ll right-click, make this a variable, and I’ll name this profile to revolve.
Since our profiles are also implicit bodies themselves, we can actually use this as a boolean subtract later on, which is the step that we’ll use. First though, I’m going to use the Revolve Profile block to revolve the profile that we’ve just created around our central axis by 360°. We shouldn’t see any output since this is an infinite profile. It’s kind of extruding everywhere outside. But if we use this to subtract from our part, it will give us the cut that we’re looking for. I’ll use a Boolean Subtract block then, where I’m going to subtract this revolved profile from our primary body, which will be our cut extrusion. And if I isolate this block now, I can see we’ve gotten that desired cut around our body. I’ll right-click and make this a variable, and I’ll name this revolve cut.
Now that our revolve cut has been performed, we’re going to cut our bolt holes out of our four corners here. To do this, we’re going to create four circles at the same center point as our corner radii here. To get the center points, we’re going to use another custom block included in the file called Rectangle Fillet Center Points. If we use the same inputs here then that we did for our rectangle at the top, where if I close these sections, we can navigate to the top, it will then give us the exact center points that we’re looking for. And I’ll choose my corner radius, and there I can see those four points for the center points of our circles. I’ll right-click, make this a variable, and I’ll name this arc centers. Then I’ll load in a Circle block, and this will allow us to actually list process with these four points to create four circles. I’ll drag in our arc centers as the center points, and then I’m actually going to right-click on our radius and name this bolt hole radius. And this is going to be then the variable to control the radius of our circles. I’ll make our radius 30 mm, and if I click on our circles here, I can see our 30 mm circles ready to be cut out. I’ll right-click on this block, make this a variable, and I’ll name this circles.
Then since I have a list of four, I’m actually going to use a Boolean Subtract block to cut these out of our part rather than our extrude cut. These techniques will work virtually the same, but since I have a list, our Boolean Subtract block is a little bit easier to do this. Then to grab our subtraction bodies, I’m actually going to go in and grab the distance to extrusion conversion from our circle profiles. I’ll use that as our subtraction bodies. And then if I open my revolve cut section once again, I’ll use my revolve cut as my primary body. When I isolate this block then, I can see that our bolt holes have been cut out, and I’ll name this block bolt cut.
For our final section here, called polycurve cut, we’re going to perform a curved channel cut starting at the top of our body and moving through to the side here. To do this, we’re going to create a polycurve from two lines and an arc, and then we’re going to thicken that polycurve.
We’re going to use our Line By Direction custom block included in the file to start, and we’re going to create our first point inside of our body here. And we’re basically going to extrude that line all the way out. For our start point, then I’ll load in a Point block. And for our X location, if I look from the top, I just want that to be the centroid of our part. So our X location is actually just going to be zero, and I don’t need to change that. For our Y though, I’m actually going to slightly offset this from the centroid of our part by the fillet radius, or the channel bend radius, excuse me, that we’re going to use. I’m going to actually make a scalar variable for that channel bend radius so we can use this.
Let’s say that our radius is 100 millimeters for now. And so I’m actually going to offset this by 100 mm in my negative Y direction, so I can subtract 100 from the centroid of our above bounding box. And again, this will be from the Y value, which will then be, and this will be where our point is going to start in the Y.
For the Z or the height of where I want this line to be, I want it to actually be the extrusion distance divided by 2.5 down, basically from the top, which is going to equal about 240 mm. To automatically give us that value though, I can load in a Divide block. And if I divide our extrusion distance from the top by 2.5, this will give us the value we’re looking for for our Z. If I click on this point, I can see it’s about halfway through this solid region here, and it’s correctly situated on both our X and Y axis. I’ll drop this in as my point.
And for our direction, I’m going to choose 0 -1 and 0. And for the magnitude, I want something that will just always make sure that this line is outside our body. And an easy way that we can do that is we can go into the properties of our bolt cut variable from above. I can go into our bounding box. And if I click on our span, which is the vector from one side of our bounding box to the other, and I choose the length, this will just always make sure that this line will always at least translate through our body. And I can see it’s very far outside here. I’ll right-click, make this a variable, and I’ll name this P line one for polyline one.
I’ll then collapse this block and we’re going to make our second line, which is going to be our Line By Direction. Again, this, if I click on our line here, is also going to be offset in our Z direction now from our original point by our fillet radius. So that’s how we know where we need it to be located. I’m going to load in another Point block. And for our X and our Y values now, I’m just going to actually use the centroid X and Y from our bolt cut. And then for our Z value, we’re actually going to take our extrusion distance divided by 2.5 from above. So I’ll copy and paste that block into my notebook here. And now I’m going to actually add our channel bend radius to this value to give us that Z offset we’re looking for. I’ll drop that in to the Z value for my point. And now I can see our point is correctly located inside of our body. I’ll drag my point into the Line By Direction block there. And then for our direction, I’ll choose 0 0 1, because we’re looking for this line to go into our vertical Z direction. And I’m actually going to use that same span length that we used above as the magnitude for this line as well. And I can see that this line has now gone outside of our body just like the one from above, which as well is going to give us a perfect cut. I’ll make this a variable, and I’ll name this P line 2.
If I collapse both of these and now I isolate these so our part is no longer present, I can see the easy way we can connect these is by using the Arc By Tangent block. It’s easy because I can just take the start point again from our body and I can take the included start tangent as well from those properties. And I can say, I just want this to be connected to the start point of our other line. This will then automatically connect it with that arc. And then I can make this a variable, and I’ll just name this P arc for polyline arc.
To make our polycurve then, where I believe I’ve been saying polyline but this is a polycurve because it’s a collection of curves, I’ll load in our Polycurve From Curves block. I’ll add two more to our list, and I can drop in all of my included curves: so our two lines and our arc. I can now see our polycurve is connected. And if I make this a variable, I can just name this P curve for polycurve.
To thicken a polycurve then, to perform that cut, we can add a Thicken Body block to the notebook. To thicken this then, I can go into the properties, grab the scalar field, which will convert to an implicit body then, and then I can specify the thickness of our channel. I’ll make this a variable, and I’m going to make our thickness 150 mm. When I do this, I can see the thickened version of our polycurve on the screen, ready to boolean subtract from our final bolt cut. I’ll add in one more Boolean Subtract block. And if I subtract our thickened body from our bolt cut variable, I can see our final part on the screen. If I right-click on this block, I can make this a variable, and I’ll name this final.
Now that our final part is made here, we can see how easy it is to parametrically change this part all the way throughout. So if I come down here, I could change something like my Channel Thickness, and I can see that quickly reflected on my screen. Or I can even change something up here at the top, like my Profile Height, and I can again see my workflow update as we go, and then a final version generated at the bottom of my screen as well.
We can list process through these inputs in nTop as well. So we can do a type of parameter sweep on this object to have hundreds of thousands of different versions easily updated without those typical surface modeling errors that we can encounter when rebuilding a part. But if we kind of arrive to a final version of that part that we’re looking to use, we can actually mesh our body directly in nTop here and send that off to somewhere else. And I’ll show this process quickly. And we can also export the curves, which I’ll highlight in a second as well.
So to mesh, I can just drop our body in, choose a tolerance of, say, 10 mm, and I’ll choose to sharpen in this case. And I can see that this body is quickly going to load. And if I isolate our final result here, I can see that we have a nicely sharpened body ready to send out for an export.
However, if I’m looking to export those curves, I can actually go through and create a list of curves that we’ve actually used to create things along the way, such as our circles, our poly curve, our profile that we used to revolve our cut profile that we used, or even our raw profile here. And if we were to export these as a part from nTop, we can actually go into our CAD system and easily redraw this object into our typical STEP or Parasolid files that we’re used to working with. If I go into my downloads here and I load in our simple cylinder, I can then see the CAD redrawn version from all of our reference curves that we’ve assembled on the way.
So throughout today’s workflow, we learned how to parametrically create this in nTop. And then we can see in our reference section here at the end, how we can mesh and even create a CAD version of this part just by exporting our curves. Thanks for attending this training, and we look forward to seeing the progress you make in nTop along the way in the future.
0:00 Introduction to Modeling Using Curves and Profiles
0:39 Reusable Custom Blocks
2:38 Creating a Raw Extrusion
5:37 Extruded Cut with a Spline Profile
16:42 Revolved Cut for Curved Body
22:45 Cutting Bolt Holes
25:15 Creating a Polycurve Channel Cut
32:45 Parametric Design and Exporting
Download the starter file below to follow along.
- 0:00 Intro & Custom Blocks
- 2:38 Raw Extrusion (Extrude Profile on a closed polycurve)
- 5:48 Extruded Cut (Extruded Cut on an open polycurve)
- 16:40 Revolved Cut (Revolve Profile and Boolean Subtract on an open polycurve)
- 22:39 Bolt Holes (Boolean Subtract on profile list)
- 25:16 Polycurve Cut (Thicken Body and Boolean Subtract on polycurve)
- 32:45 Testing Parametric Model
- 33:32 References (Mesh & CAD export options)
Downloadable Files:
This file was last updated in nTop 5.20.2
