Alineamiento Total
2 participantes
Página 1 de 1.
Alineamiento Total
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.
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 : 38
Fecha de inscripción : 13/09/2017
SushyM- Mensajes : 38
Fecha de inscripción : 13/09/2017
Re: Alineamiento Total
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
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 : 38
Fecha de inscripción : 13/09/2017
Re: Alineamiento Total
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
Igual a alguien se le ocurre como hacer lo de la distancia
Un saludo
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 : 182
Fecha de inscripción : 17/03/2016
Re: Alineamiento Total
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.
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 : 38
Fecha de inscripción : 13/09/2017
Re: Alineamiento Total
Claro, en donde se calcula el punto de inserción, cambia
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
- Código:
;; centro linea a una distancia = altura texto
(setq pc (polar (cadr(cdr a))(car(cdr a))(caddr (car a))))
- Código:
(setq pc (cadr(cdr a)))
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 : 182
Fecha de inscripción : 17/03/2016
Re: Alineamiento Total
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.
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 : 38
Fecha de inscripción : 13/09/2017
Re: Alineamiento Total
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
Un saludo
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 : 182
Fecha de inscripción : 17/03/2016
Re: Alineamiento Total
Gracias Amigo Nolo, me ha servido mucho la rutina...
Espero contar siempre con el apoyo de uds..
slds.
Espero contar siempre con el apoyo de uds..
slds.
SushyM- Mensajes : 38
Fecha de inscripción : 13/09/2017
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|