Tìm hiểu tổng quan về autocad

Tài liệu Tìm hiểu tổng quan về autocad: December 20, 2009 ObjectARX 1Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 T ng Quan v AutoCad ổ ề Ph n m m Cad đ u tiên là Sketchpad xu t hi n vào năm 1962 đ c vi t ầ ề ầ ấ ệ ượ ế b i ở Ivan Sutherland thu c tr ng kĩ thu t Massachsetts.ộ ườ ậ Ch c năng:ứ Thi t k các b n v hai chi u ế ế ả ẽ ề Thi t k các b n v 3D ế ế ả ẽ Đ c đi m n i ặ ể ổ b t:ậ Chính xác Năng su t caoấ Trao đ i d li u v i ph n m m khácổ ữ ệ ớ ầ ề December 20, 2009 ObjectARX 2Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Các ngôn ng phát tri n trên ữ ể AutoCad AutoLISP : (LISt Processing :ngôn ng x lý danh sáchữ ử ) L p trình viên có th m r ng tính năng c a ậ ể ở ộ ủ AutoCAD b ng cách vi t các l nh c a chính hằ ế ệ ủ ọ ADS (AutoCAD Development System) : t AutoCAD R 10, ừ do AutoLISP không áp ng đ c t c đ caoứ ượ ố ộ . M t ch ng trình ADS th c ch t là m t file kh thi (executable) ch a các hàm đ nh nghĩa theo m t ộ ươ ự ấ ộ ả ứ ị ộ quy t c nh t đ nh đ có th g i t trong AutoCAD.ắ ấ ị ể ể ọ ừ ADSRX (RX : Runtime Ext...

pdf38 trang | Chia sẻ: hunglv | Lượt xem: 1358 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Tìm hiểu tổng quan về autocad, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
December 20, 2009 ObjectARX 1Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 T ng Quan v AutoCad ổ ề Ph n m m Cad đ u tiên là Sketchpad xu t hi n vào năm 1962 đ c vi t ầ ề ầ ấ ệ ượ ế b i ở Ivan Sutherland thu c tr ng kĩ thu t Massachsetts.ộ ườ ậ Ch c năng:ứ Thi t k các b n v hai chi u ế ế ả ẽ ề Thi t k các b n v 3D ế ế ả ẽ Đ c đi m n i ặ ể ổ b t:ậ Chính xác Năng su t caoấ Trao đ i d li u v i ph n m m khácổ ữ ệ ớ ầ ề December 20, 2009 ObjectARX 2Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Các ngôn ng phát tri n trên ữ ể AutoCad AutoLISP : (LISt Processing :ngôn ng x lý danh sáchữ ử ) L p trình viên có th m r ng tính năng c a ậ ể ở ộ ủ AutoCAD b ng cách vi t các l nh c a chính hằ ế ệ ủ ọ ADS (AutoCAD Development System) : t AutoCAD R 10, ừ do AutoLISP không áp ng đ c t c đ caoứ ượ ố ộ . M t ch ng trình ADS th c ch t là m t file kh thi (executable) ch a các hàm đ nh nghĩa theo m t ộ ươ ự ấ ộ ả ứ ị ộ quy t c nh t đ nh đ có th g i t trong AutoCAD.ắ ấ ị ể ể ọ ừ ADSRX (RX : Runtime Extension) : t AutoCAD R13, ừ nh m tăng kh năng giao ti p v i AutoCadằ ả ế ớ M t ch ng trình ADSRX là m t th vi n liên k t đ ng (DLL) ch a các hàm có th th c hi n t ộ ươ ộ ư ệ ế ộ ứ ể ự ệ ừ trong AutoCAD December 20, 2009 ObjectARX 3Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Các ngôn ng phát tri n trên ữ ể AutoCad ObjectARX : (M r ng h ng đ i t ng c a th vi n ARX)ở ộ ướ ố ượ ủ ư ệ xu t hi n cấ ệ ùng AutoCAD R14. Thay vì cung c p m t th vi n cấ ộ ư ệ ác hàm nh trong ARX, gi đây m t th vi n cư ờ ộ ư ệ ác l p đ i t ng t ng ng ớ ố ượ ươ ứ v i cớ ác đ i t ng (object) trong b n v AutoCAD cho phép thao tác d dố ượ ả ẽ ể àng h n r t nhi u. ơ ấ ề Do đó các ch ng ng d ng cươ ứ ụ ó th d qu n lý vể ễ ả à ch y n đ nh h nạ ổ ị ơ VBA :T phiên b n R14, cho phừ ả ép phát tri n ngể ứ d ng AutoCAD b ng Visual Basic for Applicationụ ằ . Nh đờ ó m t đ i ngũ r t l n cộ ộ ấ ớ ác l p trậ ình viên Basic cùng v i hi u bi t v môi tr ng AutoCADớ ể ế ề ườ có th phể át tri n cể ác ng d ng ph c v thi t k k thu tứ ụ ụ ụ ế ế ỹ ậ VisualLISP : t AutoCAD R14. Ngoừ ài nh ng c i ti n v ngôn ng so v i AutoLISPữ ả ế ề ữ ớ , VisualLISP còn cung c p m t môi tr ng phấ ộ ươ át tri n (ể IDE : Intergrated Development Environment) hoàn ch nhỉ , cho phép so n th o , ch y th , g r i vạ ả ạ ử ỡ ố à d ch ch ng trị ươ ình LISP d dễ àng h nơ December 20, 2009 ObjectARX 4Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Phân lo i các ngôn ng l p trình ạ ữ ậ API phát tri n AutoCAD ể thông d chị (interpreted) biên d ch (compiled) ị AutoLISP, VBA và VisualLISP ADS, ADS/ARX và ObjectARX December 20, 2009 ObjectARX 5Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 ObjectARX là gì ? ObjectARX là m t th vi n l p trình ng d ng h ng đ i t ng cho ộ ư ệ ậ ứ ụ ướ ố ượ môi tr ng AutoCAD ườ Ph c v cụ ụ ác h u h t cầ ế ác nhu c u c n thi t đ phầ ầ ế ể át tri n ể AutoCAD : Truy c p t i c s d li u b n vậ ớ ơ ở ữ ệ ả ẽ Tương tác với AutoCad Editor Tạo giao diện người dùng sử dụng MFC Định nghĩa đối tượng mới (Custom Objects) Tương tác môi trường lập trình khác ..... December 20, 2009 ObjectARX 6Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Yêu c u khi l p trình ầ ậ ObjectARX Ch ng trình AutoCad: Thao tác t o ra b n v ,hi u c u trúc d li u b n ươ ạ ả ẽ ể ấ ữ ệ ả v ...ẽ K thu t l p trình h ng đ i t ng và môi tr ng Visual C++ỹ ậ ậ ướ ố ượ ươ K thu t l p trình ng d ng trên Microsoft Windows v i ỹ ậ ậ ứ ụ ớ MFC(Microsoft Foundation Class) b i ch ng trình ARX th c ch t là ở ươ ự ấ m t th vi n liên k t đ ng (DLL) trong các h đi u hành Windows 32-bit.ộ ư ệ ế ộ ệ ề L p trình viên ph i n m v ng các khái ni m quan tr ng c a l p trình h ng ậ ả ắ ữ ệ ọ ủ ậ ướ đ i t ng nh k th a (inheritance) , đóng gói d li u (data encapsulation) , ố ượ ư ế ừ ữ ệ đa hình (polymorphism), hàm o(virtual function) ...ả Ð ng th i ph i n m đ c các th c t o và thay đ i thi t l p các project trong ồ ờ ả ắ ượ ứ ạ ổ ế ậ môi tr ng Visual C++ , các thao tác so n th o , biên d ch, g r i các ch ng ườ ạ ả ị ỡ ố ươ trình ... December 20, 2009 ObjectARX 7Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Cài đ t ObjectARXặ 1.AutoCAD 2.ObjectARX SDK 3.Microsoft Visual C++ .NET 4.ObjectARX Wizard S d ng ArxWizards.msi "\utils\ObjARXWiz\" ử ụ AutoCAD 2000,2000i and 2002 (plus verticals): ObjectARX 2000 and Microsoft Visual C++ 6.0 AutoCAD 2004, 2005 and 2006 (plus verticals): ObjectARX 2004 and Microsoft Visual C.NET 2002 (7.0) AutoCAD 2007, 2008 and 2009 (plus verticals): ObjectARX 2007 and Microsoft Visual C.NET 2005 (8.0) December 20, 2009 ObjectARX 8Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 C u trúc th vi n ObjectARXấ ư ệ Th vi n ObjectARX g m nhi u th vi n con khác nhau tuỳ theo yêu c u l p trình :ư ệ ồ ề ư ệ ầ ậ AcDb Các l p cung c p các thao tác truy c p c s d li u b n v AutoCAD ớ ấ ậ ơ ở ữ ệ ả ẽ AcGi Th vi n các l p đ i t ng dùng đ th hi n đ i t ng do ng i s d ng đ nh ư ệ ớ ố ượ ể ể ệ ố ượ ườ ử ụ ị nghĩa (custom object) AcGe Các l p ti n ích hình h c và đ i s : đi m, véc t , ma tr n , bi u di n đ ng ớ ệ ọ ạ ố ể ơ ậ ể ễ ườ cong, m t cong ...ặ AcRx Ph c v đăng ký các l p đ i t ng m i, đ nh ki u khi ch y ch ng trình ...ụ ụ ớ ố ượ ớ ị ể ạ ươ AcEd Dùng khi đăng ký các l nh, x lý các message c a AutoCAD , x lý transactionệ ử ủ ử ADS Thu vi n các hàm C d ng trong các thao tác liên quan đ n select đ i t ng, nh p ệ ự ế ố ượ ậ s li u ...ố ệ December 20, 2009 ObjectARX 9Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 C u trúc m t ch ng trình ObjectARXấ ộ ươ M t ch ng trình ObjectARX th c ch t là m t th vi n liên k đ ng trong đó có ộ ươ ự ấ ộ ư ệ ế ộ ch a m t đi m nh p (entry point) tuân theo nh ng quy t c nh t đ nh cho phép ứ ộ ể ậ ữ ắ ấ ị AutoCAD t ng tác v i ch ng trìnhươ ớ ươ T ng tác gi a AutoCAD và ng d ng ARX đ c th c hi n thông qua các ươ ữ ứ ụ ượ ự ệ message và entry point là n i x lý các message này.ơ ử Entry point này đóng vai trò nh hàm main() trong m t ch ng trình C/C++ hay ư ộ ươ m t Message Loop trong m t ch ng trình ng d ng Windowsộ ộ ươ ứ ụ December 20, 2009 ObjectARX 10Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 December 20, 2009 ObjectARX 11Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 T o m t Project ObjectARX m iạ ộ ớ B c 1:Kh i đ ng VS 2005 và t o m t project m i nh hình vướ ở ộ ạ ộ ớ ư ẽ B c 2: Ch n ng d ng c n t o là W32 Projectướ ọ ứ ụ ầ ạ December 20, 2009 ObjectARX 12Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 B c 3: Do ObjectArx th c ch t là m t DLL nên đây ta ch n DLLướ ự ấ ộ ở ọ December 20, 2009 ObjectARX 13Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 B c 4: Cài đ t biên d chướ ặ ị + Click vào tên Project ch n Properties ọ + Ch n General >Addtional Include Directoris đ thay đ i nh hìnhọ ể ổ ư December 20, 2009 ObjectARX 14Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 + Ch n Code General >Runtime Library đ thay đ i nh hìnhọ ể ổ ư + Ch n Linker > input>Addtional Dependenciesọ "rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib" December 20, 2009 ObjectARX 15Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 + Chuy n d ch t *.dll sang *.arx đ sau đó load vào Autocadể ị ừ ể B c 5: Thêm mã vào ch ng trìnhướ ươ December 20, 2009 ObjectARX 16Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 //Thêm các file Header #include "stdafx.h" #include #include //Đăng ký 2 hàm void initApp(); //S đ c g i khi AutoCad load ng d ngẽ ượ ọ ứ ụ void unloadApp(); //S đ c g i khi g b ng d ng kh i AutoCadẽ ượ ọ ỡ ỏ ứ ụ ỏ void helloWorld(); //Hàm này th c hi n xu t hi n dòng ch ự ệ ấ ệ ữ void initApp() { // Đăng kí dòng l nh trong AutoCadệ acedRegCmds->addCommand(_T("HELLOWORLD_COMMANDS"), _T("Hello"), _T("Bonjour"), ACRX_CMD_TRANSPARENT, helloWorld); } // G b dòng l nh khi thoát kh i ng d ngỡ ỏ ệ ỏ ứ ụ void unloadApp() { acedRegCmds->removeGroup(_T("HELLOWORLD_COMMANDS")); } void helloWorld() { acutPrintf(_T("\nHello World!")); } December 20, 2009 ObjectARX 17Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) { switch (msg) { case AcRx::kInitAppMsg: acrxDynamicLinker->unlockApplication(pkt); acrxRegisterAppMDIAware(pkt); initApp(); //Ham khoi tao duoc goi break; case AcRx::kUnloadAppMsg: unloadApp(); //Go bo ung dung break; default: break; } return AcRx::kRetOK; } Nh r ng ObjectARX là m t ng d ng DLL nên nó không có hàm ớ ằ ộ ứ ụ main() là đi m vàoể AutoCAD g i hàm acrxEntryPoint() ,module ObjectArx đ truy n thông đi p đ n các ng d ngọ ể ề ệ ế ứ ụ December 20, 2009 ObjectARX 18Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Đ a Module vào trong AutoCadư Kh i đ ng AutoCadở ộ Trong Command Line gõ l nh ệ ap ho c ặ arx Ta tìm đ n th m c ch a file module Objectarx(arx ho c dbx) ế ư ụ ứ ặ r i click vào loadồ December 20, 2009 ObjectARX 19Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 ObjectARX Wizard Installing ObjectARX Wizard \utils\ObjARXWiz\ArxWizards.msi Creating an ObjectARX Project using Application Wizard Trong h p tho i thêm Project m i c aVC++ .NET IDE t i nút "Visual C++" và ộ ạ ớ ủ ạ ch n "ObjectARX". Click vào the template "ObjectARX/DBX/OMF Project"ọ December 20, 2009 ObjectARX 20Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Đăng ký m t l nh d dàng h n r t nhi u.Click vào a> ngay góc trên trái ộ ệ ễ ơ ấ ề December 20, 2009 ObjectARX 21Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Click OK.ObjectARX s thêm nh ng mã c n thi t trong file ẽ ữ ầ ế acrxEntryPoint.cpp đ th c thi.Và ta vào đây đ thêm mã .ể ự ể // ----- AsdkStep02._myInput command (do not rename) static void AsdkStep02_myInput(void){ // Add your code for command AsdkStep02._myInput here acutPrinf(_T(“Bat dau bàng ObjectArx Wizard”)) ; } // ----- AsdkStep02._mySelect command (do not rename) static void AsdkStep02_mySelect(void){ // Add your code for command AsdkStep02._mySelect here } } ; //----------------------------------------------------------------------------- IMPLEMENT_ARX_ENTRYPOINT(CStep02App) ACED_ARXCOMMAND_ENTRY_AUTO(CStep02App, AsdkStep02, _mySelect, mySelect, ACRX_CMD_TRANSPARENT, NULL) ACED_ARXCOMMAND_ENTRY_AUTO(CStep02App, AsdkStep02, _myInput, myInput, ACRX_CMD_TRANSPARENT, NULL) Ví d đây ta thêm 2 l nh là myInput và mySelect thì nó t ụ ở ệ ự sinh đo n mã sau: ạ December 20, 2009 ObjectARX 22Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 C s d li u c a b n v AutoCadơ ở ữ ệ ủ ả ẽ B n v AutoCAD là m t c s d li u (CSDL) ch a các đ i t ng t o nên b n ả ẽ ộ ơ ở ữ ệ ứ ố ượ ạ ả v . Các đ i t ng trong b n v thu c m t trong hai lo i sau :ẽ ố ượ ả ẽ ộ ộ ạ Entity (th c th ) : các đ i t ng có th ự ể ố ượ ể hi n hình h c, nh các đ i t ng ệ ọ ư ố ượ LINE, CIRCLE, POLYLINE Nonentity (phi th c th ) : đ i t ng ự ể ố ượ ki u đ ng (linetype), ki u ch (text ể ườ ể ữ style) hay l p (layer) ... ớ C u trúc c s d li u ấ ơ ở ữ ệ December 20, 2009 ObjectARX 23Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Database ModelSpace Table PaperSpace Table Entities Entities Dictionary Objects Dictionary Dictionary Layer Table Layer  Records Textstyle Table Textstyle  Records Block Table Block Records View Table View  Records 9 B ng ký hi uả ệ December 20, 2009 ObjectARX 24Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 B ng các bi n tr ng thái (header variables) : Các bi nả ế ạ ế bi u di n tr ng thái ể ễ ạ hi n th i c a b n v nh ELEVATION, FILLMODE, LIMMIN …ệ ờ ủ ả ẽ ư + Các b ng ký hi u (symbol tables): ả ệ trong m t b n v luôn có 9 b ng ký ộ ả ẽ ả hi u ệ + Các dictionary (t đi n) : Trong t đi n g c (namedừ ể ừ ể ố object dictionary), AutoCAD cho phép các ch ng trình ng d ng đ nh nghĩa các b ng ký hi u ươ ứ ụ ị ả ệ khác ngoài các b ng do AutoCAD đ nh nghĩa tr c.ả ị ướ +Hai b ng ch a entity (MODEL _SPACE và PAPER _SPACE):ả ứ B ng MODEL_SPACE ch a các entity n m trong không gian ả ứ ằ mô hình (model space) c a b n vủ ả ẽ Các entity c a không gian gi y v (paper space) đ c ch a ủ ấ ẽ ượ ứ trong b ng PAPER_SPACEả December 20, 2009 ObjectARX 25Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Tc có th dùng ti n ích dbview.arx đ xem database c a b n v AutoCadể ệ ể ủ ả ẽ Tr c khi v Lineướ ẽ Sau khi v Lineẽ December 20, 2009 ObjectARX 26Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 // create two points and the line AcGePoint3d startPt (1.0, 1.0, 0.0); AcGePoint3d endPt (10.0, 10.0, 0.0); AcDbLine* pLine = new AcDbLine (startPt, endPt); // open the proper entity container AcDbBlockTable* pBlock = NULL; AcDbDatabase* pDB = acdbHostApplicationServices()->workingDatabase(); pDB->getSymbolTable(pBlock,AcDb::kForRead); AcDbBlockTableRecord* pBTR = NULL; pBlock->getAt(ACDB_MODEL_SPACE, pBTR, AcDb::kForWrite); pBlock->close(); // now, add the entity to container AcDbObjectId Id; pBTR->appendAcDbEntity(Id, pLine); pBTR->close(); pLine->close(); December 20, 2009 ObjectARX 27Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Truy c p c s d li uậ ơ ở ữ ệ 1.Truy c p vào các bi n tr ng tháiậ ế ạ Khi l y đ c con tr t i đ i t ng c s d li u m t b n v , có th ấ ượ ỏ ớ ố ượ ơ ở ữ ệ ộ ả ẽ ể truy c p các bi n tr ng thái c a b n v b ng cách s d ng các ậ ế ạ ủ ả ẽ ằ ử ụ ph ng th c c a l p AcDbDatabase ươ ứ ủ ớ Adesk::Boolean fillmode() const; double elevation() const; AcGePoint2d limmin() const; Hay đ thay đ i giá trể ổ ị Acad::ErrorStatus setFillmode(Adesk::Boolean mode) ; Acad::ErrorStatus setElevation(double elev) ; Acad::ErrorStatus setLimmin(const AcGePoint2d& limmin) ; December 20, 2009 ObjectARX 28Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 B ngả Tên l p containerớ Tên l p Iteratorớ Block AcDbBlockTable AcDbBlockTableIterator Layer AcDbLayerTable AcDbLayerTableIterator Text style AcDbTextStyleTable AcDbTextStyleTableIterator Linetype AcDbLinetypeTable AcDbLinetypeTableIterator View AcDbViewTable AcDbViewTableIterator UCS AcDbUCSTable AcDbUCSTableIterator Viewport AcDbViewportTable AcDbViewportTableIterator Registered applications AcDbRegAppTable AcDbRegAppTableIterator Dimension styles AcDbDimStyleTable AcDbDimStyleTableIterator 2. Truy c p vào b ng ký hi u(Symbol Table)ậ ả ệ B ng ký hi u trong c s d li u đ c bi u di n t ng ng b ng các ả ệ ơ ở ữ ệ ượ ể ễ ươ ứ ằ l p và các b l p dùng đ truy c p sauớ ộ ặ ể ậ 3. Truy c p Dictionaryậ Dictionary (l p AcDbDictionary) đ c truy c p thông qua các iterator (l p ớ ượ ậ ớ AcDbDictionaryIterator) December 20, 2009 ObjectARX 29Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 void iterateLinetypes() { AcDbLinetypeTable *pLinetypeTbl; acdbHostApplicationServices()->workingDatabase() ->getSymbolTable(pLinetypeTbl, AcDb::kForRead); // Create a new iterator that starts at table // beginning and skips deleted. // AcDbLinetypeTableIterator *pLtIterator; pLinetypeTbl->newIterator(pLtIterator); // Walk the table, getting every table record and // printing the linetype name. // AcDbLinetypeTableRecord *pLtTableRcd; const TCHAR *pLtName; for (; !pLtIterator->done(); pLtIterator->step()) { pLtIterator->getRecord(pLtTableRcd, AcDb::kForRead); pLtTableRcd->getName(pLtName); pLtTableRcd->close(); acutPrintf(_T("\nLinetype name is: %s"), pLtName); } delete pLtIterator; pLinetypeTbl->close(); } December 20, 2009 ObjectARX 30Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Các đ i t ng c s d li u (database objects)ố ượ ơ ở ữ ệ 1.Đ i t ng và IDố ượ T ng tác v i các đ i t ng thì ta ph i thông qua OBjectID c a chúng.ươ ớ ố ượ ả ủ December 20, 2009 ObjectARX 31Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 2.M và đóng đ i t ngở ố ượ Acad::ErrorStatus AcDbDatabase::acdbOpenObject(AcDbObject*& pObj, AcDbObjectId objId, AcDb::OpenMode mode, Adesk::Boolean openErasedObject = Adesk::kFalse) 2.1.Mở M t đ i t ng có th m m t trong các ch đ ộ ố ượ ể ở ở ộ ế ộ AcDb::kForRead : đ đ c, không thay đ i thu c tể ọ ổ ộ ính AcDb::kForWrite : đ ghi, thay đ i thu c tể ổ ộ ính AcDb::kForNotify : đ g i message ể ử 2.1.Đóng đ i t ngố ượ Ð đóng đ i t ng , s d ng ph ng th c close()ể ố ượ ử ụ ươ ứ pObj->close(); M t đ i t ng m t i đa là 256 l n đ đ c, t i đa là m t l n đ ghiộ ố ượ ở ố ầ ể ọ ố ộ ầ ể EXLine December 20, 2009 ObjectARX 32Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 3.Xóa đ i t ngố ượ Mu n xoá đ i t ng, c n ph i m chúng ch đ kForWrite và g i ph ng ố ố ượ ầ ả ở ở ế ộ ọ ươ th c erase(). Chú ý là sau đó v n ph i đóng đ i t ngứ ẫ ả ố ượ pObj->erase(); pObj->close(); 4. Đ nh ki u th i gian ch yị ể ờ ạ (Run-Time Type Identification - RTTI) Xác đ nh ki u c a m t đ i t ng hay m t bi u th cị ể ủ ộ ố ượ ộ ể ứ 4.1.Xác đ nh ki u c a m t đ i t ngị ể ủ ộ ố ượ desc() : Tr v thông tin ki u (descriptor object ) c a đ i t ngả ề ể ủ ố ượ cast() : Ep m t con tr đ i t ng v m t ki u con tr nh t đ nh. N u không đúng ki u, tr v NULLộ ỏ ố ượ ề ộ ể ỏ ấ ị ế ể ả ề isKindOf() : Ki m tra m t đ i t ng có thu c ki u nh t đ nh (hay các l p k th a t đó) hay khôngể ộ ố ượ ộ ể ấ ị ớ ế ừ ừ AcDbEntity* pEntity; acdbOpenAcDbEntity (pEntity, objId, AcDb::kForRead); //M đ i t ng ki u AcDbEntity t ng quở ố ượ ể ổ át if (pEntity ->isKindOf(AcDbEllipse::desc())) //N u con tr đế ỏ úng là thu c ki u AcDbEllipse *ộ ể Acutprintf(_T(“Day la hinh Ellipse”)); December 20, 2009 ObjectARX 33Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 4.2.Xác đ nh ki u C++ chu nị ể ẩ Th vi n C++ chu n (Standard C++ Library) cung c p toán t ư ệ ẩ ấ ử typeid đ xácể đ nh ị ki u c a m t đ i t ng hau m t bi u th c (expression) ể ủ ộ ố ượ ộ ể ứ #include "typeinfo.h" class BigWorld // Ki u t đ nh nghĩaể ự ị { double Area; int Population; }; void CmdT4() { double d; char c; int i; BigWorld world; ads_printf("\nType : %s", typeid(i).name()); ads_printf("\nType : %s", typeid(d*10/i).name()); ads_printf("\nType : %s", typeid(c).name()); ads_printf("\nType : %s", typeid(world).name()); } Type : int Type : double Type : char Type : class BigWorld December 20, 2009 ObjectARX 34Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 5.D li u b sungữ ệ ổ Các ng d ng ObjectARX có th g n các d li u c a chúng vào các đ i ứ ụ ể ắ ữ ệ ủ ố t ng c a c s d li u b n v AutoCAD b ng nhi u cách khác nhauượ ủ ơ ở ữ ệ ả ẽ ằ ề 5.1.Extended Data(Xdata) Xdata là m t danh sách móc n i thu c ki u resbuf do các ng d ng ộ ố ộ ể ứ ụ AutoCAD g n vào các đ i t ng c a b n vắ ố ượ ủ ả ẽ union ads_u_val { ads_real rreal; ads_real rpoint[3]; short rint; // Must be declared short, not int. char *rstring; long rlname[2]; long rlong; struct ads_binary rbinary; }; struct resbuf { struct resbuf *rbnext; // Linked list pointer short restype; union ads_u_val resval; }; December 20, 2009 ObjectARX 35Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 5.1.Extension Dictionary M i đ i t ng trong c s d li u có th có m t extension Dictionary ỗ ố ượ ơ ở ữ ệ ể ộ trong đó có th ch a b t kỳ đ i t ng k th a t AcDbObjectể ứ ấ ố ượ ế ừ ừ December 20, 2009 ObjectARX 36Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Th c th (Entity)ự ể 1.Đ nh nghĩaị Là các đ i t ng CSDL có th hi n hình h c (graphical Object)ố ượ ể ệ ọ 2.Phân lo iạ Các Entity đ n gi n là b n thân nó ch a đ y đ thu c tính c a mìnhơ ả ả ứ ầ ủ ộ ủ Các Entity ph c t p còn ch a thêm các tham chi u đ n đ i t ng khác ứ ạ ứ ế ế ố ượ đ đ nh nghĩa d y đ đ i t ng.ể ị ầ ủ ố ượ Ví dụ: Đ i t ng POLYLINE là m t đ i t ng ph c h p vì nó tham ố ượ ộ ố ươ ứ ợ chi u đ n các đ i t ng VERTEX đ đ nh nghĩa các t a đ đ nh.ế ế ố ượ ể ị ọ ộ ỉ 3.Các thu c tính chung ộ Color :Bi u di n màu s c đ i t ngễ ễ ắ ố ượ Linetype :Ki u đ ng c ađ i t ngể ườ ủ ố ượ Layer :L p c ađ i t ngớ ủ ố ượ December 20, 2009 ObjectARX 37Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 3.Các đi m b t dính trên đ i t ngể ắ ố ượ kOsModeEnd : Đi m cu iể ố kOsModeMid : Đi m gi aể ữ kOsModeCen : Đi m tâmể kOsModeNode : Đi m nútể kOsModeQuad : Đi m góc 1/4ể kOsModeIns : Đi m chènể kOsModePerp : Đi m kéo dài vuông gócể kOsModeTan : Đi m kéo dài ti p tuy nể ế ế kOsModeNear : Đi m g n nh tể ầ ấ 4.Ma tr n chuy n (Transformation Matrix)ậ ể AutoCad s d ng phép bi n đ i affine trong phép bi n đ i hình h c đ i t ngử ụ ế ổ ế ổ ọ ố ượ December 20, 2009 ObjectARX 38Vũ Văn Thiên C đi n t ơ ệ ử 1_K50 Thanks for attention

Các file đính kèm theo tài liệu này:

  • pdfTongquanveAutocad.pdf