📄 getutilities.cpp
字号:
#include "stdafx.h"
#include "stdarx.h"
#include "GetUtilities.h"
#include "geassign.h"
Acad::ErrorStatus RTtoStatus (int rt)
{
#ifndef ACDBLIB
switch ( rt ) {
case RTNORM: //----- 5100 - Request succeeded
return (Acad::eOk) ;
case RTERROR: //----- -5001 - Some other error
return (Acad::eUnrecoverableErrors) ;
case RTCAN: //----- -5002 - User cancelled request -- Ctl-C
return (Acad::eUserBreak) ;
case RTREJ: //----- -5003 - AutoCAD rejected request -- invalid
return (Acad::eInvalidInput) ;
case RTFAIL: //----- -5004 - Link failure -- Lisp probably died
return (Acad::eNotApplicable) ;
default:
//case RTKWORD: //----- -5005 - Keyword returned from getxxx() routine
//----- this function only intended to be called
//----- in an error checking situation. See ADSOK.
assert ( 0 ) ;
return (Acad::eOk) ;
}
#endif
return (Acad::eOk) ;
}
void
errorMsg(const CString& msg,
BOOL lineInfo,const CString& file, int line)
{
CString errMsg;
if(lineInfo)
{
char s[255];
int pos = file.ReverseFind('\\');
errMsg += "File : ";
errMsg += file.Right(file.GetLength()-pos);
errMsg += " Line : ";
sprintf(s,"%d",line);
errMsg += s;
errMsg += " ";
}
errMsg += msg;
AfxMessageBox(errMsg,MB_OK);
}
void wait()
{
char s[255];
acedGetString(0,"\nPress any key ...",s);
}
int getYesOrNo(char* prompt, int def)
{
acedInitGet(RSG_OTHER,"Yes No");
char kword[255];
char pr[255];
if(def == 1)
sprintf(pr,"%s No/<Yes>",prompt);
else
sprintf(pr,"%s Yes/<No>",prompt);
int rt = acedGetKword(pr,kword);
if(rt!=RTNORM) {
if(rt==RTNONE)
return def;
else
return -1;
}
if(!strcmp(kword,"Yes"))
return 1;
return 0;
}
AcDbObjectId selectEntity (const char *msg , AcRxClass *pClass)
{
AcDbObjectId id ;
#ifndef ACDBLIB
//----- ObjectDBX does not have ADS functions and ADS error codes defined
ads_name en ;
ads_point pt ;
if ( acedEntSel (msg, en, pt) != RTNORM )
return (AcDbObjectId::kNull) ;
if ( acdbGetObjectId (id, en) != Acad::eOk )
return (AcDbObjectId::kNull) ;
if ( pClass != NULL ) {
AcDbEntity *pEnt ;
if ( acdbOpenAcDbEntity (pEnt, id, AcDb::kForRead) != Acad::eOk )
return (AcDbObjectId::kNull) ;
if ( pEnt->isA () != pClass )
id =AcDbObjectId::kNull ;
pEnt->close () ;
}
#endif
return (id) ;
}
AcDbEntity*
selectEntity(const char* prompt,
AcDbObjectId& id,
AcGePoint3d& pick,
AcDb::OpenMode mode)
{
AcDbEntity* ent = NULL;
ads_name ename;
if(acedEntSel(prompt, ename, (ads_real*)&pick ) == RTNORM)
{
if(acdbGetObjectId(id,ename)==Acad::eOk)
{
if(acdbOpenAcDbEntity(ent,id,mode)==Acad::eOk)
return ent;
}
}
return ent;
}
Acad::ErrorStatus
selectLinearEnt(const char* msg, AcGeLinearEnt3d*& linearEnt)
{
AcDbEntity* pEnt;
AcDbObjectId id;
AcGePoint3d pick;
if((pEnt = selectEntity(msg,id,pick,AcDb::kForRead)) == NULL)
{
errorMsg("Selection failed");
return Acad::eInvalidInput;
}
AcDbLine* pLine = AcDbLine::cast(pEnt);
if(pLine)
{
AcGeLineSeg3d *pSeg3d = new AcGeLineSeg3d(pLine->startPoint(),pLine->endPoint());
linearEnt = pSeg3d;
pEnt->close();
return Acad::eOk;
}
AcDbRay *pRay = AcDbRay::cast(pEnt);
if(pRay)
{
AcGeRay3d *pGeRay = new AcGeRay3d(pRay->basePoint(),pRay->unitDir());
linearEnt = pGeRay;
pEnt->close();
return Acad::eOk;
}
AcDbXline *pXline = AcDbXline::cast(pEnt);
if(pXline)
{
AcGeLine3d *pGeLine = new AcGeLine3d(pXline->basePoint(),pXline->unitDir());
linearEnt = pGeLine;
pEnt->close();
return Acad::eOk;
}
pEnt->close();
return Acad::eInvalidInput;
}
int getPoints(const char *prompt,AcGePoint3dArray& pnts)
{
AcGePoint3d res;
int ret;
do {
ret = acedGetPoint(NULL,prompt,asDblArray(res));
if (ret==RTNORM) {
pnts.append(res);
}
} while (ret!=RTNONE && ret!=RTCAN);
if (ret==RTNONE) return RTNORM;
return ret;
}
int selectCurve(const char* prompt,AcDbCurve *&pObj)
{
char *prompts[2]; //= {"dummy dummy dummy","remove the object:"};
struct resbuf *filter;
ads_name sset,ename;
int ret;
AcDbObjectId eId;
int len;
len = strlen(prompt);
prompts[0] = new char [len+1];
len = strlen("remove the object:");
prompts[1] = new char [len+1];
strcpy(prompts[0],prompt);
strcpy(prompts[1],"remove the object:");
filter = acutBuildList(-4,"<OR",RTDXF0,"ARC",RTDXF0,"CIRCLE",RTDXF0,"ELLIPSE",RTDXF0,"LINE",
RTDXF0,"LWPOLYLINE",RTDXF0,"SPLINE",RTDXF0,"POLYLINE",-4,"OR>",0);
do {
ret = acedSSGet(":$",prompts,NULL,filter,sset);
} while(ret!=RTNORM && ret!=RTCAN && ret!=RTERROR);
acutRelRb(filter);
if (ret==RTNORM) {
acedSSName(sset,0L,ename);
acdbGetObjectId(eId,ename);
acdbOpenObject(pObj,eId,AcDb::kForRead);
acedSSFree(sset);
}
return ret;
}
int selectCurves(const char* prompt,AcDbVoidPtrArray &pCurves)
{
char *prompts[2]; //= {"dummy dummy dummy","remove the object:"};
struct resbuf *filter;
ads_name sset,ename;
int ret;
AcDbObjectId eId;
int len;
len = strlen(prompt);
prompts[0] = new char [len+1];
len = strlen("remove the object:");
prompts[1] = new char [len+1];
strcpy(prompts[0],prompt);
strcpy(prompts[1],"remove the object:");
filter = acutBuildList(-4,"<OR",RTDXF0,"ARC",RTDXF0,"CIRCLE",RTDXF0,"ELLIPSE",RTDXF0,"LINE",
RTDXF0,"LWPOLYLINE",RTDXF0,"SPLINE",RTDXF0,"POLYLINE",-4,"OR>",0);
do {
ret = acedSSGet(":$",prompts,NULL,filter,sset);
} while(ret!=RTNORM && ret!=RTCAN && ret!=RTERROR);
acutRelRb(filter);
if (ret==RTNORM) {
long len;
acedSSLength(sset,&len);
AcDbCurve *pObj;
pCurves.setLogicalLength(0);
for (long i=0; i<len; i++) {
acedSSName(sset,i,ename);
acdbGetObjectId(eId,ename);
acdbOpenObject(pObj,eId,AcDb::kForRead);
pCurves.append(pObj);
}
acedSSFree(sset);
}
return ret;
}
/*
int selectCurve(const char* prompt,AcDbCurve *&pObj)
{
char *prompts[2]; //= {"dummy dummy dummy","remove the object:"};
struct resbuf *filter;
ads_name sset,ename;
int ret;
AcDbObjectId eId;
int len;
len = strlen(prompt);
prompts[0] = new char [len+1];
len = strlen("remove the object:");
prompts[1] = new char [len+1];
strcpy(prompts[0],prompt);
strcpy(prompts[1],"remove the object:");
filter = acutBuildList(-4,"<OR",RTDXF0,"ARC",RTDXF0,"CIRCLE",RTDXF0,"ELLIPSE",RTDXF0,"LINE",
RTDXF0,"LWPOLYLINE",RTDXF0,"SPLINE",RTDXF0,"POLYLINE",-4,"OR>",0);
do {
ret = acedSSGet(":$",prompts,NULL,filter,sset);
} while(ret!=RTNORM && ret!=RTCAN && ret!=RTERROR);
acutRelRb(filter);
if (ret==RTNORM) {
acedSSName(sset,0L,ename);
acdbGetObjectId(eId,ename);
acdbOpenObject(pObj,eId,AcDb::kForRead);
acedSSFree(sset);
}
return ret;
}
*/
int selectEntity(const char* prompt,const CString& dxfname, AcDbEntity *&pObj,AcDb::OpenMode mode)
{
char *prompts[2]; //= {"dummy dummy dummy","remove the object:"};
struct resbuf *filter;
ads_name sset,ename;
int ret;
AcDbObjectId eId;
int len;
len = strlen(prompt);
prompts[0] = new char [len+1];
len = strlen("remove the object:");
prompts[1] = new char [len+1];
strcpy(prompts[0],prompt);
strcpy(prompts[1],"remove the object:");
filter = acutBuildList(RTDXF0,dxfname,0);
do {
ret = acedSSGet(":$",prompts,NULL,filter,sset);
} while(ret!=RTNORM && ret!=RTCAN && ret!=RTERROR);
acutRelRb(filter);
if (ret==RTNORM) {
acedSSName(sset,0L,ename);
acdbGetObjectId(eId,ename);
acdbOpenObject(pObj,eId,mode);
acedSSFree(sset);
}
return ret;
}
int selectEntities(const char* prompt,const CString& dxfname, AcDbVoidPtrArray &pEnts,AcDb::OpenMode mode)
{
char *prompts[2]; //= {"dummy dummy dummy","remove the object:"};
struct resbuf *filter;
ads_name sset,ename;
int ret;
AcDbObjectId eId;
int len;
len = strlen(prompt);
prompts[0] = new char [len+1];
len = strlen("remove the object:");
prompts[1] = new char [len+1];
strcpy(prompts[0],prompt);
strcpy(prompts[1],"remove the object:");
filter = acutBuildList(RTDXF0,dxfname,0);
do {
ret = acedSSGet(":$",prompts,NULL,filter,sset);
} while(ret!=RTNORM && ret!=RTCAN && ret!=RTERROR);
acutRelRb(filter);
if (ret==RTNORM) {
long len;
acedSSLength(sset,&len);
AcDbEntity *pObj;
pEnts.setLogicalLength(0);
for (long i=0; i<len; i++) {
acedSSName(sset,i,ename);
acdbGetObjectId(eId,ename);
acdbOpenObject(pObj,eId,AcDb::kForRead);
pEnts.append(pObj);
}
acedSSFree(sset);
}
return ret;
}
int selectEntity(const char* prompt,
const CStringArray &dxfname,
AcDbEntity *&pObj,AcDb::OpenMode mode)
{
char *prompts[2]; //= {"dummy dummy dummy","remove the object:"};
struct resbuf *filter,*nextList;
ads_name sset,ename;
int ret;
AcDbObjectId eId;
int i,len;
len = strlen(prompt);
prompts[0] = new char [len+1];
len = strlen("remove the object:");
prompts[1] = new char [len+1];
strcpy(prompts[0],prompt);
strcpy(prompts[1],"remove the object:");
len = dxfname.GetSize();
filter = acutBuildList(-4,"<OR",0);
nextList = filter;
for (i=0; i<len; i++) {
nextList->rbnext = acutBuildList(RTDXF0,dxfname[i],0);
nextList = nextList->rbnext;
}
nextList->rbnext = acutBuildList(-4,"OR>",0);
do {
ret = acedSSGet(":$",prompts,NULL,filter,sset);
} while(ret!=RTNORM && ret!=RTCAN && ret!=RTERROR);
acutRelRb(filter);
if (ret==RTNORM) {
acedSSName(sset,0L,ename);
acdbGetObjectId(eId,ename);
acdbOpenObject(pObj,eId,mode);
acedSSFree(sset);
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -