Đến nội dung


Hình ảnh
- - - - -

[Thảo luận] Điều khiển AutoCAD bằng VC++ (ObjectARX)


  • Please log in to reply
82 replies to this topic

#41 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 25 May 2012 - 10:54 AM

Chào bạn,
Việc sử dụng hệ thống hàm ads trong lập trình ObjectARX sẽ giúp các lisper cảm thấy quen thuộc hơn, tuy nhiên với những người đã dùng .NET (đặc biệt là C# có syntax ~ C++) thì lập trình hướng đối tượng sẽ thấy dễ dàng hơn trong việc kiểm soát code của mình.
Một điều nữa: bạn hãy thử vẽ 10000 (mười ngàn) CIRCLE bằng ads_command thì sẽ thấy dc nhược điểm của ads_command
Đây là bảng so sánh tốc độ của các API dùng trong lập trình CAD (có kể đến ads và adsrx)
Hình đã gửi

Nhìn thấy cái bảng so sánh của bạn là mình đã muốn học rồi. Trước đây mình làm trên Lisp thấy chậm. Sau đó vô tình ra nhà sách thấy cuốn "Autocad và kỹ thuật lập trình ứng dụng" mua về và làm theo, thấy hiệu quả đáng kể nhưng rất khổ sở vì C khá khó (mình lập trình C chỉ vì Arx chứ mình kg muốn học C). Việc lập trình khung đối thoại và CSDL mình phải dùng Delphi thông qua DLL. Sau này VC chuyển qua VC.net thấy có dễ hơn khi lập trình trên khung đối thoại và CSDL nhưng các CT của mình chủ yếu dựa vào MFC nên cũng khó. Với lại, muốn hiểu được hệ thống class của Arx cũng kg đơn giản. Nhìn thấy bảng phân lớp của nó là muốn xỉn rồi. Tuy nhiên, trước đây mình tự mày mò một mình, bây giờ có sự hỗ trợ của bạn và CADVIET đôi khi mình sẽ học được. Có thể lúc nào đó rãnh rỗi, bạn giới thiệu qua hệ thống lớp của Arx cho mình và các bạn tham khảo nhé.
Cám ơn bạn rất nhiều
  • 1

#42 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 May 2012 - 11:13 AM

Có thể lúc nào đó rãnh rỗi, bạn giới thiệu qua hệ thống lớp của Arx cho mình và các bạn tham khảo nhé.
Cám ơn bạn rất nhiều

Mình cũng là tự mò + đi "mót" (từ này của bác Bình mình thấy thể hiện đúng bản chất của cái sự học này nên mượn tạm :D) thôi.
Dưới đây là hệ thống các thư viện chính của Objext ARX và chức năng của nó
  • AcRx Object and Class Management (RXAPI.LIB)
  • AcRx AutoCAD Memory Management (RXHEAP.LIB)
  • AcEd AutoCAD Editor Facilities (ACEDAPI.LIB)
  • AcDb AutoCAD Database (ACAD.LIB)
  • AcGi AutoCAD Graphics Interface (ACGIAPI.LIB)
  • AcGe AutoCAD Geometry Library (LIBACGE.LIB)
  • AcGe External ACIS Curve and Surface Classes (LIBACGEX.LIB)
  • ADS Function Set (ACAD.LIB)

  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#43 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 25 May 2012 - 07:29 PM

ads_name ssname;
acedSSFree(ssname);
ads_point pt;
int res;
for (; ;)
{
res = acedEntSel(_T("\nSelect an entity: "), ssname, pt);
if(res==RTNORM) break;
if(res==RTCAN) return;
}
AcDbObjectId objId;
AcDbObject *pObj = NULL;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(objId, ssname);
if(acdbOpenObject(pEnt, objId, kForRead)== Acad::eOk)
{
int icolor;
if(acedGetInt(_T("\nInput color by integer: "), &icolor)==RTNORM)
{
pEnt->upgradeOpen();
pEnt->setColorIndex(icolor);
}
}else
acutPrintf(_T("\n*** Can't edit this entity! ***"));
pEnt->close();

Bạn cho mình hỏi tý, việc sd tiền tố ads_ và aced có khác nhau kg, mặc dù đối số vẫn như cũ. Trước đây mình thấy dùng ads_, sau đó thấy chuyển thành aced và một số tiền tố khác nữa. Kg biết chỉ là sự thay đổi cú pháp hay có ý nghĩa gì khác. VD như bạn dùng acedSSFree(ssname) , cách cũ là ads_ssfree(ssname).

Góp ý : Mình thấy bạn dùng hàm acedSSFree cho biến ssname chưa khởi gán là kg đúng, hơn nữa, hàm ads_ssfree chỉ dủng để xóa tập hợp đã có chứ kg dùng cho ename. Trước đây, việc dùng hàm này kg cẩn thận dễ làm cho máy treo. Kg biết bây gờ đã cải thiện gì chưa.
  • 0

#44 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 May 2012 - 10:33 PM

Bạn cho mình hỏi tý, việc sd tiền tố ads_ và aced có khác nhau kg, mặc dù đối số vẫn như cũ. Trước đây mình thấy dùng ads_, sau đó thấy chuyển thành aced và một số tiền tố khác nữa. Kg biết chỉ là sự thay đổi cú pháp hay có ý nghĩa gì khác. VD như bạn dùng acedSSFree(ssname) , cách cũ là ads_ssfree(ssname).

Góp ý : Mình thấy bạn dùng hàm acedSSFree cho biến ssname chưa khởi gán là kg đúng, hơn nữa, hàm ads_ssfree chỉ dủng để xóa tập hợp đã có chứ kg dùng cho ename. Trước đây, việc dùng hàm này kg cẩn thận dễ làm cho máy treo. Kg biết bây gờ đã cải thiện gì chưa.

Trong ObjectARX 2010 thì ads_ssfree là #define của acedSSFree trong file adsmigr.h trong thư mục inc của ObjectARX. Ngoài ra còn rất nhiều hàm ads khác được define bằng aced nên cách dùng là như nhau. Tuy nhiên vẫn còn một số hàm vẫn nằm trong adsdlg.h như: ads_start_list, ads_add_list, ...
Theo mình biết thì hàm acedSSFree sẽ giải phóng 1 selecction set khỏi AutoCAD (nếu có) nên việc Free 1 selection set (chưa có) vẫn ko hại gì (mình đã test và kết quả của acedSSFree(ads_name) ngay sau khi khai báo ads_name= RTNORM). Tuy nhiên việc làm này là "dư" và trong C++ "dư" đôi khi đồng nghĩ với "sai" vậy tốt nhất là bỏ nó đi :D
p/s: tất cả code ở trên mình đã build và test trước khi post nên nếu bạn copy về build vẫn chạy.
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#45 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 28 May 2012 - 10:15 PM

Đối với selection thì việc lọc đối tượng khi thực hiện việc chọn cũng rất quan trọng giúp tăng độ chính xác cũng như giảm thời gian chọn đối tượng. Post này mình giới thiệu cách lọc đối tượng khi tạo selection, có 2 cách tạo filters (resbuf). Dưới đây mình tạo resbuf theo 2 cách cùng làm 1 nhiệm vụ là lọc các đối tượng là LINE và nằm trong Layer 0

Cách 1:

struct resbuf rbLine, rbLayer;

rbLayer.restype = 8;
rbLayer.resval.rstring = _T("0");
rbLayer.rbnext = NULL;

rbLine.restype = 0;
rbLine.resval.rstring = _T("LINE");
rbLine.rbnext = &rbLayer;

ads_name ss;

int err = acedSSGet(NULL, NULL, NULL, &rbLine, ss);
if(err!= RTNORM)
return;

long sslength;
acedSSLength(ss, &sslength);

acutPrintf(_T("\n%d Entities was selected"), sslength);
acedSSFree(ss);


Cách 2:

struct resbuf *resb = acutBuildList(
RTDXF0, _T("LINE"),
8, _T("0"),
0);
ads_name ss;

int err = acedSSGet(NULL, NULL, NULL, resb, ss);
acutRelRb(resb);
if(err!= RTNORM)
return;

long sslength;
acedSSLength(ss, &sslength);

acutPrintf(_T("\n%d Entities was selected"), sslength);
acedSSFree(ss);


Các bạn tham khảo thêm về DXF code để biết các restype và resval có thể dùng để lọc đối tượng. chú ý các giá trị có kiểu floating point (resval.rreal) và kiểu integer (resval.rint), ...
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#46 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 31 May 2012 - 07:22 PM

Đối với selection thì việc lọc đối tượng khi thực hiện việc chọn cũng rất quan trọng giúp tăng độ chính xác cũng như giảm thời gian chọn đối tượng. Post này mình giới thiệu cách lọc đối tượng khi tạo selection, có 2 cách tạo filters (resbuf). Dưới đây mình tạo resbuf theo 2 cách cùng làm 1 nhiệm vụ là lọc các đối tượng là LINE và nằm trong Layer 0


Mình thấy hai cái code của bạn chưa ổn lắm nên góp ý một tý.

cách 1:
struct resbuf rbLine, rbLayer;

rbLayer.restype = 8;
rbLayer.resval.rstring = _T("0");
rbLayer.rbnext = NULL;

rbLine.restype = 0;
rbLine.resval.rstring = _T("LINE");
rbLine.rbnext = &rbLayer;

ads_name ss;

int err = acedSSGet(NULL, NULL, NULL, &rbLine, ss);
if(err!= RTNORM)
//bạn phải giải phóng rbLine ở đây vì nó đã đc khởi tạo trước dù việc gọi hàm ssget có thành công hay kg;
return;

acutRelRb(resb);//Có lẽ bạn nhầm tên biến resb
long sslength;
acedSSLength(ss, &sslength);

acutPrintf(_T("\n%d Entities was selected"), sslength);
acedSSFree(ss);

Cách 2:

struct resbuf *resb = acutBuildList(RTDXF0, _T("LINE"),8, _T("0"),0); //Cách dùng bộ lọc này gọn hơn nhỉ
ads_name ss;

int err = acedSSGet(NULL, NULL, NULL, resb, ss);
if(err!= RTNORM)
//tương tự, bạn phải giải phóng resb ở đây.
return;

acutRelRb(resb);
long sslength;
acedSSLength(ss, &sslength);

acutPrintf(_T("\n%d Entities was selected"), sslength);
acedSSFree(ss);

Việc giải phóng một resbuf * (ví dụ : resbuf *reb) đã khởi tạo là bình thường, nhưng giải phóng resbuf (ví dụ : resbuf reb) kg biết có ổn kg (lâu lắm mình cũng ít dùng resbuf). Việc giải phóng biến trong C quả rất phức tạp. Khi bạn chạy thử kg thấy lỗi cũng chưa hẳn đã chắc ăn. Ví dụ bạn khai báo ads_name name, sau đó bạn chưa khởi tạo mà giả phóng ngay (vd : ads_ssfree(name) ) có thể gặp lỗi, vì khi đó name có thể chứa rác, mà rác đó vô tình trùng một địa chỉ của biến khác mà với một chương trình nhò, bạn chưa thấy hậu quả của nó.

Bạn và các bạn có thể viết hoặc hướng dẫn giúp mình cách lồng các khung đối thoại chuẩn của Cad như ô Preview trong khung thoại Select File thường thấy trong lệnh Open vào trong khung đối thoại do mình tạo ra hay không. Trong khung đối thoại thông thường mình có thể đưa vào cây thư mục và danh sách file, nhưng làm thế nào đưa đc ô Preview của Cad (để khi mình click và tên file thì thấy cái ảnh của nó như Cad vậy) thì mình chịu. Xin cám ơn.
  • 1

#47 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 31 May 2012 - 09:44 PM


Mình thấy hai cái code của bạn chưa ổn lắm nên góp ý một tý.

Việc giải phóng một resbuf * (ví dụ : resbuf *reb) đã khởi tạo là bình thường, nhưng giải phóng resbuf (ví dụ : resbuf reb) kg biết có ổn kg (lâu lắm mình cũng ít dùng resbuf). Việc giải phóng biến trong C quả rất phức tạp. Khi bạn chạy thử kg thấy lỗi cũng chưa hẳn đã chắc ăn. Ví dụ bạn khai báo ads_name name, sau đó bạn chưa khởi tạo mà giả phóng ngay (vd : ads_ssfree(name) ) có thể gặp lỗi, vì khi đó name có thể chứa rác, mà rác đó vô tình trùng một địa chỉ của biến khác mà với một chương trình nhò, bạn chưa thấy hậu quả của nó.

Bạn và các bạn có thể viết hoặc hướng dẫn giúp mình cách lồng các khung đối thoại chuẩn của Cad như ô Preview trong khung thoại Select File thường thấy trong lệnh Open vào trong khung đối thoại do mình tạo ra hay không. Trong khung đối thoại thông thường mình có thể đưa vào cây thư mục và danh sách file, nhưng làm thế nào đưa đc ô Preview của Cad (để khi mình click và tên file thì thấy cái ảnh của nó như Cad vậy) thì mình chịu. Xin cám ơn.

Thanks bạn,
code 1: resbf là giá trị nên ko cần Relrb
code 2, mình RelRb (pointer) trước khi xét err status 1 lần cho 2 trường hợp.
Mình đã sửa lại code ở post trên.
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#48 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 27 July 2012 - 03:53 AM

Chào Detailing và các bạn.
Mình thử kiếm trong Arx một số hàm tương tự như trong Lisp (acet-, vl, vla ...)
VD : ACET-SS-TO-LIST, ACET-GEOM-OBJECT-END-POINTS,vlax-curve-getClosestPointTo , ...
nhưng kg thấy đâu cả. Kg biết nó có hay kg và tham khảo ở đâu. Mong đc các bạn chỉ dẫn.
  • 0

#49 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 27 July 2012 - 07:52 AM

Chào Detailing và các bạn.
Mình thử kiếm trong Arx một số hàm tương tự như trong Lisp (acet-, vl, vla ...)
VD : ACET-SS-TO-LIST, ACET-GEOM-OBJECT-END-POINTS,vlax-curve-getClosestPointTo , ...
nhưng kg thấy đâu cả. Kg biết nó có hay kg và tham khảo ở đâu. Mong đc các bạn chỉ dẫn.

Sau khi cài ObjectARX SDK, bác vào thư mục docs (vd : C:\ObjectARX 2010\docs), open file arxdoc.chm
- vào tab Content chọn topic ObjectARX Reference để tìm theo class
- hay tab Search, nhập các hàm (method) cần tìm.Hình đã gửi
  • 1

#50 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 27 July 2012 - 08:41 AM

Chào Detailing và các bạn.
Mình thử kiếm trong Arx một số hàm tương tự như trong Lisp (acet-, vl, vla ...)
VD : ACET-SS-TO-LIST, ACET-GEOM-OBJECT-END-POINTS,vlax-curve-getClosestPointTo , ...
nhưng kg thấy đâu cả. Kg biết nó có hay kg và tham khảo ở đâu. Mong đc các bạn chỉ dẫn.

Chào bạn,
vl, vla, vlax là các hàm acet giống như 1 bộ thông dịch giữa lisp và ARX do Autodesk viết để support cho các Vlisp/lisp developer nên đương nhiên là bạn tìm ko thấy rồi :D
Nếu thấy cần những hàm đó bạn có thể viết lại dựa trên công dụng của nó
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#51 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 27 July 2012 - 10:31 AM

Chào bạn,
vl, vla, vlax là các hàm acet giống như 1 bộ thông dịch giữa lisp và ARX do Autodesk viết để support cho các Vlisp/lisp developer nên đương nhiên là bạn tìm ko thấy rồi :D
Nếu thấy cần những hàm đó bạn có thể viết lại dựa trên công dụng của nó

Mình nghĩ là nó phải có những hàm tương tự nhưng có thể do tên hàm khác hoặc do kg công bố thôi. Nhiều hàm chạy rát nhanh so với mình viết nên muốn tận dụng cho tiện.

@gia_bach : Mình cũng làm giống như bạn nhưng có lẽ do mình để tên hàm giống như lisp nên nó kg tìm đc. Mình cũng quên mất trong C kg cho tên hàm có dấu "-". Làm Lisp riết rồi lục nghề.

Cám ơn hai bạn.
  • 0

#52 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 27 July 2012 - 10:37 AM

Những bài mình post sau đây là những gì mình đã và đang học cái món này nên chắc chắn sẽ có nhiều sai sót, mong mọi người cùng nhau thảo luận.
Trước hết mình dùng VS2008 SP1 + ObjectARX SDK 2010 + test trên AutoCAD 2010
Bộ cài ObjectARX 2010 được cung cấp free bới Autodesk ở đây: http://download.auto...4_and_32Bit.exe

Bài học đầu tiên cho các ngôn ngữ lập trình bao giờ cũng là "Hello world" vậy mình cũng ko dám "xé rào", làm 1 cái Hello world để biết C++ và AutoCAD làm việc với nhau như thế nào. Với mục đích nhanh - gọn - lẹ mình dùng luôn wizard của AutoCAD

1. Chọn ObjectARX/DBX/OMF project từ project type của VS
Hình đã gửi

2. Nhập Registered developer Symbol
Hình đã gửi

3. Ở bảng project type chọn ObjectARX (AutoCAD Extension)
Hình đã gửi

4. Không thay đổi gì cả cứ bấm Next thôi
Hình đã gửi

5. Chọn No MFC support (chỉ là hello world thôi, ko cần ai support cả Hình đã gửi)
Hình đã gửi

6. Không thay đổi gì cả cứ bấm Next thôi
Hình đã gửi

7. Không thay đổi gì cả cứ bấm Next thôi
Hình đã gửi

8. Sau khi kết thúc wizard (bấm Finish) nhìn vào solution explorer ta thấy wizard đã tạo cho ta một số file cần thiết đồng thời thết lập luôn các linker, setting, ...
Hình đã gửi

9. Dùng toolbar của Autodesk để tạo command
Hình đã gửi

10. Right click trên cửa sổ ObjectARX Commands -> chọn New sau đó nhập các thông tin cần thiết
Hình đã gửi

11. Sau khi bấm OK trong file acrxEntryPoint.cpp ta thấy xuất hiện dòng code khai báo tên lệnh và 1 function chứa code của command
Hình đã gửi

12. Add thêm dòng code này vào function mới tạo ra để hiện dòng "Welcome to ObjectARX!" trên Command của AutoCAD




13. Mở CAD lên và load lệnh thử xem thế nào (muốn dùng debug để tự mở cad thì phải add đường dẫn đến acad.exe trong properties của project)
Hình đã gửi

OK! thế là mình đã kết nối C++ với AutoCAD dc rồi


Hay đó bạn.
Cố gắng có thêm nhiều bài viết dể mọi người học hỏi nhé
Lâu rồi không lên trên này vì bận quá.
Giờ trở về nhà cùng vọc LISP với mọi người
  • 0

#53 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 27 July 2012 - 11:09 AM

Mình nghĩ là nó phải có những hàm tương tự nhưng có thể do tên hàm khác hoặc do kg công bố thôi. Nhiều hàm chạy rát nhanh so với mình viết nên muốn tận dụng cho tiện.

Bạn xem mấy ý sao (ý kiến cá nhân thôi)
  • VLA object là dump của Com object ra nhưng ARX nó làm việc trực tiếp trên Com object vậy nó xài vla làm gì?
  • acet-ss-to-list trả về 1 list vậy ARX xài list vào việc gì trong khi nó thao tác trực tiếp với selection do nó tạo ra?
  • vlax-curve-getclosestpoint chỉ như 1 interface (dùng cho lisp) để invoke method AcDbCurve:getClosestPointTo vậy trong ARX tại sao phải thông qua 1 interface cho lisp mà ko dùng trực tiếp method của mình?

  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#54 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 27 July 2012 - 06:54 PM

Bạn xem mấy ý sao (ý kiến cá nhân thôi)

  • VLA object là dump của Com object ra nhưng ARX nó làm việc trực tiếp trên Com object vậy nó xài vla làm gì?
  • acet-ss-to-list trả về 1 list vậy ARX xài list vào việc gì trong khi nó thao tác trực tiếp với selection do nó tạo ra?
  • vlax-curve-getclosestpoint chỉ như 1 interface (dùng cho lisp) để invoke method AcDbCurve:getClosestPointTo vậy trong ARX tại sao phải thông qua 1 interface cho lisp mà ko dùng trực tiếp method của mình?

Mình đồng ý với bạn. Ý mình muốn hỏi chính là cái bạn nói. Cái gốc để sinh ra những hàm trên Lisp nằm chỗ nào trong Arx (trừ những hàm chuẩn mình đã biết). Mình chưa biết cách khai thác và sd nó.
Hàm acet-ss-to-list nó có ý nghĩa riêng của nó (tất nhiên hàm này viết cũng dễ nhưng nhanh chậm chưa biết), vì chính bản thân Arx cũng kg lưu giữ được cùng lúc quá 128 tập hợp chọn. Lúc đó buộc phải lưu nó ở dạng khác mà list là một ví dụ.
Trước giờ mình sd Arx chỉ toàn những hàm chuẩn. Những vđ khác mình nhờ sự hỗ trợ của Delphi thông qua DLL (chạy cũng tốt nhưng đôi khi chậm) và các lớp trong MFC (hồi đó Lisp chỉ có những hàm chuẩn-chưa có vl). Sau này thấy các bạn dùng các hàm vl, vla, ... chóng cả mặt, muốn học nhưng cũng chưa tới đâu. Nếu bạn có thể chỉ dẫn cho cách tiếp cận nó trong Arx thì hay quá. Mình là dân nghiệp dư đôi lúc dùng từ hơi thiếu chuyên môn mong bạn thông cảm
  • 0

#55 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 27 July 2012 - 10:12 PM

Mình đồng ý với bạn. Ý mình muốn hỏi chính là cái bạn nói. Cái gốc để sinh ra những hàm trên Lisp nằm chỗ nào trong Arx (trừ những hàm chuẩn mình đã biết). Mình chưa biết cách khai thác và sd nó.
Hàm acet-ss-to-list nó có ý nghĩa riêng của nó (tất nhiên hàm này viết cũng dễ nhưng nhanh chậm chưa biết), vì chính bản thân Arx cũng kg lưu giữ được cùng lúc quá 128 tập hợp chọn. Lúc đó buộc phải lưu nó ở dạng khác mà list là một ví dụ.
Trước giờ mình sd Arx chỉ toàn những hàm chuẩn. Những vđ khác mình nhờ sự hỗ trợ của Delphi thông qua DLL (chạy cũng tốt nhưng đôi khi chậm) và các lớp trong MFC (hồi đó Lisp chỉ có những hàm chuẩn-chưa có vl). Sau này thấy các bạn dùng các hàm vl, vla, ... chóng cả mặt, muốn học nhưng cũng chưa tới đâu. Nếu bạn có thể chỉ dẫn cho cách tiếp cận nó trong Arx thì hay quá. Mình là dân nghiệp dư đôi lúc dùng từ hơi thiếu chuyên môn mong bạn thông cảm

Bạn có thể dùng acedInvoke() để gọi 1 function trong 1 ARX khác hoặc được defun bởi Autolisp.
Good luck!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#56 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 28 July 2012 - 12:36 AM

Bạn có thể dùng acedInvoke() để gọi 1 function trong 1 ARX khác hoặc được defun bởi Autolisp.
Good luck!

Cám ơn bạn, hàm này mình cũng đã biết dùng trong vài trường hợp rồi. Ý mình muốn tìm hiểu những hàm tương tự Lisp giống như những hàm ads vậy.
  • 0

#57 CAD_Development

CAD_Development

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 08 August 2012 - 10:18 PM

Nếu chỉ vẽ ra bỏ đấy có thể vẫn chưa thấy sự khác biệt. Nếu bạn cần lưu lại ObjectId, hoặc thông tin gì đó để update, thì ngay cả hai người dùng code arx cùng làm một chức năng thì tốc độ cũng hơn kém nhau đến cả trăm lần đó bạn :)
  • 0

