July 1, 2013

Lưu trữ đối tượng vào tệp tin DWG và DXF

Khi dẫn xuất một lớp từ AcDbObject, bạn cần phải bổ sung thông tin vào trong cơ chế lưu trữ thông tin của AutoCAD được nói đến ở trong chương này. Dưới đây là 4 hàm được sử dụng để cất giữ đối tượng vào tệp tin DWG và DXF. Nó còn được sử dụng với mục đích khác như nhân bản (cloning).

Acad::ErrorStatus 
AcDbObject::dwgOut(AcDbDwgFiler* pFiler) const;

Acad::ErrorStatus
AcDbObject::dwgIn(AcDbDwgFiler* pFiler);

Acad::ErrorStatus
AcDbObject::dxfOut(
AcDbDxfFiler* pFiler,
Adesk::Boolean allXdFlag,
Adesk::uchar* regAppTable) const;
Acad::ErrorStatus

AcDbObject::dxfIn(AcDbDxfFiler* pFiler);

Mỗi một hàm nhận biến đầu tiên là một con trỏ đến filer. Một đối tượng AcDbObject ghi dữ liệu và đọc dữ liệu từ filer. Kiểu enum FilerType cho phép bạn kiểm tra kiểu filer, bao gồm các kiểu sau:
  • kFileFiler (used for DWG and DXF files)
  • kCopyFiler
  • kUndoFiler
  • kBagFiler (used with acdbEntMake(), acdbEntMod(), and acdbEntGet())
  • kIdXlateFiler
  • kPageFiler
  • kDeepCloneFiler
  • kIdFiler
  • kPurgeFiler
  • kWBlockCloneFiler
Các hàm dwgOut()dwgIn() sẽ chuyển hướng đến dwgOutFields()dwgInFields(), hay dxfOutFields() và dxfInFields() tương ứng. Nếu dẫn xuất một đối tượng từ AcDbObject, bạn cần phải ghi đè lên các hàm ảo, được sử dụng để lưu trữ liên tục của đối tượng, như quá trình sao chép và UNDO:
  • dwgOutFields()
  • dwgInFields()
  • dxfOutFields()
  • dxfInFields()

Hàm dwgOut()

Hàm dwgOut() goi phương thức dwgOutFields(), được gọi ra bởi các lệnh và điều kiện sau:
  • SAVE (sử dụng kFileFiler)
  • SAVEAS (sử dụng kFileFiler)
  • WBLOCK (sử dụng kWblockCloneFilerkIdXlateFiler)
  • INSERT, XREF (dùng kDeepCloneFilerkIdXlateFiler)
  • COPY (sử dụng cùng filer với INSERT; một sao chép đòi hỏi ghi lại tình trạng của đối tượng và sau đó đọc nó trở lại vào trong đối tượng của cùng một lớp)
  • PURGE (sử dụng kPurgeFiler)
  • Bất cứ lúc nào một đối tượng được phân trang (page in) (sử dụng kPageFiler)
  • Bất cứ lúc nào đối tượng được chỉnh sửa (để ghi lại UNDO; dùng kUndoFiler)

Hàm dwgIn()

Hàm dwgIn(), cái mà gọi phương thức dwgInFields(), được dẫn ra bởi lệnh và điều kiện sau:
  • OPEN (dùng kFileFiler)
  • UNDO (dùng kUndoFiler)
  • INSERT, COPY, XREF (dùng kDeepCloneFilerkIdXlateFiler)
  • WBLOCK (dùng kWblockCloneFilerkIdXlateFiler)
  • Bất cứ lúc nào một đối tượng được phân trang (dùng kPageFiler)

Hàm dxfOut()

Hàm dxfOut(), gọi đến phương thức dxfOutFields(), được dẫn ra bởi lệnh và hàm sau:
  • WBLOCK (dùng kFileFiler)
  • SAVE (dùng kFileFiler)
  • SAVEAS (sử dụng kFileFiler)
  • acdbEntGet() hoặc hàm AutoLISP tương đương (sử dụng kBagFiler)

Hàm dxfIn()

Hàm dxfIn(), gọi dxfInFields(), được dẫn ra bởi lệnh và hàm sau:
  • OPEN (uses kFileFiler)
  • INSERT (uses kFileFiler)
  • acdbEntMod(), acdbEntMake(), acdbEntMakeX(), or the AutoLISP equivalents (use kBagFiler)

Kiểm tra lỗi trong Filer


Khi ghi vào filer, bạn không cần tiến hành quá trình kiểm tra lỗi ngay lập tức. Một khi có lỗi xảy ra, filer trả về cùng một trạng thái lỗi tới tất cả các yêu cầu ghi cho đến khi trạng thái được xóa bỏ bởi filer.
Mọi lớp filer đều có hàm getFilerStatus() trả về trạng thái của filer. Khi đọc một tệp tin, bạn có thể muốn kiểm tra trạng thái filer nếu bạn không chắc chắn bước tiếp theo sẽ thành công hay thất bại.

No comments:

Post a Comment

Featured Post

Khóa học AutoLISP cơ bản | Tự học lập trình | AutoLISP that la don gian

Khóa học được cung cấp bởi  Thanh Trí AutoCAD       Thông tin thêm: 👉👉👉

Popular Posts