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

Resultado con nil

3 participantes

Ir abajo

Resultado con nil Empty Resultado con nil

Mensaje por eliasp Vie Ene 05, 2024 3:58 am

Buen día señores.

Sigo batallando con los hatch que algunos se generan sin el valor del área. Como no pude resolver ese punto, decidí hacer una rutina para "pintar" de otro color los hatch sin área, pero al momento de obtener el área obviamente marca error. Me imagino que debe haber alguna forma de "cachar" el error, pero la desconozco.

Código:

(DEFUN C:selrecorte()
  (inicio)
  (setq ind 0)
  (setq pto1(getpoint "Pto1..."))
  (setq pto2(getcorner pto1 "Punto 2"))
  (setq conj1(ssget "_W" pto1 pto2(list
  (cons 0 "hatch")
  (cons 8 "Recorte_hatch")
  )))
  (setq cuantos(sslength conj1))
  (repeat cuantos
    (setq ent(ssname conj ind))
    (setq obj(vlax-ename->vla-object ent))
    (if(=(setq area(vlax-get-property obj 'area))nil)
      (vla-put-color obj 1)
      )
    (setq ind(1+ ind))
    )
  (SSSETFIRST conj1 conj1)
  )
La intención es que si encuentro un hatch si área lo pinte de rojo y luego rehacerlo.

Espero puedan ayudarme con esto.
Saludos y gracias

eliasp

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

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por robierzo Dom Ene 07, 2024 7:47 pm

Así , de primeras, donde pone
(setq ent(ssname conj ind))
debería poner
(setq ent(ssname conj1 ind))

Y yo pondría esto
(if(=(vlax-get-property obj 'area)nil) (vla-put-color obj 1))
robierzo
robierzo

Mensajes : 103
Fecha de inscripción : 17/03/2016
Localización : La Coruña

http://www.selmotopografia.es

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por eliasp Lun Ene 08, 2024 7:10 pm

Muchas gracias Robierzo...

Además del claro error en el nombre del conjunto de selección... le encuentro mucho sentido a la sugerencia que me haces... Espero hoy por la noche tener ya varios hayches generados y aplico tu sugerencia. Seguro funcionará como se espera. Saludos y gracias......

eliasp

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

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por Gerardo Calvo Miér Ene 10, 2024 8:35 pm

Yo lo pondría así: (if (null (vlax-get-property obj 'area))... XD pero siempre es lo mismo.

En todo caso comento por curiosidad, para preguntar que haces con los hatches que resaltas o cambias de color? recrearlos? y si viniera al caso para recordar que siempre hay que ir al origen y con un poco se suerte podás hacer algo para prevenir los hatches a los que AutoCad no les sabe calcular el área.

Todo depende de como los creas, que tipo de contornos usas y si los requieres asociativos vinculados justo a esos contornos. Me parece por ejemplo que si haces una rutina que al picar en puntos internos en vez de aplicar el hatch cree polígonos con la función bpoly de autolisp, y luego creas el hatch utilizando esos polígonos y ya luego si quieres los borras, pues ese hatch difícilmente tenga las características conocidas que hacen que AutoCad no pueda calcularle el área (siempre y cuando no hayan contornos con splines, eso si que es un problema)

Gerardo Calvo

Mensajes : 46
Fecha de inscripción : 29/10/2019

A robierzo le gusta esta publicaciòn

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por eliasp Miér Ene 10, 2024 10:48 pm

Primeramente, gracias por interesarte en mi problema, estimado maestro Gerardo.

Ahora, estoy trabajando en secciones transversales y se deben generar ciertos polígonos cerrados con formas "caprichosas". El maestro DEVITG, me hizo favor de pasar una rutina que genera un tramo de polilínea en base a una existente, cortando en dos puntos extremos. Con esta poli creada, voy creando las líneas necesarias para generar el polígono y luego lo unos mediante pedit.... y a este polígono le asigno el hatch mediante (entlast).
El problema es que "algunos de ellos no tienen área" y en un paso posterior, cuando estoy leyendo las áreas para el reporte, es donde me truena, por eso buscaba la forma de detectar el problema desde antes.

Este trabajo, archivos y rutinas, los tengo en mi casa (que es tu casa) "alanoche" que llegue, hago un pequeño video explicativo para que quede mas claro.

Saludos y gracias.......

eliasp

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

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por eliasp Jue Ene 11, 2024 4:59 am

Adjunto liga de wetransfer donde se puede descargar el archivo de trabajo, la rutina un video donde se genera el polígono en cuestión y otro donde aplico la rutina que el maestro Gerardo me generó para arreglar textos en las mismas secciones.

Espero sea suficientemente claro.

Gracias

https://we.tl/t-0m3lQOKgug

eliasp

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

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por Gerardo Calvo Sáb Ene 20, 2024 8:42 am

Hola Elías.
Fijate que he estado muy enredado y hasta ahora pude sacar un rato para ver lo tuyo.

Y pues con los hatches veo dos posibles problemas.
1-Que el comando cajonder puede dejar una parte de la polilínea traslapándose con si misma. (me parece que tiene que ver con la función "hace-POLY-ENTRE-2-PUNTOS" y el sentido en que está dibujada la polilínea del terreno)
2 Que según los puntos que picas de inicio y final a veces puede que no se cierre la polilínea

El problema real es crear el hatch seleccionando la polilínea como contorno, porque cuando esta está cerrada o cruzada el hatch se crea pero AutoCad no calcula el área. Lo ideal en estos casos si no te interesa el hatch asociativo, es calcular los puntos del contorno, crear la poly cerrada con esos puntos y por aparte crear el hatch con esos puntos también.

En fin, yo (con todo el respeto y admiración que le guardo al viejo cascarrabias de Gabriel) me di a la tarea de hacer una versión de la rutina que haga el seguimiento de "hace-POLY-ENTRE-2-PUNTOS" de una forma más segura y de paso que no pida los puntos de inicio y final (lo cual me parece redundante ya que tienes las líneas verticales auxiliares)
De paso es un solo comando para derecho e izquierdo, pues si el "fin de SR" está a la izquierda o derecha del punto donde se selecciona la linea de SR se puede saber para que lado vamos

En fin, hice pocas pruebas, pero al menos en las 3 secciones que adjuntaste los hatches salen limpios, por lo tanto se muestra el área de todos, hacé tus pruebas a ver si te sirve


Código:
(defun c:cajon ( / gc:YdeX gc:subpl gc:ptstrz sel X0 L2 L3 ld x1 x2 LP cn ps)
   (defun gc:YdeX (pt1 pt2 X)
      (inters pt1 pt2 (list x 0.) (list x 1.) nil)
   )
   (defun gc:subpl (L X1 X2 / ini )
      (if (< (caar L) (car (last L)))
         (setq L (reverse L))
      )
      (while (> (caar L) X2)
         (setq ini (car L)
               L (cdr L)
         )
      )
      (if (and   L ini (not (equal (car ini) (caar L) 0.0001)))
         (setq L (cons (gc:YdeX ini (car L) x2) L))
      )
      (setq ini nil
            L (reverse L)
      )
      (while (< (caar L) X1)
         (setq ini (car L)
               L (cdr L)
         )
      )
      (if (and ini L (not (equal (car ini) (caar L) 0.0001)))
         (setq L (cons (gc:YdeX ini (car L) x1) L))
      )
      L
   )
   (defun gc:ptstrz (nent x1 x2 / typ lent Lp)
      (if (= (setq typ (cdr (assoc 0 (setq lent (entget nent))))) "LINE")
         (list
            (gc:YdeX (cdr (assoc 10 lent)) (cdr (assoc 11 lent)) x1)
            (gc:YdeX (cdr (assoc 10 lent)) (cdr (assoc 11 lent)) x2)
         )
         (if (= typ "LWPOLYLINE")
            (progn
               (setq Lp   (mapcar
                           'cdr
                           (vl-remove-if
                              '(lambda (A) (/= (car A) 10 ))
                              lent
                           )
                        )
               )
               (if (> (caar Lp) x1)
                  (setq Lp (cons
                              (gc:YdeX (car Lp) (cadr Lp) x1)
                              (cdr Lp)
                           )
                  )
               )
               (if (< (car (last Lp)) x2)
                  (setq Lp (reverse LP)
                        Lp (reverse
                              (cons
                                 (gc:YdeX (car Lp) (cadr Lp) x2)
                                 (cdr Lp)
                              )
                           )
                  )
               )
               (gc:subpl Lp x1 x2)
            )
         )
      )
   )
   (if   (null (tblsearch "LAYER" "Recorte"))
         (entmake   '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord")
                    (2 . "Recorte") (62 . 3) (6 . "CONTINUOUS") (70 . 0)))
   )
   (if   (null (tblsearch "LAYER" "Recorte_hatch"))
         (entmake   '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord")
                    (2 . "Recorte_hatch") (62 . 3) (6 . "CONTINUOUS") (70 . 0)))
   )
   (while (setq sel (entsel  "Línea SR"))
      (setq X0   (car (getpoint "\n Fin de SR..."))
            L2   (car (entsel  "\n Línea Intermedia..."))
            L3   (car (entsel  "\n Línea Superior.."))
            ld   (> X0 (caadr sel)) ;T=lado izquierdo
            x1   ((if ld + -) X0 0.6)
            x2   ((if ld + -) X0 1.1)
            LP   (append
                  (gc:ptstrz L3 (min X0 X2) (max X0 X2))
                  (reverse
                     (if ld
                        (append
                           (gc:ptstrz (car sel) x0 x1)
                           (gc:ptstrz L2 x1 x2)
                        )
                        (append
                           (gc:ptstrz L2 x2 x1)
                           (gc:ptstrz (car sel) x1 x0)
                        )
                     )
                  )
               )
            cn   (length LP)
            ps   (mapcar '(lambda(pt) (cons 10 pt)) LP)
      )
      (entmake
         (append
            '(   (0 . "LWPOLYLINE") (100 . "AcDbEntity") (410 . "Model") (8 . "Recorte")
               (62 . 256) (6 . "Bylayer") (48 . 1.) (100 . "AcDbPolyline") )
            (list (cons 90 cn))
            '((70 . 1) (43 . 0.005))
            ps
            '((210 0.0 0.0 1.0))
         )
      )
      (entmake
         (append
            '((0 . "HATCH") (100 . "AcDbEntity") (410 . "Model") (8 . "Recorte_hatch") (62 . 3) (100 . "AcDbHatch")
              (10 0.0 0.0 0.0)(210 0.0 0.0 1.0) (2 . "_ANSI31") (70 . 0) (71 . 0) (91 . 1) (92 . 3) (72 . 0) (73 . 1))
            (list (cons 93 cn))
            ps
            '((97 . 0) (75 . 0) (76 . 1) (52 . 0.) (41 . 0.01) (77 . 0) (78 . 1) (53 . 0.785398)
              (43 . 0.) (44 . 0.) (45 . -0.0224506) (46 . 0.0224506) (79 . 0)(98 . 1) (10 0.0 0.0 0.0) )
         )
      )
   )
)

Gerardo Calvo

Mensajes : 46
Fecha de inscripción : 29/10/2019

A robierzo le gusta esta publicaciòn

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por eliasp Dom Ene 21, 2024 6:05 pm

Wow.... muuchas gracias maestro. Aún me queda por trabajar algunas secciones.... como 400. Seguro estas correcciones me vendrán muy bien. Debo aclarar maestro que en algún momento intenté hacer esas observaciones, la de en una sola rutina orientando a la izquierda o derecha, también que la rutina "corte sola" el tramo, sin embargo "principalmente" la premura del tiempo y la falta de experienca me impedían dedicarle el tiempo suficiente.

En fin, muchas gracias maestro, en cuanto procese algunas secciones, comentaré el resultado y seguramente será el esperado.

Saludos y gracias

eliasp

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

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por eliasp Lun Ene 22, 2024 5:16 pm

Buen día.
Efectivamente, he hecho algo así como 50 figuras y en cada una se puede leer el área del hatch perfectamente, gracias maestro Gerardo.

Saludos

eliasp

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

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por Gerardo Calvo Lun Ene 22, 2024 6:20 pm

buenísimo que te ayude.

Saludos hermano

Gerardo Calvo

Mensajes : 46
Fecha de inscripción : 29/10/2019

Volver arriba Ir abajo

Resultado con nil Empty Re: Resultado con nil

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


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