You are on page 1of 93

© by Cozybim.

com
Edit by Duytrung

MỤC LỤC

BÀI 1. GRASSHOPPER LÀ GÌ ? .......................................................................................... 6


BÀI 2. THÀNH PHẦN GIAO DIỆN CHÍNH CỦA GRASSHOPER. ĐIỀU HƯỚNG, SỬ
DỤNG CHUỘT TRONG GRASSHOPER VÀ RHINO ........................... 9
2.1. Thành phần giao diện chính của Grasshopper ........................................................... 9
2.2. Điều hướng, sử dụng chuột trong Grasshopper ....................................................... 10
2.3. Điều hướng, sử dụng chuột trong Rhino .................................................................. 10
BÀI 3. SƠ LƯỢC VỀ CÁC TRÌNH ĐƠN MENU TRONG GRASSHOPPER ............... 11
3.1. File ........................................................................................................................... 11
3.2. Edit ........................................................................................................................... 11
3.3. View ......................................................................................................................... 12
3.4. Display ..................................................................................................................... 13
3.5. Solution .................................................................................................................... 14
3.6. Thẻ Tabs................................................................................................................... 15
BÀI 4. CÁC LOẠI MODULE TRONG GRASSHOPPER ............................................... 16
4.1. Parameter ................................................................................................................. 17
4.2. Component ............................................................................................................... 20
4.3. Specials .................................................................................................................... 22
BÀI 5. TẠO KẾT NỐI GIỮA CÁC ĐỐI TƯỢNG ............................................................ 23
BÀI 6. DỮ LIỆU TRONG PARAMETER .......................................................................... 25
BÀI 7. TƯƠNG XỨNG DỮ LIỆU ....................................................................................... 29
BÀI 8. TƯƠNG TÁC GIỮA GRASSHOPPER – RHINO ................................................ 33
8.1. Các phản hồi từ rhino viewport............................................................................... 34
8.2. Liên kết sống ............................................................................................................ 35
8.3. Bake ......................................................................................................................... 36
8.4. Đơn vị và dung sai ................................................................................................... 37
8.5. Quản lý tập tin .......................................................................................................... 38
BÀI 9. ĐIỂM – CHIỀU DÀI THEO ĐƯỜNG CONG ....................................................... 39
9.1. Tìm phương vuông góc với đường cong qua một điểm cho trước .......................... 39
© by Cozybim.com
Edit by Duytrung

9.2. Tìm điểm theo chiều dài cho trước .......................................................................... 41


9.3. Tìm chiều dài tại điểm cho trước ............................................................................. 42
BÀI 10. CÁC MODULE THƯỜNG DÙNG........................................................................ 43
10.1. Các parameter cho các loại dữ liệu cơ bản thường dùng ......................................... 44
10.2. Các module đặc biệt để lấy dữ liệu input ................................................................. 44
BÀI 11. ĐỊNH NGHĨA GRASSHOPPER ........................................................................... 47
BÀI 12. LIST TRONG GRASSHOPPER ........................................................................... 49
BÀI 13. TẠO MẢNG – LIST................................................................................................ 50
13.1. Nhập dữ liệu dạng mảng thủ công ........................................................................... 50
13.2. Range ....................................................................................................................... 51
13.3. Series ........................................................................................................................ 53
13.4. Random .................................................................................................................... 53
BÀI 14. THAO TÁC VỚI LIST ........................................................................................... 54
14.1. List length ................................................................................................................ 54
14.2. List item ................................................................................................................... 54
14.3. Reverse list ............................................................................................................... 55
14.4. Shift list .................................................................................................................... 55
14.5. Insert items ............................................................................................................... 55
14.6. Weave....................................................................................................................... 56
14.7. Cull pattern............................................................................................................... 56
BÀI 15. DATA TREE TRONG GRASSHOPPER ............................................................. 57
15.1. The param viewer..................................................................................................... 58
15.2. Tree statistics ........................................................................................................... 59
BÀI 16. CÁC XỬ LÝ TOÁN HỌC CƠ BẢN ...................................................................... 60
16.1. Tổng quang về Tab toán học – Maths ...................................................................... 60
16.2. Các phép tính toán học ............................................................................................. 61
16.3. Các toán tử điều kiện ............................................................................................... 61
16.4. Các hàm lượng giác ................................................................................................. 63
16.5. Các biểu thức ........................................................................................................... 63
BÀI 17. LÀM VIỆC VỚI DATA TREE .............................................................................. 65
17.1. Flatten Tree .............................................................................................................. 65
© by Cozybim.com
Edit by Duytrung

17.2. Graft Tree ................................................................................................................. 66


17.3. Simplify Tree ........................................................................................................... 66
17.4. Trim Tree ................................................................................................................. 67
17.5. Explode Tree ............................................................................................................ 68
17.6. Entwine .................................................................................................................... 68
17.7. Flip Matrix ............................................................................................................... 69
17.8. Merge ....................................................................................................................... 69
17.9. Construct Pathh – Deconstruct Path......................................................................... 70
17.10. Tree Item .................................................................................................................. 70
BÀI 18. TÌM MIN – MAX CỦA DÃY SỐ........................................................................... 71
BÀI 19. TREE BRANCH – LẤY RA DỮ LIỆU CỦA MỘT NHÁNH ............................. 72
BÀI 20. SPLIT TREE – CHIA CÂY DỮ LIỆU.................................................................. 72
BÀI 21. REPLACE PATHS – THAY ĐỔI ĐƯỜNG DẪN CÂY DỮ LIỆU .................... 74
BÀI 22. PRUNE TREE ......................................................................................................... 75
BÀI 23. CLEAN TREE ......................................................................................................... 76
BÀI 24. UNFLATTEN TREE .............................................................................................. 77
BÀI 25. SHIFT PATHS ......................................................................................................... 78
BÀI 26. CHUYỂN ĐỔI MẶT PHẲNG VUÔNG GÓC VỚI TIM TUYẾN ..................... 79
BÀI 27. CULL PATTERN .................................................................................................... 80
BÀI 28. STREAM FILTER .................................................................................................. 80
BÀI 29. SPIRAL CURVE ..................................................................................................... 81
BÀI 30. SỐ VÀ TẬP DỮ LIỆU SỐ ...................................................................................... 82
30.1. Giá trị số đơn............................................................................................................ 82
30.2. Sê-ri số ..................................................................................................................... 82
30.3. Phạm vi hay khoảng giá trị ...................................................................................... 83
30.4. Miền số Domain ....................................................................................................... 83
BÀI 31. ĐIỂM VÀ LƯỚI ĐIỂM .......................................................................................... 85
BÀI 32. ĐIỂM THUỘC ĐƯỜNG TRÒN CHO TRƯỚC .................................................. 87
BÀI 33. CULL LIST .............................................................................................................. 88
BÀI 34. LẤY TIM ĐƯỜNG TRÒN ..................................................................................... 91
© by Cozybim.com
Edit by Duytrung

BÀI 35. SỬ DỤNG SPLIT LIST .......................................................................................... 92


BÀI 36. SẮP XẾP ĐIỂM THEO TỌA ĐỘ ......................................................................... 92
BÀI 37. SỬ DỤNG CLUSTER HIỆU QUẢ ........................................................................ 93
BÀI 38. TÌM MẶT TRONG NGOÀI CỦA PIPE ............................................................... 93
© by Cozybim.com
Edit by Duytrung

BÀI 1. GRASSHOPPER LÀ GÌ ?

Để nói về Grasshopper nên bắt đầu từ Rhino. Có thể bạn ít nghe đến phần mềm
Rhinoceros là tên đầy đủ của hãng McNeel, nhưng phần mềm này có năng lực dựng hình 3D
mà nhiều giải pháp khác khó sánh bằng. Bên cạnh đó Rhino còn hỗ trợ các công cụ Render, xử
lý hình ảnh giúp tạo ra các sản phẩm hoàn thiện và sống động. Phần mềm Rhino được khá nhiều
công ty lớn sử dụng trong thiết kế mẫu mã công nghiệp, thường thấy nhất là thiết kế hoa văn,
phù điêu, thiết kế giày dép, các ngành nữ trang, và cũng có mảng cơ khí như tàu thuyền, ô tô…
Và McNeel đang tiếp tục phát triển bộ giải pháp RhinoBIM. Hy vọng chúng ta sẽ sớm được
tiếp xúc trong thời gian tới.

Rhino cũng như các giải pháp lớn khác, đi kèm hệ sinh thái các chức năng phát triển
thêm, được gọi là các Add-on và Grasshopper là một trong số các Add-on của Rhino. Với mục
tiêu là cung cấp một “lịch sử rõ ràng” của mô hình, thì bên cạnh đó lại giúp tăng hiệu quả trong
việc dựng hình. Các phần mềm thiết kế khác như 3DMax, Maya,… cũng cung cấp cho ta khái
niệm về lịch sử tạo dựng nên một mô hình. Tuy nhiên, nó thường chỉ cho phép người dùng quay
lại các bước trước đó của quá trình dựng hình, thay đổi chúng và chỉ cho ta kết quả cuối cùng
mà ta không biết chúng được tạo nên bằng cách nào. Để giải quyết vấn đề này, Rhino xây dựng
khái niệm “Lịch sử rõ ràng” và Grasshopper được ra đời để làm rõ khái niệm này. Một đối
tượng được tạo ra thay vì là kết quả của một tập hợp các câu lệnh, thì với Grasshopper đó là mô
hình đã được tạo dựng từ những thành phần gì và chúng tương tác với nhau như thế nào để đạt
kết quả cuối cùng.

6
© by Cozybim.com
Edit by Duytrung

Có thể hiện tại Rhino chưa là một giải pháp BIM hoàn chỉnh. Nhưng Rhino và
Grasshopper lại giúp ích rất lớn trong công tác dựng hình với các giải pháp BIM, mà cụ thể là
kết nối được với Revit hoặc Tekla để tạo dựng trực tiếp thực thể của các phần mềm này.
Grasshopper là một thành phần Add-on của Rhino, nhưng bản thân Grasshopper lại cho phép
tiếp tục phát triển như xây dựng thêm các plugin cho Grasshopper. Và một vài trong số các
plugin này cho phép kết nối với Tekla và Revit. Phương thức làm việc này như thể dự án
Dynamo với Revit. Để có kết quả cuối cùng trên Revit hoặc Tekla, ta chỉ cần nghiên cứu cách
sử dụng Grasshopper mà không đặt trọng tâm tìm hiểu cách sử dụng Rhino. Rhino chỉ thực hiện
chức năng như là cầu nối.
Grasshopper sử dụng phương thức Visual Programming Language là một hình thái lập
trình trực quan để người dùng xây dựng các tài của mình. Đặc điểm quan trọng là VPL không
dùng mã mà dùng các đối tượng đồ họa và mối liên kết giữa các đối tượng đồ họa. Mô hình
"boxes and arrows" (hình hộp và mũi tên) thường được ưa thích sử dụng.
Các thuật ngữ sử dụng :
− Component: là một khối cấu trúc nhằm thực hiện các thao tác mà người dùng định
nghĩa.
− Parameter: là một dạng thành phần đặc biệt chứa dữ liệu (các giá trị).
− Slider: là một tiện ích cho phép người dùng sử dụng và thay đổi các giá trị thông qua
thanh trượt.
− Panel: một tiện ích cho phép người dùng xác định và hiển thị các giá trị số, văn bản
hoặc xem trước kết quả của mô hình.
− Definitions: là mạng lưới bao hàm các thành phần của Grasshopper liên kết với nhau
và nó được gọi là một mô hình hay tài liệu Grasshopper.

7
© by Cozybim.com
Edit by Duytrung

8
© by Cozybim.com
Edit by Duytrung

BÀI 2. THÀNH PHẦN GIAO DIỆN CHÍNH CỦA GRASSHOPER. ĐIỀU


