Acerca del código para el bloque de inserción ARX
Lo has resuelto tú mismo
Eso es,
void CAddBlock::OnOK()
{
CDialog::OnOK();
//Obtener el nombre del bloque a insertar
CString blockname
m_listctrl.GetLBText(m_listctrl.GetCurSel( ) , blockname);
//blockname = "CHART-20";
//Mira si se ha definido
AcDbDatabase *pCurDb = acdbHostApplicationServices ()- gt; base de datos de trabajo();
AcDbBlockTable *pBlkTable;
AcDbObjectId blockId
pCurDb-gt;
AcDbObjectId blockId;
pCurDb-gt; p>
if(!pBlkTable-gt;has(nombre de bloque))
{
pBlkTable-gt;close();
AcDbDatabase *pDwg =nueva AcDbDatabase (Adesk::kFalse);
char dir[MAX_PATH]
<; p>GetModuleFileName(NULL, dir, MAX_PATH);dir[CString( dir).ReverseFind('\')]='\0';
//AfxMessageBox(CString) (dir) "\\survingpack\\" nombre de bloque ".dwg");
pDwg-gt;readDwgFile (CString(dir) "\\survingpack\\" nombre de bloque ".dwg"); p>
Acad::ErrorStatus es = pCurDb-gt;insert (blockId, blockname, pDwg ); //, Adesk::kFalse); //
eliminar pDwg; p>if (es != Acad::eOk)
{
p>
acutPrintf ("\nError de bloque de inserción."); return;
}
}
else
pBlkTable-gt; getAt(nombre de bloque, ID de bloque
BeginEditorCommand();
//ShowWindow(SW_HIDE);
ads_point pt={0, 0, 0}
int rc=acedGetPoint(NULL); , "\nSeleccione punto de inserción: ", pt);
if (rc==RTCAN ||rc==RTNONE)
{
acutPrintf(" \n*operación de inserción cancelada*");
CancelEditorCommand();
return;<
/p>
}
CompleteEditorCommand();
//----Establece el punto de inserción, el ángulo de rotación, la escala, etc.
AcDbBlockReference * pBlkRef =new AcDbBlockReference(AcGePoint3d(pt[0], pt[1], pt[2]), blockId
//pBlkRef-gt; setBlockTableRecord (blockId);
pBlkRef-gt; setScaleFactors(AcGeScale3d(m_scale, m_scale, 1));
//pBlkRef-gt; setPosition(AcGePoint3d(pt[0], pt[1], pt[2] ))
pBlkRef-gt; setRotation (m_angle)
pBlkRef-gt; setLayer(NULL); //Establecer capa
//Obtener modelo registro de tabla de bloques de espacio
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()-gt;workingDatabase()-gt; > AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable-gt; getAt (ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite
pBlockTable-gt; pBlockTableRecord -gt;appendAcDbEntity(pBlkRef);
//Obtener atributos
AcDbBlockTableRecord *pBlkDefRecord;
acdbOpenObject(pBlkDefRecord, blockId, AcDb::kForRead);
if(pBlkDefRecord-gt; hasAttributeDefinitions())
{
//AcDbObjectIterator* pBlkIterator = pBlkRef-gt; / p>
AcDbBlockTableRecordIterator *pIterator;
pBlkDefRecord-gt; newIterator(pIterator);
for(pIterator-gt; start(); !pIterator-gt; hecho( ) ;pIterator-gt; paso())
{
AcDbEntity *pEnt;
pIterator-gt;getEntity(pEnt, AcDb::kForRead);
AcDbAttributeDefinition *pAttDef = AcDbAttributeDefinition::
cast(pEnt);
if(pAttDef != NULL amp; amp; !pAttDef-gt; isConstant())
{
AcDbAttribute* pAtt = nuevo AcDbAttribute();
pAtt-gt; setPropertiesFrom(pAttDef);
pAtt-gt; setInvisible( pAttDef-gt; isInvisible() );
pAtt-gt; setHorizontalMode(pAttDef-gt; horizontalMode());
pAtt-gt; setVerticalMode(pAttDef-gt; verticalMode());
/* AcGePoint3d basePt = pAttDef -gt; posición();
puntobase[0] =pt[0];
puntobase[1] =pt[1]; 2] =pt[2];
pAtt-gt; setPosition(basePt);
*/
AcGePoint3d basePt = pAttDef-gt; ;
Ptbase[0] =pt[0];
Ptbase[1] =pt[1];
Ptbase[2] =pt[2 ];
pAtt-gt; setAlignmentPoint(basePt);
pAtt-gt; setHeight(pAttDef-gt; altura()); ; setTextStyle(pAttDef-gt; textStyle());
pAtt-gt; setTag(pAttDef-gt; etiqueta());
pAtt-gt; setFieldLength(25);
pBlkRef-gt; appendAttribute(pAtt);
pAtt-gt; >
pEnt-gt; close();
}
}
eliminar pIterator
}//end if; pBlkDefRecord-gt;hasAttributeDefinitions
pBlkDefRecord-gt;close();
pBlockTableRecord-gt;close();
pBlkRef-gt;close();
}