⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getutilities.cpp

📁 能在MDT5/6环境下对已经存在地曲面进行全部和局部区域展开
💻 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 + -