/

17 tháng 3, 2013

Bài 3: Tổng quan về ứng dụng




Như đã đề cập trước đó, ObjectARX thực chất là một DLL (thư viện liên kết động). Nó có thể liên kết hoặc không tới mở rộng MFC. Hầu hết bạn đều muốn liên kết với MFC. Autodesk cung cấp một Winzard (phù thủy) tuyệt vời cho phép người sử dụng nhanh chóng tạo được ứng dụng ObjectARX với số lượng code giản thiểu tối đa.

Trước khi tiến hành tôi muốn bạn phân biệt được sự khác nhau giữa ứng dụng ObjectARX với ObjectDBX. Quan trọng nhất là phân chia giao diện và đối tượng lớp để được gọi là “Object khả dụng”.  Điều đó không thật sự bắt buộc nhưng nó là một thực hành lập trình tốt và Autodesk tạo ra sự phân chia này để cũng cấp những thứ tuyệt vời như, mở một bản vẽ ADT bên trong AutoCAD, tải những đối tượng phù hợp rồi sau đó thể hiện thực thể ADT bên trong AutoCAD.
Giả sử bạn cần tạo một ứng dụng với một tập hợp các đối tượng và thực thể. Bản vẽ được tạo ra với ứng dụng sẽ chứa các đối tượng này và nếu người dùng khác cố gắng mở bản vẽ bên trong AutoCAD mà thiếu ứng dụng của bạn họ sẽ chỉ nhìn thấy các thực thể Proxy mà thôi. Nếu muốn cho phép những người này nhìn thấy các thực thể riêng nhưng không thực hiện bất cứ lệnh nào tác động lên chúng lúc đó bạn sẽ cần kéo theo phần DBX trong ứng dụng của mình. Bằng cách này người dùng có thể nhìn thấy những thực thể riêng và thực hiện một số thao tác hạn chế.


Khi bản vẽ được lưu, AutoCAD bảo toàn thông tin thực thể riêng bằng các thực thể gọi là Proxy. Điều này xảy ra kể cả khi thiếu module DBX. Thực thể Proxy lưu trữ dữ liệu nhị phân của đối tượng riêng và giữ chúng tới tận khi nào ứng dụng của bạn quay trở lại làm việc.
Trong một nhánh khác, module ARX trong ứng dụng sẽ chịu trách nhiệm về giao diện. Từ đó bạn nên đăng ký lệnh, tạo hộp thoại và các menu riêng, v.v.


Cấu trúc ứng dụng

Cả module ARX lẫn DBX đều thi hành một hàm entry point. Hàm này chịu trách nhiệm thực hiện thông điệp qua lại giữa AutoCAD và ứng dụng của bạn. Với những ai quen với ngôn ngữ C cũ, nó thay thế cho hàm main().



Hàm entry point này được đăng ký như sau:

extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt);

Một thi hành đơn giản của hàm này là:



extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
switch(msg) {
case 
AcRx::kInitAppMsg:
break;
case 
AcRx::kUnloadAppMsg:
break;
default:
break;
}

return AcRx::kRetOK;
}
Hàm này tự động thi hành bởi Wizard mà bạn sẽ biết sau. Tham số đầu tiên (msg)  là thông điệp gửi từ AutoCAD tới ứng dụng và cho biết điều gì đang diễn ra. Bạn có thể nhận được thông điệp “new drawing”, hay “init application” trong rất nhiều các thông điệp khác. Các thông điệp này rất quan trọng với ứng dụng của bạn và cho phép bạn phản ứng lại với mỗi sự kiện mong muốn tới màn hình. Tham số tiếp đến là (ptk) là gói dữ liệu có thể hữu dụng trong một vài trường hợp mà tôi chưa muốn thảo luận ở đây (hãy nhớ, khóa học của chúng ta là cho những người mới bắt đầu). Hàm này phải trả về giá trị tới AutoCADsử dụng AppRetCode có thể là kRetOK (giá trị thông thường) hoặc thậm chí kRetError gây ra việc thoát khỏi ứng dụng của bạn.


Điểm liên quan ở đây là nhớ rằng hàm này cực kỳ quan trọng và là nơi ứng dụng của bạn bắt đầu thực thi.

Đăng ký lệnh