#58 vuxuanhuynh

vuxuanhuynh

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 19 November 2012 - 03:30 PM

Topic này rất hay sao Detailing không tiếp tục post nhỉ? Tiện đây xin hỏi TRUNGNGAMY hay menber nào có file số của Quyển Autocad và Lập trình cho ứng dụng của Thầy Bành Tiến Long - Trường ĐH Bách Khoa HN không? có thể post lên cho mọi người tham khảo được chứ. Thanks
  • 0

#59 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 20 November 2012 - 06:59 PM

Topic này rất hay sao Detailing không tiếp tục post nhỉ? Tiện đây xin hỏi TRUNGNGAMY hay menber nào có file số của Quyển Autocad và Lập trình cho ứng dụng của Thầy Bành Tiến Long - Trường ĐH Bách Khoa HN không? có thể post lên cho mọi người tham khảo được chứ. Thanks

Mình kg nhớ rõ có đúng kg. Quyển này viết từ thời cad12-14. Trên đó có một phần kiến thức căn bản nói về lập trình ads cho cad (tức arx bây giờ). Các hàm chủ yếu có tiền tố ads_, tức nó tương tự hàm lisp nhưng có tiền tố ads_. Bạn có thể xem help, một số ví dụ mẫu trong bộ adsrx (cad14) hay ObjectArx (cad đời sau), biên dịch nó để ngâm cứu. Còn tài liệu dạng văn bản làm sao gởi cho bạn đây.
  • 0

#60 vuxuanhuynh

vuxuanhuynh

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 20 November 2012 - 09:02 PM

Đúng là quyển này Mr Long viết từ năm 1998 không biết là có mấy tập, Tập 1 gồm 2 phần 1- Giới thiệu về Autolisp, 2- giới thiệu về lập trình C cho autocad. Quyển này viết rất cơ bản. Đúng là Cad14 thì chủ yếu vẫn dùng các hàm ads là nhiều. Tiện đây xin hỏi TRUNGNGAMYDetailing là cách để Insert một Block có thuộc tính vào bản vẽ autocad thì như thế nào. Đối với Block đã có sẵn trong ban vẽ hiện thời thì mình làm được rồi. Nhưng Block chưa có thì tiền hành chèn file block đó vào bản vẽ( Cái này minh chưa làm được). Vì còn phải truy cập Database của file Block đó nữa. các bạn có thể code demo cho mình tham khảo được không. Thanks
PS: Mà để code nhanh VC thì có thể dùng Add-in Visual Assis X để gợi nhớ code cho nhanh, cái này hạn chế được rất nhiều lỗi khi code đấy.
  • 0