• Trang Chủ
  • Kiến Trúc
  • Nội Thất
  • Đồ Họa
  • Phần Mềm
  • Tài Liệu
  • Giải Trí
  • Khác
No Result
View All Result
  • Trang Chủ
  • Kiến Trúc
  • Nội Thất
  • Đồ Họa
  • Phần Mềm
  • Tài Liệu
  • Giải Trí
  • Khác
No Result
View All Result
Đặng Tiến Dũng
No Result
View All Result

MAXScript cơ bản cho người mới – phần 8

08/05/2024
in Phần Mềm
Reading Time: 10 mins read

Trong phần này, chúng ta sẽ học về String. Đây là kiểu dữ liệu được sử dụng để lưu xâu ký tự trong MAXScript. Thực ra, ngay từ phần 1 trong chuỗi bài viết này, chúng ta đã làm quen với String. Bạn còn nhớ câu lệnh đầu tiên mà chúng ta đã viết trong Mini Listener chứ?

messageBox "Hello world!"

Ở câu lệnh trên, “Hello world” chính là một String. Không chỉ dùng cho các thành phần giao diện và thông báo, đôi lúc String cũng có thể được sử dụng cho các thuật toán chạy ngầm trong MAXScript. Dưới đây, tôi sẽ trình bày những thuộc tính cơ bản nhất của String. Trong bài sau, chúng ta sẽ ứng dụng nó để tạo ra một script chuyên dùng để đổi tên hàng loạt các vật thể đang được chọn hoặc trong cả scene 3ds Max hiện tại. Hãy cùng bắt đầu.

MỤC LỤC

  • Lý thuyết chung
    • Properties (thuộc tính)
    • Operators (xử lý dữ liệu)
    • Methods (phương pháp)
      • Execute
      • findString
      • filterString
      • substring
      • replace
      • toUpper và toLower
  • Bài tập thực hành
    • Bài tập số 1
    • Bài tập số 2

Lý thuyết chung

Có hai cách để khai báo một String. Cách đầu tiên, như ví dụ trên, là đặt trực tiếp một chuỗi ký tự vào trong hai dấu ngoặc kép. Lưu ý, chuỗi ký tự sẽ chuyển màu khi được đặt trong dấu ngoặc kép. Nếu bạn không thấy nó chuyển màu, có thể bạn đã viết thiếu dấu ngoặc kép, hoặc thừa ký tự bên ngoài dấu ngoặc kép. Ví dụ, lệnh messageBox sẽ chỉ nhận dữ liệu nhập vào là String, ta có thể thử như sau:

messageBox "Đây là một chuỗi ký tự" --> 3ds Max hiện thông báo "Đây là một chuỗi string".
messageBox "Đây là một chuỗi" ký tự --> 3ds Max báo lỗi ở chữ "ký tự".

Cách thứ hai là dùng cú pháp <giá trị> as string để chuyển một giá trị bất kỳ thành string. Khi được viết kết hợp cùng các lệnh khác, bạn phải để cú pháp này trong dấu ngoặc đơn, để tránh việc 3ds Max chỉ đọc <giá trị> và báo lỗi. Ví dụ như sau:

a = 5 as string
b = 5

messageBox a --> 3ds Max hiện thông báo "5".
messageBox b --> 3ds Max báo lỗi vì b là một số nguyên.
messageBox 5 as string --> 3ds Max báo lỗi vì nó chỉ đọc giá trị 5.
messageBox (5 as string) --> 3ds Max hiện thông báo "5".

Properties (thuộc tính)

String chỉ có một thuộc tính duy nhất, đó là count. Nó dùng để đếm số ký tự của String. Hãy nhập các lệnh sau vào MAXScript Listener:

"Hello world".count --> 3ds Max trả về kết quả "11".
s = "Day la mot string." --> Gán giá trị cho biến s.
s.count --> 3ds Max trả về kết quả "18".

