Autodesk Inventor: iLogic Tutorial

Ví dụ về iLogic

iLogic trong Inventor sử dụng ngôn ngữ lập trình Visual Basic để tạo các Rule chứa các Script tự động thực hiện các lệnh lập mỗi khi chạy một Rule. Dưới đây là một ví dụ đơn giản về iLogic.

Ví dụ: Tạo Script để đổi màu khối hình hộp chữ nhật, thay đổi chiều cao khối bằng cách nhập giá trị vào ô nhập liệu.

  • Khởi động Autodesk Inventor.
  • Tạo file part.
  • Tạo bản vẽ phác Sketch.
  • Vẽ hình chữ nhật với chiều dài và chiều rộng, Extrude với chiều cao thành hình hộp chữ nhật.
  • Chọn Tab Manage, chọn lệnh Parameters, sửa các thông số mặc định (d0, d1, d2) thành (dai, rong, cao).
  • Chọn lệnh Add Rule. Đặt tên Rule. Nhấp phải vào lệnh Extrusion, chọn Capture Curent State để thêm các dòng lệnh vào vùng code. Soạn các dòng lệnh Visual Basic cơ bản như bên dưới.
  • Lưu lại Rule.
  • Để chạy Rule nhấp vào iLogic Browser trong Tab Manage, nhấp phải vào Rule cần chạy chọn Run Rule.

' ***Extrusion1***
Feature.IsActive("Extrusion1") = True
rong = 20 mm
dai = 30 mm
d3 = 0.00 deg
cao = 10 mm

Feature.Color("Extrusion1") = "gold"
i = MessageBox.Show("Nhap OK de doi mau", "Thay doi mau")
Feature.Color("Extrusion1") = "red"
i = InputBox("Hay nhap gia tri chieu cao", "Chieu Cao")
cao = CDbl(i)
iLogicVb.UpdateWhenDone = True

Giải thích các dòng code trên:

  • ' ***Extrusion1***: Là dòng chú thích, không ảnh hưởng đến code.
  • rong, dai, cao: Là các tham số của hình hộp chữ nhật. Nhận các giá trị bên trái dấu = của dòng code.
  • d3: là góc côn của hình hộp chữ nhật, ở đây không quan tâm tới.
  • Feature.Color("Extrusion1") = "gold": Xác định màu cho khối. Giá trị là “gold” (màu vàng).
  • i = MessageBox.Show("Nhap OK de doi mau", "Thay doi mau"): Hiển thị hộp thông báo tiêu đề là “Thay doi mau”, dòng thông báo là “Nhap OK de doi mau”.
  • Feature.Color("Extrusion1") = "red": Thay đổi khối thành màu đỏ.
  • i = InputBox("Hay nhap gia tri chieu cao", "Chieu Cao"): Lệnh này sẽ xuất hiệp hộp thoại để nhập giá trị vào. Giá trị sẽ được gán cho biến i, với kiểu là String.
  • cao = CDbl(i): Lệnh này sẽ đổi kiểu String của biến i thành kiểu Double và gán cho tham số cao.
  • iLogicVb.UpdateWhenDone = True: Lệnh này sẽ tự động cập nhật những thay đổi. Không cần nhấp chuột vào lệnh update trên phần mềm.

Data Types (Kiểu dữ liệu)

Data Types được các ngôn ngữ lập trình dùng để phân loại và cách lưu trữ các kiểu dữ liệu trên máy tính. Ví dụ như kiểu dữ liệu String, Double, Boolean,…

Literals

Trong VB (Visual Basic), “literals” (đôi khi còn được gọi là “literal constants”) là các giá trị cố định được nhập trực tiếp vào mã nguồn của chương trình mà không cần phải tính toán. Các loại literals có thể bao gồm: Numeric Literals, String Literals, Boolean Literals, Character Literals.

Ví dụ khai báo các biến:

Dim age As Integer = 25
Dim name As String = "John"
Dim IsMale As Boolean = True
Dim myChar As Char = "A"c

Trong một số trường hợp, VB cũng hỗ trợ các literals đặc biệt như Nothing để đại diện cho giá trị null hoặc không có giá trị.

Variables (Biến)

Cách đặt tên biến để dễ đọc code, bằng cách thêm Prefix mô tả kiểu dữ liệu của biến.

PrefixData TypeVí dụ
blnBooleanblnFound
bytByteblnAge
curCurrencycurHourlyPay
dteDatedteStart
dblDoubledblWidth
intIntegerintQuantity
strStringstrLName
lngLonglngStarDistance
objObjectobjDoc
sngSinglesngLength
Cách đặt tên biến gợi nhớ

Ví dụ:

Dim intA As Integer = 5.6   'Khai báo biến intA có kiểu dữ liệu Interger và gán giá trị là 5.6
Dim sngB As Single
Dim dblC As Double = ChieuDai   'Khai báo biến dblC có kiểu dữ liệu là Double và gán cho tham số chiều dài (ChieuDai)
Dim strE As String = "10.5"   'Khai báo biến strE có kiểu dữ liệu là chuỗi String và gán giá trị chuỗi là 10.5

dblC = CDbl(strE)   'Chuyển giá trị chuỗi của biến strE thành dữ liệu Double và gán giá trị mới cho biến dblC
strE = dblC.ToString()   'Chuyển giá trị Double của biến dblC thành chuỗi và gán c cho biến strE

i = MessageBox.Show(dblC & " " & strE, "Title")   'Hiện hộp thông báo và hiển thị giá trị của biến dblC và strE

Operators (Toán tử)

Các toán tử cơ bản:

Toán tửVí dụMô tả
+A+BCộng các giá trị
A-BTrừ giá trị
*A*BNhân giá trị
/A/BChia giá trị
\A\BPhép chia lấy phần nguyên, bỏ phần dư
ModA Mod BPhép chia lấy phần dư
^A^BPhép lũy thừa
&Name1 & ” ” & Name2Nối chuỗi
Toán tử cơ bản

Ví dụ:

Dim result As Double
result = 10 / 3   ' Kết quả là 3.3333...
Dim quotient As Integer
quotient = 10 \ 3 ' Kết quả là 3
Dim remainder As Integer
remainder = 10 Mod 3 ' Kết quả là 1

