Objeto DimAligned no AutoCAD (Python)

Neste artigo, apresento o objeto DimAligned no AutoCAD com Python. Em geral, adicionar dimensões manualmente é uma tarefa muito tediosa que posso evitar se usar a automação do Python.

Para este tutorial estou usando o módulo pyautocad em Python. Também posso usar os módulos pywin32 e win32com em Python para isso. Esses módulos fornecem outra maneira de realizar a automatização do AutoCAD em Python. Confira minhas postagens de blog anteriores para obter mais informações sobre esses módulos.

Adicionando objeto DimAligned aos desenhos do AutoCAD

Como o nome do artigo sugere, concentro-me nas dimensões para entidades lineares. Eu posso usar o objeto DimAligned para isso.

Posso adicionar dimensões com o método AddDimAligned. A primeira coisa a lembrar é que um objeto DimAligned requer 3 parâmetros:

  • ExtLine1Point (primeiro endpoint)
  • ExtLine2Point (segundo endpoint)
  • TextPosition (texto para dimensões)

Neste caso, tenho duas geometrias presentes no meu espaço de modelo. A esquerda é composta por linhas e a direita é uma polilinha. Você pode ver isso na captura de tela abaixo.

Tendo em vista que posso buscar os pontos inicial e final de um objeto Linha do AutoCAD , posso iterar sobre o objeto AcDbLine, passando esses pontos como pontos inicial e final para as Dimensões.

Estou usando a fórmula do ponto médio, com um fator de 100 para o deslocamento, para a posição do texto. Veja o código abaixo.

for l in acad.iter_objects_fast(object_name_or_list="AcDbLine"):
    acad.model.AddDimAligned(APoint(l.StartPoint), APoint(l.EndPoint), APoint((l.StartPoint[0]+l.EndPoint[0]+100)/2, (l.StartPoint[1]+l.EndPoint[1]+100)/2, 0))

Por outro lado, o objeto polyline retorna um array de doubles para as coordenadas de cada um de seus nós. Nesse caso, posso iterar sobre essa matriz e passar esses pontos como pontos inicial e final em cada iteração.

for i in acad.iter_objects_fast(object_name_or_list="AcDbPolyline"):
    nodes = len(i.Coordinates)/2
    j=0
    while j <= nodes+1:
        acad.model.AddDimAligned(APoint(i.Coordinates[j], i.Coordinates[j+1], 0),    APoint(i.Coordinates[j+2], i.Coordinates[j+3], 0),    APoint((i.Coordinates[j]+i.Coordinates[j+2]+100)/2,     (i.Coordinates[j+1]+i.Coordinates[j+3]+100)/2, 0))
             j+=2

Claro, esta é uma abordagem muito básica para adicionar dimensões a qualquer geometria linear. No entanto, deixe-me agora implementar isso e ver os resultados.

Evidentemente, como você pode ver na captura de tela acima, posso dizer que adicionei as dimensões às geometrias lineares.

Propriedades do objeto DimAligned no AutoCAD

Agora que adicionei as dimensões às figuras, quero apresentar algumas de suas propriedades importantes. Não posso explicar cada uma delas neste artigo, pois existem cerca de 115 propriedades no total, muitas delas trabalhando para diferentes aspectos de dimensão.

Mas primeiro, mostro algumas propriedades básicas no código Python abaixo.

# general properties
print(l.ObjectName)

print(l.Rotation) # rotation angle of object in radians

print(l.LinearScaleFactor) 
# specfies global scale factor for linear dimensioning  measurements

print(l.StyleName)

l.DecimalSeparator = "."
print(l.DecimalSeparator)


O/p:

AcDbAlignedDimension
0.0
1.0
ISO-25
.

Como existem várias linhas de dimensão presentes dentro do meu desenho, estou selecionando uma delas para aplicar essas propriedades. Assim como existem propriedades ArrowHead com as quais posso definir o tamanho da ponta da seta passando um valor inteiro.

# arrow head properties
l.ArrowheadSize = 15
print(l.ArrowheadSize)
print(l.Arrowhead1Type)
print(l.Arrowhead2Type)

O/p:
15.0
0
0

