AYUDA con LISP CENTROIDE
4 participantes
Página 1 de 1.
AYUDA con LISP CENTROIDE
Buenas a todos quería consultar si hay un lips que calcula el centroide de cualquier Polígono y que coloque un texto del las coordenadas del centro de la figura irregular, alguien me pudiera ayudar con un lips para hallar el centroide por favor. se los agradecería mucho
adjunto la imagen como quedaría y el dwg
´
https://drive.google.com/file/d/1oiPES5FgEdOL9cskNXPgT0vWgUR85Vq1/view?usp=sharing
adjunto la imagen como quedaría y el dwg
´
ENLACE DEL ARCHIVO
https://drive.google.com/file/d/1oiPES5FgEdOL9cskNXPgT0vWgUR85Vq1/view?usp=sharing
Re: AYUDA con LISP CENTROIDE
Esta de LeeMac lo hace cuando es una polilinea
- Código:
;; Polygon Centroid - Lee Mac
;; Returns the WCS Centroid of an LWPolyline Polygon Entity
(defun LM:PolyCentroid ( e / l )
(foreach x (setq e (entget e))
(if (= 10 (car x)) (setq l (cons (cdr x) l)))
)
(
(lambda ( a )
(if (not (equal 0.0 a 1e-8))
(trans
(mapcar '/
(apply 'mapcar
(cons '+
(mapcar
(function
(lambda ( a b )
(
(lambda ( m )
(mapcar
(function
(lambda ( c d ) (* (+ c d) m))
)
a b
)
)
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
)
l (cons (last l) l)
)
)
)
(list a a)
)
(cdr (assoc 210 e)) 0
)
)
)
(* 3.0
(apply '+
(mapcar
(function
(lambda ( a b )
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
l (cons (last l) l)
)
)
)
)
)
(defun c:centroideleemac ( / ss )
(if
(setq ss
(ssget "_+.:E:S:L"
'(
(0 . "LWPOLYLINE")
(-4 . "&=")
(70 . 1)
(-4 . "<NOT")
(-4 . "<>")
(42 . 0.0)
(-4 . "NOT>")
)
)
)
(entmake (list '(0 . "POINT") (cons 10 (LM:PolyCentroid (ssname ss 0)))))
)
(princ)
)
A jcanizalesc le gusta esta publicaciòn
Re: AYUDA con LISP CENTROIDE
Gracias estimados Marco Jacinto y robierzo me sirvió de mucho les agradezco mucho por su ayuda.
no se si es mucho pedir se podría modificar esas rutinas y se pueda agregar texto de las coordenadas del centroide de la figura como este nomenclatura de este ejemplo
E = 238515.45
N= 8325656.85
gracias
no se si es mucho pedir se podría modificar esas rutinas y se pueda agregar texto de las coordenadas del centroide de la figura como este nomenclatura de este ejemplo
E = 238515.45
N= 8325656.85
gracias
Re: AYUDA con LISP CENTROIDE
en esta línea
Y con eso debería hacer lo que requieres.
Saludos
- Código:
(entmake (list '(0 . "POINT") (cons 10 (LM:PolyCentroid (ssname ss 0)))))
- Código:
(setq pt (LM:PolyCentroid (ssname ss 0))
)
(command "Mtext" pause pause (strcat "E = " (rtos (car pt)2 2) "\nN = " (rtos (cadr pt)2 2))"")
Y con eso debería hacer lo que requieres.
Saludos
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: AYUDA con LISP CENTROIDE
Gracias amigo Marco Jacinto por su ayuda me ausente en responder, pero en esto de la programación soy algo novato y no se mucho he estado intentando ingresar esos códigos que me envió al foro para que pusiera los textos de las coordenadas del centroide, pero me sale error podría porfavor ayudarme en escribir correctamente la esos códigos.
se lo agradecería infinitamente
gracias
se lo agradecería infinitamente
gracias
Re: AYUDA con LISP CENTROIDE
Así me funciona perfectamente.
- Código:
;; Polygon Centroid - Lee Mac
;; Returns the WCS Centroid of an LWPolyline Polygon Entity
(defun LM:PolyCentroid ( e / l )
(foreach x (setq e (entget e))
(if (= 10 (car x)) (setq l (cons (cdr x) l)))
)
(
(lambda ( a )
(if (not (equal 0.0 a 1e-8))
(trans
(mapcar '/
(apply 'mapcar
(cons '+
(mapcar
(function
(lambda ( a b )
(
(lambda ( m )
(mapcar
(function
(lambda ( c d ) (* (+ c d) m))
)
a b
)
)
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
)
l (cons (last l) l)
)
)
)
(list a a)
)
(cdr (assoc 210 e)) 0
)
)
)
(* 3.0
(apply '+
(mapcar
(function
(lambda ( a b )
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
l (cons (last l) l)
)
)
)
)
)
(DEFUN c:centroideleemac (/ ss)
(IF
(SETQ ss
(SSGET "_+.:E:S:L"
'(
(0 . "LWPOLYLINE")
(-4 . "&=")
(70 . 1)
(-4 . "<NOT")
(-4 . "<>")
(42 . 0.0)
(-4 . "NOT>")
)
)
)
;;;
;;;)
(COMMAND "_.Mtext"
(setq pt (LM:PolyCentroid (ssname ss 0)))
pt
(STRCAT "E = "
(RTOS (CAR pt) 2 2)
"\nN = "
(RTOS (CADR pt) 2 2)
)
""
)
;;; (entmake (list '(0 . "POINT") (cons 10 (LM:PolyCentroid (ssname ss
;;; 0)))))
)
(PRINC)
)
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
A robierzo le gusta esta publicaciòn
Re: AYUDA con LISP CENTROIDE
Excelente amigo era exactamente lo que necesitaba, yo lo estaba ingresando mal el código.
se lo agradezco infinitamente gracias por su ayuda a usted y a la comunidad de acad hispano, muchas gracias
se lo agradezco infinitamente gracias por su ayuda a usted y a la comunidad de acad hispano, muchas gracias
A Marco Jacinto le gusta esta publicaciòn
Re: AYUDA con LISP CENTROIDE
Buen día a todos.
Se que la solución ya está dada y que llego tarde.
Usando la función de LeeMac, tengo este lisp:
Con este código, se selecciona un punto dentro de un polígono cerrado, no necesariamente tiene que ser una polilínea.
Saludos.
Se que la solución ya está dada y que llego tarde.
Usando la función de LeeMac, tengo este lisp:
- Código:
(defun c:cgen (/)
(vl-load-com)
(setq osm (getvar "osmode"))
(setvar "osmode" 9)
(setq angbase (getvar "angbase"))
(setvar "angbase" (* pi 0.5))
(setq angdir (getvar "angdir"))
(setvar "angdir" 1)
(setvar "dimassoc" 1)
(setvar "lwdisplay" 1)
(setvar "pdmode" 32)
(vl-cmdf "_-STYLE" "Romans" "romans.shx" 0 1.0 0 "NO" "NO" "")
(setq esc 500)
(setq msc (/ 1000 esc))
(setq ht (getvar "TEXTSIZE"))
(vl-cmdf "_osnap" "_off")
;***************************
(setq ptt (getpoint "\nPique dentro de un area cerrada "))
(vl-cmdf "_boundary" "a" "i" "n" "" "" ptt "")
(setq pl (entlast))
(setq poly pl)
;***************************
;(setq poly (car (entsel "\nSeleccione la Polilinea 2D: ")))
(setq int (LM:PolyCentroid poly))
(setq cxint (nth 0 int))
(setq cyint (nth 1 int))
(vl-cmdf "point" int)
(vl-cmdf "_TEXT" "_j" "_c" int ht "90" (strcat " E= " (rtos cxint 2 2) " N= " (rtos cyint 2 2)))
(vl-cmdf "_erase" pl "")
(setvar "osmode" osm)
)
;***********************************************************
(defun LM:PolyCentroid ( e / l )
(foreach x (setq e (entget e))
(if (= 10 (car x)) (setq l (cons (cdr x) l)))
)
(
(lambda ( a )
(if (not (equal 0.0 a 1e-8))
(trans
(mapcar '/
(apply 'mapcar
(cons '+
(mapcar
(function
(lambda ( a b )
(
(lambda ( m )
(mapcar
(function
(lambda ( c d ) (* (+ c d) m))
)
a b
)
)
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
)
l (cons (last l) l)
)
)
)
(list a a)
)
(cdr (assoc 210 e)) 0
)
)
)
(* 3.0
(apply '+
(mapcar
(function
(lambda ( a b )
(- (* (car a) (cadr b)) (* (car b) (cadr a)))
)
)
l (cons (last l) l)
)
)
)
)
)
;**************************************************************
Con este código, se selecciona un punto dentro de un polígono cerrado, no necesariamente tiene que ser una polilínea.
Saludos.
José Francisco- Mensajes : 46
Fecha de inscripción : 30/03/2016
A robierzo le gusta esta publicaciòn
Temas similares
» Ayuda con un lisp
» AYUDA A MODIFICAR LISP
» Ayuda con este lisp
» AYUDA LISP NO CORRE
» Ayuda con rutina lisp de Coordenadas
» AYUDA A MODIFICAR LISP
» Ayuda con este lisp
» AYUDA LISP NO CORRE
» Ayuda con rutina lisp de Coordenadas
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|