HƯỚNG, SỬ DỤNG CHUỘT TRONG GRASSHOPER VÀ RHINO

2.1. Thành phần giao diện chính của Grasshopper


Để bắt đầu làm việc với Grasshopper, ban đầu cần khởi động Rhino và tại dòng nhắc
lệnh nhập “grasshopper” để gọi thực thi Grasshopper. Giao diện Grasshopper bao gồm các
thành phần chính sau:

− Hàng các menu


− Các Tab chứa các thành phần Component
− Thanh công cụ
− Không gian làm việc hay còn gọi là nền Canvas. Nền Canvas được sử dụng để xây
dựng các định nghĩa, từ đó tạo lập mô hình cho người dùng. Có một điều rằng đối
tượng được tạo ra bằng Grasshopper không thể được chọn và thay đổi trên Rhino mà
chúng sẽ được tùy chỉnh trên nền làm việc Canvas của Grasshopper.

Dưới đây là giao diện nền làm việc Canvas của Grasshopper:

9
© by Cozybim.com
Edit by Duytrung

2.2. Điều hướng, sử dụng chuột trong Grasshopper


− Pan (di chuyển sang trái, phải, lên hoặc xuống): nhấn giữ chuột phải đồng thời kéo về
hướng mong muốn.
− Zoom (phóng to nhỏ): nhấn giữ Ctrl đồng thời kích chuột phải và kéo lên nếu phóng
to, và kéo xuống nếu thu nhỏ. Hoặc cách đơn giản quen thuộc, zoom chuột giữa như
AutoCAD.

2.3. Điều hướng, sử dụng chuột trong Rhino


− Pan và Zoom : tượng tự như trong Grasshopper
− Xoay trong khung nhìn 3D (Perspective): nhấn giữ chuột phải và xoay theo hướng
mong muốn.

10
© by Cozybim.com
Edit by Duytrung

BÀI 3. SƠ LƯỢC VỀ CÁC TRÌNH ĐƠN MENU TRONG


GRASSHOPPER

Cũng như các phần mềm khác, Grasshopper thiết lập bố cục thanh trình đơn menu rất
quen thuộc bằng cách đặt chúng ở phía trên cùng của giao diện làm việc. Bạn sẽ nhìn thấy một
cấu trúc menu phổ biến có ở hầu hết các phần mềm, như File, Edit, View, Window. Các menu
này cung cấp cho người dùng các chức năng để mở, lưu files, đồng thời kiểm soát việc hiển thị
các định nghĩa và nhiều chức năng khác. Chúng ta sẽ tiếp cận các chức năng đó sau. Bây giờ,
điều đầu tiên ta cần quan tâm đó là trình đơn File.

3.1. File
Trình đơn File bao gồm các tùy chọn quen thuộc như mở và lưu các tập tin. Có một
điều lưu ý rằng, các tập tin Rhino và Grasshopper luôn độc lập với nhau. Do vậy, ngoài việc
cần lưu các định nghĩa trong cửa sổ làm việc Grasshopper, đồng thời trong Rhino còn phải lưu
file chứa các đối tượng hình học mà bạn dùng để làm cơ sở tham chiếu cho các định nghĩa trong
Grasshopper.

3.2. Edit
Ở thanh Edit, ta có thể copy, paste các đối tượng riêng lẻ hoặc chọn các đối tượng chỉ
định cũng như các tùy chọn cho một nhóm đối tượng, gọi là Group. Group rất cần thiết khi mà
mạng định nghĩa trở nên phức tạp.

11
© by Cozybim.com
Edit by Duytrung

Group chứa các parameters, components,… và nó được thiết lập để định nghĩa một
chức năng cụ thể. Tạo Group bằng cách nhấn tổ hợp Ctrl + G. Khi các đối tượng được gọp lại
thành một nhóm thì bên dưới chúng sẽ xuất hiện màu nền (như hình trên). Ta chuột phải vào
Group để tùy chỉnh các hiển thị mong muốn.

3.3. View

12
© by Cozybim.com
Edit by Duytrung

View cho phép thiết lập hiển thị cho giao diện. Hơn nữa nó còn cho ta tùy chỉnh giao
diện. Ngoài ra, phóng to thu nhỏ Zoom cũng nằm trong View.

3.4. Display
Display chứa cài đặt hiển thị cho không gian làm việc. Bên cạnh đó, nó còn cho phép
người dùng tùy biến việc thể hiện các đối tượng hình học bên Rhino.

13
© by Cozybim.com
Edit by Duytrung

3.5. Solution
Trình đơn Solution chứa các thiết lập cho việc tính toán các đối tượng hình học đã
được tạo ra bới Grasshopper và hiển thị chúng trong Rhino.
Có một liên kết trực tiếp giữa Grasshopper và Rhino mà các kết quả sẽ được cập nhật
ngay trong Rhino, cho phép người dùng có thể xem trước kết quả của các định nghĩa trong
Grasshopper. Tuy nhiên, khi thực hiện các phép tính với khối lượng lớn, các đối tượng hình
học trở nên phức tạp thì không nên lạm dụng chế độ này.

14
© by Cozybim.com
Edit by Duytrung

3.6. Thẻ Tabs


Các components được sắp xếp trong các thẻ Tabs như :

− Params
− Math
− Sets
− Vector, Curve, Surface và Mesh
− Intersect
− Transform

15
© by Cozybim.com
Edit by Duytrung

Ở mỗi thẻ Tab được chia thành nhiều cụm section để nhóm các component có chức
năng tương đồng lại với nhau. Mỗi cụm section thể hiện các component hay dùng. Để thấy toàn
bộ các component, ta click vào mũi tên ngay góc dưới bên phải thuộc thanh tiêu đề của Tab.
Chúng ta sẽ tìm hiểu chi tiết hơn nội dung bên trong các Tabs này về sau.
Grasshopper đang được đẩy mạnh phát triển, tên gọi cũng như cấu trúc có thể sẽ được
thay đổi qua các phiên bản sắp tới cho ngày một tiện dụng hơn với người dùng.

BÀI 4. CÁC LOẠI MODULE TRONG GRASSHOPPER

Grasshopper sử dựng một hệ thống các mô-đun vô cùng đa dạng mà có thể kết nối với
nhau để tạo ra một “Lịch sử rõ ràng” cho mô hình. Có 3 loại mô-đun chính :
− Các Parameter chứa dữ liệu (giá trị).
− Các khối cấu trúc Component.
− Các tiện ích utility và công cụ đặc biệt khác, gọi là special.
Khi bạn thiết kế với Grasshopper, bạn sẽ dùng đến các mô-đun này để tạo ra các đối
tượng hình học. Các mô-đun có phạm vị tương tác rất rộng, chúng có thể liên kết với nhau theo
nhiều cách. Trong thư viện các mô-đun, người dùng có thể lựa chọn và sử dụng mô-đun mà cho
phép họ định nghĩa được các dữ liệu đầu vào mà mình cần. Điều này cho phép bạn có thể điều
khiển được kết quả cuối cùng cho định nghĩa của mình để tạo ra các đối tượng hình học như
mong muốn.

Để xây dựng một hệ thống các đối tượng hình học phức tạp, bạn cần thực hiện từng
bước một. Nghĩa là, khi bạn bắt đầu một dự án với Grasshopper, điều đầu tiên là cần phải phân
tích làm cách nào để tạo dựng nên các đối tượng hình học đó. Cần thực hiện những bước gì.
Trong Rhino, để vẽ một đường cong, bạn dùng chuột. Hoặc các thiết lập cho đường cong đó có
thể được thay đổi ở dòng command line. Trong Grasshopper, bạn không làm vậy. Bạn sẽ định

16
© by Cozybim.com
Edit by Duytrung

nghĩa từng bước cho quá trình tạo dựng đường cong đó với sự trợ giúp của chuột. Nhưng, đường
cong này thay vì bạn phải click công cụ vẽ đường cong và thực hiện vẽ bằng cách truyền thống,
thì với Grasshopper, bạn sẽ định nghĩa các điểm point và đường cong sẽ được tạo ra thông qua
các điểm point này. Từ đó về sau, bạn sẽ dễ dàng thay đổi hình dạng đường cong theo mong
muốn bằng cách thay đổi các điểm point này. Ở ví dụ dưới, việc này được hỗ trợ bởi các thanh
trượt slider.

4.1. Parameter
Các tab của Parameter được bố trí theo từng nhóm với chức năng tương đồng. Đứng
đầu là thẻ Params. Ở đây, bạn có thể định nghĩa các thuộc tính hình học và thông số đầu vào
cơ bản như kiểu dữ liệu cho các trị số, các text cho tên đối tượng,...Đặc biệt, nó chứa slider và
panel. Đây là 2 công cụ vô cùng hữu dụng để hỗ trợ cho mọi tiến trình của dự án.
Định nghĩa một Parameter
Khi một parameter được đặt vào nền canvas thì lúc này chỉ là một parameter trống,
hiện màu cam. Bây giờ, ta có thể định nghĩa một hoặc nhiều thuộc tính hình học cũng như các
thông số cơ bản cho nó. Để hiểu rõ hơn về cách định nghĩa một hoặc nhiều đối tượng hình học,
ta chuột phải vào parameter và sử dụng các tùy chọn mong muốn.

17
© by Cozybim.com
Edit by Duytrung

Để định nghĩa cho parameter, ta chọn Select one hoặc Multiple phụ thuộc vào số lượng
đối tượng mà bạn muốn định nghĩa. Sau đó, qua Rhino để chọn vào đối tượng. Như ví dụ trên
là “ Set one Circle” hoặc ”Set Mutiple Circle”.

18
© by Cozybim.com
Edit by Duytrung

Parameter được định nghĩa trong Rhino hay Grasshopper


Các thuộc tính hình học có thể được định nghĩa cả trong Grasshopper lẫn Rhino. Một
đường tròn đôi lúc cần được định nghĩa trong Grasshopper vì khi định nghĩa nó ở Rhino và
Grasshopper có sự khác biệt. Sự sai khác này phụ thuộc vào tham số Parameter nào cần định
nghĩa. Ví dụ, một điểm point có thể được định nghĩa cả trong Rhino và Grasshopper. Sự khác
biệt này sẽ chỉ ra khả năng thay đổi hình học trong Rhino và Grasshopper sau này. Mặc dù điều
này có vẻ tầm thường, nhưng nó có ảnh hưởng rất lớn đến quá trình thiết kế và khả năng thay
đổi hình dạng thiết kế của bạn một cách hiệu quả. Nếu nội dung của tham số Parameter được
định nghĩa trong Grasshopper, các tùy chỉnh hình học trong Rhino sẽ không còn. Ngược lại,
nếu nội dung của tham số Parameter dựa trên thuộc tính hình học trong Rhino, thì mọi thay đổi
trong Rhino sẽ dẫn đến việc thay đổi toàn bộ thuộc tính hình học trong Grasshopper.
Ví dụ, một đường cong được tạo ra trong Rhino, thuộc tính vuốt cầu được định nghĩa
trong Grasshopper (ở đây, đường cong và thuộc tính vuốt cầu đều là 2 tham số), thì khi thay
đổi đường cong trong Rhino thì hình dạng vuốt cầu mà đã được định nghĩa trong Grasshopper
cũng thay đổi theo.

19
© by Cozybim.com
Edit by Duytrung

4.2. Component
Mỗi component thực hiện một chức năng nhất định. Hầu hết các component đều bao
gồm dữ liệu đầu vào và đầu ra.
Ví dụ : component Loft có chức năng tạo ra bề mặt giữa hai hoặc nhiều đường cong.
Do vậy nó gồm dữ liệu đầu vào là các đường cong được chỉ định. Dữ liệu đầu ra là một bề mặt
(hoặc nhiều bề mặt) mà được tạo bởi tính năng của component.
Dữ liệu đầu ra của component có thể được kết nối với các component khác, khi đó nó
có nhiệm vụ là cung cấp dữ liệu đầu vào. Trong ví dụ component Loft, dữ liệu đầu ra (bề mặt)
có thể được cung cấp cho component Divide Surface. Lúc này bề mặt sẽ được chia nhỏ ra.