Dim Name1 As String = "John"
Dim Name2 As String = "Doe"
Dim fullName As String
fullName = Name1 & " " & Name2 'fullName sẽ chứa giá trị là "John Doe"

Built In Functions

Trong VB (Visual Basic), các “built-in functions” là các hàm được tích hợp sẵn trong ngôn ngữ lập trình để thực hiện các nhiệm vụ cụ thể mà bạn có thể cần trong quá trình phát triển chương trình. Các hàm này đã được xây dựng sẵn và có sẵn cho việc sử dụng mà không cần phải triển khai lại chúng.

  1. Hàm Toán Học:
    • Math.Abs(x): Trả về giá trị tuyệt đối của x.
    • Math.Sqrt(x): Trả về căn bậc hai của x.
    • Math.Pow(x, y): Trả về x mũ y.
  2. Hàm Chuỗi (String Functions):
    • Len(str): Trả về độ dài của chuỗi str.
    • Mid(str, start, length): Trả về một phần của chuỗi str từ vị trí start với độ dài length.
    • Trim(str): Loại bỏ các khoảng trắng không cần thiết từ đầu và cuối chuỗi str.
  3. Hàm Ngày Tháng (Date and Time Functions):
    • Now(): Trả về ngày và giờ hiện tại.
    • DateAdd(interval, number, date): Thêm một số lượng xác định của đơn vị (ngày, tháng, năm, vv.) vào một ngày cụ thể.
    • DateDiff(interval, date1, date2): Trả về sự chênh lệch giữa hai ngày trong các đơn vị cụ thể.
  4. Hàm Loại Dữ Liệu (Type Conversion Functions):
    • CInt(expression), CDbl(expression): Chuyển đổi biểu thức sang kiểu Integer hoặc Double.
    • CStr(expression): Chuyển đổi biểu thức sang kiểu String.
  5. Hàm Logic (Logical Functions):
    • IIf(condition, truePart, falsePart): Hàm tam giác (Immediate If) trả về một giá trị tùy thuộc vào điều kiện.

Đây chỉ là một số ví dụ, và có nhiều hàm tích hợp khác trong VB, tùy thuộc vào nhu cầu cụ thể của bạn.

Math Members

Trong VB (Visual Basic), Math là một namespace cung cấp nhiều thành viên (members), bao gồm các hàm và hằng số, để thực hiện các phép toán toán học. Dưới đây là một số thành viên quan trọng của namespace Math:

  1. Hàm Toán Học:
    • Abs(x): Trả về giá trị tuyệt đối của x.
    • Sqrt(x): Trả về căn bậc hai của x.
    • Pow(x, y): Trả về xy.
  2. Hàm Tròn:
    • Ceiling(x): Làm tròn lên (làm tròn tăng dần) giá trị x đến số nguyên gần nhất không nhỏ hơn x.
    • Floor(x): Làm tròn xuống (làm tròn giảm dần) giá trị x đến số nguyên gần nhất không lớn hơn x.
    • Round(x): Làm tròn giá trị x đến số nguyên gần nhất.
  3. Hàm Trigonometric:
    • Sin(x), Cos(x), Tan(x): Các hàm sin, cos, và tan của góc x (đơn vị là radian).
    • Asin(x), Acos(x), Atan(x): Các hàm arcsin, arccos, và arctan, trả về góc tương ứng với giá trị x.
  4. Hàm Logarit:
    • Log(x): Trả về logarithm tự nhiên của x.
    • Log10(x): Trả về logarithm cơ số 10 của x.
  5. Hằng Số Toán Học:
    • PI: Hằng số Pi (π).
    • E: Hằng số Euler (e).

Ví dụ sử dụng namespace Math:

Dim num As Double = 4.5
Dim absoluteValue As Double = Math.Abs(num)
Dim squareRoot As Double = Math.Sqrt(num)
Dim powerResult As Double = Math.Pow(2, 3)
Dim roundedValue As Double = Math.Round(4.76)
Dim piValue As Double = Math.PI

Các thành viên của Math cung cấp các phương tiện tiện ích để thực hiện các phép toán số học và các phép toán liên quan.

String Functions

Trong VB (Visual Basic), có nhiều hàm chuỗi (String functions) sẵn có để thực hiện các thao tác xử lý và biến đổi chuỗi. Ở trên là một số hàm chuỗi phổ biến:

Ví dụ:

Dim Result As String
Result = Chr(65)
i = MessageBox.Show(Result, "Title")   'Kết quả hiển thị là chữ A

Data Inspection

Ví dụ: Kiểu dữ liệu tự chuyển đổi.

Dim Result As String
Dim A As String = "5"
Result = A + 5
i = MessageBox.Show(Result, "Title") 'Kết quả hiển thị là 10

Ví dụ: Kiểm tra kiểu dữ liệu trả về giá trị.

