Inserindo DWG´s como Blocos - VBA
Desculpem mas sou eu de novo
eu sei que pode lhe parecer meio tola, mas estou começando neste negócio de VBA
preciso inserir um desenho, digamos formaA4.dwg em um outro desenho como bloco, usando VBA.
tentei fazer o seguinte código
' Define the block
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
Dim pathform As String
pathform = "C:/eletrico/forma4.dwg"
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, pathform)
mas tenho um erro na última linha
no help do Autocad não achei um exemplo inserindo um arquivo tipo DWG como desenho.
voces podem me ajudar nisto?
RE: Inserindo DWG´s como Blocos - VBA
Uma maneira mais simples
Sub TESTE()
ThisDrawing.SendCommand "_-Insert" & vbCr & "C:\1.dwg" & vbCr
End Sub
Espero ter ajudado
Filipe
RE: Inserindo DWG´s como Blocos - VBA
Caro leo_munters o erro está em que você está a acrescentar um bloco, visto como definição, na colecção de blocos de um desenho.
Para entender melhor o que estou a dizer abra um desenho e execute o comando ".insert". Aparece-lhe uma caixa de diálogo e no canto superior esquerdo tem uma caixa de texto com uma seta para baixo (ComboBox) os itens dessa lista são a colecção de blocos do desenho. isto é são os blocos que se podem inserir como "BLOCK REFERENCE". Experimente a inserir um bloco no desenho e execute o comando ".List" selecionando esse bloco. Vai reparar que o objecto é um ""BLOCK REFERENCE" e não um "BLOCK".
Isto tudo para dizer que: para inserir um "bloco" deve instanciar-se um AcadBlockReference e não um AcadBlock. Veja o seu exemplo alterado:
' Define the blockreference
Dim blockRef AcadBlockreference
Dim insertionPnt(0 To 2) As Double
Dim pathform As String
pathform = "C:/eletrico/forma4.dwg"
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, pathform,1,1,1,0)
'end of code
Notas:
1. Se o Bloco já existir no desenho basta inserir o seu nome, não é necessário o caminho completo.
2. Os Valores 1,1,1,0 dizem respeito a: escala em X, Y, Z e rotação por esta ordem.
3. Procure "InsertBlock" na ajuda VB do AutoCAD.
Cumprimentos,
Rui Pestana.
PS. Desculpe-me o Filipe pois obviamente o seu método também funciona.
RE: Inserindo DWG´s como Blocos - VBA
Quote:
Originally Posted by Rui Pestana
PS. Desculpe-me o Filipe pois obviamente o seu método também funciona.
Caro Rui,
Não tem qualquer tipo de problema, fizeste muito bem em responder e ajudar a responder de uma forma melhor e mais elaborada, estamos todos aqui para aprender e partilhar (até eu estou aqui para aprender). existem sempre vários métodos e resoluções das questões... O importante é participar e ajudar...
Um Abraço
RE: Inserindo DWG´s como Blocos - VBA
Quote:
Originally Posted by Rui Pestana
Caro leo_munters o erro está em que você está a acrescentar um bloco, visto como definição, na colecção de blocos de um desenho.
Para entender melhor o que estou a dizer abra um desenho e execute o comando ".insert". Aparece-lhe uma caixa de diálogo e no canto superior esquerdo tem uma caixa de texto com uma seta para baixo (ComboBox) os itens dessa lista são a colecção de blocos do desenho. isto é são os blocos que se podem inserir como "BLOCK REFERENCE". Experimente a inserir um bloco no desenho e execute o comando ".List" selecionando esse bloco. Vai reparar que o objecto é um ""BLOCK REFERENCE" e não um "BLOCK".
Isto tudo para dizer que: para inserir um "bloco" deve instanciar-se um AcadBlockReference e não um AcadBlock. Veja o seu exemplo alterado:
' Define the blockreference
Dim blockRef AcadBlockreference
Dim insertionPnt(0 To 2) As Double
Dim pathform As String
pathform = "C:/eletrico/forma4.dwg"
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, pathform,1,1,1,0)
'end of code
Notas:
1. Se o Bloco já existir no desenho basta inserir o seu nome, não é necessário o caminho completo.
2. Os Valores 1,1,1,0 dizem respeito a: escala em X, Y, Z e rotação por esta ordem.
3. Procure "InsertBlock" na ajuda VB do AutoCAD.
Cumprimentos,
Rui Pestana.
PS. Desculpe-me o Filipe pois obviamente o seu método também funciona.
Bom dia, Rui Pestana!
Comecei a programar no AutoCad recentemente. por acaso, encontrei este forum em uma de minhas consultas na Internet. estou tendo bastante dificuldades para inserir um bloco com atributos pelo VBA. vi e testei os exemplos acima comentados no forum.
com este exemplo:
path_rating = "W:/matrizes/RATING/RT_K_MM.DWG"
ThisDrawing.SendCommand "_-insert" + vbCr + path_rating + vbCr + "493.93030644,276.04006590,0" + vbCr + "1" + vbCr + "1" + vbCr + "0" + vbCr + a + vbCr + b + vbCr + c + vbCr + d + vbCr + e + vbCr + f + vbCr + g + vbCr + h + vbCr + i + vbCr + j + vbCr + k + vbCr + l + vbCr + m + vbCr + n + vbCr + o + vbCr + p + vbCr
até consegui obter o resultado mas as vezes o preenchimento dos campos do atributo não se faz corretamente. as variaveis de A até P são do tipo string.
achei que da forma que você exemplificou eu pudesse atingir o resultado satisfatório mas quando compilo gera uma menssagem de erro: Key not found na ultima linha do código
Dim blockref As AcadBlockReference
Dim insertionPnt(0 To 2) As Double
Dim pathteste As String
pathteste = "W:/matrizes/RATING/RT_K_IN.DWG"
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockref = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, pathteste, 1, 1, 1, 0)
voce poderia me ajudar?
agradeço a atenção desde já.
Obrigado
RE: Inserindo DWG´s como Blocos - VBA
Você tem o caminho com os separadores ao contrário.
onde está:
pathteste = "W:/matrizes/RATING/RT_K_IN.DWG"
escreva;
pathteste = "W:\matrizes\RATING\RT_K_IN.DWG"
Use "\" e não "/".
Rui Pestana
RE: Inserindo DWG´s como Blocos - VBA
Rui Pestana, muito obrigado pelo auxilio.
pretendo participar com frequencia deste forum e tentar ajudar o restante dos participantes no que for possivel.
valeu...
RE: Inserindo DWG´s como Blocos - VBA
De nada. Podes contar sempre comigo.
RE: Inserindo DWG´s como Blocos - VBA
Olá Rui!
este código abaixo serve para inserir um bloco, no caso um formato A2. o que acontece é que algums arquivos que eu tento incluir como bloco seguindo esta estrutura me gera uma mensagem de erro na ultima linha "FILE ERROR" mas é apenas com algums arquivos, me certifiquei que o arquivo estivesse no caminho especificado e fiz o teste inserindo atraves do thisDrawing.sendcommand funcionou perfeitamente, poderia me ajudar?
Private Sub CommandButton4_Click()
Dim blockref As AcadBlockReference
Dim insertionPnt(0 To 2) As Double
Dim pathteste As Variant
pathteste = "*W:\matrizes\LINK TEAMWORK & AUTOCAD\CARIMBOS_LINK_AUTOCAD_TEAMWORK\PORTUGUES\INCHES\GE MOTORS\GEMA2_P_INCHES.dwg"
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockref = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, pathteste, 1, 1, 1, 0)
End Sub
RE: Inserindo DWG´s como Blocos - VBA
Olá Marcio,
parece-me que a linha de código:
pathteste = "*W:\matrizes\LINK TEAMWORK & AUTOCAD\CARIMBOS_LINK_AUTOCAD_TEAMWORK\PORTUGUES\INCHES\GE MOTORS\GEMA2_P_INCHES.dwg"
tem um asterisco (*) a mais logo antes do W.
Será disso?