Lưu ý rằng thuộc tính count là thứ chỉ đọc (read-only). Tức là bạn sẽ không thể thay đổi trực tiếp độ dài của string thông qua thuộc tính này.

Operators (xử lý dữ liệu)

Bạn có thể gộp 2 string bằng cách dùng dấu “+”. Ví dụ:

messageBox ("Day" + "la" + "mot" + "string") --> 3ds Max hiện thông báo "Daylamotstring".

Bạn cũng có thể so sánh 2 string bằng các dấu toán học == (bằng nhau), != (khác nhau), > (lớn hơn), < (nhỏ hơn), >= (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc bằng). Kết quả trả về sẽ là true (đúng) hoặc false (sai). Ví dụ:

"Tien" == "Tien" --> 3ds Max trả về kết quả true (đúng).
"Tien" <= "D" --> 3ds Max trả về kết quả false (sai).
"Tien" != "Dung" --> 3ds Max trả về kết quả true (đúng).

Để đọc hoặc ghi một ký tự thứ n trong string, chúng ta dùng cú pháp <string>[n]. Ví dụ:

s = "Dang Tien Dung" --> gán string cho biến s.
messageBox s[1] --> 3ds Max hiện thông báo "D", là ký tự thứ 1 trong s.
messageBox s[3] --> 3ds Max hiện thông báo "n", là ký tự thứ 3 trong s.
messageBox s[s.count] --> 3ds Max hiện thông báo "g", là ký tự cuối cùng trong s.

s[5] = "_" --> thay ký tự thứ 5 bằng dấu gạch dưới.
s[10] = "_" --> thay ký tự thứ 10 bằng dấu gạch dưới.

messageBox s --> 3ds Max hiện thông báo "Dang_Tien_Dung"

Ở trên, chúng ta có thể chuyển bất kỳ một giá trị gì thành string bằng lệnh as string, thì chiều ngược lại cũng khả thi. Ví dụ:

s = "123.45" --> gán string cho biến s.
n = s as float --> 3ds Max trả về giá trị số 123.45.
n = s as integer --> 3ds Max trả về giá trị số nguyên 123.
n = s as array --> 3ds Max báo lỗi, vì không thể chuyển "123.45" thành array.

Methods (phương pháp)

Ở đây, tôi sẽ liệt kê các method hay được sử dụng nhất của string. Các method nâng cao hơn, bạn có thể đọc trong tài liệu dành cho nhà phát triển của 3ds Max tại đây.

Execute

Excute dùng để thực thi những nội dung trong dấu ngoặc kép của string. Ví dụ, nếu viết execute “2+2”, nó sẽ tương ứng với viết trực tiếp 2+2 không có dấu ngoặc kép, và 3ds Max sẽ trả về kết quả là 4. Ví dụ khác:

-- công thức: execute s --> thực thi string trong s.

f = "Không có việc gì khó!"
s = "messageBox f"
messageBox s --> 3ds Max hiện thông báo "messageBox f".
execute s --> 3ds Max hiện thông báo "Không có việc gì khó!".

findString

Tìm kiếm vị trí bắt đầu của một chuỗi ký tự trong string.

 -- công thức: findString s <ký_tự_đầu_vào> --> tìm vị trí bắt đầu của <ký_tự_đầu_vào> trong s.

s = "Toi hoc 3ds Max!" 
findString s "3ds" --> tìm vị trí bắt đầu của "3ds" trong s, kết quả là 9.
findString s "khac" --> tìm vị trí bắt đầu của "khac" trong, kết quả là undefined (không xác dịnh).

filterString

Tách string đầu vào thành một array chứa các string con.

-- công thức: filterString s <token_string> --> tách s bằng các ký tự trong <token_string>.

s = "Toi hoc 3ds Max!" 
filterString s " " --> tách s bằng token dấu cách (" "), kết quả trả về là array #("Toi","hoc","3ds","Max").

