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

📄 surfdfun.cpp

📁 能在MDT5/6环境下对已经存在地曲面进行全部和局部区域展开
💻 CPP
字号:
#include "stdafx.h"
#include "StdArx.h"

#include "SurfDFun.h"
#include "DbUtilities.h"

Acad::ErrorStatus 
createSurfDDict(AcDbDictionary *pDict)
{
	AcDbDictionary *pSurfDDict;
	Acad::ErrorStatus es;
	if (pDict==NULL) {
		es = getNODCompanyDictionary(SURFD_DICT,pSurfDDict,AcDb::kForWrite,true);
		if (es != Acad::eCreateInvalidName) return es;
	} else {
		pSurfDDict = pDict;
		pSurfDDict->upgradeOpen();
	}

    AcDbObjectId indexObjId;
	es = pSurfDDict->getAt(SURFD_DICT_INDEX,indexObjId);
	if (es == Acad::eOk) {
		if (pDict==NULL) {
			pSurfDDict->close();
		}
		return Acad::eAlreadyInDb;
	}

	AcDbXrecord	*pIndex= new AcDbXrecord;
    pSurfDDict->setAt(SURFD_DICT_INDEX, pIndex, indexObjId);
	if (pDict == NULL) {
		pSurfDDict->close();
	}
	
    // Create a resbuf list to add to the xrecord.
    //
    struct resbuf *pHead;
    pHead = acutBuildList(AcDb::kDxfInt32, 0, 0);
	
    // Add the data list to the xrecord.  Notice that this
    // member function takes a reference to resbuf, NOT a
    // pointer to resbuf, so you must dereference the
    // pointer before sending it.
    // 
    pIndex->setFromRbChain(*pHead);
    acutRelRb(pHead);
    pIndex->close();

	return Acad::eOk;
}

Acad::ErrorStatus 
addSurfDDictEntry(ChDbSurfD* pObj, AcDbDictionary *pDict)
{
	AcDbDictionary *pSurfDDict;
	Acad::ErrorStatus es;
	if (pDict == NULL) {
		es = getNODCompanyDictionary(SURFD_DICT,pSurfDDict);
		if (es != Acad::eOk) return es;
	} else {
		pSurfDDict = pDict;
	}


	CString name;
	pObj->getName(name);
	if (name == "") {
		AcDbXrecord *pIndex;
		pSurfDDict->getAt(SURFD_DICT_INDEX,
			(AcDbObject*&)pIndex,AcDb::kForWrite);
		Adesk::Int32 index;
		struct resbuf *pHead;
		pIndex->rbChain(&pHead);
		index = pHead->resval.rlong+1;
		pHead->resval.rlong = index;
		pIndex->setFromRbChain(*pHead);
		pIndex->close();
		acutRelRb(pHead);
		name.Format("%s%d",SURFD_DICT_RECORD_PRE,index);
		pObj->upgradeOpen();
		pObj->setName(name);
		pObj->downgradeOpen();
	}

	AcDbObjectId objId;
	es = pSurfDDict->getAt(name,objId);
	if (es == Acad::eOk) {
		if (pDict == NULL) {
			pSurfDDict->close();
		}
		return Acad::eAlreadyInDb;
	}
	
	pSurfDDict->upgradeOpen();
	pSurfDDict->setAt(name,pObj,objId);

	if (pDict == NULL) {
		pSurfDDict->close();
	}

	return Acad::eOk;
}

Acad::ErrorStatus
deleteSurfDDictEntry(ChDbSurfD* pObj, AcDbDictionary *pDict)
{
	AcDbDictionary *pSurfDDict;
	Acad::ErrorStatus es;
	if (pDict == NULL) {
		es = getNODCompanyDictionary(SURFD_DICT,pSurfDDict);
		if (es != Acad::eOk) return es;
	} else {
		pSurfDDict = pDict;
	}

	CString name;
	pObj->getName(name);

	AcDbObjectId objId;
	es = pSurfDDict->getAt(name,objId);
	if (es != Acad::eOk) {
		if (pDict == NULL) {
			pSurfDDict->close();
		}
		return es;
	}

	pSurfDDict->upgradeOpen();
	pSurfDDict->remove(name);

	if (pDict == NULL) {
		pSurfDDict->close();
	}

	return Acad::eOk;
}

Acad::ErrorStatus
getSurfDObjFromMainObj(const AcDbObject *pMainObj,
					   ChDbSurfD*& pSurfDObj,
					   AcDb::OpenMode mode)
{
	if (strcmp(pMainObj->isA()->name(),SURF_CLASS_NAME) != 0 ) {
		return Acad::eWrongObjectType;
	}

	struct resbuf *pRb;
	pRb = pMainObj->xData(appName);
	if (pRb	== NULL) return Acad::eNotApplicable;

	struct resbuf *pTemp;
	pTemp = pRb;
	pTemp = pTemp->rbnext;
	ads_name ename;
	acdbHandEnt(pTemp->resval.rstring,ename);
	acutRelRb(pRb);
	
	AcDbObjectId SurfDId;
	acdbGetObjectId(SurfDId,ename);
	
	acdbOpenObject(pSurfDObj,SurfDId,mode,true);
	
	return Acad::eOk;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -