wblockcloneobjects and AcDbPolyFaceMesh

wblockcloneobjects and AcDbPolyFaceMesh

Anonymous
Not applicable
1,091 Views
3 Replies
Message 1 of 4

wblockcloneobjects and AcDbPolyFaceMesh

Anonymous
Not applicable

Hello,

 

I am using wblockcloneobjects to copy objects from xref drawing to other drawing, it works well.

In one of xref drawing I have PolyFace Mesh which is enclosed in block, for this object wblockcloneobjects fails with error eInvalidOwnerObject.

I am using owner as AcDbBlockTableRecord as for all entities it works do I need different owner object for PolyFace?

Which owner I should use for PolyFace.

 

Regards.

Dhanraj

0 Likes
Accepted solutions (1)
1,092 Views
3 Replies
Replies (3)
Message 2 of 4

Alexander.Rivilis
Mentor
Mentor

Without sample code project and sample dwg-file it is difficult to help you.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

0 Likes
Message 3 of 4

Anonymous
Not applicable

Below is sample code 

I am creating new block table in target db and adding ent from xref

AcDbBlockTableRecord *pNewBlock;
AcDbObjectId newBlockId;
pNewBlock = new AcDbBlockTableRecord();

if (Acad::eOk != (es = pNewBlock->setName(_T("*U"))))
{
delete pNewBlock;
return false;
}

if (Acad::eOk != (es = m_pTable->add(pNewBlock)))// m_pTable table of target db
{
delete pNewBlock;
return false;
}

newBlockId = pNewBlock->objectId();
pNewBlock->close();

AcDbObjectIdArray objIds;
AcDbIdMapping idMap;
//AcGePoint3d insPos;

objIds.append(entId);
AcDbEntity *pEnt; // entity to copy
if (Acad::eOk == (es = acdbOpenAcDbEntity(pEnt, entId, AcDb::kForWrite)))
{
if(pEnt->isKindOf(AcDbBlockReference::desc()))
{
//blockreferences from xRefs will not be copied to newBlockId with wblockCloneObjects(return eInvalidOwner as error)
//so blockreferencse must be first exploded to normal entities to use wblockCloneObjects
es = xrefDb->getBlockTable(pTable, AcDb::kForRead);
if (Acad::eOk != es)
return false;

es = pTable->getAt(ACDB_MODEL_SPACE, pModelSpace, AcDb::kForWrite);
pTable->close();
if (Acad::eOk != es)
return false;

objIds.remove(entId);
AcDbVoidPtrArray entitySet;
es = pEnt->explode(entitySet);
pEnt->close();

for (int i = 0; i < entitySet.length(); i++)
{
AcDbEntity* ent = AcDbEntity::cast((AcRxObject*)entitySet[i]);
if (ent)
{
es = pModelSpace->appendAcDbEntity(ent);
objIds.append(ent->objectId());
ent->close();
}
}
pModelSpace->close();
if(!objIds.isEmpty())
{
es = xrefDb->wblockCloneObjects(objIds, newBlockId, idMap, AcDb::kDrcIgnore);
AcDbEntity* ent;
for(int n=0; n<objIds.length(); n++)
{
if (Acad::eOk == acdbOpenAcDbEntity(ent, objIds[n], AcDb::kForWrite))
{
ent->erase();
ent->close();
}
}
if (Acad::eOk != es)
return false;
}
}

0 Likes
Message 4 of 4

Alexander.Rivilis
Mentor
Mentor
Accepted solution

Try code from this topic: https://forums.autodesk.com/t5/objectarx/how-to-copy-something-from-a-xref/m-p/6690368

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

0 Likes