- UID
- 4789
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-5-8
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
这个问题本来已经在另一个帖子里贴过了,经sv300大侠指点修改了一些错误(感谢),但还是没完全解决。感觉贴的位置过于隐秘了,没什么人看到,这里再贴一次,还望各位大侠帮我看看。(重复发贴,不好意思,故已将原贴删除)
浏览多段线顶点,输出坐标。
#include <stdlib.h>
#include <string.h>
#include <rxobject.h>
#include <rxregsvc.h>
#include <aced.h>
#include <adslib.h>
#include <dbsymtb.h>
#include <acdb.h>
#include <dbents.h>
#include <acestext.h>
#include <dbmain.h>
void polyLine();
AcDbObjectId selectObject();
void initApp();
void unloadApp();
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode,void*);
void polyLine()
{AcDbObjectId polyId=selectObject();
if(polyId==NULL){ads_printf("null");
return;
}
AcDb2dPolyline *pPoly;
acdbOpenObject(pPoly, polyId, AcDb::kForWrite);
if(strcmp(pPoly->isA()->name(),"AcDb2dPolyline")==0)
{
AcDbObjectIterator *pVertIter;
pVertIter= pPoly->vertexIterator();
pPoly->close();// Finished with the pline header.
AcDb2dVertex *pVertex;
AcGePoint3d location;
AcDbObjectId vertexId;
for (int Number = 0; !pVertIter->done();Number++, pVertIter->step())
{
vertexId = pVertIter->objectId();
acdbOpenObject(pVertex, vertexId,AcDb::kForRead);
location = pVertex->position();
pVertex->close();
ads_printf("\n第%d点坐标为:%lf, %lf, %lf",Number,location[X], location[Y], location[Z]);
}
delete pVertIter;
}
}
//取Id
AcDbObjectId
selectObject()
{ int ss;
ads_name en;
ads_point pt;
ss=ads_entsel("\n请选择实体:",en,pt);
//等待用户选择实体
//返回实体的实体名到变量en,并返回选中的实体的点到变量pt
char handleStr[132];
AcDbObjectId eId;
switch(ss){
case RTNORM:
break;
case RTKWORD:
if((ads_handent(handleStr,en)==RTNORM))
{
break;
}
//获取en控制句柄
default:
ads_printf("没有实体被选中,返回码Code==%d\n",ss);
return NULL;
}
Acad::ErrorStatus retStat;
retStat=acdbGetObjectId(eId,en);
//映射实体名到对象ID,eId
if(retStat!=Acad::eOk)
{
ads_printf("\n函数acdbGetObjectId()失败!");
ads_printf("\nen==(%1x,%1x),retStat==%d\n",en[0],en[1],eId);
return NULL;
}
//容错处理
ads_printf("\neId=%d",eId);
return eId;
}
void initApp()
{
ads_printf("\npolyLine Sample--initApp\n");
acedRegCmds->addCommand("polytLine_COMMANDS","polyLine","polyLine",ACRX_CMD_MODAL,polyLine);
}
void unloadApp()
{
ads_printf("\npolyLine Sample--kUnloadAppMsg \n");
acedRegCmds->removeGroup("polyLine_COMMANDS");
}
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg,void* pkt)
{
switch(msg){
case AcRx::kInitAppMsg:
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
break;
}
return AcRx::kRetOK;
}
在AUTOCAD里选取多段线线的时候出现了以下错误:
unhandled exception coooooo5(access violation reading oxffffffff) at address 65645920h
估计是那里冲突了,请各位帮我看看,拜谢。 |
|