LE3 发表于 2010-5-15 08:55:42

从AcDbObjectPointer<对象>

我想这样做…
编辑:添加内容
template
class AcDbObjectPtr : public AcDbObjectPointer
{
public:
explicit AcDbObjectPtr(T_OBJECT *pObj =0) throw();
private:
AcDbObjectPtr(AcDbObjectPtr &pObject);
AcDbObjectPtr& operator=(AcDbObjectPtr &pObject);
};
template inline
AcDbObjectPtr::AcDbObjectPtr(T_OBJECT *pObj)
{
m_ptr = pObj;
if (m_ptr == NULL)
    m_status =Acad::eNullObjectPointer;
else
    m_status = Acad::eOk;
}

因此我可以使用智能指针的构造函数(我不喜欢使用acquire()或create())
AcDbObjectPtr pLine(new AcDbLine(AcGePoint3d(0,0,0), AcGePoint3d(100,100,0) ));
      if(pLine.openStatus() != Acad::eOk)
      // do something

我为什么不这样做workingDatabase();
    if(!pDatabase)
      return Acad::eNoDatabase;
    AcDbBlockTableRecordPointer pCurrentSpace(pDatabase->currentSpaceId(),AcDb::kForWrite);
    if((es = pCurrentSpace.openStatus()) != eOk)
      return es;
    AcDbObjectPtr pLine(new AcDbLine(AcGePoint3d(0,0,0), AcGePoint3d(100,100,0) ));
    if(pLine.openStatus() != Acad::eOk)
      return Acad::eOutOfMemory;
    es = pCurrentSpace->appendAcDbEntity(pLine);
    return es;
}

页: [1]
查看完整版本: 从AcDbObjectPointer<对象>