Selecionar e Obter informações do objeto atraves do VBA
Bom dia pessoal,
preciso selecionar uma entidade qualquer "line, circle, arc, etc.." e obter as informações desta entidade do tipo x,y,z "cordenadas", e que tipo de objeto foi selecionado "linha, circulo, etc... resumindo preciso das informaçoes e caracteristicas deste objeto.
sera que alguem ja fez algo parecido que possa me ajudar?
obrigado.
1 Attachment(s)
Re: Selecionar e Obter informações do objeto atraves do VBA
Olá Mário,
veja o código do ficheiro anexo como exemplo do que pretende fazer.
Rui Pestana
Re: Selecionar e Obter informações do objeto atraves do VBA
Olá Rui !
primeiramente muito obrigado pela ajuda.
Estou tendo uma dificuldade para localizar a propriedades responsavel em armazenar as coordenadas de contrução de uma dimension.
1st extension defining point: X=0.00000000 Y=0.00000000 Z=0.00000000
2nd extension defining point: X=82.00000000 Y=0.00000000 Z=0.00000000
dimension line defining point: X=82.00000000 Y=-15.50000000 Z=0.00000000
default text position: X=41.00000000 Y=-15.50000000 Z=0.00000000
o que eu preciso é selecionar uma dimension e obter as propriedades de construção da mesma, para o restante das entidades line, spline, arc, circle... funcionou inclusive com sua ajuda. só pra dimension que ainda naum consegui... poderia me ajudar?
os dados de contrução são:
Set dimObj = ThisDrawing.ModelSpace.AddDimRotated(point1, point2, location, Angle)
mais uma vez obrigado.
Re: Selecionar e Obter informações do objeto atraves do VBA
Olá.
De facto não se consegue ir buscar os pontos das linhas de chamada de um dimRotated.
Estive então à procura nos fóruns internacionais de VB para Autocad e descobri como se obter esses pontos para uma dimRotated.
A ideia é procurar na colecção de blocos do desenho. Uma coisa que aprendi foi que as cotas, e provalvelmente outras entidades, ao serem adicionadas vão para a colecção de blocos.
Posto isto o método usado é procurar os blocos cujo nome comece por "*D" (deve ser o prefixo do nome dos blocos das cotas de um desenho)
Depois vai-se procurar nas entidades desse bloco a entidade Mtext (suponho que seja o texto das cotas)
Como já temos o ponto "textposition" da cota que seleccionamos podemos saber se o bloco em causa é o da cota selecionada se o ponto de inserção do "Mtext" (lembre-se que o Mtext é uma entidade do bloco) for o mesmo. Para isso usa-se uma tolerância bastante pequena.
Depois de encontrado o bloco da cota seleccionada é só ir a certos itens do bloco para se saber as entidades que precisamos da cota.
Veja exemplo modificado do fórum original:
'início de código
Sub GetDimRProperties(oDimRotated)
Dim oBlock As AcadBlock
Dim oBlocks As AcadBlocks
Set oBlocks = ThisDrawing.Blocks
Dim textPosition As Variant
textPosition = oDimRotated.textPosition
Dim insertPoint As Variant
Dim Ent As AcadEntity
Dim i As Integer
Dim Tol As Double
Tol = 0.00000001
For Each oBlock In oBlocks
If Not Left(oBlock.Name, 2) = "*D" Then GoTo SkipBlock
For Each Ent In oBlock
If TypeOf Ent Is AcadMText Then
' Debug.Print textPosition(0)
insertPoint = Ent.InsertionPoint
For i = 0 To 2
If Abs(insertPoint(i) - textPosition(i)) > Tol Then GoTo SkipBlock
Next i
'1º ponto da linha de extensão
ThisDrawing.ModelSpace.AddPoint oBlock(7).Coordinates
'2º ponto da linha de extensão
ThisDrawing.ModelSpace.AddPoint oBlock(6).Coordinates
'Ponto da dimLine
' ThisDrawing.ModelSpace.AddPoint oBlock(8).Coordinates
Exit Sub
End If
Next Ent
SkipBlock:
Next oBlock
End Sub
'fim de código