Cara, o DXF é um arquivo texto.
Não sei se tem algum parser que faça isso, eu fiz isso usando código mesmo.
A parte base do dxf você pode copiar de um outro, que te sirva de exemplo.
Toda a parte texto de um DXF é basicamente igual, você só tem que mudar
aquilo que vem abaixo da tag ENTITIES.
Olhe o código abaixo, é em C++, mas dá pra você entender, afinal java tem
muito a ver com C.
Então é ir gravando um arquivo texto com as informações
hMT= ::CreateFile (sArquivo, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hMT == INVALID_HANDLE_VALUE)
return FALSE;
// header
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"SECTION\r\n",strlen("SECTION\r\n"),&dwAux,NULL);
::WriteFile(hMT," 2\r\n",strlen(" 2\r\n"),&dwAux,NULL);
::WriteFile(hMT,"HEADER\r\n",strlen("HEADER\r\n"),&dwAux,NULL);
// versao
::WriteFile(hMT," 9\r\n",strlen(" 9\r\n"),&dwAux,NULL);
::WriteFile(hMT,"$ACADVER\r\n",strlen("$ACADVER\r\n"),&dwAux,NULL);
::WriteFile(hMT," 1\r\n",strlen(" 1\r\n"),&dwAux,NULL);
::WriteFile(hMT,"AC1009\r\n",strlen("AC1009\r\n"),&dwAux,NULL);
// coordenadas minimas
::WriteFile(hMT," 9\r\n",strlen(" 9\r\n"),&dwAux,NULL);
::WriteFile(hMT,"$EXTMIN\r\n",strlen("$EXTMIN\r\n"),&dwAux,NULL);
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
ftoa(rPontosMaximos.left,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
ftoa(rPontosMaximos.bottom,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 30\r\n",strlen(" 30\r\n"),&dwAux,NULL);
::WriteFile(hMT,"0.0\r\n",strlen("0.0\r\n"),&dwAux,NULL);
// coordenadas maximas
::WriteFile(hMT," 9\r\n",strlen(" 9\r\n"),&dwAux,NULL);
::WriteFile(hMT,"$EXTMAX\r\n",strlen("$EXTMAX\r\n"),&dwAux,NULL);
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
ftoa(rPontosMaximos.right,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
ftoa(rPontosMaximos.top,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 30\r\n",strlen(" 30\r\n"),&dwAux,NULL);
::WriteFile(hMT,"0.0\r\n",strlen("0.0\r\n"),&dwAux,NULL);
// fim do cabecalho
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"ENDSEC\r\n",strlen("ENDSEC\r\n"),&dwAux,NULL);
// layers
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"SECTION\r\n",strlen("SECTION\r\n"),&dwAux,NULL);
::WriteFile(hMT," 2\r\n",strlen(" 2\r\n"),&dwAux,NULL);
::WriteFile(hMT,"TABLES\r\n",strlen("TABLES\r\n"),&dwAux,NULL);
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"TABLE\r\n",strlen("TABLE\r\n"),&dwAux,NULL);
::WriteFile(hMT," 2\r\n",strlen(" 2\r\n"),&dwAux,NULL);
::WriteFile(hMT,"LAYER\r\n",strlen("LAYER\r\n"),&dwAux,NULL);
::WriteFile(hMT," 70\r\n",strlen(" 70\r\n"),&dwAux,NULL);
_itoa(m_LLayers->GetCount(),pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
CMTLayer *pLayer;
POSITION LAYERS = m_LLayers->GetHeadPosition();
for ( ; LAYERS != NULL; )
{
pLayer = m_LLayers->GetNext(LAYERS);
if ( ! pLayer->m_lGravarNoDXF )
continue;
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"LAYER\r\n",strlen("LAYER\r\n"),&dwAux,NULL);
::WriteFile(hMT," 2\r\n",strlen(" 2\r\n"),&dwAux,NULL);
TcharToChar((LPTSTR)pLayer->m_sNome.operator LPCTSTR(),pBuf);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 62\r\n",strlen(" 62\r\n"),&dwAux,NULL);
if (pLayer->m_nPenCor < 0 || pLayer->m_nPenCor > 10000)
strcpy(pBuf, "7");
else
_itoa(pLayer->m_nPenCor,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 70\r\n",strlen(" 70\r\n"),&dwAux,NULL);
::WriteFile(hMT,"0\r\n",strlen("0\r\n"),&dwAux,NULL);
::WriteFile(hMT," 6\r\n",strlen(" 6\r\n"),&dwAux,NULL);
::WriteFile(hMT,"CONTINUOUS\r\n",strlen("CONTINUOUS\r\n"),&dwAux,NULL);
}
// fim dos layers
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"ENDTAB\r\n",strlen("ENDTAB\r\n"),&dwAux,NULL);
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"ENDSEC\r\n",strlen("ENDSEC\r\n"),&dwAux,NULL);
// entidades
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"SECTION\r\n",strlen("SECTION\r\n"),&dwAux,NULL);
::WriteFile(hMT," 2\r\n",strlen(" 2\r\n"),&dwAux,NULL);
::WriteFile(hMT,"ENTITIES\r\n",strlen("ENTITIES\r\n"),&dwAux,NULL);
Até aqui era praticamente gravar o básico, com apenas algumas coisas que interessam.
Daqui em diante começa a correr teus objetos e gravar os tipos, os layers, as coordenadas.
CMTObjeto *pObjTemp;
POSITION OBJETOS;
int i;
double bTemp;
LAYERS = m_LLayers->GetHeadPosition();
for ( ; LAYERS != NULL; )
{
pLayer = m_LLayers->GetNext(LAYERS);
if ( ! pLayer->m_lGravarNoDXF )
continue;
OBJETOS = pLayer->m_LObjetos->GetHeadPosition();
for ( ; OBJETOS != NULL; )
{
pObjTemp = pLayer->m_LObjetos->GetNext(OBJETOS);
if (!pObjTemp)
continue;
switch ( pObjTemp->cTipoObjeto )
{
case OBJETO_POLIGONAL:
if (pObjTemp->Obj.rPoli.nNumPontos > 0)
{
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"POLYLINE\r\n",strlen("POLYLINE\r\n"),&dwAux,NULL);
::WriteFile(hMT,"999\r\n",strlen("999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 8\r\n",strlen(" 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 66\r\n",strlen(" 66\r\n"),&dwAux,NULL);
::WriteFile(hMT,"1\r\n",strlen("1\r\n"),&dwAux,NULL);
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
::WriteFile(hMT,"0.0\r\n",strlen("0.0\r\n"),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
::WriteFile(hMT,"0.0\r\n",strlen("0.0\r\n"),&dwAux,NULL);
if ( pObjTemp->Obj.rPoli.nFlag == 1 )
{
::WriteFile(hMT," 70\r\n",strlen(" 70\r\n"),&dwAux,NULL);
::WriteFile(hMT,"1\r\n",strlen("1\r\n"),&dwAux,NULL);
}
if (pObjTemp->Obj.rPoli.m_nPenCor != -1 && pObjTemp->Obj.rPoli.lHashurado)
{
::WriteFile(hMT," 62\r\n",strlen(" 62\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->Obj.rPoli.m_nPenCor,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
}
for ( i=0; i<pObjTemp->Obj.rPoli.nNumPontos; i++ )
{
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"VERTEX\r\n",strlen("VERTEX\r\n"),&dwAux,NULL);
::WriteFile(hMT," 8\r\n",strlen(" 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rPoli.pVertices[i].x,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rPoli.pVertices[i].y,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
if ( pObjTemp->Obj.rPoli.pbBulge[i] != 0.0 )
{
::WriteFile(hMT," 42\r\n",strlen(" 42\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rPoli.pbBulge[i],pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
}
}
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"SEQEND\r\n",strlen("SEQEND\r\n"),&dwAux,NULL);
}
break;
case OBJETO_PONTO:
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"POINT\r\n",strlen("POINT\r\n"),&dwAux,NULL);
::WriteFile(hMT,"999\r\n",strlen("999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 8\r\n",strlen(" 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rPonto.x,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rPonto.y,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
break;
case OBJETO_CIRCULO:
//----------Nao gera circulo
/*
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"CIRCLE\r\n",strlen("CIRCLE\r\n"),&dwAux,NULL);*/
break;
case OBJETO_LINHA:
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"LINE\r\n",strlen("LINE\r\n"),&dwAux,NULL);
::WriteFile(hMT,"999\r\n",strlen("999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 8\r\n",strlen(" 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
// ponto 1
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rLinha.p1.x,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rLinha.p1.y,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
// ponto 2
::WriteFile(hMT," 11\r\n",strlen(" 11\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rLinha.p2.x,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 21\r\n",strlen(" 21\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rLinha.p2.y,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
break;
case OBJETO_TEXTO:
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"TEXT\r\n",strlen("TEXT\r\n"),&dwAux,NULL);
::WriteFile(hMT,"999\r\n",strlen("999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 8\r\n",strlen(" 8\r\n"),&dwAux,NULL);
LPTSTRToChar((LPTSTR)pLayer->m_sNome.operator LPCTSTR(), pBuf);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 10\r\n",strlen(" 10\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rTexto.rPosicao.x,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 20\r\n",strlen(" 20\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rTexto.rPosicao.y,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 1\r\n",strlen(" 1\r\n"),&dwAux,NULL);
strcpy(pBuf, TcharToChar(pObjTemp->Obj.rTexto.psTexto, sAux));
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT," 40\r\n",strlen(" 40\r\n"),&dwAux,NULL);
ftoa(pObjTemp->Obj.rTexto.bAltura,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
if (pObjTemp->Obj.rTexto.nAngulo > 0.0001) //dad 2101
{
::WriteFile(hMT," 50\r\n",strlen(" 50\r\n"),&dwAux,NULL);
bTemp = pObjTemp->Obj.rTexto.nAngulo / 10.0;
ftoa(bTemp,pBuf,0,6,'.');
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
}
break;
case OBJETO_MULTI:
STR_PONTO *pPonto = NULL;
STR_TEXTO *pTexto = NULL;
STR_LINHA *pLinha = NULL;
STR_CIRCULO *pCirculo = NULL;
STR_POLIGONAL *pPoli = NULL;
POSITION Pos;
// Desenha todos os objetos PONTO
if ( pObjTemp->Obj.rMulti.pLPonto != NULL && pObjTemp->Obj.rMulti.pLPonto->GetCount() > 0 )
{
Pos = pObjTemp->Obj.rMulti.pLPonto->GetHeadPosition();
while ( Pos != NULL )
{
pPonto = pObjTemp->Obj.rMulti.pLPonto->GetAt( Pos );
::WriteFile(hMT," 0\r\nPOINT\r\n999\r\n",strlen(" 0\r\nPOINT\r\n999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 8\r\n",strlen("\r\n 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 10\r\n",strlen("\r\n 10\r\n"),&dwAux,NULL);
ftoa(pPonto->x,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 20\r\n",strlen("\r\n 20\r\n"),&dwAux,NULL);
ftoa(pPonto->y,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n",strlen("\r\n"),&dwAux,NULL);
pObjTemp->Obj.rMulti.pLPonto->GetNext( Pos );
}
}
// Desenha todos os objetos TEXTO
/*030708 if ( pObjTemp->Obj.rMulti.pLTexto != NULL && pObjTemp->Obj.rMulti.pLTexto->GetCount() > 0 )
{
Pos = pObjTemp->Obj.rMulti.pLTexto->GetHeadPosition();
while ( Pos != NULL )
{
pTexto = pObjTemp->Obj.rMulti.pLTexto->GetAt( Pos );
::WriteFile(hMT," 0\r\nTEXT\r\n999\r\n",strlen(" 0\r\nTEXT\r\n999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 8\r\n",strlen("\r\n 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 10\r\n",strlen("\r\n 10\r\n"),&dwAux,NULL);
ftoa(pTexto->rPosicao.x,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 20\r\n",strlen("\r\n 20\r\n"),&dwAux,NULL);
ftoa(pTexto->rPosicao.y,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 1\r\n",strlen("\r\n 1\r\n"),&dwAux,NULL);
strcpy(pBuf, TcharToChar(pObjTemp->Obj.rTexto.psTexto, sAux));
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 40\r\n",strlen("\r\n 40\r\n"),&dwAux,NULL);
ftoa(pTexto->bAltura,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
if (pTexto->nAngulo > 0.0001) //dad 2101
{
::WriteFile(hMT,"\r\n 50\r\n",strlen("\r\n 50\r\n"),&dwAux,NULL);
bTemp = pObjTemp->Obj.rTexto.nAngulo / 10.0;
ftoa(bTemp,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
}
::WriteFile(hMT,"\r\n",strlen("\r\n"),&dwAux,NULL);
pObjTemp->Obj.rMulti.pLTexto->GetNext( Pos );
}
}
// Desenha todos os objetos LINHA
if ( pObjTemp->Obj.rMulti.pLLinha != NULL && pObjTemp->Obj.rMulti.pLLinha->GetCount() > 0 )
{
Pos = pObjTemp->Obj.rMulti.pLLinha->GetHeadPosition();
while ( Pos != NULL )
{
pLinha = pObjTemp->Obj.rMulti.pLLinha->GetAt( Pos );
::WriteFile(hMT," 0\r\nLINE\r\n999\r\n",strlen(" 0\r\nLINE\r\n999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 8\r\n",strlen("\r\n 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 10\r\n",strlen("\r\n 10\r\n"),&dwAux,NULL);
ftoa(pLinha->p1.x,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 20\r\n",strlen("\r\n 20\r\n"),&dwAux,NULL);
ftoa(pLinha->p1.y,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 11\r\n",strlen("\r\n 11\r\n"),&dwAux,NULL);
ftoa(pLinha->p2.x,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 21\r\n",strlen("\r\n 21\r\n"),&dwAux,NULL);
ftoa(pLinha->p2.y,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n",strlen("\r\n"),&dwAux,NULL);
pObjTemp->Obj.rMulti.pLLinha->GetNext( Pos );
}
}*/
// Desenha todos os objetos CIRCULO
if ( pObjTemp->Obj.rMulti.pLCirculo != NULL && pObjTemp->Obj.rMulti.pLCirculo->GetCount() > 0 )
{
Pos = pObjTemp->Obj.rMulti.pLCirculo->GetHeadPosition();
while ( Pos != NULL )
{
pCirculo = pObjTemp->Obj.rMulti.pLCirculo->GetAt( Pos );
pObjTemp->Obj.rMulti.pLCirculo->GetNext( Pos );
}
}
// Desenha todos os objetos POLIGONAIS
if ( pObjTemp->Obj.rMulti.pLPoli != NULL && pObjTemp->Obj.rMulti.pLPoli->GetCount() > 0 )
{
Pos = pObjTemp->Obj.rMulti.pLPoli->GetHeadPosition();
while ( Pos != NULL )
{
pPoli = pObjTemp->Obj.rMulti.pLPoli->GetAt( Pos );
::WriteFile(hMT," 0\r\nPOLYLINE\r\n999\r\n",strlen(" 0\r\nPOLYLINE\r\n999\r\n"),&dwAux,NULL);
_ltoa (pObjTemp->nID,pBuf,10);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 8\r\n",strlen("\r\n 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 66\r\n1\r\n 10\r\n0.0\r\n 20\r\n0.0\r\n",strlen("\r\n 66\r\n1\r\n 10\r\n0.0\r\n 20\r\n0.0\r\n"),&dwAux,NULL);
if ( pPoli->nFlag == 1 )
::WriteFile(hMT," 70\r\n1\r\n",strlen(" 70\r\n1\r\n"),&dwAux,NULL);
if (pPoli->m_nPenCor != -1 && pPoli->lHashurado)
{
::WriteFile(hMT," 62\r\n",strlen(" 62\r\n"),&dwAux,NULL);
_ltoa (pPoli->m_nPenCor,pBuf,10);
strcat(pBuf,"\r\n");
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
}
for ( i=0; i<pPoli->nNumPontos; i++ )
{
::WriteFile(hMT," 0\r\nVERTEX\r\n 8\r\n",strlen(" 0\r\nVERTEX\r\n 8\r\n"),&dwAux,NULL);
TcharToChar((TCHAR*)pLayer->m_sNome.operator LPCTSTR(),pBuf);
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 10\r\n",strlen("\r\n 10\r\n"),&dwAux,NULL);
ftoa(pPoli->pVertices[i].x,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
::WriteFile(hMT,"\r\n 20\r\n",strlen("\r\n 20\r\n"),&dwAux,NULL);
ftoa(pPoli->pVertices[i].y,pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
if ( pPoli->pbBulge[i] != 0.0 )
{
::WriteFile(hMT,"\r\n 42\r\n",strlen("\r\n 42\r\n"),&dwAux,NULL);
ftoa(pPoli->pbBulge[i],pBuf,0,6,'.');
::WriteFile(hMT,pBuf,strlen(pBuf),&dwAux,NULL);
}
::WriteFile(hMT,"\r\n",strlen("\r\n"),&dwAux,NULL);
}
::WriteFile(hMT," 0\r\nSEQEND\r\n",strlen(" 0\r\nSEQEND\r\n"),&dwAux,NULL);
pObjTemp->Obj.rMulti.pLPoli->GetNext( Pos );
}
}
break;
}
}
}
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"ENDSEC\r\n",strlen("ENDSEC\r\n"),&dwAux,NULL);
::WriteFile(hMT," 0\r\n",strlen(" 0\r\n"),&dwAux,NULL);
::WriteFile(hMT,"EOF\r\n",strlen("EOF\r\n"),&dwAux,NULL);
::CloseHandle(hMT);