Đó thực chất chính là cách thiết kế các định nghĩa Grasshopper của bạn. Bạn sử dụng
các component (đóng vai trò là dữ liệu đầu vào và thực thi các hành động), đồng thời kết nối
chúng với các component khác để tạo mới hoặc tiếp tục taọ ra các dữ liệu đầu vào cho các hành
động khác. Bạn thấy đó, một định nghĩa trong Grasshopper như một cuốn sách nấu ăn tượng
trưng cho các ý tưởng thiết kế của bạn.
Để hiển thị thuộc tính của các dữ liệu đầu vào (input) và đầu ra (output), ta đặt con trỏ
chuột vào chúng. Click chuột phải vào input và output để thay đổi thuộc tính của chúng. Ngoài

20
© by Cozybim.com
Edit by Duytrung

ra, ta còn có thể tùy chỉnh các thuộc tính của nó như tên, bật, tắt,… bằng cách chuột phải vào
component.

Để kết nối component (1) với component (2), ta click chuột trái vào output của (1)
đồng thời kéo thả vào input của (2). Để ngắt kết nối, dùng Ctrl + chuột trái đồng thời kéo thả
về hướng ngược lại. Hoặc, chuột phải vào output (1) và chọn Disconnect.

21
© by Cozybim.com
Edit by Duytrung

Kết quả là một mạng thiết kế với các liên kết và các tham số phục vụ cho việc định
nghĩa các thuộc tính hình học. Mạng lưới này có thể hiệu chỉnh hoặc mở rộng trong suốt quá
trình thiết kế. Khi đó, các thuộc tính hình học cũng sẽ được thay đổi theo.

4.3. Specials
Các tiện ích đặc biệt gồm nhiều chức năng hỗ trợ cho việc truy cập và thực thi mạng
thiết kế một cách dễ dàng. Thông dụng nhất là : Number Slider và Panel.

− Thanh trượt Number Slider cho phép người dùng thiết lập các trị số với kiểu và phạm
vi nhất định. Giả dụ, nếu bạn muốn di chuyển một đường cong, bạn có thể thêm một
component dịch chuyển, và khoảng cách dịch chuyển sẽ được hỗ trở bởi thanh trượt
Number Slider.

22
© by Cozybim.com
Edit by Duytrung

− Panel sẽ cho người dùng xem trước kết quả đầu ra của component. Nếu có gì đó
đang hoạt động ngoài mong muốn, người dùng có thể dùng nó để kết nối với dữ liệu
output của các component ở nhiều vị trí khác nhau và kiểm tra xem điều gì đang xảy
ra. Tiện ích này rất hữu ích để tìm và giải quyết các lỗi trọng mạng định nghĩa của
người dùng.

BÀI 5. TẠO KẾT NỐI GIỮA CÁC ĐỐI TƯỢNG

Dữ liệu được chứa trong các parameter và được sử dụng trong các component. Các
parameter nếu không được lưu trữ dữ liệu trong nó thì phải kế thừa từ các đối tượng khác. Dữ
liệu trong các parameter cũng không mang tính đặc thù, ví dụ ta có thể trả giá trị kiểu số thực
cho đầu vào là kiểu số nguyên của một đối khác. Việc chuyển đổi kiểu dữ liệu sẽ tự động được
thực hiện. Nếu việc chuyển đổi không thành công sẽ có thông báo lỗi.
Kết nối các đối tượng. Một input có thể kết nối được với một hoặc nhiều output khác.
Thao tác để kết nối giữa các đối tượng được thực hiện thông qua việc kéo thả từ output của đối
tượng này sang input của đối tượng khác, hoặc ngược lại. Để hiểu rõ các phương thức kết nối
khác nhau, ta thực hiện một ví dụ đơn giản như sau.
Tạo mới một file Grasshopper và kéo thả vào dự án 2 parameter là Point và 3
component bao gồm:
− Line segment (Line từ 2 điểm)
− Construct Point
− Range

− Vào lúc này các đối tượng chưa có bất kỳ kết nối nào. Ta thử tạo kết nối đầu tiên theo
thứ tự từ trái qua phải. Tạo liên kết mới từ Range vào Construct Point. Kích và chuột

23
© by Cozybim.com
Edit by Duytrung

kéo thả từ các nửa đường tròn tại các đối tượng (được gọi là grip). Một đường cong
thể hiện kết nối sẽ xuất hiện và đi theo tọa độ chuột.

− Khi grip tiếp theo ở vị trí gần tọa độ chuột nhất sẽ được chọn, đường kết nối chuyển
sang dạng liên tục, cho đến khi thả chuột sẽ tạo ra một liên kết mới.

− Thực hiện tiếp tục tương tự cho tọa độ Y của Construct Point và Range.
− Chuột phải trên 2 Point và chọn cho các parameter này một vài điểm bằng cách chọn
Set Multiple Points.
− Tạo kết nối của Point out put từ Constrcut Point với End Point của Line component.

− Thực hiện tiếp tục tương tự cho tọa độ Y của Construct Point và Range. Chuột phải
trên 2 Point và chọn cho các parameter này mộThực hiện kết nối 1 Point với Start Point
của Line Component và sau đó với giữa Point còn lại với StartPoint của Line. Ta thấy

24
© by Cozybim.com
Edit by Duytrung

rằng việc thực hiện tạo kết nối mới như trên chi cho phép Start Point input của Line
chỉ kết nối với 1 output duy nhất. Nếu muốn kết nối thêm 1 output nữa ta phải sử dụng
giữ phím Shift khi tạo kết nối. Lưu ý khi giữ Shift, tại con trỏ chuột sẽ xuất hiện icon
màu xanh lá nhỏ, lúc này ta có được.t vài điểm bằng cách chọn Set Multiple Points.

− Trường hợp muốn bỏ kết nối, có 2 cách để thực hiện.


Cách 1: Giữ phím Ctrl và thực hiện chỉ 2 grip đầu cuối như tạo kết nối mới để bo đi
liên kết đó.
Cách 2: Để chuột tại vị trí của input hoặc output cần bỏ liên kết, chuột phải và chọn
Disconnect, sau đó chọn đối tượng cần bỏ kết nối.

BÀI 6. DỮ LIỆU TRONG PARAMETER

Như đã biết các parameter chỉ được sử dụng để chứa dữ liệu, hầu hết các parameter có
thể chứa 2 loại dữ liệu khác nhau: tạm gọi là “Tạm thời” và “Liên tục”. Dữ liệu tạm thời được

25
© by Cozybim.com
Edit by Duytrung

nhận từ nguồn trả ra là một hoặc nhiều các parameter hoặc component khác và sẽ bị mất đi khi
khởi động lại một tập tin grasshopper.
Dữ liệu liên tục là dữ liệu đã được người dùng chỉ định cụ thể. Dữ liệu này được lưu
trữ ngay trên đối tượng parameter. Bất cứ lúc nào parameter được nối với một đối tượng nguồn
thì dữ liệu liên tục bị bỏ qua, nhưng không mất đi.
Dữ liệu liên tục của các parameter được khai báo thông qua gọi trình đơn đổ xuống
(chuột phải), và các parameter chứa dữ liệu khác nhau có cách quản lý dữ liệu khác nhau. Lấy
ví dụ parameter là Point, parameter này cho phép khai báo 1 hoặc nhiều điểm thông qua menu
đổ xuống khi kích chuột phải trên parameter. Xem qua trình tự các bước sử dụng 1 parameter:
Bước 1: Thực hiện kéo thả Point từ mục Params vào môi trường soạn thảo của
grasshopper (được gọi là canvas). Ta sẽ có được như hình sau:

Parameter lúc này có màu cam, màu này tương đương với thông báo là parameter đang
rỗng chưa có bất kỳ dữ liệu nào. Lúc này đầu ra cũng không có giá trị nào. Có thể sử dụng 1
Panel để kiểm tra kết quả đầu ra.
Khi kích chuột phải trên parameter, menu ngữ cảnh xuất hiện và cho phép có 2 tùy
chọn để khai báo dữ liệu liên tục cho parameter: one Points hoặc Multiple Points.

26
© by Cozybim.com
Edit by Duytrung

Ta có thể chọn 1 trong 2 để khai báo dữ liệu. Khi chọn 1 trong 2 chức năng, cửa sổ
Grasshopper tạm thời biến mất (nếu cửa sổ Grasshopper có 1 phần che lên cửa sổ Rhino đang
mở) và sẽ nhận được yêu cầu chọn điểm trong môi trường của Rhino.

Khi hoàn thành chọn các điểm, nhấn Enter để trả các điểm chọn cho dữ liệu liên tục
của parameter. Điều này có nghĩa parameter không còn rỗng và sẽ chuyển về máu xám.

27
© by Cozybim.com
Edit by Duytrung

Lúc này chúng ta có thể sử dụng parameter để truyền đầu ra cho các đối tượng khác.
Tiếp tục kéo thả vào canvas một component là Construct Point từ thẻ Vector và tại mục Point.

Kết nối đầu ra của component này cho đầu vào của Point. Lúc này parameter Point sẽ
chứa dữ liệu là 1 điểm có tọa độ 0.0, 0.0, 0.0 được trả ra từ component Construct Point. Dữ liệu
lúc này là dữ liệu tạm thời. Nếu ta thực hiện xóa component Construct Point đi thì dữ liệu liên
tục đã khai báo trước đó vẫn còn.
Video thao tác: https://youtu.be/rHFFcP5pFDI

28
© by Cozybim.com
Edit by Duytrung

BÀI 7. TƯƠNG XỨNG DỮ LIỆU

Tương xứng dữ liệu là vấn đề xảy ra khi một component có các input với kích thước
dữ liệu khác nhau. Thay đổi thuật toán tương xứng dữ liệu có thể dẫn đến kết quả khác nhau.
Để hiểu rõ về vấn đề này. Ta thử với một ví dụ cụ thể như sau. Sử dụng 2 đối tượng
Point Avà Point B. Khai báo Point A với 5 điểm và Point B với 7 điểm (List A và List B như
hình dưới). Khi kết nối 2 Point này cho 2 điểm của một Line thì việc gì sẽ xảy ra.

Như bạn thấy, có nhiều cách khác nhau để vẽ ra các đường thẳng giữa hai tập điểm
này. Ba component để xác định thuật toán tương xứng dữ liệu giữa 2 List này sẽ tìm thấy tại
Sets/List panel gồm có: Longest List, Shorten List, Cross References. Các component này cung
cấp thêm các option để cho ra các phép tương xứng linh hoạt hơn. Nhấp chuột phải vào mỗi
component cho phép bạn chọn một trong các tùy chọn tương xứng dữ liệu khác nhau từ trình
đơn.
Cách đơn giản nhất là kết nối lần lượt các phần tử đầu cho đến khi một trong những
danh sách hết phần tử thì dừng. Thuật toán này được gọi là "Shortest List":

29
© by Cozybim.com
Edit by Duytrung

Chọn một thuật toán phù hợp từ trình đơn bằng cách kích chuột phải vào component.
Thuật toán "Longest List" kết nối các input cho đến khi tất cả các tập kết thúc.

Cuối cùng, là thuật toán "Cross References" sẽ tạo ra các kết nối bất kỳ có thể giữa 2
tập hợp. Thuật toán này rất nguy hiểm vì lượng đầu ra có thể rất lớn.

Chúng ta hãy xem xét qua các trường hợp tùy chọn của thuật toán Shortest List
component:

