AutoCad - Instruccion vba para poner un texto

 
Vista:
sin imagen de perfil
Val: 27
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por victor (15 intervenciones) el 30/03/2020 00:08:36
Hola, alguien me podria ayudar a completar este ejercicio?

Es una macro desde excel y la macro toma un texto de "A1" y quiero que cuando de un clic en autocad me ponga el texto en esa posicion X,Y

Sub pon_texto()
pto = AutoCAD.Application.ActiveDocument.Utility.GetPoint(, "Indique punto para poner texto")
x = pto(0)
y = pto(1)

texto=range("a1")

'---------
AQUI NECESITO LA SINTAXIS PARA PONER EL TEXTO EN AUTOCAD
'---------

Endsub

Muchas gracias. Please
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.336
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Gerardo (783 intervenciones) el 30/03/2020 00:56:25
Hola
Lo mío no es VBA, sin embargo creo que te sería mucho más fácil programar la macro en autocad que en excel. Esto porque vas a pedir 100 puntos, es más simple que el autocad tenga el control a que el excel pase el control 100 veces y cada vez vuelvan las coordenadas al excel para enviar la creación del texto al autocad de vuelta. Pero bien, en todo caso y uno con mucho más procesos que el otro, te funcionaría

Ya sabes como obtener el ActiveDocument. A ese documento le obtienes el Model Space (o el layout si estuvieras dibujando en otro espacio)
y en el model tienes el método AddText que crea el texto

1
2
Set MS = AutoCAD.Application.ActiveDocument.ModelSpace
Set TXT= MS.AddText("STRING", pto, altura)
(estoy guardando el texto en la variable TXT por si luego quisiera aplicarle propiedades, como color, capa, etc - de lo contrario no haría falta conservar el objeto)


En todo caso dale F1 al autocad y busca en la ayuda "AddText Method (ActiveX)" y cualquier otro metodo, objeto, propiedad, colección... están bien documentados y vienen ejemplos completos como este
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Example_AddText()
    ' This example creates a text object in model space.
    Dim textObj As AcadText
    Dim textString As String
    Dim insertionPoint(0 To 2) As Double
    Dim height As Double
    ' Define the text object
    textString = "Hello, World."
    insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0
    height = 0.5
 
    ' Create the text object in model space
    Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)
    ZoomAll
End Sub

Son codigos para incluir en el editor de vba de Autocad, entonces se saltan obtener la aplicación y el documento como objeto invocador, pero la lógica es la misma

Y si prefieres pasarte a programar en cad, el comado para abrir el editor es VBAIDE, pero puede ser que tengas que instalarlo antes si no lo has hecho. En la zona de descargas del sitio de autodesk lo encuentras para cada version de autocad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Janlui (15 intervenciones) el 30/03/2020 01:19:39
Me manda error en
1
Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)

Finalmente puse la subrutina asi: Es correcto?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Example_AddText()
    pto = AutoCAD.Application.ActiveDocument.Utility.GetPoint(, "Indique primer punto")
    x = pto(0): y = pto(1)
 
    altura = 10
    Set MS = AutoCAD.Application.ActiveDocument.ModelSpace
    Set TXT = MS.AddText("STRING", pto, altura)
 
 
    ' This example creates a text object in model space.
    Dim textObj As AcadText
    Dim textString As String
    Dim insertionPoint(0 To 2) As Double
    Dim height As Double
    ' Define the text object
    textString = "Hello, World."
    insertionPoint(0) = 2: insertionPoint(1) = 2: insertionPoint(2) = 0
    height = 0.5
 
    ' Create the text object in model space
    Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)
    ZoomAll
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Janlui (15 intervenciones) el 30/03/2020 02:38:36
Gerardo, gracias por tu ayuda y te cpomento lo siguiente.

yA LOGRE QUE SE EJECUTARA, corre desde el editor de vba del Autocad.

Si observas, puse un ciclo de 10 con un contador, funciona perfecto, mas adelante quisiera cambiarle el tipo de letra, color y angulo.

Pero en lugar de un contador, quiero que tome los textos de una hoja de excel que se encontrará activa y traere la informacion del texto ej.

1
activesheet.cells(i,"a")

