 Welcome back. So in this video, we're going to focus on creating drawers first. So we're going to build this first Type here. So what we're going to do, let's jump into this particular subnetwork now, and I'm going to get rid of the color now. We don't need that anymore. I was just for making sure our multi-parm list was working and what I need to do here is I need to allow the user to basically determine how many drawers that they want on this particular Primitive here. And so you can see that in this case, there's three here. Let's actually move that back there. But if we were to look over here on this particular one right here, there's only two, right? So I want to be able to accommodate that particular flexibility in the tool. So let's go back to Houdini and get that all set up. So to do that, what we're going to need to do is drop down and add node. And this allows us to create the curves from our polygon. And I want to do a group of endpoints. That allows me to get those two verticals there. Perfect. And then I'm going to resample this guy. And this is going to determine now for us what or how many of those particular drawers that we're going to have there. So you can go and select just two or four, how many ever you want. So we're going to have to hook that up. Into this particular multi-param list. So let's do that now. Let's go edit our parameter interface there. And now I'm going to go and add a integer slider here. This is going to drive the amount of drawers that we have. All right, so we're going to call this cab drawer count. And we'll call this drawer count. Seems fine to me. And I'm going to default it to... So we got to have at least one. Well, in this case, one wouldn't really make any sense. That's a big drawer. So I'm going to set the minimum to two. And the default is going to be three. So let's do that. Okay, so and then I also want to make sure that this is hidden. This particular drawer count slider here is hidden when the cab type menu does not equal zero, right? We don't want the user to mess with this or even see this. And so what I'm going to do is I'm going to put two curly braces in here. And I'm going to say cab type, like so, hashtag does not equal zero. We're going to hide it basically. So it'll apply now. And I come down here. You can see that we don't actually see the slider here. And that's because both the types here are set to something other than drawers, right? So if I put this drawers, all of a sudden I can see this guy. Another useful thing here that I've found just working with these guys quite a bit is to put a separator at the very bottom. So you just drag and drop a separator down there. What happens is it gives a nice kind of clear line between all the different overrides that you have, right? This helps it make it look better. All right. So that's how we hide those things when we don't need them. And I really recommend you get really into the overall experience for the end user with your tool. It'll make you much more successful when you're developing these HDAs. All right. So now we've got this drawer count. Let's go now and make sure that we include that in here. All right. So we're going to do an int drawer count. All right. So we're going to do a CHI. And we're going to call this drawer count underscore count. There we go. And I did spell it wrong. There we go. All right. So then we need a semicolon. Cool. So then we need to expose it so we can see it. And let's just copy a previous expression here because it'll be exactly the same except that we want to get the cab drawer count. There we go. Cool. So now that is being stored on the primitive, the drawer count here. So if I were to select this for each loop here, we should see a drawer count. And I forgot to actually set the parameter. There we go. Let's copy this guy. All right. And this is going to be, let's just call it decount. Make it easier. And we'll just get this guy. So drawer count and put it in for the value. And we need a comma. There we go. Cool. So now I got this decount. All right. And so we have three and three. Beautiful. So now we can access that value. So in here, I wish, you know, the attribute promote had a way to promote lots of variables or attributes. So what I'm going to do is actually just put all this stuff into a subnet. We'll call this some adders. Or how about override adders. And I'm really just doing this to keep it organized because we could end up with quite a few in here. But at least now you have one place to go to edit all your attributes that you are transferring from your overrides. So we're going to promote the decount right there. And let's get rid of this guy. And let's do the decount here. So I just need to do a decount. And we want to go from primitive detail. That should be fine. It's complaining. You can see it's got this little warning right here. It's complaining because you just need to come down here and reset the cache. And it should be fine now. Yeah. No, it's fine. So now we have the decount also as a detail attribute, which is great because now we can actually access it over here. All right. So we can come in here and we still have this decount over here. So now, rather than just hard code that, I can do a detail. And we'll get it from the incoming geometry. And it's called decount. And there we go. All right. So now we've got control over how many we want. And it's not going to show up right away because we have to do that reset cache thing again. So let's do that. And let's take a look here. And it looks like we are getting a little bit of an error in here. So let's just make sure that we are getting two. Yeah. So you can see the points are changing there. Very nice. Now, the ability to create as many drawers as we want. But you'll notice that we are getting an error here. And these are, this is always interesting when you start dealing with these more complex setups here. So let's do a single pass and let's go to one. This is the one that's airing out. So let's go into our build drawers and take a look and see why. It's most likely caused whenever you see something like this where it wasn't the same as primitive number two. It's mostly a sorting issue. So I think what I'm going to do is sort this. Let's see. I think we sort it by X. That should ensure that we always get the proper count there. So let's go about down here and check this out. Go off single pass. Yeah. There we go. Cool. So the other thing that I'm noticing. So now we've got the vertical lines, the vertical curves there. And so by sorting in at X, we basically ensured that the point order is going to be the same on a per-prem basis there. But you'll notice that I'm not getting any resampled values for this particular one. And that is because I don't think it's pulling in the data. So I think let's actually go and check this out. I think I know what the issue is we're not getting a decount, right? There's not a default value already set up for it. So what we need to do is build in some sort of way to default it to our default value in our parameter interface over here. But if it basically, if the detail attribute is zero, then we need to default to three. So let's do that up here. And this is what I'm going to do here. So I'm going to create a resample node or just copy that one. I'm going to get rid of the expression and we're going to say three for that one. Then I'm going to put down a switch here. And why are this guy in like so? And for the expression up here, I'm going to say if actually, yeah, we could just do this, we could say detail. We're going to get the information from, let's see, let's add one up here. Actually, we could just get it from prim in about that. So we'll say prim in. We want to get the decount. Let me say zero because it's just a single value. If it's greater than zero, then we should switch to this one. So it'll be one, right? So this will evaluate. So if this is greater than zero, then this will be one. So then we'll use the user defined one else. It's going to be zero. So it's just going to use our default value of three. So it's a great way to set that up. Okay, cool. So now I got that issue out of the way. Let's now set up the horizontal lines. Alright, so let's do this. Now let's do an add node. And I'm going to delete geometry and keep points and let's see if we can actually get our horizontal lines with one of these guys. So that could be the number of points. But I think we could actually do this a little bit easier. I think we can sort it. So let's do this. Let's sort by Y this time around. And I think that will allow me to use this guy. Let's see if we do it by X. Nope. Now let's check Y again. There we go. That was great. Yeah, that's working now. Okay. Cool. Alright, so now we're going to move forward. Now then I want to go and group by range because I don't need the beginning and ending primitive there. So we'll just do this trick right there. And we'll call that one the outer. Like so. And we'll blast away the outer group. We don't need that anymore. And then finally we can go and sweep that to create our crossbeams for our drawers. So let's do a ribbon and construction is going to be on the z-axis like so. And then let's remove the columns and make it smaller. Now this value should be the same as our cabinet thickness. Yeah, that looks like it wants to be that. So let's just hook that guy up there. Very cool. Alright, so with that done, let's do a poly extrude and we'll extrude it back. And let's just do that same thickness. You're not really going to see this mesh very much. And then let's output our back. Yeah, so these are basically the crossbeams that the drawer basically rests on. Perfect. And then let's do a reverse. Alright, then we need a UV these guys. So let's go grab one of the UV nodes, one of the latest ones here. Yeah, it's got all three options in there. So let's get this one and let's go and put that into these guys and then check our UVs. Looks great. There we go. So now we have our crossbeams. I'm actually going to put this over to the side there just for now. Alright, so let's jump up and out and let's turn on our assembly here. Perfect. Oh, and then let's make sure we turn off our single pass. There we go. Cool. So now we're getting the crossbeams for our drawers and what we need to do now just like we did when we sectioned out, you know, the whole cabinet area is we need to boolean out just where the drawer goes. Alright, so let's do that now since it's relatively simpler to do. Alright, so again, we're going to do a transform because I want to make it just a little bit bigger and to do that, we are going to do our CX and our CEY for the centroid. So that's our H script there and I'm just going to make it a little bit bigger in X and a little bit thicker in Z. Let's get our boolean node. This is our cutter object and then we want the original primitive. Yep, I want this original primitive as the object to cut and look at that. Let's also set, let's save our scene here and let's also set our A type to surface and I'll get rid of that warning there. So now we've got the ability to go through each one of those drawers and create a drawer for it using just this one print. So there we go. I'm going to go and actually merge these two guys together for now and then test out our overrides just to make sure everything is working as it should. So my drawer count for this one should be controllable. Yeah, that's pretty cool. So you can have really thin drawers. Let's go and check our depth. Everything seems to be working nice and speedy too. We've got our heights. Let's go make sure that we can create more sections and everything seems to be fine and if I go and change my ID this allows me to go and pick different ones. One thing that we're going to have to do is identify which prim number the artist is working with. So we'll do that once we get all the types set up. We'll put in what I like to call debug numbers and that basically helps the artist identify which primitive for the cabinets are going to be editing. Very nice. Yeah, let's add in another one. So let's do and I should default the prim ID to negative one. Let's do that now. So let's go edit parameter interface prim ID. It's going to be negative one. That way it doesn't override anything right when you create it for the first time. So let's get rid of this one. Right? It goes back to doors because it's on prim zero. If I add anyone you can see now it doesn't mess anything up. All right, so let's go and oh we need to make there we go. Yeah, how cool is that? So now it's really starting to get into customization. Okay, so with that I'm going to close out the video there and we're going to move on and keep working on our drawer. All we really need to do now is build the geometry for the drawer itself. All right, thanks so much.