Objeto de documento em pyautocad

Em meu artigo anterior, discuti a classe de objeto AutoCAD Application. A parte mais importante de qualquer aplicativo AutoCAD é o objeto Document. Isso ocorre porque os usuários executam todas as
suas ações neste objeto Documento. Conseqüentemente, estou escrevendo esta nova postagem no blog, cobrindo a classe de objeto AutoCAD Document.

O módulo pyautcad e suas alternativas

Em primeiro lugar, deixe-me mencionar os módulos que vou usar e quais outras opções estão disponíveis.

Como você deve ter adivinhado pelo título deste artigo, estou usando o módulo pyautocad para este tutorial. Além disso, para poder acessar o documento em si, estou usando o acad.doc. Você verá isso no código abaixo:

from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

print(acad.doc.Name)

O/p:
Drawing1.dwg

No entanto, também posso usar módulos de comunicação. Ou seja, outros módulos além do pyautocad. No exemplo abaixo eu uso pythoncom e win32com, os chamados módulos de comunicação, para acessar a classe de objeto Documento do AutoCAD.

from win32com.client import *
import pythoncom
import win32com

acad1 = win32com.client.Dispatch("AutoCAD.Application")
print(acad1.ActiveDocument.Name)

O/p:
Drawing1.dwg

Propriedades da classe de objeto Documento do AutoCAD

Para começar com este tópico, estou apresentando algumas propriedades importantes do objeto Documento do AutoCAD. Acho essas propriedades importantes porque podem ser usadas para vários propósitos de automação.

Por exemplo, o AutoCAD trabalha com um documento por vez. Um objeto Documento do AutoCAD contém muitos objetos, como Camadas, Layouts, Estilos de cota, Viewport, UCS e outros tipos de objetos. Entre esses objetos, apenas um pode estar ativo em um determinado momento.

Por exemplo, um objeto Document pode conter n número de camadas. No entanto, apenas uma dessas camadas pode estar ativa por vez.

Para verificar se o documento presente é realmente o documento ativo no momento, posso usar o método Active. Este método retorna um valor booleano. Você pode ver isso no exemplo abaixo:

# determina se o documento é o documento ativo
print(acad.doc.Active)

O/p:
True

Da mesma forma, para verificar outros subobjetos ativos, posso usar os métodos com nomes de métodos no formato Active<ObjectName>. Alguns exemplos podem ser ActiveLayout, ActiveLayer, ActiveViewport e assim por diante.

Os nomes de objetos que podem ser usados estão listados abaixo:

  • DimStyle
  • Layer
  • Layout
  • Linetype
  • Material
  • PViewport
  • SelectionSet
  • Space
  • TextStyle
  • UCS
  • Viewport

Vou mostrar como alguns desses objetos podem ser usados.

print(acad.doc.ActiveDimStyle.Name)
print(acad.doc.ActiveLayer.Name)
print(acad.doc.ActiveLayout.Name)

O/p:
ISO-25
0
Model
AutoCAD Document object class documentation, figure 1.1: ActiveDimStyle
ActiveDimStyle
AutoCAD Document object class documentation, figure 1.2: ActiveLayer
ActiveLayer
AutoCAD Document object class documentation, figure 1.3: ActiveLayout
ActiveLayout

Da mesma forma, posso usar outras propriedades também. Essas propriedades retornam os respectivos objetos que podem ser tratados posteriormente. Vou postar artigos mais detalhados sobre isso no futuro.

Acessando a propriedade Blocos do objeto Documento do AutoCAD

Seguindo em frente, para pegar os objetos Blocks que estão contidos no objeto Document eu posso usar a propriedade Blocks. Isso retorna uma coleção de vários objetos AutoCAD Block que estão presentes no objeto AutoCAD Document.

print(acad.doc.Blocks)
for i in (acad.doc.Blocks):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209E60C1D60>
*Model_Space
*Paper_Space
*Paper_Space

Se eu quiser retornar o banco de dados ao qual o objeto pertence posso usar o objeto Banco de Dados. Simplificando, isso retorna o objeto de banco de dados. Não possui nenhum atributo de nome.

acad.doc.Database

O/p:

<comtypes.client.lazybind.Dispatch object at 0x0000024FA64175B0>

