Chào mọi người!
Mình lập thread này với mục đích: chia sẻ mốt số kiến thức về ObjectARX, học tập trao đổi với những bạn cùng quan tâm về ObjectARX và .NET (in CAD).
Như đã biết ObjectARX và ObjectDBX là thành phần xương sống trong những phiên bản CAD(AutoCAD) trong nhiều năm nay. ObjectDBX là cách thức tổ chức dữ liệu trong các dịnh dạng file của CAD và nhiều thương phẩm khác của Autodesk. Với ObjectDBX, ta có thể viết những ứng dụng độc lập để xử lí những định dạng file .dwg, .dfx... của Autodesk. SDK cho ObjectDBX.....là không miễn phí($5000 cho năm đầu tiên, $2500 cho mỗi năm tiếp theo là điều kiện để có được giấy phép xử dụng ObjectDBX's SDK!-----Mà cái này là....là ko có ***** đâu nha ) nên cái này chắc chỉ phù hợp với những công ty tin học thực sự quan tâm(do đó ko bàn đến ObjectDBX ở đây. ObjectARX(The AutoCAD Runtime Extension với SDK miễn phí!) là môi trường phát triển dành riêng cho CAD, là hướng đi chính để thêm vào những tính năng mới cho các phiên bản CAD(có thể thấy khá nhiều các modul .arx trong các phiên bản CAD - các file có đuôi .arx). Trong môi trường Windows, .arx hoạt động như những file .dll thường thấy(hoạt động theo kiểu "call back").
Chú thích về cơ chế call back(ko hẳn đã đầy đủ, nhưng cơ bản là thế):
Chương trình chính được kich hoạt(*.exe), 1 hàm, thủ tục nào đó thực hiện 1 lời gọi tới 1 .arx====> .arx bắt đầu 1 thread mới, bắt đầu thực hiện những chức năng được lập trình(.arx là file bạn cần lập trình cho công việc của mình) tại 1 EntyPoint() (tương tự như main() và Winmain() trong các file .exe khi lập trình bằng C++). Các .arx sẽ thực hiên các kết nối với chuong trình chính( nhận, trả kết quả, thực hiện tính toán...). Và cơ bản là các .arx và chương trình chính chạy trên những thread độc lập với nhau(chắc cơ chế này chỉ xuất hiện sau khi có phiên bản Cad for Windows...)
.ARX không phải là 1 gói thủ tục dạng .bat, mà thực sự là 1 file .dll (mà .dll là gì thì.....phải hỏi Bill Gate ) do đó nó có rất nhiều sức mạnh và tính uyển chuyển. ObjectARX sau nhiều năm phát triển đã trở thành 1 hệ thông phân cấp phức tạp và tính trừu tượng cao, đó là hệ thống các lớp, các tập hợp...được viết bằng ngôn ngữ C++. Nhưng có thể bạn sẻ thấy cú pháp trong ARX khá khó hiểu(ko thuần tuý như C++ được học trong trường học ), đấy chính là ý cơ bản về tính trừu tượng tôi nói ở đây. Xét 1 ví dụ cơ bản(ví dụ của tôi thôi)
1 câu lệnh trong ARX:
ErrorState Sum(*int a, *int b, *int c);
Sẽ rất khó hiểu và cảm thấy như có mâu thuẫn phải không? Câu lệnh như kiểu như Sum() ở trên rất hay gặp khi làm viêc với ObjectARX, thực ra Sum() chính là 1 lệnh macro( macro hiểu theo nghĩa là 1 lệnh đơn, mà cơ chế thực thi bên trong nó đã được định nghĩa từ trước - ở mức trên của lớp sử dụng lệnh . Nên cái chúng ta cần là phải tìm hiểu xem lệnh trên đã được định nghỉa như thế nào(nên thực sự cần phải tham khảo chi tiết từ tài liệu SDK...)
Ví dụ như:
Int Sum(*int a, *int b, *int c) có thể sẻ khiến ta dễ hình dung hơn, nhưng câu lệnh ErrorState Sum() lại là thứ thực tế ta bắt gặp, do đó trong ARX ngữ nghỉa của lênh rất dể khiến ta nhầm lẫn nếu ko chú ý đến giá trị trả về...Điều muốn nói ở đây, là với những macro cần phải biết dầy đủ về ý nghỉa các đối số, giá tri trả về của nó (biết như thế là đủ!). Có thể mọi người sẽ hỏi biết đầy đủ về cơ chế của thưc thi của nó có tốt hơn ko, câu trả lời ở đây là: có và không.
- Có: khi ta muốn định nghĩa đè macro đó, hay nhưng người muốn tìm hiểu thuật toán mà macro đó đã làm...
- Không: Những thứ đó do 1 công ty hàng đầu phát triển trong nhiều năm...đảm bảo sự ổn địnnh, tin tưởng....và đa số là muốn cũng ko được vì nó là độc quyền của hãng sản xuất(trong SDK họ cho biết đến đâu thì được vây thôi). Cơ chế thực thi đã được định nghĩa và biên dịch thành những file thư viện(.lib, .dll)
Ví dụ tôi là nhà sản xuất, tôi có thể định nghĩa câu lệnh trên như sau:
ErrorState Sum(*int a, *int b, *int c)
{c = a + b;
if(c <> null) return OK!;
}
và trong SDK của tôi mô tả: Lệnh Sum() thực hiện c = a + b, nếu thưc hiện thành công thì trả về OK!(thông báo cho ErrorState đã thực hiện thành công Sum() và ngược lại, khi lênh Sum() thực hiện thành công ta có được giá trị c như mong muốn cho những bước tiêp theo. Tương tự, đó là những điều cần và đủ để bạn làm việc với các macro khác trong ObjectARX.
...chết thật, bài dài quá rồi .
Nếu mọi người hứng thú, bài sau tôi giới thiệu về "The ObjectARX Managed Wrapper Classes " để có thể làm việc với các đối tượng của ObjectARX thông qua ngôn ngữ Visual Basic(VB.NET).
Chào mọi người, chào buổi sáng!
Mình lập thread này với mục đích: chia sẻ mốt số kiến thức về ObjectARX, học tập trao đổi với những bạn cùng quan tâm về ObjectARX và .NET (in CAD).
Như đã biết ObjectARX và ObjectDBX là thành phần xương sống trong những phiên bản CAD(AutoCAD) trong nhiều năm nay. ObjectDBX là cách thức tổ chức dữ liệu trong các dịnh dạng file của CAD và nhiều thương phẩm khác của Autodesk. Với ObjectDBX, ta có thể viết những ứng dụng độc lập để xử lí những định dạng file .dwg, .dfx... của Autodesk. SDK cho ObjectDBX.....là không miễn phí($5000 cho năm đầu tiên, $2500 cho mỗi năm tiếp theo là điều kiện để có được giấy phép xử dụng ObjectDBX's SDK!-----Mà cái này là....là ko có ***** đâu nha ) nên cái này chắc chỉ phù hợp với những công ty tin học thực sự quan tâm(do đó ko bàn đến ObjectDBX ở đây. ObjectARX(The AutoCAD Runtime Extension với SDK miễn phí!) là môi trường phát triển dành riêng cho CAD, là hướng đi chính để thêm vào những tính năng mới cho các phiên bản CAD(có thể thấy khá nhiều các modul .arx trong các phiên bản CAD - các file có đuôi .arx). Trong môi trường Windows, .arx hoạt động như những file .dll thường thấy(hoạt động theo kiểu "call back").
Chú thích về cơ chế call back(ko hẳn đã đầy đủ, nhưng cơ bản là thế):
Chương trình chính được kich hoạt(*.exe), 1 hàm, thủ tục nào đó thực hiện 1 lời gọi tới 1 .arx====> .arx bắt đầu 1 thread mới, bắt đầu thực hiện những chức năng được lập trình(.arx là file bạn cần lập trình cho công việc của mình) tại 1 EntyPoint() (tương tự như main() và Winmain() trong các file .exe khi lập trình bằng C++). Các .arx sẽ thực hiên các kết nối với chuong trình chính( nhận, trả kết quả, thực hiện tính toán...). Và cơ bản là các .arx và chương trình chính chạy trên những thread độc lập với nhau(chắc cơ chế này chỉ xuất hiện sau khi có phiên bản Cad for Windows...)
.ARX không phải là 1 gói thủ tục dạng .bat, mà thực sự là 1 file .dll (mà .dll là gì thì.....phải hỏi Bill Gate ) do đó nó có rất nhiều sức mạnh và tính uyển chuyển. ObjectARX sau nhiều năm phát triển đã trở thành 1 hệ thông phân cấp phức tạp và tính trừu tượng cao, đó là hệ thống các lớp, các tập hợp...được viết bằng ngôn ngữ C++. Nhưng có thể bạn sẻ thấy cú pháp trong ARX khá khó hiểu(ko thuần tuý như C++ được học trong trường học ), đấy chính là ý cơ bản về tính trừu tượng tôi nói ở đây. Xét 1 ví dụ cơ bản(ví dụ của tôi thôi)
1 câu lệnh trong ARX:
ErrorState Sum(*int a, *int b, *int c);
Sẽ rất khó hiểu và cảm thấy như có mâu thuẫn phải không? Câu lệnh như kiểu như Sum() ở trên rất hay gặp khi làm viêc với ObjectARX, thực ra Sum() chính là 1 lệnh macro( macro hiểu theo nghĩa là 1 lệnh đơn, mà cơ chế thực thi bên trong nó đã được định nghĩa từ trước - ở mức trên của lớp sử dụng lệnh . Nên cái chúng ta cần là phải tìm hiểu xem lệnh trên đã được định nghỉa như thế nào(nên thực sự cần phải tham khảo chi tiết từ tài liệu SDK...)
Ví dụ như:
Int Sum(*int a, *int b, *int c) có thể sẻ khiến ta dễ hình dung hơn, nhưng câu lệnh ErrorState Sum() lại là thứ thực tế ta bắt gặp, do đó trong ARX ngữ nghỉa của lênh rất dể khiến ta nhầm lẫn nếu ko chú ý đến giá trị trả về...Điều muốn nói ở đây, là với những macro cần phải biết dầy đủ về ý nghỉa các đối số, giá tri trả về của nó (biết như thế là đủ!). Có thể mọi người sẽ hỏi biết đầy đủ về cơ chế của thưc thi của nó có tốt hơn ko, câu trả lời ở đây là: có và không.
- Có: khi ta muốn định nghĩa đè macro đó, hay nhưng người muốn tìm hiểu thuật toán mà macro đó đã làm...
- Không: Những thứ đó do 1 công ty hàng đầu phát triển trong nhiều năm...đảm bảo sự ổn địnnh, tin tưởng....và đa số là muốn cũng ko được vì nó là độc quyền của hãng sản xuất(trong SDK họ cho biết đến đâu thì được vây thôi). Cơ chế thực thi đã được định nghĩa và biên dịch thành những file thư viện(.lib, .dll)
Ví dụ tôi là nhà sản xuất, tôi có thể định nghĩa câu lệnh trên như sau:
ErrorState Sum(*int a, *int b, *int c)
{c = a + b;
if(c <> null) return OK!;
}
và trong SDK của tôi mô tả: Lệnh Sum() thực hiện c = a + b, nếu thưc hiện thành công thì trả về OK!(thông báo cho ErrorState đã thực hiện thành công Sum() và ngược lại, khi lênh Sum() thực hiện thành công ta có được giá trị c như mong muốn cho những bước tiêp theo. Tương tự, đó là những điều cần và đủ để bạn làm việc với các macro khác trong ObjectARX.
...chết thật, bài dài quá rồi .
Nếu mọi người hứng thú, bài sau tôi giới thiệu về "The ObjectARX Managed Wrapper Classes " để có thể làm việc với các đối tượng của ObjectARX thông qua ngôn ngữ Visual Basic(VB.NET).
Chào mọi người, chào buổi sáng!
Ghi chú