acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Rotular "dentro" de poli cerrada

3 participantes

Ir abajo

Rotular "dentro" de poli cerrada Empty Rotular "dentro" de poli cerrada

Mensaje por eliasp Miér Ene 12, 2022 12:43 am

Buen día foro.
Primero que nada, gracias a quien compartió esta rutina para rotular con la distancia una polilínea cerrada.
Código:

(defun c:cota_pol (/ n h sel pl processpline)
   (vl-load-com)
   (defun processpline (polyline / explst mid len ini end ang ins)
      (setq explst (vlax-invoke polyline 'explode))
      (foreach x explst
    (setq mid (vlax-curve-getpointatdist
            x
            (/ (vlax-curve-getdistatparam x (vlax-curve-getendparam x)) 2.0)
         )
          len (vlax-curve-getdistatpoint x (vlax-curve-getendpoint x))
          ini (vlax-curve-getstartpoint x)
          end (vlax-curve-getendpoint x)
          ang (rem (angle ini end) pi)
    )
    (if (> ang (/ pi 2.0))
       (setq ang (+ pi ang))
    )
    (setq ins (polar mid (+ ang (* pi 0.5)) (* 1.5 (getvar "textsize"))))
    (entmake (list   (cons 0 "TEXT")
         (cons 1 (rtos len))
         (cons 7 "STANDARD")
         (cons 10 ins)
         (cons 11 ins)
         (cons 40 h)
         (cons 50 ang)
         (cons 72 1)
         (cons 73 2)
        )
    )
    (vla-delete x)
      )
   )
   (setq n 0
    h (cdr (assoc 40 (entget (tblobjname "style" (getvar "Textstyle")))))
   )
   (if (= h 0)
      (setq h (getvar "textsize"))
   )
   (princ "\nSelecciona Polilineas: ")
   (if (setq sel (ssget (list (cons 0 "LWPOLYLINE"))))
      (repeat (sslength sel)
    (setq pl (ssname sel n))
    (processpline (vlax-ename->vla-object pl))
    (setq n (1+ n))
      )
   )
   (prin1)
)
Ahora, funciona muy bien, sin embargo, me gustaría, si es posible que me ayuden a hacerle una pequeña adecuación.
Resulta que coloca los textos "dentro" y "fuera" de la polilínea. Por razones de presentación y evitar "talacha" me gustaría que siempre coloque los textos "dentro" y así evitar confusiones.
En el archivo anexo indico el resultado que se obtiene y el desado.

Saludos y muchas gracias

https://we.tl/t-rDbvl2KC07

eliasp

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

Volver arriba Ir abajo

Rotular "dentro" de poli cerrada Empty Re: Rotular "dentro" de poli cerrada

Mensaje por ronaldT Miér Ene 12, 2022 5:36 pm

Tienes que dibujar los poligonos en sentido anti horario


(defun c:cota_pol (/ n h sel pl processpline)
(vl-load-com)
(defun processpline (polyline / explst mid len ini end ang ins)
(setq explst (vlax-invoke polyline 'explode))
(foreach x explst
(setq mid (vlax-curve-getpointatdist
x
(/ (vlax-curve-getdistatparam x (vlax-curve-getendparam x)) 2.0)
)
len (vlax-curve-getdistatpoint x (vlax-curve-getendpoint x))
ini (vlax-curve-getstartpoint x)
end (vlax-curve-getendpoint x)
ang (angle ini end)
)

(setq ins (polar mid (+ ang (* pi 1.5)) (* 1.5 (getvar "textsize"))))
(entmake (list (cons 0 "TEXT")
(cons 1 (rtos len))
(cons 7 "STANDARD")
(cons 10 ins)
(cons 11 ins)
(cons 40 h)
(cons 50 ang)
(cons 72 1)
(cons 73 2)
)
)
(vla-delete x)
)
)
(setq n 0
h (cdr (assoc 40 (entget (tblobjname "style" (getvar "Textstyle")))))
)
(if (= h 0)
(setq h (getvar "textsize"))
)
(princ "\nSelecciona Polilineas: ")
(if (setq sel (ssget (list (cons 0 "LWPOLYLINE"))))
(repeat (sslength sel)
(setq pl (ssname sel n))
(processpline (vlax-ename->vla-object pl))
(setq n (1+ n))
)
)
(prin1)
)

ronaldT

Mensajes : 54
Fecha de inscripción : 20/03/2016

Volver arriba Ir abajo

Rotular "dentro" de poli cerrada Empty Re: Rotular "dentro" de poli cerrada

Mensaje por eliasp Miér Ene 12, 2022 7:05 pm

Muchas gracias, perfecto

eliasp

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

A vecan le gusta esta publicaciòn

Volver arriba Ir abajo

Rotular "dentro" de poli cerrada Empty Re: Rotular "dentro" de poli cerrada

Mensaje por Dominguez Mar Ene 25, 2022 6:38 pm

[quote="eliasp"]Buen día foro.
Primero que nada, gracias a quien compartió esta rutina para rotular con la distancia una polilínea cerrada.

Esa rutina la puse yo, pero tengo que decirte que para mi esta obsoleta, prueba esta que siempre te rotulara los textos adentro, pero tambien las polis abiertas, incluso los tramos curvos.
saludos
Código:
; Acota todos los tramos de una polilinea, Abierta ó Cerrada (incluso los curvos).
 ; luis Dominguez Gomez :copyright: 2017
;;;================================================================================================
;; polilinea abierta.
(defun pln_open (/ ang ent explst ptxt long mid pol)
 (if (equal (cdr (assoc 0 (setq ent (entget (car (entsel "\nSelecciona Polilinea2D: ")))))) "LWPOLYLINE")
  (setq ent (cdr (car ent)))
  (progn (prompt "\nNo es una polilinea 2D: ") (textpage) (exit))
 )
 (setq pol (vlax-ename->vla-object ent))
 (setq explst (vlax-invoke pol 'explode))
 (foreach # explst
  (setq mid (vlax-curve-getpointatdist # (/ (vlax-curve-getdistatparam # (vlax-curve-getendparam #)) 2.0)))
  (setq long (rtos (vlax-curve-getdistatpoint # (vlax-curve-getendpoint #)) 2 3))
  (setq ang (rem (angle (vlax-curve-getstartpoint #) (vlax-curve-getendpoint #)) pi))
  (if (> ang (/ pi 2.0))
   (setq ang (+ pi ang))
  )
  (setq ptxt (polar mid (+ ang (/ pi 2)) (* *altxt* 0.75)))
  (text)
  (vla-delete #)
 )
)
;;;================================================================================================
(defun text nil
 (entmake (list '(0 . "TEXT")
 (cons 1 long)
 '(7 . "TRAMOS")
 (cons 10 ptxt)
 (cons 11 ptxt)
 (cons 40 *altxt*)
 (cons 50 ang)
 '(72 . 1)
 '(73 . 2)
  )
 )
)
;;;================================================================================================
;; polilinea cerrada.
(defun pln_clos (/ ang explst long mid pol poly pto ptxt)
 (setq pto (getpoint "\nIndicar punto interno: "))
 (vl-cmdf "_.boundary" pto "")
 (setq pol (entlast)) ;boundary
 (vl-cmdf "_offset" (* *altxt* 0.75) pol pto "")
 (setq poly (vlax-ename->vla-object (entlast))) ;offset
 (setq pol (vlax-ename->vla-object pol)) ;boundary
 (setq explst (vlax-invoke pol 'explode)) ;
 (foreach # explst
  (setq mid (vlax-curve-getpointatdist # (/ (vlax-curve-getdistatparam # (vlax-curve-getendparam #)) 2.0)))
  (setq ptxt (vlax-curve-getclosestpointto poly mid))
  (setq long (rtos (vlax-curve-getdistatpoint # (vlax-curve-getendpoint #)) 2 3))
  (setq ang (rem (angle (vlax-curve-getstartpoint #) (vlax-curve-getendpoint #)) pi))
  (if (> ang (/ pi 2.0))
   (setq ang (+ pi ang))
  )
  (text)
  (vla-delete #)
 )
 (vla-delete pol) ;boundary
 (vla-delete poly) ;offset
)
;;;================================================================================================
(defun c:tp (/ alt mod opc)
 (vl-load-com)
 (setvar 'cmdecho 0)
 (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
 (setq mod (getvar 'osmode))
 (setvar 'osmode 0)
 (setvar 'dimzin 1)
 (if (not *altxt*)
  (setq *altxt* (getreal (strcat "\nIndique altura de textos: ")))
  (progn (setq alt (getreal (strcat "\nIndique altura de textos: <" (rtos *altxt* 2 2) ">")))
 (if (/= alt nil)
  (setq *altxt* alt)
 )
  )
 )
 (if (not (tblobjname "STYLE" "TRAMOS"))
  (entmake (list '(0 . "STYLE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbTextStyleTableRecord") '(2 . "TRAMOS")
 '(70 . 0) '(40 . 0.0) '(41 . 1.0) '(50 . 0.0) '(71 . 0) '(3 . "ARIAL") '(4 . "")
 )
  )
 )
 (setvar 'textsize *altxt*)
 (initget 7 "A R")
 (setq opc (getkword "Poly <Abierta o Recinto>: "))
 (if (= opc "A")
  (pln_open)
  (pln_clos)
 )
 (setvar 'osmode mod)
 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
 (prin1)
)
;;;================================================================================================
(alert "\nComando: < TP > para ejecutar")
(prin1)
Dominguez
Dominguez

Mensajes : 153
Fecha de inscripción : 20/03/2016
Edad : 74
Localización : Zaragoza (España)

A robierzo le gusta esta publicaciòn

Volver arriba Ir abajo

Rotular "dentro" de poli cerrada Empty Re: Rotular "dentro" de poli cerrada

Mensaje por eliasp Miér Ene 26, 2022 10:31 pm

Muchas gracias maestro.... seguro estará muy buena, como todo lo que compartes. La uso y comento.

Saludos

eliasp

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

Volver arriba Ir abajo

Rotular "dentro" de poli cerrada Empty Re: Rotular "dentro" de poli cerrada

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.