Subobjetos contidos pelo objeto Documento do AutoCAD

Anteriormente, discuti que um objeto Documento do AutoCAD contém vários subobjetos. Esses objetos estão presentes na forma de seu próprio tipo específico de objetos, por exemplo, Camadas, Materiais, Tipos de Linha, etc.

Para apontar as coleções, posso simplesmente usar os métodos com seus próprios nomes. E se eu quiser acessar cada um dos objetos presentes dentro da coleção, posso iterar sobre o mesmo. De maneira semelhante ao que fiz no caso de Blocks.

A lista de coleções de objetos é fornecida abaixo:

  • Dictionaries
  • DimStyles
  • Layers
  • Layouts
  • Linetypes
  • Materials
  • ModelSpace
  • PaperSpace
  • PlotConfigurations
  • RegisteredApplications
  • SelectionSets
  • TextStyles
  • UserCoordinateSystems
  • Viewports
  • Views

Agora que listei todas as coleções de objetos, deixe-me apresentar um exemplo de como usar esses métodos.

print(acad.doc.DimStyles)
for i in (acad.doc.DimStyles):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209F4F11D00>
Standard
Annotative
ISO-25

Da mesma forma, outras propriedades importantes também podem ser buscadas conforme indicado no código abaixo.

# altura da janela do documento
print(acad.doc.Height)

# largura da janela do documento
print(acad.doc.Width)

# limites inferior esquerdo para superior direito
print(acad.doc.Limits)

# retorna um valor booleano para ObjectSnapMode para verificar se está
 ligado/desligado
print(acad.doc.ObjectSnapMode)

# caminho do documento
print(acad.doc.Path)

# retorna se o documento for ReadOnly/Read-Write usando valor booleano
print(acad.doc.ReadOnly)

# retorna objetos SummaryInfo que contém metadados do documento
print(acad.doc.Saved)

# retorna objetos SummaryInfo que contém metadados do documento
# (Título, assunto, autor, palavras-chave)
print(acad.doc.SummaryInfo)

# retorna se a janela estiver Minimizada, Maximizada ou em estado Normal
print(acad.doc.WindowState)

# retorna o título do documento
print(acad.doc.WindowTitle)

O/p:

818
1517
(0.0, 0.0, 420.0, 297.0)
False
C:\Users\91998\OneDrive\Documents
False
False
<comtypes.client.lazybind.Dispatch object at 0x000001C227C460D0>
3
Drawing1.dwg

Métodos da classe de objeto Document no AutoCAD

Agora que abordei as várias propriedades do objeto Documento do AutoCAD, avançarei para alguns dos métodos importantes da classe Documento do AutoCAD.

Na verdade, o primeiro método sobre o qual estou falando é o método Activate(). Para ativar qualquer documento, posso usar este método.

acad.doc.Activate

A partir daí, para avaliar a integridade de qualquer desenho, posso usar o método AuditInfo(). Aqui, posso passar true ou false como parâmetros para saber se quero ou não que o AutoCAD corrija os problemas encontrados.

acad.doc.AuditInfo(True)

Certamente, também existem alguns métodos para regenerar, salvar e fechar.

# regenera desenho
acad.doc.Regen

# salvar desenho
acad.doc.Save

# ao fechar passe boolean para salvar as alterações ou não seguido do
 nome do desenho
acad.doc.Close(False, "Drawing2.dwg")3

Finalmente, para remover referências nomeadas não utilizadas, como blocos ou camadas do Documento, posso usar o comando PurgeAll.

acad.doc.PurgeAll

Resumo e considerações finais

Por fim, concluo o seguinte: Usando os métodos da classe Document do AutoCAD documentados neste artigo, posso automatizar diferentes tarefas relacionadas ao objeto Document. Isso pode ser aplicado para automatizar e otimizar fluxos de trabalho relacionados ao AutoCAD.

Por fim, em caso de dúvidas, sinta-se à vontade para comentar abaixo na seção de comentários. Também estou aberto a consultas técnicas para as quais você pode entrar em contato comigo usando nosso formulário de contato. Confira meus outros posts cobrindo vários aspectos dos módulos Python pyautocad e pywin32 para automação do AutoCAD.

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Close

Meta