📄 surfdfun.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 + -