Giới thiệu
Trước khi viết bài báo này, tôi đã thăm dò những người sẽ tham dự lớp AU và hỏi họ một vài câu hỏi. Trong số những người trả lời, tôi phát hiện ra rằng một tỷ lệ lớn hiện không viết chương trình cho Inventor nên mặc dù chủ đề này là chủ đề API Inventor nâng cao hơn, tôi muốn cung cấp cho những người mới làm quen với lập trình Inventor một số thông tin cơ bản và các tài nguyên khác để giúp bạn bắt đầu và có thể hiểu phần còn lại của bài báo.
API là gì?
“Giao diện lập trình ứng dụng” hay viết tắt là “API”, là thứ mà ứng dụng hỗ trợ cho phép bạn điều khiển bằng chương trình. Mọi người đều quen thuộc với giao diện người dùng đồ họa. Ví dụ, trong Inventor, bạn có cửa sổ đồ họa nơi bạn xem mô hình của mình và có ruy-băng và menu ngữ cảnh nơi bạn có thể tìm các lệnh cụ thể và chạy chúng. Khi lệnh đang chạy, bạn tương tác với hộp thoại để chỉ định các tùy chọn khác nhau và chọn các mục trong cửa sổ đồ họa để chỉ định đầu vào hình học, sau đó bạn hoàn tất lệnh để thực hiện các thay đổi cho mô hình. Trong giao diện người dùng đồ họa, bạn chỉ định rằng bạn muốn thực hiện một thao tác bằng cách bắt đầu lệnh thích hợp. Sau đó, bạn cung cấp thông tin mà lệnh yêu cầu bằng cách chọn các tùy chọn trong hộp thoại và chọn hình học, sau đó bạn hoàn tất thao tác bằng cách hoàn tất lệnh.
Giao diện lập trình về mặt khái niệm cũng giống như vậy nhưng thay vì chạy lệnh và chọn tùy chọn trong hộp thoại hoặc chọn hình học trong cửa sổ đồ họa, bạn sẽ gọi một hàm lập trình tương đương với lệnh. Bạn cung cấp cùng loại đầu vào cho hàm mà lệnh yêu cầu. Ví dụ, bạn cung cấp các giá trị để chỉ ra các giá trị của cài đặt và bạn cung cấp hình học mà bạn đã thu được bằng các hàm khác trong API. Khi hàm thực thi, nó sẽ cho kết quả giống như lệnh. Trên thực tế, lệnh và hàm API sẽ gọi cùng một hàm nội bộ để tạo ra kết quả mong muốn.
Phần còn lại của bài viết này giả định rằng bạn có hiểu biết cơ bản về API của Inventor, nhưng nếu không, bạn có thể tìm hiểu một số thông tin cơ bản trong Trợ giúp của Inventor, nơi có một phần dành riêng cho API, như hiển thị bên phải.
Các công cụ cho lập trình Inventor
Trước khi đi sâu vào chi tiết về các tiện ích bổ sung (add-in), trước tiên chúng ta hãy xem xét các cách khác nhau để bạn có thể truy cập API của Inventor và ưu và nhược điểm của từng cách. Trước đó, tôi xin nói rằng Inventor sử dụng một số công nghệ của Microsoft có tên là COM (Component Object Model). Không quan trọng để hiểu công nghệ này là gì nhưng tốt hơn là nên hiểu rằng công nghệ này được sử dụng bằng công nghệ chung này. Vì vậy, bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào hỗ trợ COM. Điều này cũng hữu ích vì đây cũng là cách nhiều ứng dụng khác sử dụng API của chúng. Ví dụ: Word, Excel, Visio, Solidworks, Solid Edge và nhiều ứng dụng khác sử dụng cùng công nghệ này. Điều này có nghĩa là phần lớn những gì bạn học được khi lập trình một ứng dụng có thể chuyển giao khi lập trình một ứng dụng khác.
VBA (Visual Basic for Applications)
VBA được tích hợp vào Inventor và cung cấp một môi trường phát triển rất tốt để viết các chương trình hoạt động với API Inventor. VBA được thiết kế để lập trình giao diện COM và vì thế, nó cung cấp khả năng tích hợp tốt nhất.
Ưu điểm:
- Miễn phí và đi kèm với Inventor
- Trình soạn thảo tốt với Intellisense và hoàn thiện mã
- Gỡ lỗi tốt nhất
- Trình duyệt đối tượng tốt nhất
- Có thể tạo hộp thoại tùy chỉnh
- Hầu hết các mẫu trợ giúp trực tuyến là mã VBA
- Trợ giúp API theo ngữ cảnh
Nhược điểm:
- Dựa trên công nghệ VB 6 cũ
- Tạo hộp thoại hạn chế
- Khó tích hợp vào giao diện người dùng Inventor
- Không thể sử dụng Apprentice
- Khó phản hồi các sự kiện
- Trên thực tế, nó chỉ giới hạn ở việc tạo macro
- Thường được thực hiện từ hộp thoại Macro
- Khó chia sẻ với người khác
iLogic
iLogic là một công cụ được cung cấp cùng với Inventor, ban đầu được thiết kế để cho phép cấu hình các bộ phận dễ dàng. Bạn có thể tạo “quy tắc” (rules), về cơ bản là các chương trình sửa đổi các tham số và trạng thái loại bỏ các tính năng để tạo ra cấu hình bộ phận. Bạn có thể dễ dàng xác định các đầu vào cho một bộ phận và iLogic tạo một biểu mẫu để người dùng chỉnh sửa các giá trị đó rồi sửa đổi bộ phận đó. Để sử dụng một số chức năng cơ bản này, bạn thậm chí không cần phải viết bất kỳ mã nào. Đối với loại chức năng cơ bản này, rất khó để đánh bại iLogic. Để tạo các quy tắc phức tạp hơn, iLogic cung cấp trình soạn thảo mã và hỗ trợ một số chức năng cụ thể của iLogic nhằm mục đích giúp sử dụng đơn giản hơn so với API của Inventor. Tuy nhiên, bạn cũng có thể truy cập toàn bộ API của Inventor từ bên trong một quy tắc của iLogic. Điều đã xảy ra là mọi người bắt đầu viết các quy tắc iLogic đơn giản nhưng cần nhiều chức năng hơn và bắt đầu kết hợp API của Inventor vào các quy tắc của họ. Nhiều người hiện đang viết các chương trình API của Inventor thuần túy dưới dạng các quy tắc của iLogic. Điều này hiệu quả nhưng cũng có nghĩa là bạn phải giải quyết tất cả các nhược điểm của iLogic. Danh sách ưu và nhược điểm dưới đây liên quan đến việc sử dụng iLogic làm môi trường lập trình chung cho API Inventor.
Ưu điểm:
- Miễn phí và đi kèm với Inventor
- Sử dụng các ngôn ngữ và thư viện mới dựa trên .NET
- Dễ dàng lắng nghe và phản hồi các sự kiện
- Các công cụ đơn giản để cấu hình các bộ phận
Nhược điểm:
- Chỉnh sửa kém
- Không có gỡ lỗi tương tác
- Không có trình duyệt đối tượng
- Không thể sử dụng Apprentice
- Giới hạn trong việc tạo macro hoặc phản hồi các sự kiện được iLogic hỗ trợ
- Thường được thực thi từ trình duyệt iLogic
- Khó chia sẻ với người khác
EXE Macros
Đây là một khái niệm rất cũ mà tôi đã cập nhật để thân thiện hơn với người dùng. Luôn có thể viết một chương trình thực thi (EXE) có thể sử dụng API Inventor. Bạn tạo EXE rồi chạy EXE từ Windows Explorer và nó sẽ kết nối và điều khiển Inventor bằng API. Ưu điểm lớn nhất của macro EXE là bạn có thể sử dụng Visual Studio để viết. Vấn đề với việc tạo EXE là bạn cần chạy chúng từ Windows Explorer. Bạn không thể dễ dàng thêm các nút mới vào giao diện người dùng. Khả năng “Nifty EXE Macro” mới của tôi cho phép bạn tạo EXE theo cùng cách chúng vẫn luôn được tạo nhưng sau đó cho phép bạn dễ dàng tạo các nút trong giao diện người dùng Inventor để thực thi chúng. Bạn có thể xác định biểu tượng cho nút, chú thich công cụ, mô tả và thậm chí cả hình ảnh được hiển thị cho chú thich công cụ mở rộng. Và không giới hạn ở các EXE sử dụng API Inventor, nhưng bạn có thể tạo các nút sẽ chạy bất kỳ EXE nào. Ví dụ, bạn có thể tạo một nút để mở chương trình Máy tính hoặc Notepad, như được hiển thị bên dưới. Để biết thêm thông tin về EXE Macro, hãy truy cập trang web tại https://EkinsSolutions.com.
Viết một file EXE dễ hơn nhiều so với viết một add-in nhưng vì nó sử dụng cùng một công nghệ (Visual Studio) nên đây là cách tuyệt vời để bắt đầu sử dụng API và cuối cùng là tạo ra các add-in.
Ưu điểm:
- Sử dụng Visual Studio
- Sử dụng các ngôn ngữ và thư viện mới dựa trên .NET
- Dễ dàng thêm nút vào giao diện người dùng
- Có thể sử dụng Apprentice
- Có thể dễ dàng chia sẻ với người khác
- Có thể sử dụng bất kỳ ngôn ngữ nào hỗ trợ COM
Nhược điểm:
- Phải cài đặt và cấp phép cho Visual Studio
- Trên thực tế, nó chỉ giới hạn ở việc tạo macro
- Có thể sử dụng các sự kiện nhưng không tốt cho hầu hết các sự kiện Inventor
- Hiệu suất chậm hơn do hết quy trình (out-of-process)
Add-Ins
Bây giờ, cuối cùng chúng ta cũng đến chủ đề chính về Add-Ins. Tất cả các phương pháp lập trình được mô tả cho đến nay đều có quyền truy cập đầy đủ vào API của Inventor. Một số cung cấp quyền truy cập tốt hơn hoặc dễ dàng hơn vào một số phần nhất định của API (chủ yếu là sự kiện và Apprentice), nhưng tất cả chúng đều sử dụng cùng một API của Inventor và do đó, có thể thực hiện cùng một việc bên trong Inventor. Sự khác biệt lớn giữa chúng theo quan điểm của nhà phát triển là mức độ dễ dàng để viết mã đó. Sự khác biệt lớn giữa chúng theo quan điểm của người dùng cuối là mức độ dễ dàng để truy cập vào chức năng mà chương trình cung cấp và liệu nó có hoạt động như mong đợi hay không.
Điều tuyệt vời mà một add-in cung cấp là khả năng cung cấp quyền truy cập dễ dàng, trực quan vào các lệnh mà nó cung cấp. Add-In thực hiện điều này bằng cách được Inventor tự động khởi động khi Inventor được khởi động. Là một phần của quy trình khởi động, một add-in thêm các nút cho các lệnh của nó vào giao diện người dùng Inventor. Add-in tiếp tục chạy trong toàn bộ phiên Inventor nhưng nó chỉ nằm im ở chế độ nền chờ phản hồi khi người dùng nhấp vào một trong các nút lệnh của nó. Khi một lệnh được nhấp vào thì không có nhiều sự khác biệt, nếu có, giữa mã sẽ được viết cho iLogic hoặc Macro EXE.
Đối với người dùng cuối, các lệnh được cung cấp thông qua tiện ích bổ sung có vẻ là các lệnh Inventor chuẩn. Ví dụ, iLogic là một tiện ích bổ sung và Tube and Pipe, Cable and Harness, và Frame Generator cũng vậy. Tất cả các chương trình này đều sử dụng API Inventor để cung cấp quyền truy cập vào các lệnh của chúng và để tương tác với Inventor và chúng có vẻ là một phần cốt lõi của Inventor.
Vì chúng được tải khi Inventor khởi động và tiếp tục chạy ở chế độ nền, chúng cũng là giải pháp tốt nhất khi bạn có một chương trình hướng sự kiện. Khi chúng được tải, chúng có thể kết nối với các sự kiện quan tâm và sau đó phản ứng tương ứng khi Inventor gọi chúng khi sự kiện đó được kích hoạt.
Giống như EXE, bạn đang biên dịch phần bổ trợ của mình để tạo mã được thực thi khi chạy. Tuy nhiên, với phần bổ trợ, bạn đang tạo một DLL được tải vào quy trình Inventor và chạy.
Ưu điểm:
- Sử dụng Visual Studio
- Sử dụng các ngôn ngữ và thư viện mới dựa trên .NET
- Tốt nhất khi thêm lệnh ở bất kỳ đâu trong giao diện người dùng (ribbon, menu ngữ cảnh, thanh công cụ, v.v.)
- Tốt nhất khi có thể sử dụng tất cả các sự kiện được hỗ trợ bởi API Inventor
- Có thể dễ dàng chia sẻ với người khác
- Có thể sử dụng bất kỳ ngôn ngữ nào hỗ trợ COM
Nhược điểm:
- Phải cài đặt và cấp phép cho Visual Studio
- Phát triển phức tạp hơn
- Không thể sử dụng Apprentice
Visual Studio
Để tạo EXE hoặc tiện ích bổ sung, bạn cần cài đặt và sử dụng Visual Studio. Visual Studio cung cấp trải nghiệm chỉnh sửa mã tốt nhất trong số các giải pháp lập trình Inventor với các tính năng sau:
Code Editing
Visual Studio dễ dàng là môi trường phát triển tốt nhất trong các môi trường lập trình được liệt kê ở trên. Điều mà bạn sẽ nhanh chóng đánh giá cao và vô cùng bỏ lỡ trong hầu hết các môi trường phát triển khác là thứ mà Microsoft gọi là “Intellisense”. Đây là một công cụ hỗ trợ hoàn thành mã, hiển thị cho bạn các tùy chọn khả thi và nhập mã cho bạn.
Interactive Error Handling
Khi bạn viết chương trình, Visual Studio liên tục kiểm tra lỗi và hiển thị chúng bằng cách làm nổi bật mã của bạn và cung cấp thông tin chi tiết hơn trong cửa sổ “Danh sách lỗi”.
Debugging
Việc gỡ lỗi không tốt bằng VBA nhưng vẫn rất tốt.
Object Browser
Một lần nữa, Object Browser không tốt bằng VBA, nhưng Visual Studio vẫn cung cấp Object Browser để cho phép bạn xem các đối tượng, phương thức và thuộc tính do API của Inventor cung cấp.
Form Development
Visual Studio cung cấp các công cụ tốt nhất để tạo hộp thoại tùy chỉnh. Bạn có thể phát triển hộp thoại bằng Windows Forms hoặc Windows Presentation Foundation (WPF) mới hơn.
Visual Studio là một trong những Môi trường phát triển tích hợp (IDE) của Microsoft. Có nhiều phiên bản Visual Studio khác nhau và tất cả đều hỗ trợ nhiều ngôn ngữ khác nhau (Visual Basic, C#, C++, v.v.). Sau đây là mô tả ngắn gọn về từng loại Visual Studio để giúp bạn hiểu loại nào có sẵn và loại nào phù hợp nhất với bạn.
Visual Studio Professional (https://visualstudio.microsoft.com/vs/professional/)
Đây là phiên bản mà hầu hết các nhà phát triển chuyên nghiệp đang sử dụng. Phiên bản này hỗ trợ mọi thứ cần thiết để tạo tiện ích bổ sung. Phiên bản này được mua từ Microsoft và được cấp phép để bạn có thể bán phần mềm mà bạn viết. Giá bán lẻ đầy đủ cho giấy phép Visual Studio Professional là $499.
Visual Studio Community (https://visualstudio.microsoft.com/vs/community/)
Đây là phiên bản được Microsoft giới thiệu cách đây vài năm. Phiên bản này có cùng khả năng như Visual Studio Professional, nhưng miễn phí. Tuy nhiên, miễn phí cũng đi kèm giấy phép có giới hạn. Sau đây là những ai có thể sử dụng miễn phí theo trích dẫn trực tiếp từ trang web của Microsoft.
Individuals – Bất kỳ nhà phát triển nào cũng có thể sử dụng Visual Studio Community để tạo ứng dụng miễn phí hoặc trả phí của riêng mình.
Organizations – Số lượng người dùng không giới hạn trong một tổ chức có thể sử dụng Visual Studio Community cho các tình huống sau: trong môi trường học tập trên lớp , cho nghiên cứu học thuật hoặc để đóng góp cho các dự án nguồn mở.
Đối với tất cả các tình huống sử dụng khác: Trong các tổ chức phi doanh nghiệp, tối đa năm người dùng có thể sử dụng Visual Studio Community. Trong các tổ chức doanh nghiệp (tức là những tổ chức có >250 PC hoặc >1 Triệu đô la Mỹ doanh thu hàng năm), không được phép sử dụng ngoài các tình huống nguồn mở, nghiên cứu học thuật và môi trường học tập trong lớp học được mô tả ở trên.
Visual Studio Express (https://visualstudio.microsoft.com/vs/express/)
Visual Studio Express cũng miễn phí nhưng thay vì có giấy phép hạn chế, nó có khả năng hạn chế. Điều này có nghĩa là bất kỳ ai, bao gồm cả những người thuộc tổ chức doanh nghiệp, đều có thể cài đặt và sử dụng Visual Studio Express để tạo ứng dụng miễn phí hoặc trả phí. Nếu bạn không đủ điều kiện cho phiên bản Cộng đồng, Express là một lựa chọn tuyệt vời. Tuy nhiên, Microsoft cho biết Visual Studio Express 2017 sẽ là phiên bản cuối cùng và sau đó sẽ ngừng cung cấp. Sau đó, bạn sẽ cần sử dụng phiên bản Cộng đồng hoặc Chuyên nghiệp.
Visual Studio Express có một số hạn chế và thật không may, những hạn chế này ảnh hưởng đến việc tạo add-in, nhưng chúng có thể được giải quyết để vẫn có thể tạo add-in. Những hạn chế và giải pháp thay thế sẽ được mô tả trong bài viết này.
Visual Studio Code (https://code.visualstudio.com/)
Bạn có thể nghe về một biến thể Visual Studio khác có tên là Visual Studio Code. Đây là một môi trường phát triển đa nền tảng nguồn mở mới. Nó thường được sử dụng cho phát triển web nhưng cũng có thể được sử dụng cho các loại phát triển khác. Tuy nhiên, hiện tại nó không hỗ trợ Visual Basic hoặc các khả năng cần thiết để viết tiện ích bổ sung Inventor.
Tạo Add-In
Mã bổ trợ (add-in) tương tác với Inventor thực sự không khác gì mã sẽ được viết bằng một trong những cách khác để truy cập API đã được mô tả trước đó. Tuy nhiên, có một số cấu trúc bổ sung xung quanh một bổ trợ cho phép nó được Inventor tìm thấy và tải. Tất cả các cấu trúc và mã bổ sung này có thể khiến việc phát triển một bổ trợ trở nên hơi khó khăn, đặc biệt là đối với một lập trình viên mới. Tôi khuyên bạn nên bắt đầu bằng cách viết các chương trình EXE Macro, có thể dễ dàng chuyển đổi thành một bổ trợ sau này, nếu bạn quyết định rằng điều đó sẽ tốt hơn.
Templates
Để giúp tạo ra tất cả các cấu trúc mã cần thiết, bạn có thể sử dụng mẫu bổ trợ để tạo mã bổ trợ ban đầu. Có hai mẫu khác nhau, như mô tả bên dưới. Phần còn lại của bài viết này giả định rằng bạn đang sử dụng tùy chọn thứ hai, Mẫu bổ trợ Nifty.
Standard Add-In Template
Để có quyền truy cập vào mẫu bổ trợ do Inventor cung cấp, bạn cần cài đặt Inventor SDK. Khi bạn cài đặt Inventor, trình cài đặt cho Inventor SDK (Software Development Kit) cũng được cài đặt nhưng sau đó bạn cần chạy trình cài đặt đó theo cách thủ công để cài đặt SDK. Trình cài đặt cho SDK được cài đặt trong (trong đó XXXX là phiên bản):
C:\Users\Public\Documents\Autodesk\Inventor XXXX\SDK
Bên trong thư mục đó, hãy chạy “developertools.msi”. Thao tác này sẽ cài đặt mẫu bổ trợ cho Visual Basic, C# và C++ và cũng sẽ tạo thư mục DeveloperTools trong cùng thư mục ở trên. Thư mục DeveloperTools chứa nhiều mẫu và công cụ hữu ích khi phát triển cho Inventor.
Nifty Add-In Template
Tôi đã phát triển mẫu tiện ích bổ sung của riêng mình mà tôi tin rằng sẽ giúp phát triển tiện ích bổ sung dễ dàng hơn so với khi sử dụng mẫu tiện ích bổ sung chuẩn. Bạn có thể truy cập mẫu tiện ích bổ sung mới của tôi trên trang web tại https://EkinsSolutions/apps. Phần còn lại của cuộc thảo luận này giả định rằng bạn đang sử dụng Mẫu tiện ích bổ sung Nifty.
Creating your Add-In
Để tạo một tiện ích bổ sung, bạn khởi động Visual Studio và chạy lệnh New Project từ menu File , như hiển thị bên dưới.
Trong hộp thoại New Project, chọn “Visual Basic” từ danh mục “Installed” ở bên trái, sau đó chọn mẫu “Nifty Add-In Inventor 2018”. Cuối cùng, nhập tên (không có bất kỳ khoảng trắng nào) và vị trí mà add-in sẽ được tạo. Tôi đang sử dụng “AU_Example” và nó có thể được đặt ở bất kỳ đâu. Nếu hộp kiểm “Create directory for solution” được chọn, hãy bỏ chọn và nhấp vào OK.
Bây giờ, bạn có thể xây dựng dự án để tạo DLL cho tiện ích bổ sung của mình bằng cách chạy lệnh Build Solution trong menu Build như hiển thị bên dưới.
Trong tab “Output” ở cuối Visual Studio, bạn sẽ thấy rằng bản dựng đã thành công. Nếu bạn không thấy cửa sổ đầu ra, hãy nhấn Ctrl+Alt+O.
Xin chúc mừng, bạn vừa tạo xong tiện ích bổ sung đầu tiên. Khởi động Inventor để xem điều gì xảy ra. Nếu Inventor đã chạy, hãy tắt và khởi động lại. Inventor đã triển khai một số biện pháp bảo mật để chặn bất kỳ tiện ích bổ sung nào không xác định chạy. Bạn sẽ cần cấp quyền rõ ràng để cho phép tiện ích bổ sung của mình chạy. Khi bạn thấy hộp thoại bên dưới xuất hiện, hãy nhấp vào OK và để Inventor hoàn tất quá trình khởi động.
Sau khi Inventor được bật, hãy chạy lệnh Add-Ins từ tab Tools trong ribbon. Tìm addin của bạn trong danh sách, chọn nó, sau đó thay đổi cài đặt “Load Behavior” để các cài đặt “Loaded/Unloaded” và “Load Automatically” được chọn và “Block” được bỏ chọn, như hiển thị bên dưới. Các cài đặt này được Inventor ghi nhớ, vì vậy bạn chỉ cần thực hiện thao tác này một lần cho một add-in mới.
Vì bạn đã chọn hộp kiểm “Loaded”, nên tiện ích bổ sung của bạn sẽ được tải khi bạn nhấp vào “OK”. Bạn có thể mở Trình quản lý tiện ích bổ sung để xác minh rằng hành vi tải của nó hiện là “Automatic / Loaded”. Hoặc cách tốt nhất để xác minh rằng giao diện người dùng của tiện ích bổ sung đã được tạo thành công là đảm bảo rằng nó khả dụng trong Inventor. Mẫu tiện ích bổ sung tạo một lệnh mới và thêm một nút vào tab Tools của Part ribbon, như được hiển thị bên phải. Mở bất kỳ part nào và xác minh rằng nó tồn tại trong tab Tools.
Chạy lệnh sẽ hiển thị hộp thông báo bên dưới.
Chỉnh sửa Giao diện của Add-In của bạn
Mẫu bổ trợ sử dụng một số mặc định để xác định các cài đặt khác nhau của bổ trợ của bạn. Bây giờ bạn có thể thay đổi các cài đặt kiểm soát cách người dùng nhìn thấy bổ trợ của bạn. Yêu cầu của tất cả các bổ trợ là phải có tệp .addin. Bạn sẽ thấy tệp này trong cửa sổ “Solutions Explorer” trong Visual Studio như hiển thị bên phải. Nhấp vào tệp và nó sẽ mở một cửa sổ trong Visual Studio để cho phép bạn chỉnh sửa tệp. Tệp .addin là tệp được định dạng XML và nội dung của tệp được hiển thị bên dưới.
<Addin Type="Standard">
<!--Created for Autodesk Inventor 2018 (Version 22.0)-->
<ClassId>{c322e19b-5e98-46c5-bfe1-fe8cd2e4c173}</ClassId>
<ClientId>{c322e19b-5e98-46c5-bfe1-fe8cd2e4c173}</ClientId>
<DisplayName>AU_Example</DisplayName>
<Description>AU_Example</Description>
<Assembly>AU_Example.dll</Assembly>
<LoadOnStartUp>1</LoadOnStartUp>
<UserUnloadable>1</UserUnloadable>
<Hidden>0</Hidden>
<SupportedSoftwareVersionGreaterThan>21..</SupportedSoftwareVersionGreaterThan>
<DataVersion>1</DataVersion>
<UserInterfaceVersion>1</UserInterfaceVersion>
</Addin>
Các phần tử ClassId và ClientId là các định danh duy nhất của tiện ích bổ sung của bạn. Theo mặc định, chúng giống nhau và không có lý do gì để thay đổi chúng. Mỗi lần bạn tạo một dự án tiện ích bổ sung mới, một ID mới sẽ được tạo ra để mỗi tiện ích bổ sung là duy nhất.
Phần tử DisplayName là tên của tiện ích bổ sung khi nó được hiển thị trong Trình quản lý tiện ích bổ sung (Add-In Manager) và phần tử Description là mô tả được thấy trong Trình quản lý tiện ích bổ sung. Bạn có thể muốn chỉnh sửa những phần này để chúng thân thiện với người dùng hơn tên dự án mặc định. Đây là nơi bạn có thể thay đổi tên để bao gồm khoảng trắng. Tôi đang đổi tên thành “AU Example Add-In” và description thành “Đây là tiện ích bổ sung ví dụ cho lớp AU trên tiện ích bổ sung Inventor”.
Phần tử Assembly là tên tệp của DLL bổ trợ. Theo mặc định, đây là tên tệp không có bất kỳ đường dẫn nào. Bạn có thể chỉ định tên tệp bằng đường dẫn đầy đủ hoặc tương đối. Đề xuất của tôi là để nguyên như vậy với chỉ tên tệp. Inventor sẽ tìm thấy nó vì nó tìm kiếm DLL bổ trợ bằng đường dẫn tương đối liên quan đến vị trí của tệp .addin. Trong trường hợp này, vì DLL nằm trong cùng thư mục với tệp .addin, nên Inventor sẽ tìm thấy nó.
Phần tử còn lại đáng quan tâm là phần tử “SupportedSoftwareVersion”. Phần tử này xác định thời điểm nên tải một tiện ích bổ sung. Phần tử này chỉ định phiên bản nào của Inventor mà tiện ích bổ sung hợp lệ. Trong ví dụ này, nó đang được tải bởi Inventor 2018 trở lên. Inventor 2018 là phiên bản 22 và điều này chỉ định rằng tiện ích bổ sung sẽ tải cho các phiên bản sau 21.
Bạn có thể đọc thêm về các tùy chọn phiên bản khác và một số cài đặt khác có thể được xác định trong tệp .addin trong chủ đề trợ giúp API Inventor được hiển thị bên dưới.
Sau khi xây dựng lại dự án và khởi động lại Inventor, bạn có thể thấy rằng tiện ích bổ sung hiện xuất hiện trong Trình quản lý tiện ích bổ sung. Tên trong danh sách và mô tả đã thay đổi do chỉnh sửa tệp .addin. Các trường “Publisher” và “Signature” trong hộp thoại nằm ngoài phạm vi của bài báo này nhưng liên quan đến việc ký DLL, không bắt buộc.
Chỉnh sửa hành vi của Add-In của bạn
Bây giờ bạn có một tiện ích bổ sung đang chạy hiển thị đúng trong Trình quản lý tiện ích bổ sung nhưng nó không có hành vi bạn muốn. Rất có thể bạn muốn nút lệnh xuất hiện ở một vị trí khác và có biểu tượng khác. Và bạn chắc chắn muốn nó thực hiện một hành động khác khi bạn nhấp vào nút. Sau đây là các bước để thay đổi từng hành động này.
Xác định tên và biểu tượng của lệnh
Trước khi xem xét hành vi, hãy xem cách thay đổi giao diện của lệnh trong giao diện người dùng. Đầu tiên, chúng ta sẽ xem xét hai điều xác định lệnh này; tên và biểu tượng của lệnh. Tên mặc định của lệnh là “Tên lệnh” và biểu tượng là biểu tượng mặc định hiển thị búa và cờ lê. Để thay đổi tên, bạn sẽ cần chỉnh sửa mã tạo ra lệnh.
Trong “Solution Explorer”, hãy nhấp vào “StandardAddInServer.vb” để mở tệp đó trong Visual Studio. Để một tiện ích bổ sung hoạt động, nó phải triển khai một giao diện mà Inventor đã chỉ định. Về cơ bản, điều này có nghĩa là tiện ích bổ sung phải hiển thị một đối tượng API và đối tượng đó phải hỗ trợ một số hàm cụ thể. Khi Inventor khởi động, nó sẽ tìm kiếm tất cả các tiện ích bổ sung khả dụng (cách thực hiện sẽ được thảo luận sau) và sau đó tải chúng. Là một phần của quá trình tải, Inventor gọi một trong các hàm trên giao diện được xác định này. Trong hàm này, tiện ích bổ sung sử dụng API Inventor để tạo lệnh của nó và định vị nó trong giao diện người dùng.
Mã cho StandardAddInServer.vb được hiển thị bên dưới với ba dòng được tô sáng. Câu lệnh Implements cho biết lớp này đang triển khai giao diện bổ trợ Inventor.
Dòng tiếp theo khai báo một biến cho lệnh của tiện ích bổ sung. Một tiện ích bổ sung có thể hỗ trợ nhiều lệnh. Ví dụ, Tube và Pipe có nhiều lệnh, tất cả đều được định nghĩa trong một tiện ích bổ sung duy nhất. Mẫu Tiện ích bổ sung Nifty tạo một tiện ích bổ sung bằng một lệnh duy nhất. Bạn có thể chỉnh sửa lệnh đó thành của riêng mình và sử dụng nó làm ví dụ khi bạn thêm các lệnh bổ sung. Dòng thứ hai được tô sáng bên dưới là khai báo của một biến có kiểu ButtonDefinition. Một đối tượng ButtonDefinition định nghĩa cách một nút sẽ được hiển thị trong giao diện người dùng và nó phản ứng khi nút được nhấp. Bạn sẽ cần một dòng như dòng bên dưới cho mỗi nút được tiện ích bổ sung của bạn định nghĩa. Từ khóa “WithEvents” chỉ định rằng đối tượng có thể hỗ trợ các sự kiện, mà chúng ta cần trong trường hợp này để nhận thông báo sự kiện khi nút được nhấp. Tên của biến này có thể là bất kỳ tên biến Visual Basic hợp lệ nào. Mẫu sử dụng ký hiệu thêm “m_” vào tên để chỉ ra rằng đó là một “biến thành viên” (“member variable”) trong lớp. Điều này có nghĩa là nó có sẵn trên toàn cầu trong lớp. Bạn cũng có thể đổi tên “m_sampleButton” thành tên phù hợp hơn với lệnh của bạn.
Dòng được tô sáng cuối cùng trong mã ở trên là vùng “ApplicationAddInServer Members”. Đây là một khối mã hiện đang được thu gọn. Visual Studio hỗ trợ tạo vùng do người dùng xác định để cho phép bạn sắp xếp mã của mình bằng cách thu gọn và mở rộng để giữ cho chế độ xem hiện tại của bạn không bị lộn xộn. Nhấp vào dấu “+” ở bên trái tên để mở rộng vùng.
Bên trong vùng này là định nghĩa của các phương thức Activate, Deactivate, Automation và ExecuteCommand. Đây là các hàm phải được triển khai như một phần của việc triển khai giao diện ApplicationAddInServer. Activate và Deactivate là những hàm quan trọng nhất. Activate Sub được Inventor gọi khi add-in được tải và Deactivate được gọi khi add-in được dỡ tải (unloaded).
1 Public Sub Activate(ByVal addInSiteObject As Inventor.ApplicationAddInSite, 2 ByVal firstTime As Boolean) Implements Inventor.ApplicationAddInServer.Activate
3 Try
4 ' Initialize AddIn members.
5 g_inventorApplication = addInSiteObject.Application
6
7 ' Connect to the user-interface events to handle a ribbon reset.
8 m_uiEvents = g_inventorApplication.UserInterfaceManager.UserInterfaceEvents
9
10 '*********************************************************************************
11 '* The remaining code in this Sub is all for adding the add-in into Inventor's UI.
12 '* It can be deleted if this add-in doesn't have a UI and only runs in the
13 '* background handling events.
14 '*********************************************************************************
15
16 ' Create the button definition using the CreateButtonDefinition function to simplify
17 ' this step.
18 m_sampleButton = Utilities.CreateButtonDefinition("Command" & vbCr & "Name", _
19 "niftyCommandID", _
20 "", _
21 "ButtonResources\SampleButton")
22
23 ' Add to the user interface, if it's the first time.
24 If firstTime Then
25 AddToUserInterface()
26 End If
27 Catch ex As Exception
28 MsgBox("Unexpected failure in the activation of the add-in ""AU_Example""" & _ 29 vbCrLf & vbCrLf & ex.Message)
30 End Try
31 End Sub
Ở dòng 1, bạn có thể thấy rằng một trong những đối số được truyền vào tiện ích bổ sung được gọi là addInSiteObject và thuộc loại đối tượng ApplicationAddInSite. Đối tượng này không làm được nhiều, nhưng nó được sử dụng ở dòng 5 để lấy đối tượng Ứng dụng Inventor và gán nó cho một biến. Vì lý do này, tiện ích bổ sung hiện có quyền truy cập vào toàn bộ API Inventor.
Dòng 18 gọi hàm tạo đối tượng ButtonDefinition. Hàm CreateButtonDefinition không phải là một phần của API Inventor nhưng là hàm mới tôi viết được định nghĩa trong mẫu addin. Nó giúp tạo ButtonDefinition dễ dàng hơn và có bốn đối số như được liệt kê bên dưới.
DisplayName – Đối số đầu tiên là tên hiển thị. Đây là tên của lệnh được hiển thị trên nút. Trong ví dụ trên, nó được định nghĩa là “Command Name” với dấu xuống dòng ở giữa để buộc nó chia thành hai dòng, như hiển thị bên phải.
InternalName – Đối số thứ hai là tên nội bộ. Đây là tên phải duy nhất so với tất cả các lệnh khác. Người dùng không bao giờ nhìn thấy tên này nhưng nó đóng vai trò là ID duy nhất cho lệnh này. Không có quy tắc nào cho tên này ngoài việc nó phải duy nhất. Nên thêm tên hoặc tên công ty của bạn vào tên để giúp đảm bảo tính duy nhất. Trong lệnh được tạo bởi mẫu bổ trợ, đó là “niftyCommandID” nhưng bạn nên đổi tên thành tên khác.
Tooltip – Đối số thứ ba là tùy chọn và là tooltip. Nếu bạn không cung cấp đối số này hoặc truyền vào giá trị mặc định là một chuỗi rỗng, thì tên hiển thị sẽ được sử dụng làm tooltip. Tooltip sẽ được hiển thị khi người dùng di chuột qua nút lệnh.
IconFolder – Đối số thứ tư định nghĩa biểu tượng để sử dụng cho lệnh. Trước đây, việc thiết lập biểu tượng là một trong những phần khó khăn nhất khi tạo tiện ích bổ sung nhưng hàm CreateButtonDefinition cố gắng đơn giản hóa việc này. Tất cả những gì bạn cần để định nghĩa biểu tượng là chỉ định một thư mục cho đối số này. Thư mục đó phải chứa hai tệp; 16×16.png và 32×32.png. Đây là những hình ảnh sẽ được hiển thị trên nút. Inventor có thể hiển thị các nút lớn và nhỏ, vì vậy nó cần hai hình ảnh; 16×16 pixel và 32×32 pixel.
Trong ví dụ được tạo bởi mẫu tiện ích bổ sung, thư mục là “ButtonResources\SampleButton”. Đây là đường dẫn liên quan đến DLL tiện ích bổ sung. Đối với mỗi lệnh mới bạn thêm, bạn nên tạo một thư mục mới trong thư mục ButtonResources. Thư mục mới đó sẽ chứa tệp 16×16.png và 32×32.png cho lệnh đó. Nếu bạn sử dụng Windows Explorer để duyệt nội dung của dự án tiện ích bổ sung, bạn sẽ thấy rằng đã có một thư mục ButtonResources và trong thư mục đó là thư mục SampleButton chứa hai tệp png.
Vị trí nút nhấn của bạn
Mã ở trên tạo ra một ButtonDefinition, định nghĩa nút sẽ trông như thế nào nhưng không định nghĩa vị trí của nút trong giao diện người dùng. Bạn thực hiện việc này bằng cách tạo một điều khiển lệnh mới. Điều khiển lệnh định nghĩa vị trí trong giao diện người dùng và là những gì người dùng nhìn thấy và nhấp vào. Điều khiển lệnh tham chiếu đến định nghĩa nút để lấy thông tin cần thiết để hiển thị. Vì vậy, bạn có thể tạo một ButtonDefinition duy nhất và sau đó tạo nhiều điều khiển tham chiếu đến nó. Ví dụ, nếu tôi có một lệnh chung, như calculator, tôi có thể muốn thêm nó vào tất cả các dải ribbons. Mặc dù có nhiều nút, tất cả chúng đều kích hoạt cùng một sự kiện khi bất kỳ nút nào trong số chúng được nhấp vào vì đó là định nghĩa nút duy nhất xử lý sự kiện. Ngoài ra, nếu tôi chỉnh sửa định nghĩa nút, ví dụ, làm cho nó bị vô hiệu hóa, tất cả các điều khiển tham chiếu đến định nghĩa nút đó sẽ bị vô hiệu hóa.
Bạn có toàn quyền kiểm soát vị trí đặt nút của mình, nhưng vì tính linh hoạt đó, nên việc này không thực sự dễ dàng. Để đặt nút, bạn cần hiểu về ribbon và API liên quan.
Ribbon cung cấp cấu trúc phân cấp để truy cập các lệnh của Inventor. Ở đầu phân cấp là ribbon. Ribbon bộ phận được hiển thị bên dưới làm ví dụ. Trong Inventor có 7 ribbon. Các ribbon được sử dụng phổ biến nhất là ZeroDoc (khi không có tài liệu nào được mở), Part, Assembly, Drawing và Presentation. Trong mỗi ribbon có một loạt các tab. Trong Ribbon Part, như được hiển thị bên dưới, có các tab “3D Model”, “Inspect”, “Tools”, “Manage”, “View”, v.v. Mỗi tab chứa các bảng điều khiển. Tab “3D Model” chứa các bảng điều khiển (panels) “Sketch”, “Primitives”, “Create”, “Modify”, v.v. Và cuối cùng, mỗi tab chứa các điều khiển (controls), là các nút riêng lẻ.
Dưới đây là mô hình đối tượng API cho các đối tượng liên quan đến ribbon mà bạn sử dụng để tạo nút và thêm nút đó vào ribbon.
Dưới đây là mã được tạo bởi mẫu bổ trợ thêm điều khiển cho lệnh mẫu. Nó duyệt qua phân cấp Ribbon để lấy một ribbon, tab và bảng điều khiển cụ thể, sau đó tạo một CommandControl mới. Ở dòng 8, nó lấy ribbon có tên là “Part”. Ở dòng 11, nó lấy tab trong part ribbon có tên là “id_TabTools”, tức là tab “Tools”. Ở dòng 13-18, nó cố gắng lấy một panel có tên là “MySample” từ tab công cụ. Ở dòng 20, nó kiểm tra xem có thể lấy panel “MySample” thành công hay không và nếu không, nó sẽ tạo panel đó ở dòng 22. Biến g_addInClientID ở dòng 22 là biến toàn cục mà mẫu tạo ra, chứa ID duy nhất cho add-in. Và cuối cùng, ở dòng 26, nó sử dụng phương thức AddButton để tạo một CommandControl mới trong panel, truyền ButtonDefinition đã được tạo trước đó.
1 ' Adds whatever is needed by this add-in to the user-interface. This is
2 ' called when the add-in loaded and also if the user interface is reset.
3 Private Sub AddToUserInterface()
4 ' This sample code illustrates creating a button on a new panel of the Tools tab of
5 ' the Part ribbon. You'll need to change this to create the UI that your add-in needs.
6
7 ' Get the part ribbon.
8 Dim partRibbon As Ribbon = g_inventorApplication.UserInterfaceManager.Ribbons.Item("Part")
9
10 ' Get the "Tools" tab.
11 Dim toolsTab As RibbonTab = partRibbon.RibbonTabs.Item("id_TabTools")
12
13 ' Check to see if the "MySample" panel already exists and create it if it doesn't.
14 Dim customPanel As RibbonPanel = Nothing
15 Try
16 customPanel = toolsTab.RibbonPanels.Item("MySample")
17 Catch ex As Exception
18 End Try
19
20 If customPanel Is Nothing Then
21 ' Create a new panel.
22 customPanel = toolsTab.RibbonPanels.Add("Sample", "MySample", g_addInClientID)
23 End If
24
25 ' Add a button.
26 customPanel.CommandControls.AddButton(m_sampleButton, True)
27 End Sub
Đây là một ví dụ khác để minh họa các khái niệm. Thông qua API, bạn có thể thêm các nút vào các bảng điều khiển hiện có và bạn có thể tạo các tab và bảng điều khiển của riêng mình. Ví dụ bên dưới hiển thị một lệnh tùy chỉnh “Bulge” được thêm vào bảng điều khiển “Modify” và một bảng điều khiển tùy chỉnh có tên là “Zip” trong đó lệnh tùy chỉnh “Create Zip Shapes” đã được thêm vào.
Bước đầu tiên trong việc thêm lệnh mới là quyết định nút của bạn cần nằm ở đâu. Nó có chức năng tương tự như lệnh Inventor hiện có để bạn có thể muốn đặt nó gần với lệnh đó không? Hay nó thực hiện một điều gì đó hoàn toàn khác so với bất kỳ lệnh nào khác và nó nên nằm trên bảng điều khiển riêng hoặc thậm chí là tab riêng kết hợp với nhiều lệnh tùy chỉnh của bạn hơn? Khi bạn biết mình muốn đặt nó ở đâu, bạn cần lấy tên của các thành phần ribbon liên quan. Ví dụ, đối với lệnh “Bulge” được hiển thị ở trên, tôi cần lấy ribbon “Part”, tab “3D Model” và bảng điều khiển “Modify”. Bạn thậm chí có thể tiến xa hơn và lấy một điều khiển cụ thể trong bảng điều khiển nếu bạn muốn đặt nút của mình bên cạnh nó. Theo mặc định, nó sẽ đi đến cuối các lệnh trong bảng điều khiển.
Để có được từng thành phần ribbon này, bạn cần biết tên của chúng. Để tìm ra tên của chúng bạn sẽ muốn sao chép và dán macro mẫu từ trợ giúp API có tên là “Print information about all available ribbons” https://help.autodesk.com/view/INVNTOR/2018/ENU/?guid=GUID-1C3EE90E-7B76-4E03-A9E6-B03036A7DBA7, như được hiển thị bên dưới. Chạy macro sẽ tạo ra C:\temp\RibbonNames.txt chứa tên của tất cả các thành phần ribbon.
Sử dụng thông tin trong tệp RibbonNames.txt, tôi có thể thấy rằng ribbon part được đặt tên là “Part”, tab “3D Model” được đặt tên là “id_TabModel” và bảng “Modify” là “id_PanelP_ModelModify”. Sử dụng thông tin đó, mã bên dưới sẽ thêm một nút mới vào bảng đó.
' Get the part ribbon.
Dim partRibbon As Inventor.Ribbon = g_inventorApplication.UserInterfaceManager.Ribbons.Item("Part")
' Get the "Model" tab from the part ribbon.
Dim modelTab As Inventor.RibbonTab = partRibbon.RibbonTabs.Item("id_TabModel")
' Get the "Modify" panel from the model tab.
Dim modifyPanel As Inventor.RibbonPanel = modelTab.RibbonPanels.Item("id_PanelP_ModelModify")
' Add the button to the modify panel.
modifyPanel.CommandControls.AddButton(m_bulgeButton, True)
Phản hồi với một nút bấm
Như đã mô tả ở trên, việc tạo một nút liên quan đến việc tạo một đối tượng ButtonDefinition để xác định nút trông như thế nào và sau đó tạo một điều khiển để xác định vị trí của nút trong dải ribbon. Khi biến cho ButtonDefinition được xác định, từ khóa “WithEvents” được sử dụng để chỉ ra cho Visual Basic rằng bạn muốn xử lý các sự kiện được liên kết với đối tượng đó. Đối tượng ButtonDefinition hỗ trợ sự kiện OnExecute. Sự kiện OnExecute được kích hoạt bất cứ khi nào bất kỳ nút nào tham chiếu đến ButtonDefinition được nhấp vào. Bạn phải xử lý sự kiện đó và sau đó thực hiện bất kỳ lệnh nào được cho là sẽ thực hiện. Sau đây là một bản tóm tắt ngắn gọn về cách thiết lập ButtonDefinition và xử lý sự kiện OnExecute. Quá trình tương tự này được sử dụng khi xử lý bất kỳ sự kiện nào khác trong Inventor.
Sau đây là phần giới thiệu ngắn gọn về cách thiết lập ButtonDefinition và xử lý sự kiện OnExecute. Quy trình tương tự này được sử dụng khi xử lý bất kỳ sự kiện nào khác trong Inventor.
Xác định Biến cho Đối tượng Hỗ trợ Sự kiện
Điều này được thực hiện bằng cách khai báo biến tại một nơi mà nó sẽ nằm trong phạm vi trong thời gian mong muốn. Ví dụ, biến cho ButtonDefinition được khai báo là biến thành viên của lớp bổ trợ để nó sẽ vẫn khả dụng trong suốt vòng đời của bổ trợ. Các sự kiện liên quan đến biểu mẫu thường được khai báo trong lớp Biểu mẫu để chúng vẫn khả dụng trong suốt vòng đời của biểu mẫu. Bạn khai báo một biến sẽ hỗ trợ các sự kiện bằng cách sử dụng từ khóa “WithEvents”, như được hiển thị bên dưới.
Private WithEvents m_sampleButton As ButtonDefinition
Dòng trên đang khai báo biến nhưng không gán bất kỳ giá trị nào cho biến đó. Việc này được thực hiện sau trong chương trình bên trong phương thức Activate khi tiện ích bổ sung được tải. Trong mẫu Tiện ích bổ sung Nifty, bạn sẽ thấy rằng nó đang khai báo một biến khác bằng WithEvents có kiểu là UserInterfaceEvents để có thể lắng nghe sự kiện liên quan đến giao diện người dùng. Bạn sử dụng cùng phương pháp này để lắng nghe bất kỳ sự kiện nào của Inventor.
Gán Biến Sự kiện
Sau khi bạn khai báo biến, bạn cần gán một cái gì đó cho nó. Trong mẫu Nifty Add-In, nó gọi phương thức Utilities.CreateButtonDefinition để tạo và trả về một đối tượng ButtonDefition và đối tượng này được gán cho biến m_sampleButton.
Tạo Trình xử lý sự kiện
Bạn khai báo biến, gán biến, sau đó bạn cần một Sub đóng vai trò là trình xử lý sự kiện. Đây là một sub mà Inventor gọi khi sự kiện đó xảy ra. Visual Studio giúp bạn dễ dàng tạo sub này. Ở đầu cửa sổ mã có ba danh sách thả xuống. Nếu tôi mở rộng danh sách ở giữa, tôi sẽ thấy danh sách các biến mà tôi đã khai báo hỗ trợ sự kiện. Trong ví dụ bên dưới, tôi đã chọn “m_sampleButton”. Sau khi một biến được chọn từ danh sách, danh sách thả xuống bên phải sẽ hiển thị danh sách các sự kiện mà đối tượng hỗ trợ. Trong trường hợp này, tôi đã chọn sự kiện OnExecute và Visual Studio tự động tạo một Sub mới có tên là m_sampleButton_OnExecute xử lý sự kiện OnExecute. Bây giờ, khi nhấp vào nút, Sub này sẽ được Inventor gọi. Bạn có thể làm bất cứ điều gì bạn muốn bên trong sub này. Trong ví dụ này, nó gọi một hàm khác thực hiện công việc của lệnh.
Viết mã lệnh
Mọi thứ tôi đã nói đến cho đến nay đều là về các công cụ lập trình có sẵn và việc tạo ra cấu trúc cơ bản của tiện ích bổ sung. Khi người dùng nhấp vào nút, thì tất cả đều liên quan đến những gì bạn làm để phản hồi lại cú nhấp đó. Mã mà bạn viết để phản hồi cú nhấp là độc lập với tiện ích bổ sung và có thể được viết dưới dạng quy tắc iLogic chỉ sử dụng API Inventor hoặc Macro EXE do đó, việc nói về mã là một chủ đề khá chung chung vì nó không liên quan gì đến các chi tiết cụ thể của tiện ích bổ sung. Tuy nhiên, vì tôi tin rằng Visual Studio là một môi trường tốt hơn nhiều để viết mã, tôi nghĩ đối với các chương trình của bạn không cần bất kỳ chức năng cụ thể nào của iLogic thì tốt nhất là viết EXE hoặc tiện ích bổ sung.
Có khả năng là bạn đã có một số mã có thể được sử dụng trong tiện ích bổ sung hoặc Macro EXE. Mã hiện tại của bạn có thể đã được viết bằng VBA hoặc iLogic. Hầu hết các mã mẫu trong trợ giúp API của Inventor là mã VBA và các biến thể của các mẫu có thể hữu ích trong các chương trình của bạn. Sau đây là một số thông tin giúp bạn chuyển đổi mã hiện tại.
Chuyển đổi chương trình iLogic
Trước tiên, iLogic là gì? Về cơ bản, đây là một IDE (Môi trường phát triển tích hợp) khác dành cho Inventor. Nó hỗ trợ ngôn ngữ Visual Basic .NET và cung cấp quyền truy cập vào API của Inventor. Nó cũng cung cấp thư viện riêng với một số chức năng bổ sung mà bạn có thể sử dụng trong các chương trình của mình, cố gắng đơn giản hóa một số thao tác mà các nhà thiết kế iLogic cho là phổ biến khi cấu hình các parts. Đối với cấu hình part, iLogic là một công cụ tuyệt vời nhưng với tư cách là một môi trường lập trình chung, nó còn nhiều điều đáng mong đợi. Trên diễn đàn Inventor Customization , hầu hết các câu hỏi mà tôi thấy liên quan đến iLogic không phải là câu hỏi về iLogic mà là các câu hỏi chung về API của Inventor và nhà phát triển đang sử dụng giao diện iLogic để viết chương trình của họ. Trong nhiều trường hợp, các vấn đề của họ dễ dàng được giải quyết chỉ bằng cách sao chép mã vào một dự án Visual Studio và để nó tự động tìm ra các vấn đề.
Việc chuyển đổi một chương trình iLogic thành lệnh bổ trợ hoặc macro EXE có thể dễ dàng như sao chép và dán. Điều này đúng trong trường hợp chương trình thực hiện các lệnh gọi API Inventor và không gọi bất kỳ hàm cụ thể nào của iLogic. Nếu chương trình gọi chức năng cụ thể của iLogic thì bạn sẽ cần xác định phạm vi sử dụng của chúng và tìm các phương án thay thế bằng cách sử dụng các lệnh gọi API Inventor chuẩn hoặc các API khác. Tuy nhiên, vì iLogic sử dụng VB.NET, giống như Visual Studio, nên mã chung là giống nhau và các lệnh gọi đến API Inventor sẽ giống nhau.
Chuyển đổi chương trình VBA
Mặc dù VBA và Visual Studio đều sử dụng ngôn ngữ Visual Basic nhưng tốt nhất nên coi chúng như sử dụng hai ngôn ngữ khác nhau. VBA dựa trên Visual Basic gốc của Microsoft, phiên bản mới nhất là Visual Basic 6 và được phát hành vào năm 1998. Visual Studio sử dụng Visual Basic .NET dựa trên công nghệ .NET ra mắt vào năm 2002 và vẫn tiếp tục được cập nhật. Vào năm 2005, phần “.NET” trong tên đã bị loại bỏ nên giờ được gọi là “Visual Basic”.
Nếu bạn muốn sử dụng chương trình VBA hiện có trong tiện ích bổ sung hoặc Macro EXE, điều đó có nghĩa là phải chuyển đổi mã từ ngôn ngữ Visual Basic 6 cũ sang ngôn ngữ Visual Basic .NET mới. Mặc dù có sự khác biệt giữa các ngôn ngữ, nhưng chúng giống nhau nhiều hơn là khác nhau, do đó thường khá dễ sao chép và dán mã VBA rồi thực hiện một vài thay đổi để cập nhật thành Visual Basic .NET. Một số điểm khác biệt này dễ thấy và được VB.NET chỉ ra là lỗi; một số khác không dễ tìm thấy và hiển thị dưới dạng lỗi run-time hoặc kết quả không chính xác. Tốt nhất là sao chép và dán từng hàm một để bạn có thể kiểm tra mã và cố gắng phát hiện bất kỳ sự cố tiềm ẩn nào trong số này. Các sự cố mà tôi nghĩ bạn có nhiều khả năng gặp phải nhất được liệt kê bên dưới.
- The Set statement is no longer needed . Trong VBA, khi bạn gán một đối tượng cho một biến bạn phải sử dụng câu lệnh Set. Câu lệnh này không còn cần thiết trong Visual Basic và trên thực tế, không được phép. Bạn sẽ nhận được lỗi cho bất kỳ câu lệnh Set nào, nhưng để sửa lỗi, tất cả những gì bạn cần làm là xóa Set khỏi dòng.
- Forms. Mặc dù VBA hỗ trợ việc tạo biểu mẫu, nhưng chúng khá thô sơ. Không có cách nào để chuyển đổi biểu mẫu VBA thành biểu mẫu Visual Basic .NET, nhưng bạn có thể muốn thiết kế lại chúng dù sao thì bằng cách sử dụng các khả năng mở rộng của Visual Basic .NET và bạn vẫn có thể sử dụng lại mã đằng sau biểu mẫu bằng cách sao chép và dán vào chương trình Visual Basic .NET. Ví dụ, mã bạn đã viết để phản ứng với một lần nhấp vào nút có thể được sử dụng lại, nhưng hộp thoại và nút trên hộp thoại sẽ phải được tạo lại.
- The global variable ThisApplication isn’t available in Visual Basic .NET . Trước đó, chúng tôi đã trình bày cách một tiện ích bổ sung lấy đối tượng Application thông qua phương thức Activate. Bạn sẽ cần bằng cách nào đó làm cho điều này khả dụng cho mã bạn đã sao chép từ VBA. Mẫu Nifty Add-In lấy đối tượng Application và gán nó cho một biến toàn cục có thể được sử dụng ở bất kỳ nơi nào khác trong chương trình. Điều này chỉ có nghĩa là thay thế bất kỳ nơi nào “ThisApplication” xuất hiện bằng biến toàn cục “g_inventorApplication”.
' Before
Public Sub Sample()
MsgBox "There are " & ThisApplication.Documents.Count & " open."
End Sub
' After
Public Sub Sample()
MsgBox("There are " & g_inventorApplication.Documents.Count & " open.")
End Sub
- VB.NET requires fully qualified enumeration constants. Điều này có nghĩa là câu lệnh bên dưới, hợp lệ trong VBA, không hoạt động trong VB.NET.
oExtrude.Operation = kJoinOperation
Trong VB.NET, bạn phải xác định đầy đủ việc sử dụng kJoinOperation bằng cách chỉ định tên liệt kê như được hiển thị bên dưới.
oExtrude.Operation = PartFeatureOperationEnum.kJoinOperation
Những lỗi này rất dễ phát hiện và sửa vì VB.NET xác định chúng là lỗi và IntelliSense sẽ thực hiện hầu hết công việc để bạn tạo tên đủ điều kiện.
- Method arguments default to ByVal. Trong VBA, các đối số hàm mặc định là ByRef, nghĩa là hàm con hoặc hàm có thể thay đổi các giá trị và các giá trị đã sửa đổi được truyền lại cho người gọi (caller). Với ByVal, giá trị của biến được truyền vào nhưng là cục bộ trong hàm con hoặc nên ngay cả khi giá trị thay đổi thì nó cũng không được truyền lại cho người gọi. Sau đây là một ví dụ để minh họa ý nghĩa của điều này. VBA Sub bên dưới lấy một tính năng làm đầu vào và trả về thông tin về sự ngăn chặn và thong tin kích thước của tính năng.
Sub GetFeatureInfo(Feature As PartFeature, Suppressed As Boolean, DimensionCount As Long)
Trong VBA, mã này hoạt động tốt vì tùy chọn chỉ định đối số là ByRef hay ByVal và nếu bạn không chỉ định thì mặc định là ByRef. Trong ví dụ này, các đối số Suppressed và DimensionCount cần phải là ByRef vì chúng được sử dụng để trả về thông tin cho người gọi. Đối số Feature có thể được khai báo là ByVal vì không mong đợi nó thay đổi. Trong Visual Basic .NET, nếu bạn không chỉ định ByRef hoặc ByVal, thì mặc định là ByVal. Do đó, ví dụ này sẽ không chạy đúng vì các đối số Suppressed và DimensionCount sẽ không trả về giá trị đúng. Chúng cần phải có từ khóa ByRef được thêm vào các đối số để sub hoạt động như mong đợi.
Sub GetFeatureInfo(ByVal Feature As PartFeature, ByRef Suppressed As Boolean, ByRef DimensionCount As Long)
- Arrays have a lower bound of 0 (zero). Trong VBA, giới hạn dưới mặc định của một mảng là 0 nhưng thường sử dụng câu lệnh Option Base để thay đổi thành 1. Trong VBA, việc chỉ định giới hạn dưới và trên trong khai báo mảng như được hiển thị bên dưới cũng rất phổ biến.
Dim adCoords(1 To 9) As Double
Trong VB.NET, câu lệnh trên không hợp lệ. Giới hạn dưới của một mảng luôn là 0. Câu lệnh Visual Basic .NET bên dưới tạo một mảng chứa 9 số double.
Dim adCoords(8) As Double
Điều này tạo ra một mảng có giới hạn trên là 8. Vì giới hạn dưới là 0 nên mảng có thể chứa 9 giá trị. Điều này có thể gây nhầm lẫn cho bất kỳ ai quen thuộc với các ngôn ngữ khác, trong đó khai báo của một mảng là kích thước của mảng chứ không phải giới hạn trên. Nếu chương trình VBA của bạn được viết với giả định giới hạn dưới là 1, việc điều chỉnh giới hạn dưới thành 0 sẽ dịch chuyển tất cả các giá trị trong mảng xuống một chỉ mục. Bạn sẽ cần phải thay đổi các giá trị chỉ mục ở mọi nơi mảng được sử dụng.
- Arrays of changing size are handled differently in VB.NET. Mục này và mục tiếp theo là một số vấn đề liên quan đến mảng mà bạn có thể gặp phải. Bạn không thể chỉ định loại khi bạn sử dụng câu lệnh ReDim để định lại kích thước cho một mảng. Chỉ định loại sẽ dẫn đến lỗi trong VB.NET
' VBA
ReDim adCoords(18) As Double
' VB.NET
Redim adCoords(18)
- Declaring an array in VB.NET does not initialize it. Đây có thể là một vấn đề phổ biến khác gặp phải mà không rõ ràng là vấn đề gì từ lỗi. Mã VBA bên dưới sẽ không hoạt động trong .NET dẫn đến lỗi không khớp kiểu. Lỗi này dễ dàng được khắc phục bằng cách khởi tạo giá trị thành một mảng rỗng trong khai báo, như được hiển thị (dấu ngoặc nhọn mở và đóng).
' VBA
Dim adStartPoint() As Double
Dim adEndPoint() As Double
Call oEdge.Evaluator.GetEndPoints(adStartPoint, adEndPoint)
' VB.NET
Dim adStartPoint() As Double = {}
Dim adEndPoint() As Double = {}
oEdge.Evaluator.GetEndPoints(adStartPoint, adEndPoint)
- Some data types are different. Có hai thay đổi ở đây có thể gây ra sự cố. Đầu tiên, kiểu VBA Long tương đương với kiểu VB.NET Integer. Nếu bạn đang gọi một phương thức API của Inventor mong đợi một Long hoặc một mảng Long trong VBA, thì cùng một mã đó sẽ cung cấp cho bạn lỗi không khớp kiểu trong VB.NET. Thay đổi khai báo từ Long thành Integer sẽ khắc phục được lỗi này.Thứ hai, kiểu dữ liệu Variant không được hỗ trợ trong VB.NET. Nếu bạn có các chương trình sử dụng kiểu Variant, chỉ cần thay đổi các khai báo đó thành kiểu Object tương đương mới thay thế.
- Variable scope. Phạm vi của các biến trong các hàm khác với VB.NET. Phạm vi biến hiện bị giới hạn trong các khối mã trong khi VBA chỉ giới hạn trong một hàm. Nếu bạn sao chép hàm VBA bên dưới (hoạt động tốt trong VBA) vào một chương trình VB.NET nó sẽ không biên dịch được. Hai lần sử dụng cuối cùng của biến strSuppressed (được tô sáng trong mẫu bên dưới), báo cáo rằng biến không được khai báo. Trong ví dụ này, strSuppressed được khai báo trong khối If Else và chỉ khả dụng trong khối đó.
' VBA
Public Sub ShowState(ByVal Feature As PartFeature)
If Feature.Suppressed Then
Dim strSuppressed As String
strSuppressed = "Suppressed"
Else
strSuppressed = "Not Suppressed"
End If
MsgBox "The feature is " & strSuppressed
End Sub
Đây là phiên bản của cùng một hàm được sửa đổi để hoạt động chính xác trong VB.NET. Khai báo biến strSuppressed đã được di chuyển ra ngoài khối If Else và hiện có phạm vi trong toàn bộ sub.
' VB.NET
Public Sub ShowState(ByVal Feature As PartFeature)
Dim strSuppressed As String
If Feature.Suppressed Then
strSuppressed = "Suppressed"
Else
strSuppressed = "Not Suppressed"
End If
MsgBox "The feature is " & strSuppressed
End Sub
- Events. Các khái niệm và cơ chế cơ bản về cách sử dụng sự kiện giống nhau trong VB.NET nhưng có một số cải tiến đối với sự kiện trong VB.NET. Thay đổi sẽ tác động đến việc chuyển đổi mã VBA của bạn sang VB.NET là thay đổi trong chữ ký của trình xử lý sự kiện Sub. Một ví dụ về trình xử lý sự kiện VBA được hiển thị bên dưới.
' VBA Private Sub oBrowser_OnActivate()
' Handling Code
End Sub
Trình xử lý cho cùng một sự kiện trong VB.NET được hiển thị bên dưới. Lưu ý từ khóa “Handles” hiện được sử dụng để chỉ định rằng Sub xử lý một sự kiện cụ thể. Trong VBA, tên của Sub được định nghĩa là trình xử lý sự kiện. Trong VB.NET, tên của sub không quan trọng.
' VB.NET Private Sub oBrowserPane_OnActivate() Handles oBrowserPane.OnActivate
' Handling Code
End Sub
Do thay đổi này, thay vì sao chép và dán toàn bộ trình xử lý sự kiện con từ VBA, tốt nhất là tạo một trình xử lý sự kiện mới trong VB.NET để Visual Studio tạo mã cho bạn, sau đó sao chép và dán nội dung của trình xử lý sự kiện con từ VBA.
- Parentheses are now required around property and method arguments. Việc sử dụng dấu ngoặc đơn hơi khó hiểu trong VBA vì các yêu cầu không nhất quán của nó. Khi bạn sao chép và dán mã vào VB.NET, nó sẽ chỉ ra dấu ngoặc đơn bị thiếu là lỗi mà bạn có thể dễ dàng sửa. Câu lệnh Call vẫn được hỗ trợ nhưng không còn cần thiết nữa.
Những thứ thú vị trong Visual Basic .NET
Như chúng ta thấy từ cuộc thảo luận ở trên, có một số điểm khác biệt giữa VBA và Visual Basic.NET gây ra một số vấn đề khi chuyển mã giữa chúng, tuy nhiên, có rất nhiều khả năng mới trong Visual Basic .NET mà bạn chắc chắn sẽ bỏ lỡ khi thử viết lại mã VBA . Sau đây là danh sách ngắn một số mục yêu thích của tôi.
- Bạn có thể thiết lập giá trị của biến khi bạn khai báo nó.
Dim partDoc As PartDocument = invApp.ActiveDocument
Bạn thậm chí có thể thực hiện điều này trong câu lệnh For:
For i As Integer = 1 To 20
- Xử lý lỗi tốt hơn nhiều trong VB.NET. Kiểu xử lý lỗi On Error cũ vẫn được hỗ trợ nhưng giờ bạn có thể sử dụng kiểu xử lý lỗi Try Catch mạnh mẽ hơn nhiều.
- Thư viện .NET cung cấp một bộ chức năng phong phú hơn nhiều cho các hàm toán học, xử lý chuỗi, xử lý tệp, làm việc với tệp XML, sổ đăng ký và hầu hết mọi thứ khác.
- Tăng một biến. Bây giờ có một số cú pháp đơn giản hơn để tăng một biến.
' VB 6
i = i + 1
' VB.NET
i += 1
Tạo Form
Bạn tạo hộp thoại dưới dạng biểu mẫu Visual Basic và thường hiển thị hộp thoại đó để phản hồi khi người dùng nhấp vào nút. Mã bên dưới minh họa cách phản hồi sự kiện OnExecute của nút bằng cách hiển thị hộp thoại. Ví dụ này sử dụng phương thức Show để hiển thị biểu mẫu ở trạng thái không có mô hình . Bạn cũng có thể sử dụng phương thức ShowDialog để hiển thị hộp thoại dưới dạng hộp thoại modal. Modal có nghĩa là người dùng không thể làm gì khác trong khi hộp thoại được hiển thị nhưng họ phải tương tác và bỏ qua hộp thoại trước khi tiếp tục.
Private Sub m_featureCountButtonDef_OnExecute( ... )
' Display the dialog.
Dim myForm As New InsertBoltForm
myForm.Show(New WindowWrapper(m_inventorApplication.MainFrameHWND))
End Sub
Một vấn đề với việc hiển thị hộp thoại là theo mặc định, nó độc lập với cửa sổ chính của Inventor. Điều này có thể gây ra một số vấn đề; cửa sổ Inventor có thể che hộp thoại, hộp thoại vẫn được hiển thị nếu cửa sổ Inventor được thu nhỏ và các lần nhấn phím đại diện cho phím tắt sẽ bị Inventor lấy cắp. Để giải quyết những vấn đề này, bạn có thể biến hộp thoại thành một phần tử con của cửa sổ Inventor. Mã mẫu ở trên thực hiện điều này bằng cách sử dụng lớp tiện ích WindowWrapper, là một phần của dự án bổ trợ được tạo bằng mẫu Bổ trợ Nifty.
Debugging Your Add-In
Cho đến nay, mọi thứ đã được thảo luận đều áp dụng cho tất cả các loại Visual Studio. Tuy nhiên, gỡ lỗi là nơi có sự khác biệt lớn. Phiên bản Express của Visual Studio không hỗ trợ gỡ lỗi loại thư viện lớp của dự án, đó là tiện ích bổ sung, dễ dàng như các phiên bản Visual Studio khác. Trước tiên, chúng ta hãy tìm hiểu về gỡ lỗi bằng phiên bản Professional và Community của Visual Studio.
Gỡ lỗi với Visual Studio Community và Professional
Gỡ lỗi một tiện ích bổ sung là một vấn đề thú vị vì tiện ích bổ sung không tự chạy mà được tải và gọi bởi một chương trình khác. Chương trình tải và gọi tiện ích bổ sung là Inventor. Để gỡ lỗi tiện ích bổ sung, bạn cần Inventor tải tiện ích bổ sung đó và thực hiện các lệnh gọi cần thiết trong khi bạn đang theo dõi mọi thứ trong môi trường gỡ lỗi. Để thiết lập gỡ lỗi, hãy chạy lệnh “Thuộc tính…”(“Properties…”), đây là lệnh cuối cùng trong menu Dự án. Lệnh này sẽ hiển thị hộp thoại hiển thị bên dưới. Chọn tab Gỡ lỗi rồi chọn tùy chọn Bắt đầu chương trình bên ngoài và duyệt để định vị Inventor.exe như hiển thị bên dưới.
Để bắt đầu gỡ lỗi, hãy chạy lệnh Bắt đầu gỡ lỗi trong menu Gỡ lỗi hoặc nhấn F5. Visual Studio sẽ khởi động Inventor và ở trạng thái mà bạn có thể gỡ lỗi tiện ích bổ sung. Bất kỳ điểm dừng nào mà bạn đã chèn vào chương trình của mình sẽ dừng thực thi và cho phép bạn từng bước thực hiện chương trình của mình. Khi điểm dừng được chạm đến, bạn có thể kiểm tra các giá trị, từng bước thực hiện mã và tiếp tục chạy.
Debugging with Visual Studio Express
Như tôi đã nói trước đó, việc gỡ lỗi một tiện ích bổ sung không dễ dàng khi sử dụng Visual Studio Express. Nó không hỗ trợ tự động khởi động và kết nối với một chương trình bên ngoài. Tuy nhiên, bạn vẫn có thể gỡ lỗi bằng phiên bản Express bằng cách thực hiện các bước này theo cách thủ công.
- Biên dịch dự án của bạn.
- Khởi động Inventor. Đảm bảo rằng tùy chọn “Tải tự động” trong Trình quản lý bổ trợ cho tiện ích bổ sung của bạn KHÔNG được chọn. Bạn không muốn nó tự động tải vì bạn cần có thể kiểm soát thời gian tải.
- Trong Visual Studio, hãy chạy lệnh Attach to Process… trong menu Debug, như được hiển thị bên dưới.
- Trong hộp thoại “Attach to Process”, chọn “Inventor.exe” từ danh sách và nhấp vào “Attach”. Bạn có thể nhận thấy một số thay đổi nhỏ trong Visual Studio vì hiện tại nó đang ở chế độ gỡ lỗi , nhưng không có thay đổi lớn nào tại thời điểm này. Vấn đề là Visual Studio đang chạy tiện ích bổ sung của bạn và đã tự gắn vào Inventor nên khi Inventor tải tiện ích bổ sung nó sẽ tải phiên bản tiện ích bổ sung của bạn đang chạy trong Visual Studio.
- Trong Visual Studio, hãy thêm bất kỳ điểm dừng mong muốn nào vào mã của bạn.
- Trong Inventor, hãy chạy lệnh Add-Ins để mở Add-In Manager, chọn tiện ích bổ sung của bạn, đánh dấu vào hộp kiểm “Loaded/Unloaded” và nhấp vào OK. Inventor hiện sẽ tải tiện ích bổ sung của bạn và quá trình thực thi sẽ bị tạm dừng khi bất kỳ điểm dừng nào được chạm tới.
Điều gì xảy ra khi bạn biên dịch tiện ích bổ sung của mình?
Có điều gì đó đang diễn ra đằng sau hậu trường khi bạn biên dịch tiện ích bổ sung của mình mà bạn cần biết để hiểu rõ hơn những gì đang diễn ra trong trường hợp bạn cần thực hiện thay đổi hoặc có điều gì đó không hoạt động như mong đợi.
Khi bạn khởi động Inventor, nó sẽ tìm kiếm trong một loạt các thư mục trên máy tính của bạn các tệp .addin. Nó sẽ đọc nội dung của các tệp .addin mà nó tìm thấy và nếu tiện ích bổ sung đáp ứng các tiêu chí để được tải (ví dụ: đó là phiên bản chính xác), Inventor sẽ tải DLL tiện ích bổ sung. Inventor không tìm kiếm trong thư mục dự án Visual Studio của bạn các tệp .addin nên nó sẽ không tìm thấy tiện ích bổ sung của bạn. Để gỡ lỗi dễ dàng hơn, Nifty Add-In Template đã thiết lập dự án Visual Studio để các tệp tiện ích bổ sung của bạn được sao chép vào một trong các thư mục mà Inventor tìm kiếm các tệp .addin. Điều này xảy ra tự động mỗi khi bạn biên dịch tiện ích bổ sung của mình để các tệp mà Inventor đang tìm kiếm luôn được cập nhật.
Điều này được thực hiện bằng cách sử dụng “Build Event” trong Visual Studio. Trong hộp thoại thuộc tính cho dự án trong tab “Compile”, bạn sẽ thấy nút “Build Events…”, như hiển thị bên dưới.
Nhấp vào đây sẽ mở hộp thoại “Build Events” nơi bạn có thể nhập lệnh DOS sẽ được thực hiện trước và sau khi bạn build. Mẫu bổ trợ thiết lập một số bước sau khi build, như hiển thị bên dưới. Các bước này được chạy sau khi biên dịch thành công.
Khả năng định nghĩa build events được Visual Studio Professional và Community hỗ trợ nhưng không phải Express. Trên thực tế, Express không chính thức hỗ trợ build events vì nó không cung cấp giao diện người dùng để cho phép bạn định nghĩa chúng, nhưng nếu chúng ở đó thì chúng hoạt động. Vì vậy, các build events được định nghĩa bởi mẫu dự án đều ở đó và được thực thi khi bạn xây dựng bằng Express nhưng bạn không có biểu mẫu hiển thị ở trên để thực hiện thay đổi đối với chúng. Các thiết lập này được lưu trữ trong tệp .vbproj của dự án và có thể chỉnh sửa chúng trực tiếp bằng bất kỳ trình soạn thảo văn bản nào.
Triển khai Add-In của bạn
Bây giờ bạn đã có một tiện ích bổ sung đang hoạt động, làm thế nào để triển khai nó cho người khác sử dụng? Có hai cách để triển khai tiện ích bổ sung của bạn. Cách đầu tiên là đơn giản nhất, đó là sao chép thư mục tiện ích bổ sung vào máy đích. Cách thứ hai là tạo trình cài đặt. Cả hai đều được thảo luận bên dưới.
Method 1 – Copy the Folder
Cách đầu tiên và dễ nhất để cung cấp tiện ích bổ sung là sao chép thư mục tiện ích bổ sung vào máy tính đích. Tất cả những gì bạn cần làm là sao chép toàn bộ thư mục tiện ích bổ sung vào đúng vị trí và nó sẽ hoạt động. Mẫu tiện ích bổ sung đơn giản sẽ tạo một thư mục trên máy của bạn chứa tất cả các tệp được liên kết với tiện ích bổ sung (.addin, .DLL, tệp biểu tượng, v.v.). Bạn có thể sao chép thư mục này vào bất kỳ máy nào khác và tiện ích bổ sung sẽ khả dụng ở đó. Có một số thư mục mà Inventor tìm kiếm tiện ích bổ sung, tuy nhiên, tôi khuyên bạn nên sử dụng một trong hai thư mục sau:
%appdata%\Autodesk\ApplicationPlugins
%programdata%\Autodesk\Inventor Addins
Thư mục appdata dành riêng cho người dùng, do đó nếu máy tính được nhiều người dùng sử dụng, thì chỉ người dùng duy nhất có thể sao chép thư mục này. Vì thư mục này dành riêng cho người dùng nên bạn không cần quyền quản trị để sao chép tệp vào đó. Đây là thư mục mà dự án được tạo bằng mẫu bổ trợ được sao chép bằng bước post-build.
Thư mục programdata dành cho tất cả người dùng và bạn sẽ cần có quyền quản trị.
Để xóa tiện ích bổ sung khỏi máy, bạn xóa thư mục.
Method 2 – Create an Installer
Phương pháp thứ hai đòi hỏi nhiều công sức hơn từ phía bạn nhưng lại đơn giản hơn đối với người cài đặt vì họ chỉ cần chạy trình cài đặt và nó sẽ đặt mọi thứ vào đúng vị trí cần thiết. Trình cài đặt sẽ sao chép các tệp cần thiết vào đúng vị trí nên nó đơn giản như trình cài đặt có thể làm được. Một ưu điểm khác khi sử dụng trình cài đặt là nó sẽ hiển thị trong danh sách các chương trình đã cài đặt và người dùng có thể dễ dàng gỡ cài đặt từ đó.
Có nhiều công cụ để tạo trình cài đặt, một số miễn phí và một số có giá hàng trăm đô la. Ví dụ, Visual Studio Professional và Community có thể được sử dụng để tạo trình cài đặt. Tuy nhiên, tôi đã tìm thấy một công cụ miễn phí mà tôi hài lòng và là công cụ tôi sử dụng để tạo tất cả các trình cài đặt Windows của mình. Công cụ này cũng cho phép những người trong số các bạn sử dụng Visual Studio Express tạo trình cài đặt. Công cụ này được gọi là Inno Setup và có sẵn miễn phí trên web tại http://www.jrsoftware.org/isinfo.php. Dưới đây là hướng dẫn từng bước để tạo thiết lập bằng Inno Setup.
Tải xuống gói Unicode QuickStart, như được hiển thị bên dưới. Cài đặt gói, lấy tất cả các mặc định. Gói QuickStart bao gồm Inno Setup và một số tiện ích bổ sung để sử dụng dễ dàng hơn.
Khi bạn chạy Inno Script Studio từ menu bắt đầu, bạn sẽ thấy hộp thoại hiển thị bên dưới. Chọn mẫu “Simple Script” và đảm bảo rằng “Use script wizard to create project” được chọn.
Trên màn hình Chào mừng, hãy đảm bảo rằng “Create a new empty script file” không được chọn và nhấp vào “Next”.
Enter values for the Application Information page, as shown below. The publisher and website are optional and can be blank.
Chỉnh sửa trang Thư mục ứng dụng như hiển thị bên dưới, tôi đã thay đổi thư mục cơ sở thành “(Tùy chỉnh)” và nhập “{userappdata}\Autodesk\ApplicationPlugins” làm đường dẫn đích . Đó là nơi các tệp sẽ được cài đặt. Tôi đã chỉ định “AU Sample” làm tên của thư mục sẽ được tạo và các tệp được cài đặt vào. Đây thường là tên của tiện ích bổ sung của bạn. Cuối cùng, tôi đã bỏ chọn “Cho phép người dùng thay đổi thư mục ứng dụng” để người dùng không thể thay đổi vị trí cài đặt.
Đối với trang Tệp ứng dụng, hãy đánh dấu vào ô “Ứng dụng không có tệp thực thi chính và sau đó nhấp vào nút “Thêm thư mục…”, duyệt đến thư mục dự án của bạn và chọn thư mục bin\Debug. Trả lời “Có” cho câu hỏi về việc bao gồm các thư mục con.
Đối với trang Biểu tượng ứng dụng, hãy bỏ chọn “Cho phép người dùng thay đổi tên thư mục Menu Bắt đầu và chọn “Tạo biểu tượng Gỡ cài đặt trong thư mục Menu Bắt đầu”.
Tôi không thay đổi bất cứ điều gì trên trang Tài liệu ứng dụng, nhưng bạn có thể chỉ định tệp giấy phép và thông tin nếu muốn.
Tôi đã lấy “Tiếng Anh” mặc định trên trang Ngôn ngữ thiết lập. Điều này xác định ngôn ngữ của trình cài đặt, không phải tiện ích bổ sung của bạn.
Trên trang Cài đặt trình biên dịch, hãy chỉ định thư mục nơi trình cài đặt sẽ được tạo và tên của tệp thiết lập. Tôi đã tạo một thư mục con có tên là “Installer” trong thư mục dự án Visual Studio của mình. Theo cách đó, tôi có thể giữ tất cả mã liên quan đến tiện ích bổ sung lại với nhau.
Chọn mặc định cho trang Inno Setup Preprocessor.
Nhấp vào Finish để hoàn tất trình hướng dẫn và đưa bạn trở lại giao diện Inno Script Studio và nó sẽ hỏi bạn có muốn biên dịch tập lệnh không. Nhấp vào “Yes” để tạo trình cài đặt của bạn.
Điều này sẽ dẫn đến hộp thoại bên dưới. Nhấp vào “Có” và chọn cùng thư mục mà bạn đã chỉ định ở bước 10. Tôi nhập tên tiện ích bổ sung của mình làm tên tệp .iss sẽ được lưu. Tệp .iss là nguồn cho dự án cài đặt của bạn.
Bất kỳ ai cũng có thể cài đặt tiện ích bổ sung của bạn trên máy tính của họ bằng cách chạy trình cài đặt mà bạn vừa tạo. Trong ví dụ này là AUAddInInstaller.exe. Họ sẽ nhận được trình tự cài đặt quen thuộc và có thể gỡ cài đặt bằng cách sử dụng trình gỡ cài đặt Windows chuẩn từ Control Panel.
Cập nhật Add-In của bạn lên phiên bản mới của Inventor
EXE hoặc tiện ích bổ sung được liên kết lỏng lẻo với Inventor. Mối liên hệ duy nhất với Inventor là dự án của bạn đang tham chiếu đến một tệp (.NET Interop) mô tả API Inventor. Đó là cách Visual Studio có thể cung cấp chức năng hoàn thiện mã. Mẫu tiện ích bổ sung Nifty tạo một dự án đang tham chiếu đến interop cho Inventor 2018. Bạn có thể thấy điều này cho dự án của mình trong Solution Explorer, như được hiển thị bên dưới. Khi tôi chọn “Autodesk.Inventor.Interop” từ danh sách tham chiếu, thông tin về tham chiếu được hiển thị trong cửa sổ Thuộc tính. Trong đường dẫn, tôi có thể thấy “Inventor 2018” và phiên bản là 22.0.0, cũng tương ứng với Inventor 2018.
Điều này có nghĩa là tiện ích bổ sung biết về API được cung cấp như một phần của Inventor 2018. Nếu tôi sử dụng tiện ích bổ sung với Inventor 2019, nó vẫn hoạt động. Các tương tác cho các phiên bản cũ hơn của Inventor được cung cấp cùng với Inventor để cung cấp khả năng tương thích ngược. Hạn chế sẽ là nếu bạn viết một tiện ích bổ sung mới và muốn sử dụng chức năng API mới đã được thêm vào Inventor 2019. Visual Studio sẽ không biết về chức năng mới vì dự án đang tham chiếu tương tác cho 2018. Để khắc phục sự cố này, hãy xóa tham chiếu hiện tại đến Autodesk.Inventor.Interop bằng cách xóa nút trong Solution Explorer, sau đó thêm tham chiếu mới bằng cách nhấp chuột phải vào nút Tham chiếu và chọn “Add Reference…”. Có nhiều cách khác nhau để thêm tham chiếu vào các loại thư viện khác nhau. Đối với các tương tác của Inventor, hãy chọn “Browse ” từ các bảng điều khiển ở bên trái, sau đó nhấp vào nút “Browse…” ở cuối hộp thoại. Tiếp theo, hãy tìm tệp Autodesk.Inventor.Interop.DLL cho phiên bản Inventor mà bạn muốn sử dụng. Đối với Inventor 2019, tệp này nằm trong thư mục “C:\Program Files\Autodesk\Inventor 2019\Bin\Public Assemblies”. Bạn có thể sửa đổi các tham chiếu của bất kỳ dự án hiện có nào bằng quy trình này.
Chỉ cần nhớ rằng nó không cần thiết trong hầu hết các trường hợp và chỉ cần thiết khi bạn cần sử dụng chức năng API mới. Trên thực tế, thường thì tốt hơn là sử dụng interop cũ hơn để chương trình của bạn sẽ tương thích với nhiều phiên bản Inventor hơn. Ví dụ, nếu tôi tham chiếu interop cho Inventor 2017 vào tiện ích bổ sung của mình, thì tiện ích bổ sung của tôi sẽ hoạt động với Inventor 2017 và tất cả các phiên bản mới hơn. Nó sẽ không hoạt động với các phiên bản trước Inventor 2017. Nếu tôi viết nó cho Inventor 2019, thì nó sẽ không hoạt động với các phiên bản cũ hơn.
Brian Ekins
Ekins Solutions,
LLC SD224078, Version 2