La Red de Conocimientos Pedagógicos - Aprendizaje de redacción de artículos/tesis - Acerca del código para el bloque de inserción ARX

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");

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();

}