Với array trả về, bạn có thể dùng các kiến thức trong bài 7 để xử lý nó.

substring

Trích một chuỗi ký tự trong string đầu vào.

-- công thức: subString s x y --> trích các ký tự trong s bắt đầu từ ký tự thứ x, kéo dài y ký tự.
-- nếu y > s.count hoặc y < 0 thì trích toàn bộ các ký tự còn lại bắt đầu từ ký tự thứ x.

s ="Toi hoc 3ds Max!"
ss = substring s 1 3 --> kết quả trả về "Toi"
ss = substring s 4 -1 --> kết quả trả về "hoc 3ds Max!"
ss = substring s 5 100 --> kết quả trả về "hoc 3ds Max!"

replace

Tương tự substring, nhưng là thay thế một chuỗi ký tự trong string đầu vào.

-- công thức: replace s x y ss --> thay thế các ký tự trong s bắt đầu từ ký tự thứ x, kéo dài y ký tự bằng ss.

s ="Toi hoc 3ds Max!"
ss = replace s 1 3 "Ban" --> kết quả trả về "Ban hoc 3ds Max!"

toUpper và toLower

In hoa hoặc in thước ký tự đầu vào.

-- công thức: toUpper s --> in hoa string s.
-- công thức: toLower s --> in thuong string s.

s = "Toi hoc 3ds Max!"
s1 = toUpper s --> kết quả trả về "TOI HOC 3DS MAX!"
s2 = toLower s --> kết quả trả về "toi hoc 3ds max!"

Bài tập thực hành

Kết thúc phần này, như thường lệ, chúng ta sẽ có một số bài tập nho nhỏ để thực hành ứng dụng. Lưu ý: hãy cố gắng giải bài tập trước khi xem lời giải. Dùng chuột bôi đen phần phía dưới mỗi đề bài để thấy đáp án. Nếu có thể, hãy thử nghĩ ra một cách giải khác.

Bài tập số 1

Cho array test = #(“Box001”, “Box002”, “TestBox”, “Boxxxx”, “TheBox”, “Bo_x_Box”). Mỗi phần tử trong Array đều chứa 1 chuỗi “Box”. Hãy viết một script để tự động thay thế “Box” thành “KhoiHop”, sau đó trả hiển thị thông báo trên màn hình 3ds Max. Gợi ý: sử dụng findString, replaceString và kiến thức đã học được về vòng lặp trong phần 6 và Array trong phần 7.

test = #("Box001", "Box002", "TestBox", "Box Box Box", "TheBox", "Bo_x_Box")

for i = 1 to test.count do
(
  k = findString test[i] "Box"
  test[i] = replace test[i] k 3 "KhoiHop"
)

messageBox (test as string) 

--> #("KhoiHop001", "KhoiHop002", "TestKhoiHop", "KhoiHop Box Box", "TheKhoiHop", "Bo_x_KhoiHop")

Bài tập số 2

Cho string s = “Hoc MAXScript that la thu vi!”. Hãy viết script để thay thế tất cả dấu cách trong string này thành dấu gạch dưới. Sau đó hiện thông báo trên màn hình. Gợi ý: sử dụng filterString và kiến thức đã học được về vòng lặp trong phần 6 và Array trong phần 7.

s = "Hoc MAXScript that la thu vi !"

arr = filterString s " " --> arr sẽ có giá trị là #("Hoc","MAXScript","that","la","thu","vi","!")
new_s = arr[1] --> tạo một string có giá trị là "Hoc".
for i = 2 to arr.count do new_s += ("_" + arr[i])
messageBox new_s

---> "Hoc_MAXScript_that_la_thu_vi_!"

Trong bài sau, bằng cách sử dụng String, chúng ta sẽ thực hành viết một macroScript dùng để đổi tên hàng loạt các vật thể đang được chọn. Hẹn gặp các bạn ở phần tiếp theo!

 

