Converesao de imagens para .dxf

Então pessoal, estou com duvidas:

  1. Como transformar uma imgaem, que gerei no java (estou utilizando um array com todas as coordenadas dos desenhos feitos), em .dxf ?
  2. Conhecem algum ‘parser’ em java que faça isso ?
  3. Uma possivel solução para este problema.

Desculpe, mas estou sem ideias de como fazer isto, preciso humildemente da ajuda da galera do GUJ.

Obrigado.

PS: Postei lugar errado, por favor me mova para o Java Avançado.

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

Joao, obrigado pela forca ai, mas alem disso vc nao sabe algum tutorial para entender como e a estrutura de um dxf ?

Cara,

DXF é um formato tão antigo, a maioria dos bons programas estão abandonando os dxfs, mas se você ainda precisa, creio que o documento do próprio CAD sobre dxf deve dar uma boa geral sobre o formato do arquivo e seus parâmetros;

To anexando caso você não tenha.

Só para tirar a dúvida fui no google e digitei dxfexport + java

e surgiu uma série de links com bibliotecas para exportação.

Não tentei baixar mais algumas indicam free, então deve haver
pelo menos uma que você possa baixar e tentar usar.

Sabendo procurar não há o que o Google não traga:

Estas 2 classes tem métodos de export de DXFs

JoaoBluSCBR, esse que vc postou ai esta com problemas, então eu acho que voce não procurou direito… rsrsrsrsrsrs

Esse .dxf é um muito muito complicado de entender, mal tem material na internet e quando tem, não explicam bem ou faltam mais detalhes.

Ninguem conhece mesmo algum parser de java que transforme por ex, um imagem ou um pdf em dxf ???