用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx
《用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx》由会员分享,可在线阅读,更多相关《用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx(84页珍藏版)》请在冰豆网上搜索。
exam0923
exam10a25
exam10b26
exam1329
exam1432
exam03
#include<
adslib.h>
rxdlinkr.h>
aced.h>
dbents.h>
geassign.h>
dbsymtb.h>
dbapserv.h>
Acad:
:
ErrorStatusnewLine();
voidaddLineCommand()
{
//{{BEGIN_LEVEL_ADVANCED
if(newLine()==Acad:
eOk)
acutPrintf("
Success\n"
);
else
Failed\n"
//{{END_LEVEL_ADVANCED
}
ErrorStatus
postToDatabase(/*[in]*/AcDbEntity*pEnt,/*[out]*/AcDbObjectId&
idObj)
Acad:
ErrorStatuses;
AcDbBlockTable*pBlockTable;
AcDbBlockTableRecord*pSpaceRecord;
//确定当前有正在工作的数据库
if(acdbHostApplicationServices()->
workingDatabase()==NULL)
returnAcad:
eNoDatabase;
//获得当前图形的指针
//获得图形的块表,打开准备读取数据
if((es=acdbHostApplicationServices()->
workingDatabase()->
getBlockTable(pBlockTable,AcDb:
kForRead))==Acad:
eOk){
//获得建模空间的记录,打开准备写数据
if((es=pBlockTable->
getAt(ACDB_MODEL_SPACE,pSpaceRecord,AcDb:
kForWrite))==Acad:
//添加实体指针到建模空间后关闭指针和建模空间记录
if((es=pSpaceRecord->
appendAcDbEntity(idObj,pEnt))==Acad:
pEnt->
close();
pSpaceRecord->
}
//关闭块表
pBlockTable->
//返回状态信息
returnes;
ErrorStatusnewLine()
ads_pointpt1,pt2;
//定义两个ads_point的点
intretval;
try
{
//从用户处获得第一点
if((retval=acedGetPoint(NULL,"
\nSelectlowerleft:
"
pt1))!
=RTNORM)
throwretval;
//以第一点为基点,从用户处获得第二点.
if((retval=acedGetPoint(pt1,"
\nSelectupperright:
pt2))!
=RTNORM)
catch(inte)
if(e==RTCAN)
//判断输入错误程序中断
returnAcad:
eUserBreak;
if(e==RTERROR)
//判断无效输入
eInvalidInput;
//将ads_point类型的点转换为AcGePoint3d类型之后创建直线
AcDbLine*pLine=newAcDbLine(asPnt3d(pt1),asPnt3d(pt2));
//如果创建直线出错,返回错误信息
if(!
pLine)
acedAlert("
NotenoughmemorytocreateaLine!
"
returnAcad:
eOutOfMemory;
AcDbObjectIdid;
//定义对象ID
returnpostToDatabase(pLine,id);
extern"
C"
AcRx:
AppRetCode
acrxEntryPoint(AcRx:
AppMsgCodemsg,void*pkt)
switch(msg){
caseAcRx:
kInitAppMsg:
acrxDynamicLinker->
unlockApplication(pkt);
acrxDynamicLinker->
registerAppMDIAware(pkt);
//注册命令
acedRegCmds->
addCommand("
EXAM03"
"
addline"
ACRX_CMD_MODAL,addLineCommand);
break;
kUnloadAppMsg:
//当应用程序卸载后,为防止AUOTCAD调用此命令,产生不必要的
//错误,移走命令组
removeGroup("
returnAcRx:
kRetOK;
exam04a
#include<
rxregsvc.h>
dbidmap.h>
lngtrans.h>
dbltrans.h>
dbmain.h>
void
refEdit()
AcDbObjectIdtransId;
AcDbDatabase*pDb;
char*fname;
structresbuf*rb;
rb=acutNewRb(RTSTR);
intstat=acedGetFileD("
Pickadrawing"
NULL,"
dwg"
0,rb);
if((stat!
=RTNORM)||(rb==NULL))
\nYoumustpickadrawingfile."
return;
fname=(char*)acad_malloc(strlen(rb->
resval.rstring)+1);
strcpy(fname,rb->
resval.rstring);
acutRelRb(rb);
pDb=newAcDbDatabase(Adesk:
kFalse);
if(pDb->
readDwgFile(fname)!
=Acad:
eOk)
\nSorry,thatdraingisprobablyalreadyopen."
AcDbBlockTable*pBlockTable;
pDb->
getSymbolTable(pBlockTable,AcDb:
kForRead);
AcDbBlockTableRecord*pOtherMsBtr;
getAt(ACDB_MODEL_SPACE,pOtherMsBtr,AcDb:
AcDbBlockTableRecordIterator*pIter;
pOtherMsBtr->
newIterator(pIter);
AcDbObjectIdArrayobjIdArray;
for(pIter->
start();
!
pIter->
done();
pIter->
step()){
AcDbEntity*pEntity;
getEntity(pEntity,AcDb:
if(pEntity->
isKindOf(AcDbCircle:
desc())){
objIdArray.append(pEntity->
objectId());
pEntity->
deletepIter;
if(objIdArray.isEmpty()){
acad_free(fname);
\nYoumustpickadrawingfilethatcontainscircles."
AcDbBlockTable*pThisBlockTable;
acdbHostApplicationServices()->
workingDatabase()
->
getSymbolTable(pThisBlockTable,AcDb:
AcDbBlockTableRecord*pThisMsBtr;
pThisBlockTable->
getAt(ACDB_MODEL_SPACE,pThisMsBtr,AcDb:
kForWrite);
AcDbObjectIdid=pThisMsBtr->
objectId();
pThisMsBtr->
AcDbIdMappingerrorMap;
acapLongTransactionManagerPtr()->
checkOut(transId,objIdArray,id,errorMap);
intcolorIndex;
doubleradius;
acedGetInt("
\nEntercolornumbertocirclescenterline:
&
colorIndex);
acedGetReal("
\nEntercircleradius:
&
radius);
if(radius<
=0)
acutPrintf("
\nError:
Radiuscan'
tlessthan0!
return;
AcDbObject*pObj;
if(acdbOpenObject(pObj,transId,AcDb:
kForRead)==Acad:
AcDbLongTransaction*pLongTrans=AcDbLongTransaction:
cast(pObj);
if(pLongTrans!
=NULL)
{
AcDbLongTransWorkSetIterator*pWorkSetIter;
pLongTrans->
newWorkSetIterator(pWorkSetIter);
for(pWorkSetIter->
pWorkSetIter->
pWorkSetIter->
step())
{
acdbOpenAcDbEntity(pEntity,pWorkSetIter->
objectId(),AcDb:
pEntity->
setColorIndex(colorIndex);
((AcDbCircle*)pEntity)->
setRadius(radius);
deletepWorkSetIter;
pObj->
charstr[132];
acedGetString(0,"
\nSeethenewcolorsandradius.Pressreturntoback"
str);
checkIn(transId,errorMap);
saveAs(fname);
deletepDb;
pDb=NULL;
initApp()
EXAM04A"
"
LONGTRANS"
ACRX_CMD_MODAL,
refEdit);
voidunloadApp()
AppMsgCodemsg,void*appId)
unlockApplication(appId);
registerAppMDIAware(appId);
initApp();
unloadApp();
kLoadDwgMsg:
kUnloadDwgMsg:
kInvkSubrMsg:
default:
;
exam04b
stdlib.h>
string.h>
rxobject.h>
#include"
acestext.h"
voidprintXdata();
voidaddXdata();
voidprintList(structresbuf*pRb);
AcDbObject*selectObject(AcDb:
OpenModeopenMode);
voidinitApp();
voidunloadApp();
AcRx:
AppRetCodeacrxEntryPoint(AcRx:
AppMsgCode,void*);
printXdata()
AcDbObject*pObj;
if((pObj=selectObject(AcDb:
kForRead))==NULL){
charappname[133];
if(acedGetString(NULL,
\nEnterthedesiredXdataapplicationname:
appname)!
structresbuf*pRb;
pRb=pObj->
xData(appname);
if(pRb!
=NULL){
printList(pRb);
acutRelRb(pRb);
}else{
\nNoxdataforthisappname"
void
addXdata()
AcDbObject*pObj=selectObject(AcDb:
pObj){
Errorselectingobject\n"
charappName[132],resString[200];
appName[0]=resString[0]='
\0'
;
acedGetString(NULL,"
Enterapplicationname:
appName);
Enterstringtobeadded:
resString);
structresbuf*pRb,*pTemp;
xData(appName);
for(pTemp=pRb;
pTemp->
rbnext!
=NULL;
pTemp=pTemp->
rbnext)
{;
acdbRegApp(appName);
pRb=acutNewRb(AcDb:
kDxfRegAppName);
pTemp=pRb;
resval.rstring
=(char*)malloc(strlen(appName)+1);
strcpy(pTemp->
resval.rstring,appName);
rbnext=acutNewRb(AcDb:
kDxfXdAsciiString);
rbnext;
=(char*)malloc(strlen(resString)+1);
resval.rstring,resString);
upgradeOpen();
setXData(pRb);
printList(structresbuf*pRb)
intrt,i;
charbuf[133];
for(i=0;
pRb!
i++,pRb=pRb->
rbnext){
if(pRb->
restype<
1010){
rt=RTSTR;
}elseif(pRb->
1040){
rt=RT3DPOINT;
1060){
rt=RTREAL;
1071){
rt=RTSHORT;
restype==1071){
rt=RTLONG;
rt=pRb->
restype;
switch(rt){
caseRTSHORT:
restype==RTSHORT){
acutPrintf(
RTSHORT:
%d\n"
pRb->
resval.rint);
(%d.%d)\n"
restype,
pRb->
};
caseRTREAL:
restype==RTREAL){
RTREAL:
%0.3f\n"
resval.rreal);
(%d.%0.3f)\n"
caseRTSTR:
restype==RTSTR){
RTSTR:
%s\n"
(%d.\"
%s\"
)\n"
caseRT3DPOINT:
restype==RT3DPOINT){
RT3DPOINT:
%0.3f,%0.3f,%0.3f\n"
resval.rpoint[X],
resval.rpoint[Y],
resval.rpoint[Z]);
(%d%0.3f%0.3f%0.3f)\n"
resval.rpoint[X]