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ọnAcDbObject *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();
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
No comments:
Post a Comment