30
© by Cozybim.com
Edit by Duytrung

Ở đây ta có 2 tập hợp input {A,B,C,D,E} và {X,Y,Z}. Khi sử dụng Trim End các phần
tử của tập dài hơn sẽ được loại bỏ ở phần cuối của tập hợp để tạo ra tập mới có số lượng bằng
tập ngắn.

Với trường hợp sử dụng Trim Start thì tập dài hơn sẽ loại bỏ các phần tử phía đầu cho
đến khi có tập bằng số lượng với tập ngắn.

Tùy chọn Interpolate sẽ lấy các phần tử của tập dài hơn ở các vị trí chia đều theo số
lượng từ tập ngắn hơn.

Ở đây chúng ta có hai danh sách đầu vào {A, B, C} và {X, Y, Z}. Với trường hợp
thông thường Grasshopper chỉ xem xét các kết hợp {A, X}, {B, Y} và {C, Z}. Với component
Cross Reference và tùy chọn Holistic (toàn bộ) còn có thêm sáu sự kết hợp khác: {A, Y}, {A,
Z}, {B, X}, {B, Z}, {C, X} và {C, Y}. Đầu ra của component Cross Reference có tất cả là chín
hoán vị.
Chúng ta có thể biểu thị hành vi của dữ liệu tham khảo chéo bằng cách sử dụng một
bảng. Các hàng đại diện cho danh sách đầu tiên của mặt hàng, các cột thứ hai. Nếu chúng ta tạo

31
© by Cozybim.com
Edit by Duytrung

ra tất cả các hoán vị, bảng sẽ có một dấu chấm trong mỗi ô đơn, vì mỗi ô đại diện cho một sự
kết hợp duy nhất của hai chỉ mục nguồn liệt kê.

Đôi khi chúng ta không muốn sử dụng mọi hoán vị. Bạn muốn loại trừ một số vị trí
nhất định bởi nếu không sẽ dẫn đến những tính toán không có ý nghĩa hoặc không hợp lệ. Một
nguyên tắc loại trừ phổ biến là bỏ qua tất cả các ô nằm trên đường chéo của bảng. Tùy chọn
Diagonal sẽ bỏ qua các vị trí của đường chéo tại các hoán vị theo chỉ số {0,0}, {1,1}, {2,2} và
{3,3 } Nếu chúng ta áp dụng tùy chọn này cho ví dụ {A, B, C}, {X, Y, Z}, chúng ta sẽ không
nhận được các kết hợp {A, X}, {B, Y} và {C, Z }:

Và một vài hình ảnh cho các tùy chọn khác:

Video thao tác: https://youtu.be/CUKxKi4QrwQ

32
© by Cozybim.com
Edit by Duytrung

BÀI 8. TƯƠNG TÁC GIỮA GRASSHOPPER – RHINO

Không giống như một tài liệu Rhino, một file Grasshopper là một định nghĩa không
chứa bất kỳ đối tượng hay thực thể hình học nào. Thay vào đó, một định nghĩa Grasshopper đại
diện cho một tập hợp các quy tắc và hướng dẫn cho Rhino có thể tự động hóa các tác vụ.

33
© by Cozybim.com
Edit by Duytrung

1. Các yếu tố hình học do Grasshopper tạo ra chỉ mang tính tạm thời.

2. Viewport của Rhino.

3. Cửa sổ của Grasshopper.

8.1. Các phản hồi từ rhino viewport


Tất cả các yếu tố hình học được tạo ra bằng cách sử dụng các component của
Grasshopper sẽ hiển thị trong viewport của Rhino. Đây chỉ là các thực thể xem trước do đó bạn
sẽ không thể chọn các yếu tố hình học này trong viewport của Rhino. Ta có thể bật / tắt xem
trước yếu tố hình học bằng cách nhấp chuột phải vào một component và chọn nút Preview. Các
yếu tố hình học do Grasshopper tạo ra trong viewportcuar Rhino được thể hiện bằng màu sắc
đặc trưng để cung cấp phản hồi trực quan. Hình dưới đây phác thảo sơ đồ màu mặc định.

34
© by Cozybim.com
Edit by Duytrung

1. Thực thể hình học màu lục trong viewport do component đang được chọn ở
Grasshopper tạo ra.

2. Các thực thể màu đỏ đậm trong viewport do các component từ Grasshopper tạo ra.
Các component này không được chọn.

3. Các điểm hình học do Grasshopper tạo ra được đánh dấu bằng 2 gạch chéo cắt
nhau để khác với thể hiện điểm của Rhino.

4. Màu xanh dương là thể hiện cho sự chọn đối tượng cho Grasshopper trên Rhino.

8.2. Liên kết sống


Grasshopper là một môi trường động. Các thay đổi được thực hiện ngay tức thời và
màn hình xem trước của các đối tượng do Grasshopper tạo ra được cập nhật trong các viewport
của Rhino.

35
© by Cozybim.com
Edit by Duytrung

8.3. Bake
Các yếu tố hình học được Grasshopper tạo ra trong môi trường Rhino, bạn chỉ có thẻ
chọn được chúng bằng cách chọn các component của Grasshopper đã tạo ra chúng. Không thể
chọn nó trong môi trường của Rhino. Và khi tắt Grasshopper thì các yếu tố hình học liên quan
nó cũng sẽ mất trong các viewport của Rhino. Muốn cụ thể hóa các đối tượng và có thể tương
tác được trong Rhino, ta cần thực hiện Bake trên các component liên quan. Baking khởi tạo mô
hình mới vào tài liệu Rhino dựa trên trạng thái hiện tại của biểu đồ Grasshopper. Các mô hình
trong Rhino này sẽ không còn đáp ứng được những thay đổi trong định nghĩa của Grasshopper
nữa.

36
© by Cozybim.com
Edit by Duytrung

1. Bake bằng cách nhấp chuột phải trên component và chọn Bake.

2. Hộp thoại sẽ xuất hiện cho phép bạn chọn layer tương ứng trong Rhino sử dụng cho đối
tượng hình học do Bake tạo ra.

3. Nhóm các đối tượng do việc thực hiện Bake từ component tạo ra.

8.4. Đơn vị và dung sai


Grasshopper kế thừa đơn vị và dung sai từ Rhino. Để thay đổi đơn vị, nhập Document
Properties trong dòng lệnh Rhino để truy cập vào Document Properties. Chọn Units để thay đổi
đơn vị sử dụng và dung sai.

37
© by Cozybim.com
Edit by Duytrung

8.5. Quản lý tập tin


Nếu trong tập tin Grasshopper có sử dụng đến các đối tượng hình học của Rhino, ta
cần mở tập tin Rhino có liên quan thì các định nghĩa trong Grasshopper mới có thể làm việc
được. Cách tốt nhất nên đặt 2 tập tin Rhino và Grasshopper trong cùng một thư mục và sử dụng
tên giống nhau.

38
© by Cozybim.com
Edit by Duytrung

1. Thư mục của dự án.

2. Tập tin Rhin.

3. Tập tin Grasshopper.

BÀI 9. ĐIỂM – CHIỀU DÀI THEO ĐƯỜNG CONG

Trong Grasshopper có một vài bài toán thường gặp với các đường cong và điểm như,
tìm điểm thuộc đường cong xác định bằng một giá trị chiều dài theo đường cong cho trước hoặc
ngược lại, tìm chiều dài theo đường cong tại 1 điểm cho trước, hay tìm phương vuông góc với
đường cong qua một điểm cho trước.

9.1. Tìm phương vuông góc với đường cong qua một điểm cho trước
Trường hợp này dùng component Curve Closest Point, tìm tại thẻ Curve – Analysis.

39
© by Cozybim.com
Edit by Duytrung

Xét với ví dụ vẽ đường thẳng vuông góc với đường cong qua 1 điểm cho trước.

40
© by Cozybim.com
Edit by Duytrung

− Dùng Curve và chọn 1 đường cong từ Rhino


− Dùng Point và chọn 1 điểm bất kỳ bên ngoài và trong phạm vi đường cong
− Dùng Curve Closest Point.
− Và dùng 1 Line qua 2 điểm để thấy kết quả.
− Phương án xử lý như hình sau

9.2. Tìm điểm theo chiều dài cho trước


Trong Grasshopper không có component cụ thẻ kiểu như Get Point From Length hay
Get Length From Point. Thực hiện việc này phải qua thêm vài bước phụ bằng cách sử dụng
component Evaluate Length. Tìm thấy tại thẻ Curve – Analysis. Component này có chức năng
trả ra điểm tại vị trí thuộc đường cong theo 1 tỷ lệ dài (0 đến 1) của đường cong. Như vậy ta
cần thực hiện thêm phép chia để xác định tỷ lệ. Kết quả trả ra còn có thêm output Tangent là
vector tiếp tuyến với đường cong tại điểm tìm được. Và một output khác là Curve Parameter
mô tả yếu tố cong tại điểm. Giải quyết bài toán như sau:

− Dùng 1 Curve để nhặt 1 đường cong


− Dùng 1 Slide để xác định chiều dài mong muốn
− Dùng 1 Length để lấy chiều dài của đường cong
− Thực hiện phép chia chiều dài xác định cho tổng dài để xác định tỷ lệ
− Dùng Evaluate Length. Chuyển các input cần thiết để có kết quả điểm cần tìm.

41
© by Cozybim.com
Edit by Duytrung

9.3. Tìm chiều dài tại điểm cho trước


Bài toán này có thể giải bằng 3 component khác nhau. Về nguyên tắc bất kỳ điểm nằm
trên đường cong hay không, trước hết phải tìm điểm Closest Point. Nếu điểm nằm trên đường
cong thì 2 điểm trùng nhau. Từ điểm Closest tìm được ta sẽ tìm ra chiều dài của đường cong
đến điểm này.
3 component bao gồm:
− Sub Curve (Thẻ Curve – Spline) sau đó tìm Length của đường cong tìm được.
− Length Domain (Thẻ Curve – Analysis).
− Length Parameter (Thẻ Curve – Analysis). Với Component này ta có được cả 2 giá trị
chiều dài tính đến đầu và cuối đường cong.
Sử dụng như sau:

Video thao tác: https://youtu.be/ChxtleseOIM

42
© by Cozybim.com
Edit by Duytrung

BÀI 10. CÁC MODULE THƯỜNG DÙNG

Tất cả các module có thể được gọi ra canvas bằng 2 cách:

− Kéo thả hoặc kích chọn từ toolbar trong các thẻ tab và chọn vị trí vào canvas.
− Đúp chuột trái trên giao diện trống của canvas và nhập từ khóa để tìm nhanh các
module. Sau khi tìm thấy chọn vào module cần sử dụng.

Các module thể hiện trong canvas có thể có nhiều cách khác nhau. Thông thường, tất
cả module được thể hiện bằng các text là nick name của các thành phần trên module. Tùy thuộc
vào sở thích của bạn ta có thể thay đổi cách quan sát phù hợp. Tại menu File, chọn Display. Tại
đây, 3 mục đầu tiên cho phép thay đổi thể hiện của các module trong canvas.

− Draw Icons: tên của module được thay thế bằng icon.
− Draw Full Names: thể hiện tên đầy đủ của các thành phần trên module.

43
© by Cozybim.com
Edit by Duytrung

Thông thường, tắt 2 chế độ này để các thành phần ngắn gọn và thể hiện rõ ràng mối
quan hệ giữa các thành phần khác nhau.

10.1. Các parameter cho các loại dữ liệu cơ bản thường dùng

10.2. Các module đặc biệt để lấy dữ liệu input


− Boolean Toggle: không nhận giá trị vào. Đúp chuột trái sẽ thay đổi kết quả trả ra một
giá trị boolean là True hay False.

− Slide: Là đối tượng thường hay sử dụng khi cần một giá trị số trả ra và có khả năng
thay đổi khi người dùng kéo vị trí trên thanh trượt.

