933 发表于 2010-6-3 03:29:26

AcDbGripData::setAppData(void * appData)

AcDbGripData::set appData(void * appData)
appData可以是什么类型?可以是类/结构吗?谁负责释放内存?谢谢
**** Hidden Message *****

超级晕 发表于 2010-6-3 05:35:56

不Acad不会删除appdata指针
它可以是您想要的任何东西,只要它不为空
Acad不会释放资源,但您可以释放项目...如果需要...在您的自定义对象的析构函数

春春 发表于 2010-6-3 05:57:15

所以这很酷。这有点像在抓地力中存储自己的自定义类。

这样简单的东西//
class MyAppData
{
private:
int m_val;
public:
MyAppData (int val): m_val(val){}
virtual ~MyAppData(){ }
void printval(void){acutPrintf(_T("\nGrip# %ld"),m_val);}
int Val() const { return m_val; }
};

然后

Acad::ErrorStatus ExtCircle::getGripPoints (
        AcDbGripDataPtrArray &grips, const double curViewUnitSize, const int gripSize,
        const AcGeVector3d &curViewDir, const int bitflags) const
{
        assertReadEnabled () ;
AcDbGripData *pGrpCenter = new AcDbGripData();
pGrpCenter->setGripPoint(this->center());
pGrpCenter->setAppData((void*)new MyAppData(100));
grips.append(pGrpCenter);
double ang = 0.0;
for(int idx = 1 ; idx center();
    p.x += this->radius() *cos(ang);
    p.y += this->radius() *sin(ang);
    ang += 6.28318531 / 32;
    pGrp->setGripPoint(p);
    // give the AcDbGripData a ptr
    pGrp->setAppData((void*)_data);
    pGrp->setAlternateBasePoint(newAcGePoint3d(this->center()));
    grips.append(pGrp);
    // keep a copy of ptr to free later
    ptrs->push_back(_data);
}
return Acad::eOk;
}

然后
Acad::ErrorStatus ExtCircle::moveGripPointsAt (
        const AcDbVoidPtrArray &gripAppData, const AcGeVector3d &offset,
        const int bitflags) {
    assertWriteEnabled();
    for(int i = 0; i Val())
      {
      case 100:
          transformBy(AcGeMatrix3d::translation(offset));
      break;
      default:
      this->setRadius(offset.length());
      }
      // run a method from the class
      p->printval();
    }
    return Acad::eOk;
}
页: [1]
查看完整版本: AcDbGripData::setAppData(void * appData)