Como mostrei no código acima, posso obter e definir o tamanho e o tipo da ponta de seta. Para o tipo de ponta de seta, existem várias opções. O padrão é acArrowDefault (0). Os outros tipos estão listados abaixo:

  • acSetaPadrãot
  • acArowDot
  • acSetaPontoPequeno
  • acArrowDotBlank
  • acArrowOrigin
  • acArrowOrigin2
  • acArrowOpen
  • acArrowOpen90
  • acArrowOpen30
  • acSetaFechado
  • acArrowSmaleu
  • acSetaNenhum
  • acSetaObliqua
  • acArrowBoxFilled
  • acArrowBoxBlank
  • acArrowClosedBlank
  • acArrowDatumPreenchido
  • acArrowDatumBlank
  • acSeta Integral
  • acArrowArchTick
  • acArrowUserDefined Somente leitura

Da mesma forma, tenho algumas propriedades de linha de dimensão, conforme indicado abaixo.

l.DimensionLineColor = 200
print("Dimension line color on the basis of 0-256 color index: " + str(l.DimensionLineColor))
    
print("The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: " + str(l.DimensionLineExtend))

print("The dimension line type is: " + l.DimensionLineType)l.DimensionLineWeight = 100    

print("Dimension lineweight: " + str(l.DimensionLineWeight))
    
print("Dimension text direction: ", end="" )
    
print(l.DimTxtDirection) 
# False: Left to right reading style
# True: Right to Left reading style 

print(l.Fit)

O/p:


Dimension line color on the basis of 0-256 color index: 200
The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: 0.0
The dimension line type is: ByBlock
Dimension lineweight: 100
Dimension text direction: False
3

A propriedade Fit tem 4 valores possíveis conforme listado abaixo:

  • acTextAndSets(0) : Para colocar o texto e as pontas de seta dentro das linhas de extensão.
  • acArowsOnly(1): Para colocar apenas as pontas de seta dentro das linhas de extensão. O texto é colocado fora das pontas de seta.
  • acTextOnly(2) : Para colocar apenas o texto dentro das linhas de extensão. As pontas de seta são colocadas fora das linhas de extensão.
  • acBestFit(3) : Esta é a opção padrão que coloca o texto e as pontas de seta na melhor localização de acordo com o espaço disponível. Quando há espaço suficiente para texto e pontas de seta, esta opção coloca ambos entre as linhas de extensão.

Existem algumas outras propriedades, como propriedades de texto e propriedades de tolerância. Deixe-me adicionar alguns de cada uma dessas propriedades para explicar.

#Text properties
l.TextHeight = 20
print(l.TextHeight)
print(l.TextInside) 

#Tolerance properties
print(l.ToleranceDisplay)
print(l.TolerancePrecision)

O/p:
20.0
False
0
2

Aqui, a propriedade TextInside tem um valor booleano para especificar se o texto deve ser adicionado à linha de extensão com força (true) ou apenas se houver espaço (false) de acordo.

Para especificar tolerâncias no texto da dimensão tenho a propriedade ToleranceDisplay que também retorna um booleano. ToleranceDisplay retorna False por padrão, ou seja, se as tolerâncias não foram especificadas.

Em geral, a precisão da tolerância tem 4 valores possíveis:

  • acTolNone: 0 (Padrão)
  • acTolSimétrico: 1
  • aTolDesvio: 2
  • AcTolLimits: 3
  • AcTilBasic: 4

De fato, como também já mencionei, existem muito mais propriedades do que as que especifiquei acima, mas essas são algumas para mostrar como usá-las. Abaixo está uma lista dos métodos da classe de objeto DimAligned AutoCAD.

  • MatrizPolar
  • MatrizRetangular
  • cópia de
  • Excluir
  • GetBoundingBox
  • Intersecção Com
  • Espelho
  • Espelho 3D
  • Jogada
  • Girar
  • Girar3D
  • ScaleEntity
  • Atualizar

Observações finais

Por fim, posso dizer que abordei o objeto DimAligned do AutoCAD e a maneira como posso automatizar o mesmo com o Python. Da mesma forma, existem outros objetos de dimensão, que abordarei em meus futuros posts. Em caso de mais alguma informação técnica ou consulta, não hesite em contactar-me através do nosso formulário de contacto . Além disso, deixe um comentário em nossa caixa de comentários para qualquer dúvida.

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

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