Message 1 of 2
Unexpected results! worldDraw() question!

Not applicable
08-08-2002
10:40 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I have created a test entity, mjbSmiley. It simply a happy face with a
center an a diameter member variable. Now I was able to save this but when I
opened it, the mouth and eyes were missing. I created the features in
worldDraw(). Now, I thought worldDraw was responsible for drawing the
object. Here is my code:
//*******************************************
Adesk::Boolean mjbSmiley::worldDraw(AcGiWorldDraw* mode)
{
assertReadEnabled();
double dOffset = (m_dia / 1) / 5;
AcGeVector3d vecVert(0.0, dOffset, 0.0);
AcGeVector3d vecHorz(dOffset, 0.0, 0.0);
AcGePoint3d leftEye, rightEye, leftCorner, bottom, rightCorner;
leftEye = (m_center - vecHorz) + vecVert;
rightEye = (m_center + vecHorz) + vecVert;
leftCorner = m_center - vecHorz;
bottom = m_center - vecVert;
rightCorner = m_center + vecHorz;
mode->subEntityTraits().setColor(4);
mode->geometry().circle(m_center, m_dia / 2, AcGeVector3d(0.0, 0.0, 1.0));
mode->subEntityTraits().setColor(3);
mode->geometry().circle(leftEye, m_dia / 10, AcGeVector3d(0.0, 0.0, 1.0));
mode->geometry().circle(rightEye, m_dia / 10, AcGeVector3d(0.0, 0.0, 1.0));
mode->subEntityTraits().setColor(1);
if(!Adesk::kFalse == mode->geometry().circularArc(leftCorner, bottom,
rightCorner, kAcGiArcSimple))
printf("Mouth unsuccessful!");
return AcDbEntity::worldDraw(mode);
}
Acad::ErrorStatus mjbSmiley::dwgInFields(AcDbDwgFiler* pFiler)
{
assertWriteEnabled();
Acad::ErrorStatus es;
// Call dwgInFields from AcDbEntity
if ((es = AcDbEntity::dwgInFields(pFiler)) != Acad::eOk) {
return es;
}
// Read version number.
Adesk::UInt16 version;
pFiler->readItem(&version);
if (version > VERSION_MJBSMILEY)
return Acad::eMakeMeProxy;
// Read the data members.
switch (version)
{
case (1):
pFiler->readPoint3d(&m_center);
pFiler->readDouble(&m_dia);
break;
}
return pFiler->filerStatus();
}
Acad::ErrorStatus mjbSmiley::dwgOutFields(AcDbDwgFiler* pFiler) const
{
assertReadEnabled();
Acad::ErrorStatus es;
// Call dwgOutFields from AcDbEntity
if ((es = AcDbEntity::dwgOutFields(pFiler)) != Acad::eOk) {
return es;
}
// Write version number.
pFiler->writeItem((Adesk::UInt16) VERSION_MJBSMILEY);
pFiler->writePoint3d(m_center);
pFiler->writeDouble(m_dia);
return pFiler->filerStatus();
}
/********************************************
Now, why did worldDraw not draw the eyes and mouth of my mjbSmiley entity?
Mike B
center an a diameter member variable. Now I was able to save this but when I
opened it, the mouth and eyes were missing. I created the features in
worldDraw(). Now, I thought worldDraw was responsible for drawing the
object. Here is my code:
//*******************************************
Adesk::Boolean mjbSmiley::worldDraw(AcGiWorldDraw* mode)
{
assertReadEnabled();
double dOffset = (m_dia / 1) / 5;
AcGeVector3d vecVert(0.0, dOffset, 0.0);
AcGeVector3d vecHorz(dOffset, 0.0, 0.0);
AcGePoint3d leftEye, rightEye, leftCorner, bottom, rightCorner;
leftEye = (m_center - vecHorz) + vecVert;
rightEye = (m_center + vecHorz) + vecVert;
leftCorner = m_center - vecHorz;
bottom = m_center - vecVert;
rightCorner = m_center + vecHorz;
mode->subEntityTraits().setColor(4);
mode->geometry().circle(m_center, m_dia / 2, AcGeVector3d(0.0, 0.0, 1.0));
mode->subEntityTraits().setColor(3);
mode->geometry().circle(leftEye, m_dia / 10, AcGeVector3d(0.0, 0.0, 1.0));
mode->geometry().circle(rightEye, m_dia / 10, AcGeVector3d(0.0, 0.0, 1.0));
mode->subEntityTraits().setColor(1);
if(!Adesk::kFalse == mode->geometry().circularArc(leftCorner, bottom,
rightCorner, kAcGiArcSimple))
printf("Mouth unsuccessful!");
return AcDbEntity::worldDraw(mode);
}
Acad::ErrorStatus mjbSmiley::dwgInFields(AcDbDwgFiler* pFiler)
{
assertWriteEnabled();
Acad::ErrorStatus es;
// Call dwgInFields from AcDbEntity
if ((es = AcDbEntity::dwgInFields(pFiler)) != Acad::eOk) {
return es;
}
// Read version number.
Adesk::UInt16 version;
pFiler->readItem(&version);
if (version > VERSION_MJBSMILEY)
return Acad::eMakeMeProxy;
// Read the data members.
switch (version)
{
case (1):
pFiler->readPoint3d(&m_center);
pFiler->readDouble(&m_dia);
break;
}
return pFiler->filerStatus();
}
Acad::ErrorStatus mjbSmiley::dwgOutFields(AcDbDwgFiler* pFiler) const
{
assertReadEnabled();
Acad::ErrorStatus es;
// Call dwgOutFields from AcDbEntity
if ((es = AcDbEntity::dwgOutFields(pFiler)) != Acad::eOk) {
return es;
}
// Write version number.
pFiler->writeItem((Adesk::UInt16) VERSION_MJBSMILEY);
pFiler->writePoint3d(m_center);
pFiler->writeDouble(m_dia);
return pFiler->filerStatus();
}
/********************************************
Now, why did worldDraw not draw the eyes and mouth of my mjbSmiley entity?
Mike B