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
[Ả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 Component | Nghĩa |
|---|---|
| Xám | OK |
| Vàng | Warning (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.ghtừ tài nguyên khóa học.
File chứa 5 definitions có lỗi Tree phổ biến. Nhiệm vụ:
- Exercise A: Loft tạo ra nhiều surface nhỏ thay vì 1 — sửa bằng Flatten
- Exercise B: Scale chỉ ảnh hưởng 1 object thay vì tất cả — sửa bằng Graft
- Exercise C: Addition cho kết quả sai — Tree structure không khớp
- Exercise D: Orient panel bị đặt nhầm vị trí — path mismatch
- Exercise E: Path Mapper cần thiết để transpose grid 5×8 → 8×5
[Ả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ừ
- Module 6 — Lists & Data Trees Cơ bản
- Data Tree trong Grasshopper: Tại sao script của bạn cho kết quả sai và cách fix
Chủ đề liên quan