Alineamiento Total

Ir abajo

Alineamiento Total

Mensaje por SushyM el Jue Oct 11, 2018 7:09 pm

Que tal amigos, como han estado todo este tiempo.

Esperando contar con el apoyo de uds. propongo y esperando recibir las sugerencias de mis compañeros del foro.

Posición del Bloque03 Fija
Las lineas que los une debe partir del punto de inserción del mismo como en el dwg.

Bloque01 y Bloque02 se debe alinear a la linea y ubicarse en el punto medio desde su punto de inserción.

Los 2 textos que van en los extremos de la linea debería estar alineado y separado a 0.5 de la misma.

Espero contar con su apoyo y ver como partir y darle solucion a mi tema.

https://drive.google.com/open?id=1XMg5Tw5ioMz-LaN5BQwQcaLoxJH7WoBd

slds.

SushyM

Mensajes : 30
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por SushyM el Jue Oct 11, 2018 7:10 pm


SushyM

Mensajes : 30
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por SushyM el Miér Nov 07, 2018 12:57 am

Que tal amigos, me podrían ayudar a mejorar esta rutina para el uso que requiero,

La mejora seria en:

*Alinear al medio de la Linea con una separación, que le pueda indicar.
*Que se oriente a la linea mas cercana
*Poder seleccionar por ventana un buen grupo de elementos.

Por favor me podrian brinda un poco de su tiempo, Amigos de Acad Hispano

slds.

https://drive.google.com/open?id=1KcifrzZQklFk_GnE3eJAYBw-zsqhc-03

Código:

ORIENTATXT
; Orienta un bloque o texto en el mismo ángulo que una línea señalada