44
© by Cozybim.com
Edit by Duytrung

Đúp chuột trái trên thanh trượt để nhập vào giá trị mong muốn. Đúp chuột trên tên để
mở thiết lập cho thanh trượt (Có thể thực hiện chuột phải, và chọn Edit).

Name: là tên của thanh trượt. Expression: là biểu thức tính toán dựa trên giá trị gốc từ
thanh trượt, giá trị của biểu thức tính được trả ra output. Tại đây, giá trị gốc của thanh trượt
được đại diện bằng biến "x". Ví dụ tôi muốn xuất ra output giá trị gấp 2 lần giá trị từ thanh
trượt, nhập tại ô expression: x*x. Phần Slide Accuracy quy định phần thập phân của giá trị.
Numeric domain quy định giá trị nhỏ nhất và lớn nhất của thanh trượt. Value là giá trị chọn và
được trả cho outphut.
Việc thiết lập cho slide khá mất thời gian. Tuy nhiên có một cách nhanh chóng thực
hiện các thiệt lập hợp lý cho số đầu ra. Ví dụ, thực hiện như sau. Đúp chuột trên canvas và nhập
số 50 sau đó enter. Tức thì sẽ có 1 slide với thiết lập là số nguyên và một khoảng range tương
đối hợp lý. Nếu muốn là số thực, có thể nhập 50.00.
− Panel: được sử dụng với khá nhiều mục đích khác nhau. Panel có cả input, do đó để
xem trước kết quả của các outout khác ta có thể trả cho Panel để thấy được kết quả đó.
Một số giá trị không đổi trong tính toán, thay bằng nhập giá trị theo phương thức dữ

45
© by Cozybim.com
Edit by Duytrung

liệu liên tục, có thể sử dụng 1 panel để nhập giá trị và trả ra input cần thiết. Hoặc có
thể dùng đẻ viết các chú thích trong giải thuật...

− Control Knob: là một dạng như slide nhưng ở dạng núm tròn. Thường được sử dụng
khi cần xác định tỷ lệ từ 0-1. Mặc định dãi giá trị của knob từ 0-10. Ta có thể thay đổi
số chữ số thập phân, cũng như thay lại phạm vi. 1 giá trị tương đương với 1 vòng quay
của knob.

− Value List: cho phép chọn 1 giá trị từ 1 danh sách đổ xuống. Để thiết lập thành phần
của danh sách, đúp chuột vào đối tượng hoặc chuột phải và chọn Edit. Mỗi phần tử
trong danh sách được khai báo bởi 1 dòng bao gồm 2 thành phần phân cách bằng dấu
bằng =. Phần bên trái là text sẽ xuất hiện khi chọn mũi tên đổ xuống cho người dùng
chọn. Phần bên phải là giá trị được trả ra tương ứng.

− MD Slide: ouput là 1 cặp giá trị 3 thành phần x,y và z luôn bằng 0. Giá trị trả ra do
người dùng chọn vị trí tương ứng trên đối tượng.

46
© by Cozybim.com
Edit by Duytrung

− Graph Mapper: cung cấp các dạng đồ thi toán học cơ bản. Căn cứ vào dữ liệu input,
out được trả ra là kết quả tính của hàm số tương đương với đồ thị. Chuột phải trên đối
tượng để chọn các dạng đồ thị toán học khác nhau.

BÀI 11. ĐỊNH NGHĨA GRASSHOPPER

Grasshopper cho phép tạo ra các phép lập trình trực quan bằng biểu đồ được gọi là các
định nghĩa. Các định nghĩa này được tạo thành bởi các nút kết nối giữa các module khác nhau
thông qua các dây nối. Một định nghĩa với Grasshopper trông giống như sau:

47
© by Cozybim.com
Edit by Duytrung

Mỗi định nghĩa Grasshopper có một Program Flow thể hiện việc xử lý bắt đầu từ đâu.
Các xử lý diễn ra trong thân của định nghĩa và điểm kết thúc của các xử lý.

48
© by Cozybim.com
Edit by Duytrung

Một định nghĩa Grasshopper được thực thi từ trái sang phải. Biểu đồ liên kết giữa các
đối tượng được đọc và thực hiện các xử lý tương ứng từ “thượng nguồn” đến “hạ nguồn”.

Tất cả các đối tượng và các kết nối biểu diễn đồ thị logic của chương trình. Biểu đồ
này cho thấy luồng dữ liệu, sự phụ thuộc của các input vào output của đối tượng kết nối với nó
trước đó. Bất cứ lúc nào biểu đồ của chúng ta thay đổi, mọi kết nối hạ lưu và đối tượng sẽ được
cập nhật.

BÀI 12. LIST TRONG GRASSHOPPER

List trong Grasshopper là một mảng dữ liệu. Dữ liệu trong List được truy cập hoặc
thao tác thông qua chỉ số vị trí của mỗi phần tử. Chỉ số vị trí trong List được bắt đầu từ 0.

1. Các phần tử

2. Chỉ số vị trí

Cách đơn giản nhất để xem dữ liệu được lưu trữ trong List là kết nối một Panel (Params
/ Input / Panel) với output của một component cụ thể. Theo mặc định, Panel sẽ tự động hiển thị
tất cả các số vịt rí ở bên trái của Panel và hiển thị các phần tử dữ liệu ở phía bên phải của Panel.
Chỉ số vị trí là một yếu tố quan trọng khi chúng ta làm việc với List. Bạn có thể bật và tắt hiển

49
© by Cozybim.com
Edit by Duytrung

thị chỉ số vị trí bằng cách nhấp chuột phải vào Panel và chọn mục " Draw Indices" trong trình
đơn phụ.

Thông thường có 5 cách để tạo ra 1 List.

− Tạo List bằng cách thủ công nhập tay từng phần tử trong khai báo giá trị của các
parameter
− Dùng component: Range
− Dùng component Series
− Dùng component Random
− Kết quả trả ra tính toán của các component khác nhau.

BÀI 13. TẠO MẢNG – LIST

13.1. Nhập dữ liệu dạng mảng thủ công


Cách dễ nhất để tạo ra một List là tự nhập một danh sách các giá trị vào một parameter.
Để thay đổi giá trị trong List, không có cách nào khác người dùng phải tự nhập lại giá trị của
từng phần tử cần sửa. Ví dụ sử dụng paramter Number. Nhấp chuột phải vào parameter và chọn
"Manage Number Collection" để nhập các giá trị cho phần tử trong List.

50
© by Cozybim.com
Edit by Duytrung

1. Chuột phải trên Number component và chọn Number collection Manager.

2. Chọn icon Add Item để thêm các phần tử vào List.

3. Đúp chuột vào các phần tử đã thêm để sửa giá trị.

Một cách khác cũng thường được sử dụng là dùng Panel và nhập nhiều giá trị trên các
dòng. Đồng thời, chuột phải trên Panel và bỏ dấu chọn tại mục “Multiline Data”.

13.2. Range
Component Range có thể tìm thấy tại Sets/Sequence/Range, component này có chức
năng tạo ra một tạo ra một list các giá trị có khoảng cách đều nhau từ giá trị thấp nhất đến giá
trị cao nhất quy định trước. Dãi quy định trong phạm vi giới hạn giữa 2 giá trị thấp nhất và cao
nhất này được gọi là miền Domain.

51
© by Cozybim.com
Edit by Duytrung

Range component sẽ chia miền số Domain thành các phân đoạn và trả về một list các
giá trị các đầu của các phân đoạn đó.

Component này yêu cầu 2 input. Domain là miền xác định. N là số phân đoạn chia
đều.
Một miền Domain có thể có 3 cách để khai báo. Dùng dấu “:” hoặc từ khóa “to”. Ví
dụ cần khai báo miền số từ 1 đến 10, ta có thể viết “0:10” hoặc “0 to 10”. Một cách khác ngắn
gọn hơn trong trường hợp 1 giới hạn là 0. Ví dụ domain từ 0 đến 10 ta có thể chỉ dùng khai báo
đơn giản “10”. Một cách khác để định nghĩa một domain là sử dụng Construction Domain
component. Bạn có thể tìm thấy component này tại Maths/Domain.

Trong ví dụ bên dưới, miền số được định nghĩa là mọi số có thể giữa 0 và 20. Thành
phần Range chiếm miền đó và chia nó theo số bước N (trong trường hợp này là 10). Vì vậy,
chúng ta có 10 phân đoạn. Output của Range luôn luôn là nhiều hơn số bước 1 lần. Trong ví dụ
trên, chúng ta đã tạo ra 10 bước, do đó thành phần Range trả về 11 giá trị.

52
© by Cozybim.com
Edit by Duytrung

Với trường hợp sử dụng Construction Domain ta có thể có khai báo tham khảo như
sau:

13.3. Series
Series component cũng tương tự như Range component, trong đó, nó cũng tạo ra một
danh sách các số. Tuy nhiên, Series tạo ra một tập các số kín trên cơ sở giá trị bắt đầu, bước
nhay và số lượng các giá trị trong List. Tìm component tại Sets/Sequence.

Series có 3 input bao gồm Start là giá trị bắt đầu, Step là bước nhảy và Count là số
lượng phần tử tạo ra.

13.4. Random
Ta có thể tìm thấy component tại Sets/Sequence. Component được sử dụng dể tạo một
List với các giá trị bất kỳ và ngẫu nhiên thuộc một miền giá trị xác định. Component này cũng

53
© by Cozybim.com
Edit by Duytrung

yêu càu 3 tham số đầu vào, R là một miền giá trị, N là số lượng phần tử và khi thay đổi Seed
thì cho ra các list có giá trị ngẫu nhiên khác nhau.

BÀI 14. THAO TÁC VỚI LIST

Một trong những tính năng mạnh mẽ của Grasshopper là khả năng nhanh chóng xây
dựng và thao tác các List chứa đựng dữ liệu khác nhau. Chúng ta có thể lưu trữ nhiều loại dữ
liệu khác nhau trong một List (numbers, points, vectors, curves, surfaces, breps...) và có khá
nhiều công cụ hữu ích được tìm thấy tại mục Sets / List.

14.1. List length


Component List Length (tìm tại Sets/List/List Length) trả ra số lượng phần tử của một
list. Chỉ số trong list luôn bắt đầu từ 0, do đó, chỉ số lớn nhất trong 1 list sẽ bằng số lượng phần
tử trừ đi 1. Trong ví dụ sau chúng ta kết nối 1 list với input của một component List Length và
kết quả nhận được là list có 6 giá trị.

14.2. List item


List Item component (tìm tại Sets/List/List Item) trả ra một phần tử trong danh sách
của list tại vị trí xác định. i-input là chỉ số của phần tử mà chúng ta muốn lấy ra. Ta có thể sử
dụng một số integer hoặc một list số nguyên integers cho i-input phụ thuộc vào việc chúng ta
cần lấy ra bao nhiêu phần tử từ list. L-input là List gốc, giá trị các phần tử được trả ra từ list
này.

54
© by Cozybim.com
Edit by Duytrung

14.3. Reverse list


Chúng ta có thể thực hiện đảo ngược thứ tự của danh sách bằng cách sử dụng một
Reverse List component (tìm tại Sets / List / Reverse). Nếu chúng ta nhập một danh sách tăng
dần các số từ 0,0 đến 50,0 vào component Reverse List; kết quả trả về một danh sách giảm dần
từ 50,0 đến 0,0.

14.4. Shift list


Shift List component (tìm tại Sets/Sequence/Shift List) sẽ di chuyển danh sách lên
hoặc xuống một số gia tùy thuộc vào giá trị của Shift Offset. Số gia mang dấu âm “-“ sẽ di
chuyển xuống hoặc lùi, số gia mang dấu dương sexdi chuyển lêm hoặc tới.

