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...
38 trang |
Chia sẻ: hunglv | Lượt xem: 1428 | Lượt tải: 0
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:
- TongquanveAutocad.pdf