(defun OrientaT ( / lin pt1 pt2 a txt )
(setq lin (entget (car (entsel "Señala una línea: ")))
pt1 (cdr (assoc 10 lin))
pt2 (cdr (assoc 11 lin))
a (angle pt1 pt2)
)
(princ a ) (if (> a (/ pi 2)) (setq a (- a pi))) (princ a)
(if (> a (/ pi 2)) (setq a (- a pi)))
(setq a (cons '50 a))
(setq txt (entget (car (entsel "\nSeñala el texto a orientar: "))))
(setq txt (subst a (assoc 50 txt) txt))
(entmod txt)
(princ)
)
(defun c:OT () (OrientaT))
(defun c:ORIENTATXT () (OrientaT))
(princ "\nEstá cargada la función OrientaTXT, Utilícela con OT. ")(princ)

SushyM

Mensajes : 30
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por nolo el Miér Nov 07, 2018 11:22 pm

Si seleccionamos por ventana o crosing, no veo posible pedirle a la rutina que sitúe la nota a una determinada distancia de una esquina pues habría que preguntar para cada caso de que esquina ...

Bueno, yo te dejo aquí un posible camino colocando la nota en el centro de la línea

Código:
(defun c:al( / ss textos lineas pc)
(vl-load-com)
;;; by Nolo en http://acadhispano.foroargentina.net/ noviembre 2018
(if(progn (princ (strcat (chr 10) "Seleccione textos y líneas : "))
 (> (sslength
 (setq ss (ssget '(( 0 . "TEXT,LINE"))))
 )1))
(progn

(setq ss (ssnamex ss) ;; filtramos la selección
 ss (vl-remove-if '(lambda(a) (/=(type(cadr a))'ENAME))ss)
 ss (mapcar '(lambda(a)(entget(cadr a))) ss)
 ss (mapcar
 '(lambda(a) (vl-remove-if-not '(lambda(b)(member (car b) '(-1 0 10 11 40)))a))ss)
 ss (mapcar '(lambda(a)(mapcar 'cdr a))ss)
)(setq ;; separamos textos y líneas
 textos  (vl-remove-if '(lambda(a)(member "LINE" a))ss)
 textos (mapcar '(lambda(a)(vl-remove "TEXT" a))textos)
 lineas (vl-remove-if '(lambda(a)(member "TEXT" a))ss)
 lineas (mapcar '(lambda(a)(vl-remove "LINE" a))lineas)
 )
(setq lineas (mapcar '(lambda(a) (list
 (vlax-ename->vla-object (car a))
 (mapcar '/ (mapcar '+ (cadr a)(last a)) '(2 2)) ;; centro
 )) lineas))
 
(setq textos (mapcar '(lambda(a / c )  
 (setq c (mapcar '(lambda(b / p )(cons
 (distance (setq p (vlax-curve-getClosestPointTo (car b) (last a)) )(cadr a))
 (cons (angle p (last a)) (cdr b))
 ))lineas)
 c (cdr(assoc (apply 'min (mapcar 'car c)) c)) ;; línea mas cercana a cada texto
 )
 (cons a c)) textos);; aqui tenemos lista con datos textos, angulo perpendicular y centros de líneas
)
;; y aqui el entmod de tu rutina

(foreach a textos
(entmod (subst (cons 50 (-(cadr a)(/ pi 2))) (assoc 50 (entget (caar a)))(entget (caar a))))
;; añadiendo sobre el punto medio
;; centro linea a una distancia = altura texto
(setq pc (polar (cadr(cdr a))(car(cdr a))(caddr (car a))))
(entmod (subst (cons 11 (append pc '(0.))) (assoc 11 (entget (caar a)))(entget (caar a))))
)
))
(princ)
)

Igual a alguien se le ocurre como hacer lo de la distancia
Un saludo

nolo

Mensajes : 177
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por SushyM el Jue Nov 08, 2018 12:19 am

Gracias amigo Nolo, por tu tiempo brindado,
Habría la forma de que coincida el punto de inserción del texto con el punto medio de la linea.

Ahora por otro lado tengo algunos textos que son bloques con atributos como en el ejemplo. Pero se podría acondicionar tu rutina, para que tambien lo alinee, de la misma manera.

https://drive.google.com/open?id=1c7UTwNZsA0AuewffB3gIO3fPRyp_Oj75

Gracias por tu tiempo que me has brindado, ojala me puedas apoyar con este pedido.

slds a todos.

SushyM

Mensajes : 30
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por nolo el Jue Nov 08, 2018 11:17 am

Claro, en donde se calcula el punto de inserción, cambia
Código:
;; centro linea a una distancia = altura texto
(setq pc (polar (cadr(cdr a))(car(cdr a))(caddr (car a))))
por
Código:
(setq pc (cadr(cdr a)))
Sobra bastante código pero no creo que merezca la pena comprimir la rutina

Respecto a los atributos, yo no me llevo bien con ellos y tendría que estudiarlos mejor para ampliar la utilidad de la rutina, así que se lo dejo a alguien mas iniciado que yo.

Un saludo

nolo

Mensajes : 177
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por SushyM el Lun Nov 12, 2018 5:43 pm

Buen día chicos, esperando que este fin de semana haya sido relajante,
Espero contar con el apoyo de uds. y sobre todo de ti amigo nolo.

Tengo una variante a la rutina que me has apoyado, no se tan factible sea.

https://drive.google.com/open?id=1NIFBKCfVM6kSLP7zq0-K-Bj20Ol05Bsg

La selección puede ser texto y linea(una pareja), por ventana o crosing.

slds.

SushyM

Mensajes : 30
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por nolo el Lun Nov 12, 2018 8:32 pm

Veo que ahora quieres también polilineas 2d.
Pues con la misma estructura de antes se puede hacer fácilmente eliminado el código que busca el punto medio
Código:
(defun c:alp( / ss textos lineas pc)
(vl-load-com)
;;; by Nolo en http://acadhispano.foroargentina.net/ noviembre 2018
(if(progn (princ (strcat (chr 10) "Seleccione textos y líneas : "))
 (> (sslength
 (setq ss (ssget '(( 0 . "TEXT,LINE,LWPOLYLINE"))))
 )1))
(progn

(setq ss (ssnamex ss)
 ss (vl-remove-if '(lambda(a) (/=(type(cadr a))'ENAME))ss)
 ss (mapcar '(lambda(a)(entget(cadr a))) ss)
 ss (mapcar
 '(lambda(a) (vl-remove-if-not '(lambda(b)(member (car b) '(-1 0 10 11 40)))a))ss)
 ss (mapcar '(lambda(a)(mapcar 'cdr a))ss)
)(setq
 textos  (vl-remove-if-not '(lambda(a)(member "TEXT" a))ss)
 textos (mapcar '(lambda(a)(vl-remove "TEXT" a))textos)
 lineas (vl-remove-if '(lambda(a)(member "TEXT" a))ss)
 lineas (mapcar 'vlax-ename->vla-object (mapcar 'car lineas))
 )
 
(setq textos (mapcar '(lambda(a / c )  
 (setq c (mapcar '(lambda(b / p )(cons
 (distance (setq p (vlax-curve-getClosestPointTo b (last a)) )(cadr a))
 (cons (angle p (last a))  p);;; aqui añadido punto proyeccion
 ))lineas)
 c (cdr(assoc (apply 'min (mapcar 'car c)) c)) ;; línea mas cercana a cada texto
 )
 (cons a c)) textos);; aqui tenemos lista con datos textos, angulo per,  y punto per líneas
)
;; y aqui el entmod de tu rutina

(foreach a textos
(entmod (subst (cons 50 (-(cadr a)(/ pi 2))) (assoc 50 (entget (caar a)))(entget (caar a))))
(setq pc (polar (cdr(cdr a))(car(cdr a))(caddr (car a))))
(entmod (subst (cons 11 pc) (assoc 11 (entget (caar a)))(entget (caar a))))
)

))
(princ)
)

Un saludo

nolo

Mensajes : 177
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Alineamiento Total

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.