14.5. Insert items


Component Insert Items component (tìm thấy tại Sets/Lists/Insert Items) cho phép
chúng ta chèn thêm 1 phần tử vào mảng list tại một ví trí nhất định.

Nếu chỉ số vị trí cung cấp lớn hơn số phần tử hiện tại của list, thì phần tử được chèn
vào vị trí tương ứng khi thực hiện trừ lấy phép dư liên tục của chỉ số cung cấp cho tổng số phần

55
© by Cozybim.com
Edit by Duytrung

tử của list. Như trong ví dụ ở hình trên, nếu vị trí chèn là 6, phần tử được thêm vào cuối của
list. Nếu vị trí chèn được cung cấp là 7 thì phần tử được thêm tại ví trí 0, tương tự nếu chỉ số là
8 thì thêm tại vị trí 1.

14.6. Weave
Component Weave (tìm tại Sets/Lists/Weave) trộn 2 hoặc nhiều hơn các list lại cùng
nhau dựa trên quy cách được quy định tại tham số pattern (P input). Khi pattern và lượng dữ
liệu của các list đầu vào không có sự trùng khớp, component này có thể chèn thêm các đối
tượng rỗng Null hoặc bỏ qua khi list có số lượng ít hơn kết thúc. Xem kết quả khác nhau qua
ví dụ sau đây.

14.7. Cull pattern


Cull component (tìm thấy tại Sets/Sequence/Cull Pattern) bỏ đi các phần tử trong list
lặp lại theo mẫu gọi là bit mask. Bit masklaf một list kiểu boolean, ứng với true thì component
này sẽ dữ lại phẩn tử và ứng với false phần tử sẽ bị loại bỏ. Bit mask được lặp đi lặp lại cho đến
phần tử cuối cùng của list đàu vào.

56
© by Cozybim.com
Edit by Duytrung

BÀI 15. DATA TREE TRONG GRASSHOPPER

Data Tree, tạm dịch cây dữ liệu, là cấu trúc có thứ bậc để lưu trữ dữ liệu trong các
danh sách lồng nhau. Dữ liệu dạng Tree được tạo ra khi một component của grasshopper có
chức năng tạo ra nhiều tập dữ liệu List. Grasshopper xử lý dữ liệu này bằng cách tổ chức dưới
dạng List phụ. Các List con lồng nhau này hoạt động giống như các cấu trúc thư mục trên máy
tính của bạn. DataTree về bản chất là một List các List, hoặc có thể là một List chứa các List
chứa các Listvà cứ tiếp tục lồng nhau không giới hạn mức độ.

Trong hình trên, có một nhánh chính (có thể gọi nó là một thân cây, nhưng vì có thể
có nhiều nhánh chính nên dễ nảy sinh nhầm lẫn) tại đường dẫn {0}. Đường dẫn này không chứa
dữ liệu, nhưng có 6 nhánh phụ. Các nhánh phụ kế thừa chỉ mục vị trí của nhánh gốc {0} và
thêm chỉ mục con của riêng mình (0, 1, 2, 3, 4, và 5 tương ứng). Ở mỗi phân nhánh này, chúng
ta có một số dữ liệu. Mỗi mục dữ liệu là một phần của một nhánh trong cây, và mỗi mục có một
chỉ mục xác định vị trí của nó bên trong nhánh. Như vậy, mỗi nhánh có một đường dẫn xác
định vị trí của nó bên trong cây.
Hình ảnh dưới đây minh hoạ sự khác nhau giữa List và một DataTree. Ở bên trái, một
mảng dữ liệu gồm 4 cột với 6 điểm được chứa trong một List. Cột đầu tiên được đánh số từ 0
đến 5, cột thứ hai từ 6 đến 11 và vân vân. Bên phải là cùng một mảng dữ liệu các điểm như trên

57
© by Cozybim.com
Edit by Duytrung

chứa trong một Data Tree. Data Tree là một danh sách của bốn cột, và mỗi cột là một danh sách
sáu điểm. Chỉ số của mỗi điểm là (số cột, số hàng). Đây là một cách hữu ích hơn để tổ chức dữ
liệu bởi vì bạn có thể dễ dàng truy cập và sử dụng tất cả các điểm.

Do tính chất phức tạp của Data Tree nên có thể rất khó hiểu. Tuy nhiên, Grasshopper
cung cấp một vài công cụ để trợ giúp thể hiện trực quan và dễ hiểu luồng dữ liệu được chứa
trong Data Trees. Các công cụ thường dùng như sau:

15.1. The param viewer


Tìm tại Params/Util/Param Viewer. Parameter này cho phép thể hiện trực quan dữ liệu
của một Data Tree ở dạng text hoặc dạng hình vẽ của một cây. Để thể hiện 1 cây, Chuột phải
trên Param Viewer và chọn “draw tree.” Ở ví dụ như hình, Param Viewer được kết nối với
output Points (P) của một component chia đường cong thành các phần nhỏ Divide Curve
component. Ở đây có 10 đường cong và mỗi đường cong được chia thành 10 phần. 10 nhánh
chỉ ra cho 10 đường cong, mỗi nhánh là một List chưa 11 điểm chia.

− Param Viewer ở dạn text thể hiện đường dẫn vị trí cho các nhánh trong cây.

58
© by Cozybim.com
Edit by Duytrung

− Số lượng phần tử có trong nhánh


− Chọn "Draw Tree" để thể hiện cây
Nếu chúng ta kết nối dữ liệu trên cho một Panel. Nó sẽ hiển thị 10 List gồm 11 mục.
Ta có thể thấy rằng mỗi mục là một điểm được xác định bởi ba tọa độ. Đường dẫn được hiển
thị ở đầu mỗi.

− Đường dẫn
− List bao gồm 11 phần tử

15.2. Tree statistics


Component Tree Statistics có thể tìm thấy tại Sets/Tree/Tree Statistics. Component
này trả ra các yếu tố thống kê của một Data Tree bao gồm:
− P – Tất cả các đường dẫn có trong Data Tree
− L – Độ dài của từng nhánh trong Tree
− C – Số lượng đường dẫn và nhánh cây trong
Nếu chúng ta kết nối ouput Points của cùng component Divide Curve như tren, chúng
ta có thể xem và lấy ra được các thông tin về đường dẫn, độ dài từng nhánh và số lượng đường
dẫn như trên… Component này rất hữu dụng vì chia dữ liệu thống kê ra thành 3 putput cho
phép chúng ta dễ dàng đọc được các giá trị này.

59
© by Cozybim.com
Edit by Duytrung

BÀI 16. CÁC XỬ LÝ TOÁN HỌC CƠ BẢN

Biết cách làm việc với các dữ liệu số là một kỹ năng rất cần thiết khi tiếp cận với
Grasshopper (sau đây gọi tắt là GH). GH chứa nhiều component để thực hiện các phép tính toán
học, tìm điều kiện, và thao tác với các bộ số.
Trong toán học, các con số được tổ chức dưới dạng các bộ số và 2 kiểu quen thuộc
nhất là:
− Số nguyên: […, -5, -4, -3, -2, 0, 1, 2, 3, 4, 5,…]

− Số thực: [-6, …, -4.8, -3.6, -2.4, -1.2, 0.0, 1.234, e, 3.0, 4.0, …,9]
Đây là 2 kiểu số mà người dùng cần quan tâm và chúng được dùng rộng rãi trong hầu
hết các định nghĩa GH.

16.1. Tổng quang về Tab toán học – Maths


Hầu hết các component xử lý các phép toán và các hàm toán học nằm ở các mục con
của tab Maths:

− 1. Domain (tức là miền): được sử dụng để thiết lập một phạm vi giá trị giữa 2 số (trước
đây gọi là khoảng). Các component trong tab Domain cho phép tạo hoặc phân rã
thành các dạng miền khác nhau.
− 2. Matrix (tức ma trận): Trong toán học, ma trận là một mảng các con số được sắp
xếp thành các hàng và cột. Tab này chứa một loạt các công cụ tiện tích để thiết lập
cũng như chỉnh sửa các ma trận.
− 3. Operators (các phép tính): được dùng để thực hiện các phép tính toán học như cộng,
trừ, nhân, chia,…Các biểu thức điều kiện cho phép bạn xác định một tập hợp các số
nhóm A lớn hơn, nhỏ hơn, hoặc bằng với tập các số nhóm B,…
− 4. Polynominals (các đa thức): là một trong những khái niệm quạn trọng trong đại số,
toán học cũng như khoa học. Bạn có thể dùng các component trong mục này để tính
các giai thừa, logarit, hoặc lũy thừa bậc n của một số,…

60
© by Cozybim.com
Edit by Duytrung

− 5. Script (bản thảo): chứa các biểu thức đơn, đa thức với nhiều biến cũng như các
trình soạn thảo dưới dạng VB.Net và C#.
− 6. Time (thời gian): là mục chứa các component hỗ trợ trong việc thiết lập nhanh
ngày, tháng, thời gian,…
− 7. Trig (viết tắt của Trionometry, tức phép tính lượng giác): cho phép người dùng giải
quyết các bải toán liên quan đến hàm lượng giác như Sin, Cos, Tan,…
− 8. Util (viết tắt của Utilities, tức các tiện ích): chứa các hằng số như Pi, logait tự nhiên
e, hoặc các component hỗ trợ tìm các các giá trị cực đại Min, Max, giá trị trung bình
hay nội suy,…

16.2. Các phép tính toán học


Như đã đề cập, mục Operators là tập hợp các component sử dụng các hàm đại số với
2 giá trị đầu vào dạng số và trả ra giá trị kết quả.
Đa phần, người dùng sẽ sử dụng các phép tính toán học để thực hiện các phép tính số
học từ tập hợp các bộ số. Tuy nhiên, các phép tính này còn được thực hiện trên các dạng dữ
liệu khác kể cả điểm và vector.

16.3. Các toán tử điều kiện

61
© by Cozybim.com
Edit by Duytrung

Hầu hết mọi ngôn ngữ lập trình đều có một phương pháp để tìm ra các hàm điều kiện.
Các chương trình này có khả năng phân tích câu hỏi điều kiện “if” và hành động sau đó sẽ phụ
thuộc vào kết quả của điều kiện “if” kia. Ví dụ, nếu một đối tượng là Polyline thì lấy ra các đỉnh
của Polyline đó, còn không thì xóa nó đi. Thì lúc đó, đoạn mã đầu tiên sẽ kiểm tra đối tượng
này và trả ra giá trị boolean là True nếu nó là Polyline và hành động kế sau là lấy ra các đỉnh.
Ngược lại, là False nếu không phải là Polyline và xóa đối tượng này đi. Điều này được dùng
trong việc phân tích kết quả để làm dữ liệu cho các công việc tiếp theo. Và GH cũng không
ngoại lệ. Có 4 toán tử điều kiện quen thuộc nằm ở mục Operators của tab Math mà có thể đưa
ra một điều kiện và trả ra một giá trị kiểu boolean.
− Larger than (so sánh lớn):

− Smaller than (so sánh bé):

− Equality (so sánh bằng):

− Similarity (so sánh tương đồng): Component Similarity đánh giá 2 list dữ liệu và kiểm
tra sự tương đồng giữa chúng. Nó gần như giống với component so sánh bằng nhưng
có thêm 1 đầu vào là % tối thiểu A và B được phép lệch nhau. Bên cạnh đó, nó còn trả
ra độ lệch giữa A và B.

62
© by Cozybim.com
Edit by Duytrung

16.4. Các hàm lượng giác


Hàm lượng giác là hàm toán học của góc và được dùng khi nghiên cứu về tam giác và
các công việc mang tính chất tuần hoàn như dạng sóng âm, sóng biển, sóng ánh sáng hay cho
các đường cong dạng xoắn trôn ốc,…