pero no se como conectar autocad con excel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Example_AddText()
 
    Dim insertionPoint(0 To 2) As Double
 
    For i = 1 To 10
        pto = AutoCAD.Application.ActiveDocument.Utility.GetPoint(, "Indique primer punto")
        insertionPoint(0) = pto(0): insertionPoint(1) = pto(1): insertionPoint(2) = pto(2)
 
        ' This example creates a text object in model space.
        Dim textObj As AcadText
        Dim textString As String
        Dim height As Double
        ' Define the text object
 
        textString = "C-" & i
        height = 0.3
 
        ' Create the text object in model space
        Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)
    Next
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.336
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Gerardo (783 intervenciones) el 30/03/2020 04:42:25
Igual a como conectas autocad desde excel, invocando el objeto "Excel.Application"

por ejemplo si tienes el excel abierto en la hoja que tiene los datos, pues algo como así:
1
hojadeexcel = Excel.Application.ActiveSheet

busca esto en la ayuda de autocad:
About Creating an Instance of the Other Application (VBA/ActiveX)

Ahí hay varios ejemplos con códigos que abren excel para lectura o escritura

tambien si lo googleas o buscas en autodesk encontrarás muchos casos ya resueltos que hacen esa conexion. Yo lo tengo resuelto en autolisp, y lo he publicado en este foro, pero creo que te podría enredar si mezclamos los lenguajes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Janlui (15 intervenciones) el 30/03/2020 18:09:34
GERARDO... LISTO!!!

Ya toma la lista de textos que tengo en excel y los va poniendo en x,y que le voy indicando con un do while hasta que se termina esa lista.

EN ESTA INSTRUCCION:

1
Set textObj = ThisDrawing.ModelSpace.AddText(textString, insertionPoint, height)

COMO LE PUEDO INDICAR EL ANGULO, TIPO DE LETRA O FONT?

ADICIONALMENTE QUISIERA QUE LE TEXTO LO PONGA CENTRADO AL PUNTO SELECCIONADO X,Y

SALUDOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.336
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Gerardo (783 intervenciones) el 30/03/2020 21:49:35
Crea un estilo con la fuente que quieras y luego de crear cada texto le asignas el estilo, justificacion y angulo con:

1
2
3
4
textObj.styleName = "TUESTILO"
textObj.rotation = 0.0
textObj.TextAlignmentPoint = pto
textObj.Alignment = acAlignmentMiddleCenter

Importante que el punto de alineamiento es diferente al de inserción del texto (solo coinciden si la justificación es izquierda, pero en este caso que va centrado debes setear el punto de alineamiento en el pto que leíste del usuario aunque ya lo hayas indicado al crear el texto), y luego asignar la justificación, que es lo que hace la propiedad alignment.

Importante también que el ángulo de rotación siempre se lee en el sistema de coordenadas universal, desde el este, en sentido antihorario y en radianes. Por lo tanto un texto horizontal siempre lleva rotación 0. Y uno hacia arriba siempre lleva rotacion PI/2 (1.5707963268)

Luego por si acaso, el estilo que se esta asignando en "TUESTILO" debe estar creado antes. Ya verás si quieres liarte con que lo cree la misma macro antes del bucle que pide puntos, o si lo creas manualmente y lo metes en la plantilla. Ese estilo es el que lleva la fuente de texto que mostrarán todos los textos que tengas en el estilo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Janlui (15 intervenciones) el 31/03/2020 01:28:18
Excelente Gerardo, ya quedo.

- Tengo en mi excel el nombre de los puntos que seleccionar
- Cada clic en autocad me pone el texto en autocad y me regresa al excel el X y Y a excel para uso futuro
- Ya pone font, color y rotación.

Logrado gracias a tus aportes.

Iniciaré ahora un control de polilineas donde en un plano tengo 130 contratrabes y en la medida que las vayan colando desde excel indicare el avance y debera colorear esos poligonos en autocad para representar el avance.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 1.336
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Gerardo (783 intervenciones) el 31/03/2020 07:02:39
Excelente. Con gusto.
Suerte con lo que te propones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Janlui (15 intervenciones) el 31/03/2020 22:36:33
Gerardo, encontré la forma en lo referente a la rotación del texto:

si quiero que lo ponga a 90°

( 90 * ( PI * 2 ) ) / 360 = 1.5708

Es correcto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.336
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Instruccion vba para poner un texto

Publicado por Gerardo (783 intervenciones) el 01/04/2020 02:53:09
mas facil
90 * pi / 180

pero si, de ahi salio el 1.5707963268 que te di antes

Recomendación
Si quieres que vayan a 0s y 90s grados, no metas en la macro la operacion, sino de una vez el valor del angulo (resuelvelo en calculadora y pones el resultado) para que la macro no se haga pesada con calculos innecesarios
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar