Skip to main content
Cập nhật lần cuối: 14/05/2026

Module 2 — Data Trees Nâng cao

Thời lượng: ~7 giờ · Độ khó: Nâng cao

Mục tiêu: Kiểm soát hoàn toàn cấu trúc dữ liệu trong GH — từ Tree đơn giản đến tái cấu trúc phức tạp với Path Mapper. Ai master được Trees, master được Grasshopper.


2.1 — Ôn lại Tree cơ bản​

Path Notation chi tiết​

{A;B;C}(i)
│ │ │ └─ index của item trong branch
│ └──┘─── sub-branch path
└────────── branch path

Ví dụ:
{0}(3) = branch 0, item index 3
{0;1}(0) = branch 0, sub-branch 1, item 0

Khi nào Tree tự động xuất hiện​

Tree được tạo bất cứ khi nào GH áp dụng một operation lên nhiều objects khác nhau:

3 surfaces → Divide Surface (U=5, V=5)
→ Tree với 3 branches, mỗi branch 25 frames

Surface Brep → Deconstruct Brep
→ Tree: {0} = Faces, {1} = Edges, {2} = Vertices

2.2 — Flatten, Graft, Simplify​

Flatten — Phẳng hóa​

Tất cả branches → 1 branch {0}
Tree: {0}: {A,B,C} {1}: {D,E,F} {2}: {G,H,I}
Flat: {0}: {A,B,C,D,E,F,G,H,I}

Khi dùng Flatten:

  • Loft qua TẤT CẢ curves (không phải từng nhóm)
  • Tính tổng (Mass Addition) toàn bộ giá trị
  • Khi cần 1 list phẳng để xử lý tuần tự

Graft — Phân tách​

Mỗi item → 1 branch riêng
List: {0}: {A,B,C}
Graft: {0}: {A} {1}: {B} {2}: {C}

Khi dùng Graft:

  • Xử lý từng item một cách độc lập
  • Tạo cross-reference giữa 2 lists

Simplify — Bỏ prefix thừa​

Tree: {0;0}: {A}  {0;1}: {B}  {0;2}: {C}
Simplify: {0}: {A} {1}: {B} {2}: {C}
(bỏ phần đầu chung {0})

2.3 — Path Mapper​

Path Mapper là công cụ mạnh nhất để tái cấu trúc Tree tùy ý bằng pattern syntax.

Cú pháp cơ bản​

Source: {A;B}(i)   →   Target: {B;A}(i)
= hoán đổi level A và B

Source: {A}(i) → Target: {i}(A)
= đảo items và branches

Ví dụ thực tế​

Transpose lưới:

Bài toán: Có grid 5×8 surfaces (5 cột, 8 hàng)
Tree hiện tại: 5 branches × 8 items
Muốn: 8 branches × 5 items (để loft theo hàng thay vì cột)

Path Mapper:
Source: {A}(i)
Target: {i}(A)
→ Kết quả: 8 branches × 5 items

Nhóm lại theo pattern:

Source: {A}(i)
Target: {A; i%3}(i)
= Nhóm items thành nhóm 3
Hình minh họa

[Ảnh: Path Mapper dialog với source/target pattern và kết quả Param Viewer trước/sau]


2.4 — Entwine, Merge, Weave​

Entwine — Kết hợp nhiều Trees thành 1 Tree có nhiều branches​

Input A: {0}: {1,2,3}
Input B: {0}: {4,5,6}
Entwine: {0}: {1,2,3} {1}: {4,5,6}
(giữ cấu trúc, mỗi input thành 1 branch riêng)

Khác với Merge:

Merge: gộp tất cả vào cùng branch
Entwine: giữ riêng, chỉ đặt vào level mới

Weave — Đan xen các lists​

Pattern: {0,1,0,1,...} = xen kẽ A và B
Input A: {1,3,5}
Input B: {2,4,6}
Weave (pattern {0,1}): {1,2,3,4,5,6}

Ứng dụng: Tạo pattern "brickwork"

Row A (offset=0): lưới chính
Row B (offset=0.5): lưới lệch nửa ô
Weave xen kẽ Row A và Row B → brick pattern

2.5 — Tree Statistics​

Tree Statistics component:
Output:
Paths → list các paths trong Tree
Length → số items trong mỗi branch
Count → tổng số branches

2.6 — Tree Mathematics​

Phép toán áp dụng song song theo cùng Tree structure:

Tree A: {0}: {1,2,3}  {1}: {4,5,6}
Tree B: {0}: {10,20,30} {1}: {40,50,60}
Addition: {0}: {11,22,33} {1}: {44,55,66}
(cộng từng item theo đúng branch và index)

Lưu ý: Trees phải có cùng cấu trúc để operation chạy đúng. Nếu khác cấu trúc → dùng Path Mapper để align trước.


2.7 — Debug Workflow​

Quy trình debug Tree​

1. Thêm Param Viewer sau TỪNG component nghi ngờ
2. Đọc số branches và items
3. So sánh với kết quả mong đợi
4. Tìm điểm phân kỳ → áp dụng Flatten/Graft/Path Mapper

Nhận biết lỗi qua màu sắc​

Màu ComponentNghĩa
XámOK
VàngWarning (hoạt động nhưng có vấn đề)
ĐỏError (không hoạt động)

Đọc error message: Hover vào component đỏ → tooltip hiện lý do.


Bài tập Module 2 — Debug 5 Definitions lỗi Tree​

File cần thiết: Tải module-02-debug-exercises.gh từ tài nguyên khóa học.

File chứa 5 definitions có lỗi Tree phổ biến. Nhiệm vụ:

  1. Exercise A: Loft tạo ra nhiều surface nhỏ thay vì 1 — sửa bằng Flatten
  2. Exercise B: Scale chỉ ảnh hưởng 1 object thay vì tất cả — sửa bằng Graft
  3. Exercise C: Addition cho kết quả sai — Tree structure không khớp
  4. Exercise D: Orient panel bị đặt nhầm vị trí — path mismatch
  5. Exercise E: Path Mapper cần thiết để transpose grid 5×8 → 8×5
Hình minh họa

[Ảnh: Param Viewer so sánh trước/sau sửa lỗi cho Exercise A]

Liên kết kiến thức

Nền tảng cần nắm

Mở rộng từ

Chủ đề liên quan