hello,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I'd like to create DimData (AcDbDimDataPtrArray) in my jig and my custom entity.who can tell me how can l create Dimension in my jig
//JigEntity
class CMultiCircleJigEntity : public AcDbEntity
{
public:
CMultiCircleJigEntity(const AcGePoint3d & centerPoint, const unsigned int &iNum);
~CMultiCircleJigEntity();
virtual Adesk::Boolean worldDraw (AcGiWorldDraw *mode);
void setRadius(double dRadius);
void appendToCurrentSpace();
private:
AcArray<AcDbCircle *> m_CircArr;
};
CMultiCircleJigEntity::CMultiCircleJigEntity(const AcGePoint3d & centerPoint, const unsigned int &iNum)
{
AcDbCircle *pCirc;
for (int i = 0; i < iNum; i++)
{
pCirc = new AcDbCircle(centerPoint, AcGeVector3d::kZAxis, 1.0);
m_CircArr.append(pCirc);
}
}
CMultiCircleJigEntity::~CMultiCircleJigEntity()
{
for (int i = 0; i < m_CircArr.length(); i++)
{
delete m_CircArr[i];
}
}
Adesk::Boolean CMultiCircleJigEntity::worldDraw(AcGiWorldDraw *mode)
{
for (int i = 0; i < m_CircArr.length(); i++)
{
mode ->geometry().draw(m_CircArr[i]);
}
return (AcDbEntity::worldDraw (mode)) ;
}
inline void CMultiCircleJigEntity::setRadius(double dRadius)
{
if (m_CircArr.length() <= 0)
return;
double dCurRadius = dRadius;
double dRadiusStep = dRadius / m_CircArr.length();
for (int i = 0; i < m_CircArr.length(); i++)
{
m_CircArr[i] ->setRadius(dCurRadius);
dCurRadius -= dRadiusStep;
}
}
void CMultiCircleJigEntity::appendToCurrentSpace()
{
AcDbDatabase * pDb = acdbCurDwg();
AcDbBlockTable * pBlockTable;
pDb ->getBlockTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlkRec;
if (pDb ->tilemode())
{
pBlockTable ->getAt(ACDB_MODEL_SPACE, pBlkRec, AcDb::kForWrite);
}
else
{
pBlockTable ->getAt(ACDB_PAPER_SPACE, pBlkRec, AcDb::kForWrite);
}
pBlockTable ->close();
for (int i = 0; i < m_CircArr.length(); i++)
{
AcDbCircle *& pCirc = m_CircArr.at(i);
if (Acad::eOk == pBlkRec ->appendAcDbEntity(pCirc))
{
pCirc ->setDatabaseDefaults();
pCirc ->close();
}
else
{
delete pCirc;
}
}
pBlkRec ->close();
m_CircArr.removeAll();
}
//jig
class CMultiCircJig : public AcEdJig
{
public:
CMultiCircJig(const AcGePoint3d & centerPoint, const unsigned int &iNum);
void doIt();
virtual DragStatus sampler();
virtual Adesk::Boolean update();
virtual AcDbEntity* entity() const;
private:
CMultiCircleJigEntity *m_pEnt;
AcGePoint3d m_CenterPoint;
double m_dRadius;
unsigned int m_NumCircles;
};
CMultiCircJig::CMultiCircJig(const AcGePoint3d ¢erPoint, const unsigned int & iNum) : m_CenterPoint(centerPoint), m_NumCircles(iNum)
{
}
AcEdJig::DragStatus CMultiCircJig::sampler()
{
static double dTempRadius;
DragStatus stat = acquireDist(m_dRadius, m_CenterPoint);
if (dTempRadius != m_dRadius)
{
dTempRadius = m_dRadius;
}
else if (stat == AcEdJig::kNormal)
{
return AcEdJig::kNoChange;
}
return stat;
}
Adesk::Boolean CMultiCircJig::update()
{
m_pEnt ->setRadius(m_dRadius);
return Adesk::kTrue;
}
AcDbEntity * CMultiCircJig::entity() const
{
return m_pEnt;
}
void CMultiCircJig::doIt()
{
m_pEnt = new CMultiCircleJigEntity(m_CenterPoint, m_NumCircles);
setDispPrompt(_T("/ncircle redius: "));
if (drag() == AcEdJig::kNormal)
{
m_pEnt ->appendToCurrentSpace();
}
delete m_pEnt;
}