Hình trên thể hiện một số dạng hình học thông dụng của các hàm lượng giác

− 1. Đường thẳng : y(t) = 0


− 2. Đường cong hình Sin: y(t) = Sin(t)
− 3. Đường trôn ốc: x(t) = Sin(t); y(t) = Cos(t); z(t) = b(t)
− 4. Vòng xoắn: x(t) = t*Sin(t); y(t) = t*Cos(t)

16.5. Các biểu thức

63
© by Cozybim.com
Edit by Duytrung

Component Expression (biểu thức) là công cụ rất linh hoạt vì nó có thể được ứng dụng
cho nhiều công việc khác nhau. Chúng ta có thể sử dụng một component Expression (hoặc
component Evaluate, là dạng hàm chứa biểu thức Expression nên được xem như “anh trai của
Expression”) để giải quyết các thuật toán toán học và trả ra dữ liệu số. Dữ liệu này được dùng
làm đầu vào cho các component khác.

Video thực hiện: https://youtu.be/DMQ-ai8h1Bk

Chia curve theo list chiều dài: https://youtu.be/7I53jxAwfMQ

64
© by Cozybim.com
Edit by Duytrung

BÀI 17. LÀM VIỆC VỚI DATA TREE

Grasshopper (GH) chứa các công cụ để thay đổi cấu trúc của Data Tree (tạm gọi là cây
dữ liệu). Các công cụ này có thể giúp bạn truy cập tới bất kỳ một dữ liệu cụ thể nào trong cây
và thay đổi cách mà chúng được lưu trữ, sắp đặt cũng như để xác định vị trí của các thành phần
dữ liệu trong cây.
Giờ ta hãy tìm hiểu một số thao tác khi làm việc với Data Tree và hình dung chúng có
tác động đến cây dữ liệu của chúng ta như thế nào.

17.1. Flatten Tree


Công cụ này xóa bỏ tất các cấp bậc của cây dữ liệu (tức triệt tiêu tất các nhánh của
cây), đưa dữ liệu về một danh sách duy nhất. Component này được tìm ở Sets/Tree/Flatten Tree.
Chúng ta có thể dùng component “Param Viewer” để nhận dữ liệu, chuột phải rồi chọn “Draw
Tree” và xem cấu trúc của dữ liệu mới sau khi Flatten thay đổi ra sao.

65
© by Cozybim.com
Edit by Duytrung

Nhìn vào chỉ số dữ liệu và sơ đồ cây, ta nhận thấy dữ liệu input có 2 nhánh lớn với các
chỉ số {0;0}, {0;1}. Tương ứng với mỗi nhánh là tọa độ của 4 điểm. Như vậy tổng cộng ta có 8
điểm được phân tầng thành 2 nhánh lớn và mỗi nhánh này lại chứa 1 chi nhỏ, mỗi chi nhỏ chứa
4 điểm.
* Lưu ý: Sơ đồ cây chỉ thể hiện đến cấp độ nhánh, không thể hiện số lượng phần tử
thuộc một nhánh. Do vậy, ở đây ta sẽ không thấy nhánh ngoài cùng rẽ ra 4 chi nhỏ tương ứng
với 4 điểm mà chỉ thể hiện số lượng chi là 2.
Nhưng đối với dữ liệu output, sau khi Flatten chỉ gói gọn thành 1 nhánh với chỉ số {0}
chứa toàn bộ 8 điểm kia.

17.2. Graft Tree


Ngược với Flatten, Graft Tree lại tạo một nhánh mới cho từng mục dữ liệu trong cây.

Dữ liệu input từ 1 nhánh duy nhất chứa 8 điểm sau khi qua component “Graft Tree”
(Sets/Tree/Graft Tree), cây dữ liệu được phân cấp ra thành 8 nhánh riêng biệt với mỗi nhánh
lần lượt chứa 1 điểm của dữ liệu input.

17.3. Simplify Tree

66
© by Cozybim.com
Edit by Duytrung

Simplify Tree giúp loại bỏ các nhánh chồng chéo nhưng không chứa dữ liệu, tức làm
đơn giản hóa cấp độ nhánh của một cây dữ liệu.

Với ví dụ trên, ta có 8 điểm được phân chia thành 8 nhánh bậc 2 riêng biệt {0;i} (i=0
đến 7). Nhánh bậc 1 chỉ có duy nhất 1 nhánh với chỉ số là 0. Do vậy, ở đây chỉ số bậc 1 không
đóng vai trò phân biệt dữ liệu với các nhánh cùng bậc khác. Để giảm sự phức tạp, ta sử dụng
“Simplify Tree” để đưa dữ liệu về cấp bậc đơn giản nhất.
Ngoài ra, các công cụ Flatten, Graft và Simplify còn được áp dụng cho các thành phần
input và output của một component. Chỉ cần nhấp chuột phải tại vị trí input hoặc output mong
muốn thì các tùy chọn này sẽ hiện ra. Nếu bạn “Flatten” đầu vào input thì dữ liệu sẽ được triệt
tiêu cấp bậc trước khi component thực thi. Ngược lại, nếu bạn “Flatten” output thì sau khi
component thực thi xong thì lúc bấy giờ dữ liệu kết quả mới được triệt tiêu cấu trúc.

17.4. Trim Tree


Đơn giản hóa cấu trúc cây bằng cách hợp nhất các nhánh ngoài cùng thông qua việc
truyền chỉ số bậc muốn hợp nhất “Depth” (tính từ ngọn vào).

67
© by Cozybim.com
Edit by Duytrung

17.5. Explode Tree


Component này cho phép ta trích xuất ra toàn bộ các nhánh của cây và đồng thời giữ
nguyên cấp bậc và chỉ số của chúng.

Điều này sẽ rất hữu dụng khi chúng ta cần lấy ra một thành phần nào đó của cây A và
kết hợp với một hay nhiều nhánh khác của cây B để tạo nên một cây C với cấu trúc dữ liệu như
mong muốn.

17.6. Entwine
“Entwine” cho phép triệt tiêu cấp bậc của dữ liệu và đồng thời gộp các nguồn dữ liệu
lại với nhau để tạo thành một cây mới. Khác với “Explode Tree”, cây này mang cấp bậc tương
đồng với dữ liệu nguồn, nhưng chỉ số của các nhánh sẽ được tổ chức lại từ bậc {0;i}.

68
© by Cozybim.com
Edit by Duytrung

17.7. Flip Matrix


Cấu trúc dữ liệu được tổ chức như một ma trân với số lượng nhánh được xem như số
hàng và số phần tử trong nhánh là số cột. Do vậy, công cụ này có tác dụng lật ma trận cấu trúc
bằng cách hoán đổi hàng và cột với nhau.

17.8. Merge
Công cụ này cho phép hợp nhất nhiều nguồn dữ liệu input để tạo thành một cây mới
với cấu trúc bậc dữ liệu được giữ từ dữ liệu gốc.

69
© by Cozybim.com
Edit by Duytrung

17.9. Construct Pathh – Deconstruct Path


Construct Path có chức năng chính là tạo ra 1 đường dẫn Path của nhánh nào đó trong
cây bằng việc truyền vào một list các chỉ số. Kết quả của component này sẽ phục vụ cho việc
truy vấn vào đối tượng một nhánh bất kỳ trong cây.
Nếu Construct Path trả ra 1 đường dẫn thì Deconstruc Path sẽ cho ta điều ngược lại là
các chỉ số từ việc truyền vào một đường dẫn.

17.10. Tree Item


Đây là một công cụ cho phép can thiệp sâu đến từng phần từ của cây. Bằng việc chỉ ra
đường dẫn “Path” và chỉ số “Index” của phần tử thuộc đường dẫn đó thì “Tree Item” sẽ cho ta
lấy ra được bất cứ phần tử nào của cây dữ liệu.

70
© by Cozybim.com
Edit by Duytrung

Video thực hiện: https://youtu.be/dbewsR103jM

BÀI 18. TÌM MIN – MAX CỦA DÃY SỐ

71
© by Cozybim.com
Edit by Duytrung

BÀI 19. TREE BRANCH – LẤY RA DỮ LIỆU CỦA MỘT NHÁNH

Truyền vào một đường dẫn mong muốn tại “Path”, Tree Branch sẽ trả ra dữ liệu của
tất cả các phần tử thuộc nhánh đó.

BÀI 20. SPLIT TREE – CHIA CÂY DỮ LIỆU

Chia cây dữ liệu thành 2 phần bằng điều kiện “Mask”. “Mask” này là một dạng đường
dẫn Path. Nhưng bạn có thể thiết lập nó như một Path ẩn danh.

72
© by Cozybim.com
Edit by Duytrung

Ví dụ : “Mask” là {0;?} thì output “Positive” là toàn bộ các nhánh có dạng như {0;0},
{0;1},…và output “Negative” là các nhánh còn lại.

Video thực hiện: https://youtu.be/ycquuP7vZRU

73
© by Cozybim.com
Edit by Duytrung

BÀI 21. REPLACE PATHS – THAY ĐỔI ĐƯỜNG DẪN CÂY DỮ LIỆU

Nguyên lý làm việc:


Bằng việc cung cấp đường dẫn gốc tại “Search” và đường dẫn mới tại “Replace”,
component này sẽ trả ra cây dữ liệu với cấu trúc tương ứng với đường dẫn mới được truyền
vào.
Áp dụng trong các trường hợp:

− Thay đổi đường dẫn cây dữ liệu.


− Thay đổi cấu trúc cây dữ liệu.
− Gộp dữ liệu với một cây khác nhờ vào việc tạo ra cấu trúc tương ứng.

Video thực hiện: https://youtu.be/UkSBwkI0Q0g

74
© by Cozybim.com
Edit by Duytrung

Ví dụ sau đặt vấn đề cần truyền chiều cao cột tăng dần trừ trái sang phải. Nhưng dữ liệu hiện
đang không đúng thứ tự tương ứng. [Replace Path] sẽ giúp cấu trúc lại thứ tự dữ liệu đúng như
mong muốn. https://youtu.be/Gjx6mLZY5Sk

BÀI 22. PRUNE TREE

75
© by Cozybim.com
Edit by Duytrung

Nguyên lý
Bỏ đi nhánh có số phần tử nằm ngoài vùng điều kiện tối thiểu “Minimum” và tối đa
“Maximum”.

BÀI 23. CLEAN TREE

Nguyên lý

− “Remove Nulls” : loại bỏ các phần tử null trong cây dữ liệu.


− “Remove Invalid” : loại bỏ các phần tử không hợp lệ trong cây dữ liệu.
− “Remove Empty” : loại bỏ các nhánh rỗng (không có phần tử) trong cây dữ liệu.

Các input trên là điều kiện kiểu Boolean, input “Tree” là dữ liệu được truyền vào. Nếu
các input kiểu Boolean trên là True thì component trả ra cây dữ liệu mới, sẽ loại bỏ các phần tử
tương ứng với điều kiện được thiết lập True.

76
© by Cozybim.com
Edit by Duytrung

BÀI 24. UNFLATTEN TREE

Nguyên lý

Từ cây dữ liệu input “Tree” với một nhánh duy nhất, truyền vào input “Guide” một
cây dữ liệu mang cấu trúc nhánh bất kỳ. Số lượng phần tử của 2 cây này phải bằng nhau.
Component này sẽ cấu trúc lại các phần tử của cây “Tree” theo đúng như cấu trúc của cây
“Guide”, đồng thời mang chỉ số nhánh của cây “Guide”.
Video thực hiện: https://youtu.be/If5vpfK3PA0

77
© by Cozybim.com
Edit by Duytrung

BÀI 25. SHIFT PATHS

Nguyên lý

