− 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.
Đú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ữ
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.
− 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:
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ý.
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
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.
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.
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ị.
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
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.
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
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.
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
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.
− 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.
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.