June 2, 2013

Lấy thông tin từ thực thể proxy (Getting proxy entity’s information)

Làm thế nào để lấy được thông tin của thực thể proxy?

Bạn có thể sử dụng lớp “AcDbProxyEntity” để lấy tên gốc (original name), tên dxf gốc (original dxf name) và số lượng tham chiếu của thực thể proxy (particular entity’s proxy) trong bản vẽ.
Đoạn mã dưới đây trình bày hàm để lấy tên gốc và tên dxf gốc của thực thể proxy.
int nReturn ;
ads_name name;
ads_point pt;

nReturn = acedEntSel(_T("Select proxy entity\n"), name, pt);

if (nReturn != RTNORM)
return;

//Lấy ObjectId của thực thể
AcDbObjectId Id;
if(acdbGetObjectId(Id, name) != Acad::eOk)
return;

//Mở thực thể được chọn
AcDbObject *pObject = NULL;
if(acdbOpenAcDbObject(pObject, Id, AcDb::kForRead) != Acad::eOk)
{
    return;
}

AcDbProxyEntity *pProxy = AcDbProxyEntity::cast(pObject);

if(pProxy != NULL)
{
    acutPrintf(_T("Original class name : %s\n"), pProxy->originalClassName());

    acutPrintf(_T("DXF name : %s\n"), pProxy->originalDxfName());

    acutPrintf(_T("Description : %s\n"), pProxy->applicationDescription());
}

pObject->close();
File Arx: Lệnh GPI hoặc hàm defun (lh_getproxyinform ent)
Download tại Mediafire

Ngoài ra, theo Zatopek từ diễn đàn AutoDesk có 02 cách để lấy được dữ liệu hình học của thực thể trong Proxy.
Trước tiên, bạn cần lấy được AcDbProxyEntity, từ đó dùng hàm getGeomExtens, và bạn có thể phá vỡ nó (nếu cho phép).
Hàm getGeomExtents:
Hàm này điền vào trong mở rộng (extent) với những mở rộng gần đúng. Nếu proxy có đồ họa được ghi lại, từ đó chúng được dùng để tính toán extent. Nếu proxy chỉ có đường bao thì mở rộng cũng chỉ là đường bao hộp mà thôi.
Phá vỡ Explode:
Hàm này tạo ra bản sao của tất cả đối tượng đồ họa nguyên thủy lưu giữ trong proxy và thêm con trỏ tới những thực thể mới tạo ra vào trong mảng thực thể entitySet. Hàm trả về Acad::eOk nếu thành công, ngược lại là Acad::eCannotExplodeEntity (không thể explode).

Hãy xem thêm các giải pháp bên trong:
[Arx path]\samples\database\ARXDBG\Inc\ArxDbgWorldDraw.h
[Arx path]\samples\database\ARXDBG\Tests\ArxDbgWorldDraw.cpp
[Arx path]\samples\database\ARXDBG\Inc\ArxDbgViewportDraw.h
[Arx path]\samples\database\ARXDBG\Tests\ArxDbgViewportDraw.cpp
Arx path là thư mục cài đặt bộ ObjectARX SDK.
 
Link tham khảo:
http://adndevblog.typepad.com
http://forums.autodesk.com

No comments:

Post a Comment

Featured Post

Lisp Copy tăng số trong AutoCAD | AutoLISP That la don gian

Ứng dụng được phát triển bởi đội ngũ AutoLISP Thật là đơn giản       Thông tin thêm: 👉👉👉

Popular Posts