Passei vários dias sem atualizar aqui porque as coisas estiveram meio corridas. Entre outras coisas viajei um dia da semana passada para Belo Horizonte, para fazer um curso de 2 horas sobre um software de um cliente da firma onde trabalho. Isso mesmo, tive que acordar às 4 da manhã, esperar quase uma hora dentro do avião parado em congonhas, e depois voltar (não contando as horas que passei á tarde no aeroporto de confins; como imaginei que o curso ia demorar mais, marquei a passagem de volta para as 6 da tarde… mas pelo menos me diverti tirando fotos dos aviões) para apenas 2 horas de curso – sendo que eu poderia ter aprendido tudo sozinho…
Bem, mudando de assunto, já faz tempo que procuro alguma maneira de manipular arquivos DWG via programação, e encontrei agora esta interessante biblioteca:
MTBCadViewer
Além de visualizar, dá para fazer algumas manipulações no arquivo. Aqui e aqui tem alguns exemplos do que dá para fazer. Mas infelizmente, não imprime, então tive que ir atrás de alguma outra opção.
É claro que se você precisa apenas visualizar o DWG, tem a opção recente do DWG TrueView da Autodesk mesmo, que é gratuito. Mas ele tem uma interface nova, diferente dos autocads tradicionais, e é muito pesado. No entanto, fuçando na net, descobri que dá para usar um ActiveX que o TrueView instala no seu sistema, para abrir arquivos DWG em outras aplicações; ou seja, dá para criar um visualizador simples via código dentro, por exemplo, do Office.
Aqui vai um código simples no VB.Net Express 2008:
Public Class Form1
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dlg As New System.Windows.Forms.OpenFileDialog()
dlg.InitialDirectory = System.Environment.CurrentDirectory
dlg.Filter = "DWG Files (*.dwg)|*.dwg|All files (*.*)|*.*"
Dim oc As Cursor = Me.Cursor
Dim fn As String = ""
If dlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
Me.Cursor = Cursors.WaitCursor
fn = dlg.FileName()
Me.Refresh()
End If
If fn <> "" Then
Me.AxAcCtrl1.PutSourcePath(fn)
End If
Me.Cursor = oc
End Sub
End Class