# Deconstruct/Reconstruct Curves Within Trees

**URL:** <https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937>\
**Category:** Grasshopper\
**Tags:** windows, data-tree\
**Created:** [February 15, 2026, 3:46am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937 "2026-02-15T03:46:40Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michael\_Shepanski](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/michael_shepanski/32/725266_2.png) [@Michael\_Shepanski](https://discourse.mcneel.com/u/Michael_Shepanski)\
**Post date:** [February 15, 2026, 3:46am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/1 "2026-02-15T03:46:40Z")

</div>

Just when I think I understand grasshopper trees, I run into something like this …

I thought the attached diagram would produce output that is exactly the same as its input, but, as you can see, it doesn’t. How can I fix it so that it does? (What I _really_ want to do is to insert some transformation between the Points output of “Control Points” and the Points input of “Nurbs Curve PWK”, but for now I’m stuck on the basics.)

 ![Canvas at 14;32;55](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/7/3/c/73c255f246891ff6533738fd91fbd09a1ddf7654.png)

---

<div class="post-metadata">

**Author:** ![Volker\_Rakow](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/volker_rakow/32/758767_2.png) [@Volker\_Rakow](https://discourse.mcneel.com/u/Volker_Rakow)\
**Post date:** [February 15, 2026, 5:47am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/2 "2026-02-15T05:47:09Z")

</div>

It would have been useful to have your test geometry…

The above makes sense. Control Points is going to break down the list of line-like curves into sets of points, weights and knots. To know which points, weights and knots belong to which lines, the component will have to add an extra depth of branch hierarchy {…;n+1}. This extra depth of branch hierarchy is not magically removed by the Nurbs Curve PWK component. You will have to do this manually with a Trim Tree component. The numbers of item in the input and output lists match, do they not?

---

<div class="post-metadata">

**Author:** ![Michael\_Shepanski](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/michael_shepanski/32/725266_2.png) [@Michael\_Shepanski](https://discourse.mcneel.com/u/Michael_Shepanski)\
**Post date:** [February 16, 2026, 4:43am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/3 "2026-02-16T04:43:39Z")

</div>

That works perfectly, thank you. And yes, the lengths of the lists match.

Incidentally, would you know of something I can read/watch that explains grasshopper trees properly, so that I can answer questions like this myself?

---

<div class="post-metadata">

**Author:** ![Volker\_Rakow](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/volker_rakow/32/758767_2.png) [@Volker\_Rakow](https://discourse.mcneel.com/u/Volker_Rakow)\
**Post date:** [February 16, 2026, 4:50am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/4 "2026-02-16T04:50:37Z")

</div>

Often cited is Andrew Heumann’s [The Deal with Data Trees](https://www.youtube.com/watch?v=ob3ER12ut3Y) (although I feel it paints an incomplete picture) Here, much the same, except in text form: [Rhino - The Why and How of Data Trees](https://developer.rhino3d.com/guides/grasshopper/the-why-and-how-of-data-trees/)

---

<div class="post-metadata">

**Author:** ![Michael\_Shepanski](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/michael_shepanski/32/725266_2.png) [@Michael\_Shepanski](https://discourse.mcneel.com/u/Michael_Shepanski)\
**Post date:** [February 21, 2026, 4:11am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/5 "2026-02-21T04:11:48Z")

</div>

Many thanks! That clears things up a lot.

I understand why `Control Points` has to add the extra path element. But, at least for my purposes, I wish that `Nurbs Curve PWK` would remove it. Still, no big deal: I achieve the same effect by hooking its output up to `Trim Tree`, per your advice.

Here’s what I now find weird: when I right-click on the `Curve` output of `Nurbs Curve PWK`, it offers shorthands for various kinds of post-processing, but TrimTree is not one of them, yet it seems that it’s the one that would most often be wanted.

---

<div class="post-metadata">

**Author:** ![Volker\_Rakow](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/volker_rakow/32/758767_2.png) [@Volker\_Rakow](https://discourse.mcneel.com/u/Volker_Rakow)\
**Post date:** [February 21, 2026, 1:21pm UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/6 "2026-02-21T13:21:15Z")

</div>

> [@Michael\_Shepanski](#):
>
> I understand why `Control Points` has to add the extra path element. But, at least for my purposes, I wish that `Nurbs Curve PWK` would remove it.

It may be that for your purposes you wish it were that way, but as a generalization it doesn’t make sense. Grasshopper components never trim data trees, only graft them… except for the two components explicitly made for that purpose: Trim Tree and Shift Paths. Shift Paths is the granddaddy of Trim Tree. It does what Trim Tree does, but can also “trim” branch hierarchy from the front of the branch label. It does this with positive depth values, so using negative ones, makes it behave like Trim Tree.

> [@Michael\_Shepanski](#):
>
> when I right-click on the `Curve` output of `Nurbs Curve PWK`, it offers shorthands for various kinds of post-processing, but TrimTree is not one of them

Well, you’d also have to be able to set trim depth. How do you imagine that being implemented? Or just a Trim for output with a depth of one, and for other depths you’d need to use the actual Trim Tree component? Yeah. That makes sense.

---

<div class="post-metadata">

**Author:** ![Fabio\_Franchetti](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/fabio_franchetti/32/758065_2.png) [@Fabio\_Franchetti](https://discourse.mcneel.com/u/Fabio_Franchetti)\
**Post date:** [February 23, 2026, 8:40am UTC](https://discourse.mcneel.com/t/deconstruct-reconstruct-curves-within-trees/215937/7 "2026-02-23T08:40:43Z")

</div>

Apparently this topic and this suggestion (having a TRIM ONE incorporated alongside the other standard options like Flatten, Graft, etc.) has been brought up at least a couple of times over the years, but for some reason it has never been implemented