Bài Viết Liên Quan

Incremental Saves trong SketchUp
Phần Mềm

Incremental Saves trong SketchUp

28/04/2025
43
Cách để trích xuất map gốc từ ảnh texture seamless
Phần Mềm

Cách để trích xuất map gốc từ ảnh texture seamless

24/04/2025
418
Tổng hợp lisp nhỏ cho AutoCAD
Phần Mềm

Tổng hợp lisp nhỏ cho AutoCAD (phần 2)

22/02/2025
850

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Nhiều lượt xem

Tổng hợp lisp nhỏ cho AutoCAD

Tổng hợp lisp nhỏ cho AutoCAD

17/05/2024
10.7k
Tổng hợp script nhỏ cho 3ds Max

Tổng hợp script nhỏ cho 3ds Max

27/02/2024
5.2k
Hiệu ứng phác thảo cho bản vẽ AutoCAD

Hiệu ứng phác thảo cho bản vẽ AutoCAD

19/03/2024
3.7k
Kiếm tiền từ bán model trên 3dsky

Kiếm tiền từ bán model trên 3dsky

25/03/2024
2.6k
Khắc phục lỗi AutoCAD bị treo khi sửa chữ

Khắc phục lỗi AutoCAD bị treo khi sửa chữ

15/02/2024
2.3k

Mới chỉnh sửa

Kiến trúc tả thực

Kiến trúc tả thực

12/05/2025
14
Incremental Saves trong SketchUp

Incremental Saves trong SketchUp

28/04/2025
43
Thời đại của học giả bàn phím

Thời đại của học giả bàn phím

09/04/2025
26
Cách để trích xuất map gốc từ ảnh texture seamless

Cách để trích xuất map gốc từ ảnh texture seamless

24/04/2025
418
Phát triển công cụ mở rộng cho 3ds Max: bắt đầu từ đâu?

Tuyển dụng MAXScript Developer

30/03/2025
120

Bài ngẫu nhiên

Sửa lỗi 3ds Max không dùng hết hiệu năng chip Intel 12th trên Windows 11

Sửa lỗi 3ds Max không dùng hết hiệu năng chip Intel 12th trên Windows 11

22/01/2024
497
Ý nghĩa và tác dụng của cửa trập ngoại thất

Ý nghĩa và tác dụng của cửa trập ngoại thất

22/11/2023
140
Hướng dẫn sử dụng Smart Merge

Hướng dẫn sử dụng Smart Merge

25/11/2023
502
MAXScript cơ bản cho người mới – phần 1

MAXScript cơ bản cho người mới – phần 5

16/01/2024
203
Khắc phục lỗi AutoCAD bị treo khi sửa chữ

Khắc phục lỗi AutoCAD bị treo khi sửa chữ

15/02/2024
2.3k

Bài mới nhất

Kiến trúc tả thực

Kiến trúc tả thực

12/05/2025
14
Incremental Saves trong SketchUp

Incremental Saves trong SketchUp

28/04/2025
43
Cách để trích xuất map gốc từ ảnh texture seamless

Cách để trích xuất map gốc từ ảnh texture seamless

24/04/2025
418
Thời đại của học giả bàn phím

Thời đại của học giả bàn phím

09/04/2025
26
Phát triển công cụ mở rộng cho 3ds Max: bắt đầu từ đâu?

Tuyển dụng MAXScript Developer

30/03/2025
120
  • Giới thiệu
  • Cửa hàng
  • Facebook
  • Youtube
  • Liên hệ

Tổng số lượt truy cập: 72204  |  Hôm nay: 1  |  Hôm qua: 105

No Result
View All Result
  • Kiến Trúc
  • Nội Thất
  • Đồ Họa
  • Phần Mềm
  • Tài Liệu
  • Khác

Tổng số lượt truy cập: 72204  |  Hôm nay: 1  |  Hôm qua: 105