Có thể ứng dụng của bạn sẽ thi hành một vài dòng lệnh. Bạn có thể đăng ký lệnh của mình từ hàm acrxEntryPoint() khi nhận được thông báo kInitAppMsg  đại diện cho sự kiện bắt đầu bởi AutoCAD khi tải chương trình của bạn (việc này có thể làm theo vài cách khác nhau mà chúng ta sẽ thảo luận sau). Khi nhận được thông điệp, bạn có thể gọi phương thức thích hợp để đăng ký mỗi lệnh mong muốn.
Đăng ký lệnh phải có một tên nhóm (Group Name), một tên toàn cầu (Global Name), một tên địa phương (Local Name), vài loại thuộc tính, một hàm con trỏ (void function pointer) và, một vài tham số tùy chọn khác. Việc đăng ký lệnh sẽ khai hỏa hàm mà bạn đã chỉ rõ. Hàm này bắt buộc không được có một tham số nào. Khi người sử dụng AutoCAD gọi lệnh, AutoCAD sẽ tìm kiếm trong kho lệnh, tìm lệnh và khởi động hàm của bạn. Vậy đó!

Một điều quan trọng là bạn nên đặt lệnh của bạn với 3 hoặc 4 ký tự để tránh trùng lệnh với các phần mềm thứ ba. Đối với các tham số chính:

·         Group Name (tên nhóm): Cho phép bạn nhóm các lệnh chung lại để đơn giản khi unload và quản lý chúng;

·         Global Name (tên toàn cục): Tên lệnh không dịch. Bạn nên sử dụng tên tiếng Anh là ngôn ngữ thông dụng nhất;

·         Local Name (tên địa phương): Tên lệnh địa phương đại diện cho tên được dịch;

·         Flags (các loại thuộc tính): Có thể kết hợp từ nhiều kiểu khác nhau. Hai loại thuộc tính quan trọng nhất là ACRX_CMD_TRANSPARENT và ACRX_CMD_MODAL. Chúng thiết lập hành vi lệnh của bạn sao cho có thể vô hình (giống như Zoom) hoặc một phương thức (giống như lệnh chính);
·         void function pointer (hàm con trỏ): Tới đây bạn đã tạo tên của hàm mà bạn muốn liên kết với lệnh. Hàm này sẽ được kích hoạt bởi AutoCAD khi lệnh được gọi đến.

Một khi đã đăng ký lệnh, rõ ràng là bạn cũng cần loại trừ lệnh khi ra khỏi AutoCAD hoặc khi ứng dụng được unload. Việc này có thể thực hiện một cách dễ dàng với Group Name (tên nhóm). Khi nhận được thông điệp kUnloadAppMsg là lúc gỡ bỏ các lệnh của mình.

Chạy các ứng dụng

Giả sử bạn đã biên dịch ứng dụng thành công, đã đến lúc tải nó vào trong AutoCAD và thử nghiệm. Phương thức ưa thích của tôi để load/unload ứng dụng ObjectARX là thông qua lệnh APPLOAD. Nó mở ra một hộp thoại hữu dụng cho phép bạn duyệt qua các ứng dụng và tải nó. Nó còn bao gồm cả cặp tài liệu khởi động (Startup Suite briefcase) cho phép bạn tải tự động một danh sách các ứng dụng khi AutoCAD khởi động.

Một khi ứng dụng được tải, hãy khai hỏa lệnh và tận hưởng!

Tôi đã đăng một ứng dụng đơn giản tạo bởi ARXWizard, Visual Studio.NET 2002 (7.0) và ObjectARX 2004. Nó gọi là SimpleLine và được đăng trong vào web site chia sẻ file đã đề cập trước đó. Tôi muốn bạn tải nó về và dành chút chú ý tới đoạn code mà chúng ta đã thảo luận ở Bài 2. Hiểu rằng tôi đã vẽ sơ đồ một lệnh với một hàm, và bên trong hàm này quá trình tạo một đường line được thực thi. Hãy thử một lần! Biên dịch code và mở file ARX kết quả bên trong AutoCAD.

Bài tiếp theo tôi sẽ trình bày cách xây dựng ứng dụng từ vạch xuất phát với ARXWizard.
Tiếp tục theo dõi nhé!


Link nguồn: http://arxdummies.blogspot.com/2005/02/class-3-application-overview.html

Không có nhận xét nào:

Đăng nhận xét