AutoCad - Error al selecionar

 
Vista:

Error al selecionar

Publicado por JORGE VERGARA C (6 intervenciones) el 03/01/2020 16:14:44
espero me puedan ayudar con este codigo que al ejecutar tiene un error al seleccionar todos los textos que debe reemplazar, dejo el codigo para que me indiquen en que pude haber errado al hacer el contador

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun C:cambiatexto ()
(setq Valortxt "Nuevo")(terpri)
  (Prompt "Seleccione Textos a Sumar : ")
  (Setq num3 (ssGet "x" (List (Cons 0 "TEXT"))))
  (If num3
    (Progn
        (Setq K 0)
        (Repeat (ssLength num3)
          (Setq Nombre (ssName num3 K))
          (Setq Numero (Entget Nombre))
(if (= (Cdr (Assoc 1 numero)) "viejo")
(Progn
           (setq fi (subst (cons 1 Valortxt) (Assoc 1 numero)numero))
           (entmod fi))
             (Setq K (+ K 1))
        )
 
    );fin Progn2ty
  );Fin IF
  (Print)
))
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.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Error al selecionar

Publicado por Gerardo (986 intervenciones) el 05/01/2020 06:57:57
Hola

Será un error semántico, porque la sintaxis está correcta, y alguna lógica tiene.

Lo único que veo es que imprimes "Seleccione textos..." pero la rutina es la que selecciona todos los textos (ssget "x") cuyo contenido es la palabra "viejo"

entonces,¿ que es lo que pretendes que no está haciendo el código? Si es que no quieres cambiar todos los textos "viejo" por nuevo, sino solo los textos "viejo" que seleccione el usuario, quita la "X" del ssget
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

Error al selecionar

Publicado por JORGE VERGARA C (6 intervenciones) el 06/01/2020 14:25:32
Inicialmente probé con ssget solo, y ocurría el mismo error de selección, el problema radica es que independiente de tipo de selección al correr la rutina NO selecciona todos los textos de valor viejo por nuevo, lo cual no cambia el valor de todos los textos seleccionados con dicha condición con este codigo funciona a la perfeccion:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun C:cambia-texto ()
(VL-LOAD-COM)
)
 
(setq Valortxt "NUEVAVALOR")(terpri)
  (Prompt "Seleccione Textos a Cambiar : ")
  (Setq num3 (ssGet (List (Cons 0 "TEXT"))))
  (If num3
    (Progn
        (Setq K 0)
        (Repeat (ssLength num3)
          (Setq Nombre (ssName num3 K))
          (Setq Numero (Entget Nombre))
           (setq fi (subst (cons 1 Valortxt) (Assoc 1 numero)Numero))
           (entmod fi)
             (Setq K (+ K 1))
        )
 
    );fin Progn
  );Fin IF
  (Print)
)

Pero al agregarle con la condicional IF para que seleccione un valor determinado es donde se me produce el error de seleccion

atento a vuestros comentarios
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.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

Error al selecionar

Publicado por Gerardo (986 intervenciones) el 07/01/2020 00:01:06
Creo que tenemos que devolvernos al inicio

Probé el código que colocaste (ambos) en unos textos y funciona bien. No está el error en esa parte.

Si tienes un código que no funciona adjúntalo para poder revisarlo. Si tienes unos textos que no se cambian sube también un dwg con esos textos. Así podremos probar tu rutina en tus textos para que se reproduzca el mismo error y darte una solución


P.D.
Entre más simple y claro sea el código, y uses solo las variables necesarias con nombres representativos de lo que contienen más facil será localizar y corregir errores. En esas líneas que subiste no se nota mucho la diferencia, pero cuando las rutinas crecen a miles de líneas de código ya se agradece ese orden. Mira esta otra forma de poner lo mismo, y eliminar redundancias innecesarias como la variable "num3"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(defun C:cambia-texto ()
	(setq Valortxt "NUEVAVALOR"
			k 0
	)
	(Prompt "Seleccione Textos a Cambiar : ")
	(If (setq seleccion (ssGet '((0 . "TEXT"))))
		(repeat (sslength seleccion)
			(setq listadef (entget	(ssname seleccion k))
					k			(1+ k)
			)
			(entmod
				(subst
					(cons 1 Valortxt)
					(Assoc 1 listadef)
					listadef
				)
			)
		)
	)
	(princ)
)
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

Error al selecionar

Publicado por JORGE VERGARA C (6 intervenciones) el 07/01/2020 22:33:15
la probé,y funciona genial y el código es mas simple , se agradece vuestra gestión, ahora le agregare una función condicional IF y Progn con la finalidad de que discrimine un valor de texto determinado.
agradecido
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