Dim Result As String
Result = VarType(#12/31/2000#)
i = MessageBox.Show(Result, "Title") 'Kết quả hiển thị là 7 (dữ liệu ngày tháng)

Data Conversion Functions (Hàm chuyển đổi kiểu dữ liệu)

  • CBool (expression)
  • CByte(expression)
  • CChar(expression)
  • CDate(expression)
  • CDbl(expression)
  • CDec(expression)
  • CInt(expression)
  • CLng(expression)
  • CObj(expression)
  • CSByte(expression)
  • CShort(expression)
  • CSng(expression)
  • CStr(expression)
  • CUInt(expression)
  • CUlng(expression)
  • CUShort(expression)

Ví dụ:

Dim Result As String
Dim A As Double = 44
Result = VarType(CInt(A))
i = MessageBox.Show(Result, "Title") 'Kết quả hiển thị là 3 (dữ liệu số nguyên)

Format Function

Hàm Format giúp chuyển đổi giữa các kiểu dữ liệu và định dạng hiển thị của chúng.

Cú pháp hàm:

Format(Expression, [Format], [FirstDayOfWeek], [FirstWeekOfYear])

Ví dụ:

Dim Result As String
Dim A As Double = 44

Result = Format (A, "Currency")   'Định dạng tiền tệ dựa theo đơn vị của máy tính đang sử dụng. Kết quả là $44.00
Result = Format (A, "Percent")   'Định dạng phần trăm. Kết quả là 4400.00%
Result = Format (A, "##,##0.00")   'Định dạng hiển thị dấu phẩy phần nghìn và 2 số sau dấu chấm thập phân. Kết quả là 44.00
Result = Format (Now, "D")   'Định dạng hiển thị ngày hôm nay. Kết quả là Saturday, February 17, 2024
Result = Format (Now, "d")   'Định dạng hiển thị ngày hôm nay. Kết quả là 2/17/2024
Result = Format (Now, "hh:mm:ss") 'Định dạng thời gian hiện tại theo giờ phút giây. Kết quả là 04:40:55

InputBox Function

Hàm InputBox trong Visual Basic (VB) được sử dụng để hiển thị một hộp thoại đơn giản để người dùng nhập dữ liệu. Cú pháp của hàm InputBox như sau:

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Ví dụ:

Dim Result, Message, Title, DefaultValue As String
Message = "Enter Length here"
Title = "InputBox"
DefaultValue = "40 mm"

Result = InputBox(Message, Title, DefaultValue)   'Hiển thị hộp thoại để nhập giá trị. Giá trị mặc định ban đầu mặc định là DefaultValue = 40 mm
i = MessageBox.Show(Result, "Title")   'Hiển thị kết quả vừa nhập ra màn hình

MsgBox Function

Hàm MsgBox trong Visual Basic (VB) được sử dụng để hiển thị một hộp thoại thông báo trên màn hình. Cú pháp của hàm MsgBox như sau:

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Có thể sử dụng Tab Wizards trong Edit Rule để tạo nhanh hộp thoại. (Nếu dòng lệnh dài quá có thể xuống dòng bằng cách nhập khoảng trắng rạch dưới ( _) rồi Enter.

Ví dụ đoạn code sau khi thêm MsgBox bằng Wizard:

Dim Result As Integer

Result = MessageBox.Show("Bạn có muốn tiếp tục không?", "Hộp thoại", _
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button1)

i = MessageBox.Show(Result, "Title")

Kết quả như hình bên dưới. Nếu nhấn Yes kết quả trả về là 6, No là 7 và Cancel là 2:

If Statements (Câu lệnh điều kiện If)

Ví dụ:

Dim Result As String

A = InputBox("Xin nhập số tại đây.", "Hộp thoại nhập", "5")

If IsNumeric(A) = True Then
Result = A + 5

Else
Result = "Xin thử lại sau."
End If

i = MessageBox.Show(Result, "Title")

Kết quả: Nếu nhập một số A thì kết quả sẽ hiển thị bằng A+5. Nếu giá trị nhập không phải là số thì sẽ hiển thị hộp thoại Xin thử lại sau.

Logical Operators (Các toán tử logic)

Trong Visual Basic (VB) và nhiều ngôn ngữ lập trình khác, các toán tử logic được sử dụng để kết hợp hoặc so sánh các biểu thức logic. Một số toán tử logic chính: And, Or, Not, Xor.

Ví dụ:

Dim Result As String
Dim A As Integer = 1
Dim B As Integer = 2

If A = 1 And B = 2 Then
   Result = "Yes"
Else
   Result = "No"
End if

i = MessageBox.Show(Result, "Title")

Kết quả là Yes.

Comparison Operators (Các toán tử so sánh)

Các toán tử so sánh được sử dụng để so sánh giữa các giá trị và trả về một giá trị logic (True hoặc False) dựa trên kết quả so sánh. Một số toán tử so sánh chính: Bằng(=), Không bằng (<>), Lớn hơn (>), Nhỏ hơn (<), Lớn hơn hoặc bằng (>=), Nhỏ hơn hoặc bằng (<=).

Dim Result As String
Dim A As String = "A"
Dim B As String = "B"

If A < B Then
   Result = "Yes"
Else
   Result = "No"
End if

i = MessageBox.Show(Result, "Title")

Kết quả là Yes vì mã ASCII của A là 65 của B là 66.

Select Case

Câu lệnh Select Case trong Visual Basic (VB) được sử dụng để kiểm tra giá trị của một biểu thức và thực hiện một số lựa chọn dựa trên giá trị đó. Cú pháp chung của Select Case là như sau:

Select Case expression
    Case value1
        ' Code to be executed if expression equals value1
    Case value2
        ' Code to be executed if expression equals value2
    Case value3
        ' Code to be executed if expression equals value3
    Case Else
        ' Code to be executed if none of the above cases match
End Select

Ví dụ:

Dim Result As String
Dim A As Integer = 6

Select Case A
 Case 0
 Result = "A = 0"
 Case Is > 4
 Result = "A > 4"
 Case 1 To 4
 Result = "1~4"
 Case -3, -2, -1
 Result = "A = -3, -2, -1"
 Case Else
 Result = "Xin lỗi không có kết quả trùng"
End Select

i = MessageBox.Show(Result, "Title")

Kết quả hiển thị là A > 4.

Vòng lặp While

Câu lệnh While trong Visual Basic (VB) được sử dụng để thực hiện một khối mã lặp lại (loop) khi một điều kiện nhất định là True. Cú pháp chung của câu lệnh While là như sau:

While condition
    ' Block of code to be executed as long as the condition is true
    ' The condition should eventually become false to exit the loop
End While

Ví dụ:

Dim Result As String
Dim A As Integer = 1

While A < 5
i = MessageBox.Show(A, "Title")
A = A + 1
End While

Kết quả sẽ hiện hộp thoại lên 5 lần để ta nhấn OK.

Vòng lặp Do While

Câu lệnh Do While trong Visual Basic (VB) cũng được sử dụng để thực hiện một khối mã lặp lại (loop) khi một điều kiện nhất định là True. Tuy nhiên, cú pháp của Do While có một sự khác biệt nhỏ so với While. Dưới đây là cú pháp chung của câu lệnh Do While:

Do While condition
    ' Block of code to be executed as long as the condition is true
Loop

Ví dụ:

Dim Result As String
Dim A As Integer = 1
Dim B As Integer = 10

Do While A < 5 And B > 5
i = MessageBox.Show("A=" & A & " B=" & B, "Title")
A = A + 1
B = B - 1
Loop

i = MessageBox.Show("Kết thúc Do While Loop", "Title")

Kết quả sẽ hiện 5 hộp thoại để nhấp OK, hộp thoại cuối cùng có dòng thông báo Kết thúc Do While Loop.

Vòng lặp Do Until

Câu lệnh Do Until trong Visual Basic (VB) cũng được sử dụng để thực hiện một khối mã lặp lại (loop) khi một điều kiện nhất định là False. Cú pháp chung của câu lệnh Do Until là như sau:

Do Until condition
    ' Block of code to be executed as long as the condition is false
Loop

Ví dụ:

Dim Result As String
Dim A As Integer = 1
Dim B As Integer = 10

Do Until A > 5 And B < 5
i = MessageBox.Show("A=" & A & " B=" & B, "Title")
A = A + 1
B = B - 1
Loop

i = MessageBox.Show("Kết thúc Do Until Loop", "Title")

Kết quả sẽ hiện 8 hộp thoại để nhấp OK, hộp thoại cuối cùng có dòng thông báo Kết thúc Do Until Loop.

Vòng lặp For

Câu lệnh vòng lặp For được sử dụng để thực hiện một khối mã lặp lại một số lần cụ thể. Cú pháp chung của câu lệnh For là như sau:

For counter = start To end [Step stepValue]
    ' Block of code to be executed in each iteration
Next [counter]

Ví dụ:

Dim Result As String
Dim A As Integer = 1

For A = 1 To 10 Step 1
i = MessageBox.Show("A=" & A, "Title")

Next A

i = MessageBox.Show("Kết thúc For Loop", "Title")

Kết quả sẽ hiện 12 hộp thoại để nhấp OK, hộp thoại cuối cùng có dòng thông báo Kết thúc For Loop.

Các vòng lặp Do Khác

Trong Visual Basic (VB), ngoài Do WhileDo Until, còn có một số cấu trúc lặp khác như Do...Loop, Do...Loop While, và Do...Loop Until. Dưới đây là giới thiệu về mỗi cấu trúc:

Do
    ' Block of code to be executed
Loop While condition

Hoặc

Do
    ' Block of code to be executed
Loop While condition

Ví dụ:

Dim Result As String
Dim A As Integer = 1

Do 
i = MessageBox.Show("A=" & A, "Title")
A = A +1
Loop While (A < 5)

i = MessageBox.Show("Kết thúc While Loop", "Title")

Kết quả sẽ hiện 6 hộp thoại để nhấp OK, hộp thoại cuối cùng có dòng thông báo Kết thúc While Loop.

Thoát khỏi vòng lặp Do

Để thoát khỏi vòng lặp Do, bạn có thể sử dụng câu lệnh Exit Do. Dưới đây là một ví dụ:

Dim Result As String
Dim A As Integer = 1

Do While (A < 5)

If A = 3 Then
   Exit Do
End If

i = MessageBox.Show("A=" & A, "Title")
A = A +1
Loop

i = MessageBox.Show("Kết thúc While Loop", "Title")

Kết quả sẽ hiện 3 hộp thoại để nhấp OK, hộp thoại cuối cùng có dòng thông báo Kết thúc While Loop.

InputListBox

Tạo mục chọn các giá trị cho tham số có nhiều giá trị.

Vào Tab Manage, Parameters, Phải chuột vào tham số cần thêm giá trị, Make Multi-Value, nhập các giá trị (nhớ bỏ đơn vị đi) sau đó nhấn Add, OK.

Chọn Add Rule, Vào mục MessageBox, chọn InputListBox nhấp đôi để add code vào vùng soạn code, thay thế các tham số d0 bằng tham số có nhiều giá trị vừa tạo, Save & Run.

Chọn Document, chọn UpdateWhenDone để cập nhật thay đổi tự động khi code chạy xong.

InputRadioBox

Tạo mục chọn vật liệu cho khối solid.

booleanParam = InputRadioBox("Xin chọn vật liệu", "Gold", _
"Steel", booleanParam, Title := "Chọn vật liệu")


If booleanParam = True Then
	iProperties.Material="Gold"
ElseIf booleanParam = False Then
	iProperties.Material="Steel"
End If

iLogicVb.UpdateWhenDone = True

Run Multiple Rules

Tương tự thí dụ InputListBox, nhưng thêm tham số chiều rộng.

Tạo Rule1: Vào Tab Manage, chọn Add Rule.

'Rule1
dai = InputListBox("Nhập chiều dài", MultiValue.List("dai"), _
dai, Title := "Title", ListName := "Chiều dài")

rong = InputListBox("Nhập chiều rộng", MultiValue.List("rong"), _
rong, Title := "Title", ListName := "Chiều rộng")

iLogicVb.UpdateWhenDone = True

Thêm Rule thứ 2: Vào iLogic Brower, phải chuột vào part, chọn Add Rule, đặt tên Rule2. Để cho Rule2 tự động chạy khi Rule kết thúc mẹo là thêm dòng code sau dai = dai.

'Rule2
dai = dai
i = MessageBox.Show("Rule 2 đã chạy", "Title")

Để không cho Rule nào đó chạy tự động thì bỏ chọn trong mục Options.

Chạy Rules 1

Để chạy các Rule được xác định. Ta tạo Thêm một Rule có tên là Master với nội dụng code sau:

'RuleMaster
iLogicVb.RunRule("Rule1")
iLogicVb.RunRule("Rule2")

Để chạy Rule ở Component khác ta chọn lệnh RunRule in Component. Với tên Part và tên Rule cần chạy.

iLogicVb.RunRule("PartA:1", "ruleName")

Chạy Rules 2

Tạo các Rule trên cùng một file part: Khi chạy Rule Master, Rule 1 sẽ được chạy. Nhập giá trị chiều dài và chiều rộng. Nếu giá trị chiều dài nhập vào khác giá trị trước đó thì Rule 2 sẽ được chạy và hiện ra dòng thông báo là “Chiều dài đã thay đổi.” Ngược lại thì Rule 3 sẽ được chạy và hiện dòng thông báo “Chiều dài không thay đổi.”.

Rule Master:


'RuleMaster
Dim A As Double
Dim B As Double
Dim C As String

'I = MessageBox.Show("ChieuDai" & ChieuDai, "Title")
A = Parameter("ChieuDai")
iLogicVb.RunRule("Rule1")
B = Parameter("ChieuDai")

If A <> B Then
	C = "Rule2"
ElseIf A = B Then
	C = "Rule3"
End If

iLogicVb.RunRule(C)

Rule 1 Input List Box:


'Rule1
ChieuDai = InputListBox("Nhập chiều dài", MultiValue.List("ChieuDai"), _
ChieuDai, Title := "ChieuDai", ListName := "Chiều dài")

ChieuRong = InputListBox("Nhập chiều rộng", MultiValue.List("ChieuRong"), _
ChieuRong, Title := "ChieuRong", ListName := "Chiều rộng")

iLogicVb.UpdateWhenDone = True

Rule 2, Check vào tab Options, Don’t run automatically.

'Rule2
i = MessageBox.Show("Chiều dài đã thay đổi.", "Title")

Rule 3, Check vào tab Options, Don’t run automatically.

'Rule3
i = MessageBox.Show("Chiều dài không thay đổi.", "Title")

Sử dụng Support Geometry

Sử dụng ví dụ ở trên với các tham số ChieuDai, ChieuRong, ChieuCao. Tiếp theo vẽ một đường thẳng trên một mặt Sketch, ghi kích thước đoạn thẳng đó và sửa lại tên tham số là TempVar. Tạo các Rule như sau: Chọn vào ô Don’t run automatically trong tab Options của Edit Rule.

Rule Master.

iLogicVb.RunRule("Rule1")
iLogicVb.RunRule("Rule2")
iLogicVb.RunRule("Rule3")

iLogicVb.UpdateWhenDone = True

Rule 1.

TempVar = ChieuDai
i = MessageBox.Show("TempVar = " & TempVar, "Rule 1")

Rule 2.

ChieuDai = InputBox("Đặt Chiều dài", "Rule 2", ChieuDai)

Rule 3.


If TempVar = ChieuDai Then
	i = MessageBox.Show("Chiều dài không thay đổi.", "Rule 3")
Else
	i = MessageBox.Show("Chiều dài đã thay đổi.", "Rule 3")
End If

Ví dụ này hiển thị trực quan biến tạm TempVar là giá trị cũ của tham số ChieuDai lên đoạn thẳng trên mặt sketch. Và thực hiện so sánh biến tạm và giá trị nhập vào để đưa ra thông báo.

Debugging

Các loại lỗi Errors: Syntax Errors, Runtime Error, Logical Errors, Fixing Errors, Common Errors.

Một ví dụ lỗi syntax (Gõ nhầm chữ Dimm).

Error Handling

Dim X As Double
Dim Y As Double
Dim Result As Double

x = 4.5
Try
Y = InputBox("Please enter a number.", "Title", "5.5")
Catch
i = MessageBox.Show("My Message", "Title")
End Try

Result = X + Y
i = MessageBox.Show(X & " + " & Y & " = " & Result, "Title")

Thêm đoạn mã Try Catch End Try vào đoạn mã muốn kiểm tra lỗi Runtime để xử lý nếu có phát sinh.

Catch When

Dim X As Double
Dim Y As Double
Dim Result As Double

x = 4.5
Try
Y = My.Computer.FileSystem.ReadAllText("C:\Folder\file.txt")
Catch When Err.number = 53
i = MessageBox.Show("Error " & Err.number & vbCrLf & "File is missing", "Title")
Catch When Err.number = 76
i = MessageBox.Show("Error " & Err.number & vbCrLf & "Folder is missing", "Title")
Catch When Err.number = 5
i = MessageBox.Show("Error " & Err.number & vbCrLf & "Folder is missing", "Title")
Catch When Err.number = 13
i = MessageBox.Show("Error " & Err.number & vbCrLf & "Enter a Valid Number", "Title")
Catch
i = MessageBox.Show("Error " & Err.number & vbCrLf & "My Message", "Title")
End Try

Result = X + Y
i = MessageBox.Show(X & " + " & Y & " = " & Result, "Title")

Raise Custom Errors

Dim X As Double
Dim Y As Double
Dim Result As Double

x = 4.5
Try
'Y = My.Computer.FileSystem.ReadAllText("C:\Folder\file.txt")
Err.raise(61)
Catch When Err.number = 53
i = MessageBox.Show("Error " & Err.number & vbCrLf & "File is missing", "Title")
Catch When Err.number = 76
i = MessageBox.Show("Error " & Err.number & vbCrLf & "Folder is missing", "Title")
Catch When Err.number = 5
i = MessageBox.Show("Error " & Err.number & vbCrLf & "Folder is missing", "Title")
Catch When Err.number = 13
i = MessageBox.Show("Error " & Err.number & vbCrLf & "Enter a Valid Number", "Title")
Catch
i = MessageBox.Show("Error " & Err.number & vbCrLf & err.description, "Title")
End Try

Result = X + Y
i = MessageBox.Show(X & " + " & Y & " = " & Result, "Title")

On Error 1

Dim X, Y, Result As Double

X = 4.5
On Error Goto MyError
Y = InputBox("Prompt", "Title", "5")

Result = X + Y
i = MessageBox.Show(X & " + " & Y & " = " &  Result, "Title")
Exit Sub
MyError:
i = MessageBox.Show(Err.description, "Title")
resume

Đoạn code trên sẽ xuất hiện bảng nhập liệu lặp lại cho đến khi giá trị nhập vào là số hợp lệ.

On Error 2

Dim X, Y, Result As Double
Dim A As Integer = 1
X = 4.5
On Error GoTo MyError
Y = InputBox("Attemp # " & A, "Title", "5")
Result = X + Y
i = MessageBox.Show(X & " + " & Y & " = " &  Result, "Title")

Exit Sub
MyError :
If A < 3 Then
	i = MessageBox.Show(Err.Description, "Title")
	A = A + 1
Else
i = MessageBox.Show("Sorry - Program will now close", "Title")
Exit Sub
End If
Resume

Đoạn code trên sẽ lặp lại 3 lần nếu giá trị nhập vào không phải là số. Sau đó hiện thông báo “Sorry – Program will now close” và thoát ra.

Sử dụng User Parameters

Tạo hình hộp chữ nhật, Fillet một cạnh. Vào hộp thoại Parameters tự tạo thêm Parameter True/False bằng cách bấm vào nút Add. Đặt tên cho User Parameter là MyParameter. Tạp thêm Rule mới bằng lệnh Add Rule. Tắt tự động chạy Rule trong tab Options. Thêm dòng code sau:

i = MessageBox.Show("Fillet1 Activation/Suppression" _
& vbCrLf & "Yes - Active, No - Suppress", "Title", MessageBoxButtons.YesNoCancel)

MessageBox.Show(i, "Title")


If i = 6 Then
	MyParameter = True
ElseIf i = 7 Then
	MyParameter = False
End If

' ***Fillet1***
Feature.IsActive("Fillet1") = MyParameter

Mẹo: Để thêm lệnh Fillet1 vào vùng code bằng cách phải chuột vào lệnh chọn Capture Current State, add parameter bằng cách chọn biểu tượng fx và nhấp đôi vào parameter cần chọn.

Đoạn code trên sẽ hiện ra bảng chọn Yes/No. Chọn Yes để kích hoạt, chọn No để tắt kích hoạt lệnh Fillet1, Cancel để thoát lệnh.

Sử dụng Boolean

Sửu dụng mô hình ví dụ trên, thêm lệnh Chamfer, vào hộp thoại Parameters, thêm parameter boolean mới đặt tên là MyParameter2. Thêm đoạn code sau vào Rule mới:

If MyParameter2 Then
	MyParameter = True
ElseIf Not(MyParameter2) Then
	MyParameter = False
End If

MessageBox.Show(MyParameter2 & " - " & Not(MyParameter2), "Title")



' ***Fillet1***
Feature.IsActive("Fillet1") = MyParameter

' ***Chamfer1***
Feature.IsActive("Chamfer1") = MyParameter

Đoạn code trên sẽ dùng Parameter2 để bật tắt Fillet1 và Chamfer1 cùng lúc. Thông báo trạng thái bật tắt sẽ hiện sau khi chạy Rule.

Bài tập 1

Tạo file part tấm có các lỗ cách đều nhau. Điều chỉnh kích thước tấm và số lỗ bằng bảng chọn.

Nội dung đoạn code iLogic.

KichThuocTam = InputListBox("Nhập kích thước tấm", MultiValue.List("KichThuocTam"), _
KichThuocTam, Title := "Kích thước tấm", ListName := "List")

Select Case KichThuocTam
	Case "80x80"
		ChieuDai1 = 80
		ChieuDai2 = 80
		Feature.IsActive("Rectangular Pattern1") = True
		KhoangCachHg2 = 20 mm
		KhoangCachHg1 = 20 mm
		SoLoHuong2 = 4 ul
		SoLoHuong1 = 4 ul
	Case "100x100"
		ChieuDai1 = 100
		ChieuDai2 = 100
		Feature.IsActive("Rectangular Pattern1") = True
		KhoangCachHg2 = 20 mm
		KhoangCachHg1 = 20 mm
		SoLoHuong2 = 5 ul
		SoLoHuong1 = 5 ul
	Case "120x120"
		ChieuDai1 = 120
		ChieuDai2 = 120
		Feature.IsActive("Rectangular Pattern1") = True
		KhoangCachHg2 = 20 mm
		KhoangCachHg1 = 20 mm
		SoLoHuong2 = 6 ul
		SoLoHuong1 = 6 ul
End Select

iLogicVb.UpdateWhenDone = True

Bài tập 2

Từ bài tập 1 ở trên, sửa lại code để thực hiện nhập vào thông số kích thước tấm, kích thước lỗ, khoảng cách lỗ thay vì chọn từ danh sách có sẵn.

Nội dung đoạn code iLogic:

VarLength = InputBox("Nhập kích thước tấm (X x X)", "Kích thước tấm", ChieuDai1)
VarDist = InputBox("Nhập khoảng cách lỗ","Khoảng cách lỗ",KhoangCachHg1)
HoleDiameter = InputBox("Nhập đường kính lỗ", "Đường kính lỗ", DuongKinhLo)

VarNum = Floor(CDbl(VarLength / VarDist)) 'Ceiling() Truncate() 6.6=7 6.4=6
LoCachMep1 = (VarLength - ((VarNum - 1) * VarDist)) / 2
LoCachMep2 = (VarLength - ((VarNum - 1) * VarDist)) / 2
MessageBox.Show("Chiều dài tấm = " & VarLength & vbCrLf _
& "Khoảng cách lỗ = " & VarDist & vbCrLf & "Số lỗ = " & VarNum & "x" & VarNum & vbCrLf _
& "Đường kính lỗ = " & DuongKinhLo & vbCrLf & "Khoảng cách lỗ tới mép = " & LoCachMep1 , "Thông tin tấm")

		Feature.IsActive("Rectangular Pattern1") = True
		ChieuDai1 = VarLength
		ChieuDai2 = VarLength
		KhoangCachHg1 = VarDist
		KhoangCachHg2 = VarDist
		SoLoHuong1 = VarNum
		SoLoHuong2 = VarNum
		
iLogicVb.UpdateWhenDone = True

Snippets

Trong ngôn ngữ lập trình Visual Basic (VB), “snippets” thường được hiểu là đoạn mã nguồn ngắn, hoặc mẫu mã được sử dụng để thực hiện một công việc cụ thể. Snippets có thể là các đoạn mã đã được xây dựng sẵn và có thể được chèn vào trong mã nguồn của bạn để tiết kiệm thời gian và giảm lỗi.

Ngoài ra, bạn cũng có thể tạo và quản lý các snippets tùy chỉnh của riêng mình để tái sử dụng các đoạn mã phức tạp hoặc thường xuyên sử dụng. Điều này giúp tăng hiệu suất và giảm thời gian phát triển.

Trong Inventor có 2 file chứa Snippets là iLogicSnippets.xml và iLogicUserSnippet.xml. Custom Snippets trong Inventor có thể được chỉnh sửa để phục vụ nhanh chóng cho công việc của mình. Trước khi chỉnh sửa 2 file này hãy lưu backup cẩn thận! Và không nên chia sẽ file Snippets giữa các user sử dụng Inventor.

Array

Mảng (Array) trong Visual Basic (VB) được sử dụng để lưu trữ nhiều giá trị cùng một loại dữ liệu trong một biến duy nhất. Mảng giúp bạn tổ chức dữ liệu một cách hiệu quả và truy cập chúng dễ dàng bằng cách sử dụng chỉ số (index). Ví dụ:

Dim A(0 To 3, 0 To 3) As String
	A(0, 0) = "Ten1"
	A(0, 1) = "Ho1"
	A(1, 0) = "Ten2"
	A(1, 1) = "Ho2"
MessageBox.Show(A(0,0) & " " & A(0,1), "Title")

Sử dụng vòng lặp For để duyệt qua các phần tử trong mảng.

Dim A(0 To 3) As String
Dim i As Integer
Dim Result As String

For i = 0 To UBound(A) Step 2
	A(i) = InputBox("Value " & i + 1, "Title", "Default Entruy")
Next

For i = 0 To A.Length - 1
	'If IsNothing(A(i)) Then
	If A(i) = "" Then
		A(i) = "-"
	End If
	
	Result = Result & vbCrLf & A(i)
Next

MessageBox.Show(Result, "Title")

Dynamic Arrays

Mảng động (dynamic array) thường được tạo ra bằng cách sử dụng từ khóa ReDim để điều chỉnh kích thước của mảng tại thời điểm chạy chương trình. Mảng động cho phép bạn thay đổi kích thước của nó dựa trên nhu cầu thực tế của ứng dụng.

Dim A() As String
Dim B As Integer
Dim i As Integer
Dim Result As String

B = InputBox("Xác định kích thước Array", "Title", "Default Entry")
ReDim A(B - 1)

For i = 0 To UBound(A)
	A(i) = InputBox("Value " & i + 1, "Title", "Default Entruy")
Next

For i=0 To A.Length -1
	Result = Result & vbCrLf & A(i)
Next

MessageBox.Show(Result, "Title")

ReDim Preseve

Trong Visual Basic (VB), ReDim Preserve được sử dụng để điều chỉnh kích thước của mảng và đồng thời giữ nguyên giá trị của các phần tử hiện tại. Điều này có ý nghĩa quan trọng khi bạn muốn mở rộng hoặc giảm kích thước của mảng mà không mất dữ liệu đã tồn tại trong mảng.

Dim A() As String
Dim B As Integer
Dim i As Integer
Dim j As Integer
Dim Result As String

For j = 1 To 2
	B = InputBox("Xác định kích thước Array", "Title", "Default Entry")
	ReDim Preserve A(B - 1)   'A(3, 3, 6)

	For i = 0 To UBound(A)
		A(i) = InputBox("Value " & i + 1, "Title", A(i))
	Next
	Result = ""
	For i=0 To A.Length -1
		Result = Result & vbCrLf & A(i)
	Next

	MessageBox.Show(Result, "Title")
Next

Assembly

Tạo Rule ở môi trường Assembly để điều khiển kích thước của các part cube.

Đoạn code iLogic môi trường Assembly:

Parameter("Cube_Blue:1", "BlueCubeLength") = Lenght
Parameter("Cube_Blue:1", "BlueCubeWidth") = Width
Parameter("Cube_Blue:1", "BlueCubeHeight") = Height

Parameter("Cube_Red:1", "RedCubeLength") = Lenght
Parameter("Cube_Red:1", "RedCubWidth") = Width
Parameter("Cube_Red:1", "RedCubeHeight") = Height

iLogicVb.UpdateWhenDone = True

Sau khi Rule được tạo. Lúc này ta có thể điều khiển kích thước 2 cube trong bảng Parameters.

Rule Dependency

Tiếp tục ở ví dụ trên, tạo một lỗ trên mặt của cube đỏ và tạo Rule để xác định kích thước lỗ bằng 1/2 chiều rộng, tắt chế độ chạy Rule tự động trong tab Options của lệnh Edit Rule.

'Hole_Diameter Cube_Red Rule
Hole_Diameter = RedCubWidth / 2
MessageBox.Show("Rule Kích thước lỗ đã chạy", "Title")

Trở lại Rule ở môi trường Assembly, thêm dòng code sau để chạy Rule file part từ môi trường Assemply.

'Cube_Size Rule
Parameter("Cube_Blue:1", "BlueCubeLength") = Lenght
Parameter("Cube_Blue:1", "BlueCubeWidth") = Width
Parameter("Cube_Blue:1", "BlueCubeHeight") = Height

Parameter("Cube_Red:1", "RedCubeLength") = Lenght
Parameter("Cube_Red:1", "RedCubWidth") = Width
Parameter("Cube_Red:1", "RedCubeHeight") = Height

iLogicVb.RunRule("Cube_Red:1", "Hole_Diameter")


iLogicVb.UpdateWhenDone = True

Form

Cũng ở ví dụ trên, ta có thể tạo một Form để điều khiển kích thước của các cube và lỗ trên cube. Bằng cách vào iLogic Browser, chọn Forms tab, phải chuột chuột chọn Add Form, thiết kế Form bằng cách kéo thả Parameters, Rules, hình ảnh, nút nhấn, list box, slider,… chỉnh sửa và chọn các tùy chọn phù hợp với Form đang thiết kế.

Chạy Form bằng cách nhấp vào nút Form vừa tạo trên tab Form của iLogic.

iProperties

Ta có thể thêm các tham số của iProperties trong Snippets hoặc tab iProperties trong Form Editor.

Event Triggers

Event Triggers (kích hoạt sự kiện), dùng để chạy Rule khi sự kiện nào đó xảy ra. Ở ví dụ dưới là khi lệnh thay đổi Suppresstion xảy ra thì lần lượt các Rule0, Rule1, Rule2 lần lượt chạy.

iTrigger

Ta có thể tự tạo Trigger bằng nút iTrigger trong tab iLogic. Sau khi tạo xong, chạy bằng cách nhấp vào nút iTrigger.

Thu gọn vùng code

Sử dụng dấu ‘[ và ‘] bao giữa vùng code để tạo vùng thu gọn. Thêm các dòng bắt đầu bằng ”’ để tạo dòng text có thể thu gọn.

Rule Arguments

Trong Visual Basic (VB), “Arguments” thường được sử dụng để tham chiếu đến danh sách các đối số được truyền vào một hàm hoặc phương thức. Đối số (arguments) là giá trị bạn truyền cho hàm hoặc phương thức khi gọi nó.

Tạo 2 Rule trên file part như sau:

Đoạn code Rule0.

'Rule0
Dim A As Integer

A = 5
Dim map As Inventor.NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap()
map.Add("Arg1", "Arg1Value")
map.Add("Arg2", A)
iLogicVb.RunRule("Rule1", map)

Đoạn code Rule1.

'Rule1
A = RuleArguments("Arg1")
B = RuleArguments("Arg2")

If A <> "" And Not(IsNothing(B)) Then
	MessageBox.Show("A = " & A & vbCrLf & "B = " & B, "MsgBox 1")
End If

If RuleArguments.Exists("Arg1") And IsNumeric(B) Then
	MessageBox.Show("A = " & A & vbCrLf & "B = " & B, "MsgBox 2")
End If

Kết quả khi chạy Rule0 sẽ xuất hiện bảng thông báo.

External Rules

External Rules (Rule ngoài) là rule độc lập với tài liệu CAD của Inventor, ta có thể chạy nó thủ công hoặc gọi nó từ Internal Rule (Rule trong).

Trong ví dụ này ta tạo Internal Rule để lưu tham số của tài liệu CAD vào file .xml. Sau nó tạo External Rule để lưu tham số vào file mới.

Trước tiên tạo file part với tên là 01.ipt là hình hộp chữ nhật có chiều dài tên là Length, chiều rộng là Width, chiều cao là Height. Tạo một Rule iLogic tên mặc định là Rule0 với nội dung sau: (Sử dụng Snippets Parameters/Save XML, Document/Path , iProperties/Part Number.)

'Rule0
Dim A As String
A = iProperties.Value("Project", "Part Number")

iLogicVb.Automation.ParametersXmlSave(ThisDoc.Document, _
ThisDoc.Path & "\" & A & ".xml")

Sau khi chạy Rule0 một file 01.xml sẽ được xuất ra tại đường dẫn chung với file 01.ipt. Ta mở file 01.xml bằng nostpad xóa dòng tham số d3 đi vì không sử dụng đến.

Tiếp theo tạo một hình icon với kích thước 60×60 pixel để làm ảnh cho External Rule. Đặt tên ảnh giống tên của External Rule.

Vào iLogic Browser, chọn tab External Rules, phải chuột chọn Create New External Rule, đặt tên là MyRule.txt với nội dung: (Sửu dụng Snippets Parameters/Load XML, Document/Path.).

iLogicVb.Automation.ParametersXmlLoad(ThisDoc.Document, _
ThisDoc.Path & “\01.xml")

Sau khi tạo xong thử lại bằng cách: Tạo file part mới tên là 02.ipt lưu cùng địa chỉ với External Rule, chạy External Rule MyRule. Lúc này file mới có có các tham số Length, Height, Width của file part 01.ipt.

Save

Chúng ta sẽ tìm hiểu cách kết hợp các lệnh Save As và Save Copy As vào đoạn code.

Trước tiên tạo Rule0

Dim i As Integer = 1
Dim A As String

Do While i < 100
A = i.ToString("D3") 'Chuyển String 1 ký tự thành 3 ký tự
If Dir(ThisDoc.PathAndFileName(False) &  "-" & A & ".ipt") = "" Then
ThisDoc.Document.SaveAs(ThisDoc.PathAndFileName(False) & "-" & A & ".ipt", True)

MessageBox.Show("File (" & ThisDoc.PathAndFileName(False) & "-" & A & ".ipt) Was Save.", "Title")
Exit Do 
End If

i = i + 1
Loop

Khi chạy Rule0. Một file sẽ được tạo ra với tên là 01-002.ipt, nếu đã tạo một file 01-001.ipt. Thông báo sẽ xuất hiện ra màn hình.

Tiếp theo, ta sẽ tạo một Form để Tạo nhiều tham số thông tin hơn về một file được tạo ra như tên file, tiêu đề, mô tả,…

Vào Parameters tạo thêm vài User Parameters: Part_No, Titile, Save_Copy_As. Sửa lại dòng code như bên dưới:

Dim i As Integer = 1
Dim A As String

iProperties.Value("Project", "Part Number") = Part_No
iProperties.Value("Summary", "Title") = Title & " (" & Length & "x" & Height & "x" & Width & ")"

Do While i < 100
A = i.ToString("D3") 'Chuyển String 1 ký tự thành 3 ký tự
If Dir(ThisDoc.Path &  "\01-" & A & ".ipt") = "" Then
ThisDoc.Document.SaveAs(ThisDoc.Path & "\01-" & A & ".ipt", Save_Copy_As)
MessageBox.Show("File (" & ThisDoc.Path & "\01-" & A & ".ipt) đã được lưu.", "Title")
Exit Do 
End If
i = i + 1
Loop

Sau đó tạo Form:

Sau khi hoàn thành, chạy Form và nhập các tham số vào các ô. Nhấn Apply Script sẽ tạo ra một file với các tham số của file là các tham số vừa nhập. Sau đó hiện ra thông báo File đã lưu.

Tham khảo: Youtube Video-Tutorial.Net

3 bình luận trong “Autodesk Inventor: iLogic Tutorial

  1. Thank you, I have just been searching for information approximately this topic for a while and yours is the best I have found out so far. However, what in regards to the bottom line? Are you certain concerning the supply?

Để lại một bình luận

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 *