Chức năng tương tự như “Trim Tree” – đơn giản hóa cấu trúc cây, “Shift Paths” còn
cho phép truyền giá trị âm ở “Offset” – tham số thể hiện thứ bậc muốn làm gọn.
Khi “Offset” dương, bậc làm gọn được tính từ gốc. Ví dụ, “Offset” bằng 1,
{0;0;0};{0;0;1};{0;1;0};{0;1;1} sẽ thành {0;0};{0;1};{1;0};{1;1}. Ngược lại, “Offset” bằng -
1, bậc làm gọn được tính từ ngọn vào, bấy giờ sẽ thành {0;0};{0;0};{0;1}{0;1}, khi đó các
phần tử mang path giống nhau cũng hiển nhiên được gọp lại thành một nhánh là {0;0} và {0;1},
mỗi nhánh chứa 2 phần tử.

Điều kiện

Giá trị đại số của “Offset” phải nhỏ hơn số bậc của nhánh.
Video thực hiện: https://youtu.be/UannGTQ-kt4

78
© by Cozybim.com
Edit by Duytrung

BÀI 26. CHUYỂN ĐỔI MẶT PHẲNG VUÔNG GÓC VỚI TIM TUYẾN

Trong thiết kế, đôi lúc cần lên phối cảnh để có cái nhìn trực quan hơn về dự án. Với
mặt cắt ngang điển hình và tim tuyến, ví dụ dưới đây sẽ hỗ trợ việc lên phối cảnh cho phương
án một cách nhanh chóng.
Video thực hiện: https://youtu.be/qPIBicisev4

79
© by Cozybim.com
Edit by Duytrung

BÀI 27. CULL PATTERN

Lọc bỏ dữ liệu bằng điều kiện kiểu Boolean.


Video thực hiện: https://youtu.be/C0oJo4eQhU4

BÀI 28. STREAM FILTER

Lọc lấy dữ liệu của các nguồn input “stream 0”, “stream 1”,…bằng việc truyền vào
điều kiện “Gate”.
“Gate” có thể là kiểu Boolean hoặc số nguyên. Nếu là kiểu Boolean, khi Gate là true
thì output sẽ trả ra kết quả của “stream 1”. Ngược lại, false thì trả ra kết quả của “stream 0”.
Khi “Gate” là kiểu số nguyên thì output sẽ trả ra kết quả của Stream mang chỉ số được
truyền vào.
Video thực hiện: https://youtu.be/psCZ8WHrwHA

80
© by Cozybim.com
Edit by Duytrung

BÀI 29. SPIRAL CURVE

Spiral Curve - Ứng dụng trong các trường hợp mô hình hóa cấu kiện dạng xoắn ốc.
Video thực hiện: https://youtu.be/q-LB8g_oY74

81
© by Cozybim.com
Edit by Duytrung

BÀI 30. SỐ VÀ TẬP DỮ LIỆU SỐ

Trong toán học và các thuật toán thường bắt đầu với những con số, chúng ta có thể tạo
ra các bộ dữ liệu số khác nhau trong Grasshopper và sau đó chúng ta có thể sử dụng chúng để
làm công cụ thiết kế. Dữ liệu số có thể là một giá trị số hoặc một tập hợp dữ liệu số. Các
component để tạo ra các dữ liệu số bao gồm.

30.1. Giá trị số đơn


Commponent <Number slider> (Params > Input > Number Slider) có thể điều chỉnh
bằng tay. Nó có thể là số nguyên, số thực, ngay cả với các giá trị giới hạn trên và dưới.
Để thiết lập một giá trị số cố định là bạn có thể đi đến các Params> Primitive> Chọn
integer/numbertừ menu đổ xuống để xác định một số nguyên hay số thực.

Tập hợp số xem BÀI 13.

30.2. Sê-ri số
Component <Series> (Sets > Sequence > Series). Component này tạo ra một tập hợp
(list) các số mà chúng ta có thể điều chỉnh các số và số lượng các giá trị thông qua giá trị bắt
đầu, số lượng và bước nhảy. ví dụ như: [0, 1, 2, 3, … , 1000] [2, 4, 6, … , 100] [10, 20, 30, 40,
… , 1000000].

82
© by Cozybim.com
Edit by Duytrung

30.3. Phạm vi hay khoảng giá trị


Component <Range> (Sets > Sequence > Range) component này tạo ra bất kỳ một
khoảng số (ví dụ[1-10]) có thể được chia thành các phần vô hạn: [1, 2, 3, … , 10] [1, 2.5, 5, …
, 10].

30.4. Miền số Domain


Params > Primitive > Domain/Domain2 Nó cung cấp một loạt các tất cả các số thực
sự giữa một giới hạn trên và dưới, chúng ta có thể xác định một miền cố định bằng cách sử
dụng component này để làm việc một cách linh hoạt.
Domain là miền số 1 chiều, Domain2 là miền số 2 chiều. Tại Maths > Domain > chọn
Construct Domain hoặc Construct Domain2 để tạo ra các miền số thích hợp.

83
© by Cozybim.com
Edit by Duytrung

Video thực hiện: https://youtu.be/-UT8ik7rHGg

84
© by Cozybim.com
Edit by Duytrung

BÀI 31. ĐIỂM VÀ LƯỚI ĐIỂM

Điểm là một trong những yếu tố cơ bản cho hình học và giải thuật có thể sinh sản.
Điểm đánh dấu một vị trí cụ thể trong không gian, có thể bắt đầu từ điểm của đường cong,
trung tâm của vòng tròn và rất nhiều vai trò khác, chúng ta có thể tạo ra các điểm theo nhiều
cách.
− Component <Point> (Params > Geometry > Point): những điểm này có thể được điều
chỉnh và di chuyển bằng tay trong Rhino.

− Component <Construct Point> (Vector > Point > Construct Point): Điểm được xây
dựng bằng cách cung cấp các tọa độ của điểm.

− Các component lưới Vector > Grid > Hexagonal; Radial; Rectangular; Square;
Triangular: Tạo điểm theo các dạng lưới lục giác, lươi socng, lưới chữ nhật, lưới
vuông, lưới tam giác.

85
© by Cozybim.com
Edit by Duytrung

− Các component Populate để xác định các điểm trọng một miền phạm vi nhất định.
Vector > Grid > Populate…

− Chúng ta còn có thể trích xuất điểm từ các đối tượng hình học bằng nhiều cách khác
nhau khác như điểm đầu, cuối, trung điểm, các điểm điều khiển vv...
Trong Clip sau sẽ giới thiệu các cách thức:

1. Tạo điểm từ việc chọn tại Rhino


2. Tạo điểm từ các slide cung cấp các tọa độ điểm
3. Tạo bộ điểm bằng component <Series>

86
© by Cozybim.com
Edit by Duytrung

4. Tạo bộ điểm bằng component <Range>


5. Tạo bộ điểm ngẫu nhiên
6. Tạo điểm qua tập Fibonacci

Fibonacci là một dãy số với hai số đầu tiên được định nghĩa (0 và 1) và các số tiếp theo
là tổng của hai số trước đó.
N(0)=0, N(1)=1, N(2)=1, N(3)=2, N(4)=3, N(5)=5, … , N(i)=N(i-2)+N(i-1).
Dưới đây là một số các con số: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Component <Fibonacci> series (Sets > Sequence > Fibonacci)
Video thực hiện: https://youtu.be/NNMBSAhPgFw

File GH: ..\Dropbox\Study\Application\Study GH\Available\point_pointgrid.gh

BÀI 32. ĐIỂM THUỘC ĐƯỜNG TRÒN CHO TRƯỚC

Ví dụ trong clip dưới đây sẽ thực hiện tạo ra các điểm chia đều thuộc đường tròn có
tâm và bán kính xác định trước. Các xử lý toán học trong Grasshopper được tìm thấy tại thẻ
Maths. Thẻ này cung cấp đa phần các phép tính toán học thông thường và nâng cao.
Các biểu thức phức tạp được sử dụng với Evaluate và Expression component.
Video thực hiện: https://youtu.be/bhisHlXL3h4

87
© by Cozybim.com
Edit by Duytrung

BÀI 33. CULL LIST

Trong Grasshopper với kiểu dữ liệu tập hợp dạng list, ta cần các xử lý để lựa chọn các
phần tử cần thiết từ tập hợp. Một trong số các cách là sử dụng các component <cull>. Có 3
component dạng này tại thẻ Sets > Sequence là: Cull Index, Cull Nth và Cull Pattern.
Cull Index sẽ loại bỏ các phần tử trong list theo các chỉ số được chỉ định.
Cull Nth sẽ loại bỏ tất cả các phần tử tại các thứ tự N*x trong tập hợp.
Lưu ý một sự khác nhau trong 2 component trên là cull index thì sử dụng chỉ số vị trí
(chỉ số vị trí bắt đầu từ 0), còn với Cull Nth thì sử dụng thứ tự phần tử (thứ tự bắt đàu từ 1).

Xem 1 ví dụ như sau:

88
© by Cozybim.com
Edit by Duytrung

Trong ví dụ trên, chúng ta sử dụng 1 panel để tạo 1 tập hợp các số. Cull index với chỉ
số vị trí là 5 sẽ loại bỏ phần tử tại vị trí này là 50. Với Cull Nth thì phần tử với thứ tự từ 1 trong
list gốc, thì 40 (thứ tự 5) là giá trị bị loại bỏ.
Cùng ví dụ trên, Cull Nth không chỉ loại bỏ phần từ thứ tự thứ 5 mà còn sẽ loại bỏ các
phần từ bội số của 5 nếu list gốc có số lượng nhiều hơn.

Với tập hợp số này thì Cull Nth với frequency là 5 sẽ loại bỏ các phần tử theo thứ tự
tại 5 – 10 và 15 là 40 – 75 và 100.
Component <cull> cuối cùng là Cull Pattern. Component này sẽ chọn lọc trong list
theo 1 list các giá trị boolean. Các vị trí của Cull Pattern list mang giá trị false sẽ bị loại bỏ.

89
© by Cozybim.com
Edit by Duytrung

Chỉ tại các vị trí có chỉ số 0 và 5 của pattern list có giá trị true, nên list nhận được mang
2 giá trị 10 và 60 của list gốc.
Trong Grashopper không có khái niệm vòng lặp đê xử lý các tập hợp giá trị. Do đó,
Cull pattern được sử dụng để thay thế cho vòng lặp trong Grasshopper. Ví dụ sau sẽ chọn ra
các giá trị lớn hơn 50 từ list gốc.

Clip sau sẽ thực hiện lại các ví dụ trên và 1 ví dụ về tìm các điểm có khoảng cách đến
1 điểm cố định nhỏ hơn 1 giá trị xác định. https://youtu.be/hRy2n-qPvYc

90
© by Cozybim.com
Edit by Duytrung

BÀI 34. LẤY TIM ĐƯỜNG TRÒN

Cách đơn giản để lấy ra tim đường tròn với Grasshopper.


Video thực hiện: https://youtu.be/hxq7W17wMXE

91
© by Cozybim.com
Edit by Duytrung

BÀI 35. SỬ DỤNG SPLIT LIST

Video thực hiện: https://youtu.be/08n56ebL_Gg

BÀI 36. SẮP XẾP ĐIỂM THEO TỌA ĐỘ

Video thực hiện: https://youtu.be/PhLTIzZ8CI8

92
© by Cozybim.com
Edit by Duytrung

BÀI 37. SỬ DỤNG CLUSTER HIỆU QUẢ

Video thực hiện: https://youtu.be/V8g9KpFCI1o

BÀI 38. TÌM MẶT TRONG NGOÀI CỦA PIPE

93
© by Cozybim.com
Edit by Duytrung

Phương án tìm các mặt trong và mặt ngoài của các Pipe từ Tekla Structures. Ai có
phương án nào hay hơn. Vui lòng đề xuất thêm.
Video thực hiện: https://youtu.be/FXa_l_lyAUw

94

You might also like