用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx

上传人:b****6 文档编号:19702749 上传时间:2023-01-08 格式:DOCX 页数:84 大小:36.08KB
下载 相关 举报
用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx_第1页
第1页 / 共84页
用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx_第2页
第2页 / 共84页
用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx_第3页
第3页 / 共84页
用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx_第4页
第4页 / 共84页
用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx_第5页
第5页 / 共84页
点击查看更多>>
下载资源
资源描述

用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx

《用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx》由会员分享,可在线阅读,更多相关《用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx(84页珍藏版)》请在冰豆网上搜索。

用ObjectARX开发AutoCAD 应用程序 配套源码 老虎工作室Word格式.docx

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]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1