¿se puede generar puntos automaticamente??

Ver el tema anterior Ver el tema siguiente Ir abajo

¿se puede generar puntos automaticamente??

Mensaje por arielbnvo el Jue Abr 27, 2017 10:49 pm

Buenas tardes. Resulta que hace unos dias me toco editar un plano de un centro comercial que tenia casi 1000 modulos de estacionamiento y tenia que numerarlos y fue un problema, quedo bastante desprolijo. Por ordenanza municipal va el numero de cada modulo dentro de ciculo.

Asi que ahora estoy intentando hacer una rutina para la proxima, pero no se mucho del tema, se lo basico.  Por ejemplo me sale poner el circulo con el texto y puse una variable "cant" que serian la cantidad de modulos dando clic con el raton entre la primer y ultima linea y otra "dis" para que quede prolijamente centrado y otra "distotal" tambien con el raton. La idea era que se reparta esa medida "dis" entre "distotal" para generar los puntos donde van los circulos con el texto pero no se como se hace. No se que funcion se usa.
Probe con while y repeat pero se dibujaban sobre el ultimo punto, PT6. No se si hay alguna funcion parecida a polar o algo que genere puntos.

A ver si por favor alguien me tira una idea si se puede hacer eso y en caso que se pueda como se hace. Muchas gracias.

Código:
defunc:cocheras ()


   (setq pt1 (getpoint "\nPrimer punto: "))
   (setq pt2 (getpoint "\nSegundo punto: "))

    (setq dis (distance pt1 pt2 ))






    (setq pt3 (getpoint "\nprimer linea: "))

    (setq pt4 (getpoint "\nultim linea: "))

       (setq ang (angle pt3 pt4 ))

     (setq distotal (distance pt3 pt4 ) )
        
        (setq cant ( / distotal dis ))

        (setq centro ( / dis 2 ) )

        (setq pt5 ( polar pt3 ( + 0 ang) centro ))
        (setq pt6 (polar pt5 ( + 0 ang) dis ))

        (command "_circle"  pt5 1 )
        (command "_circle" pt6 1 )




arielbnvo

Mensajes : 8
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por saulo2016 el Vie Abr 28, 2017 3:28 pm

A mi me pareciera que seria mejor utilizar BLOQUES DINAMICOS....





Saludos
avatar
saulo2016

Mensajes : 117
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por bernie67 el Vie Abr 28, 2017 6:22 pm

Con un bloque con atributos, puedes hacerlo. Con array generas la cantidad necesaria en la dirección que determines y con la rutina ATS vas remunerando a partir del numero que desees. Irías picando cada bloque y este se iría numerando. Es manual pero sirve

;Cambia/Intercambia/Incrementa atributos de bloques.
;(c) 2006 Written by Chad A. Douglas
(defun c:ats ()
(setvar "cmdecho" 0)
(setq not_att (strcat "*** El artículo seleccionado ***" "\n no es un atributo"))
(if (= start_opp nil)
(setq start_opp "C")
)
(cond ((= start_opp "C") (setq start_opp "Change"))
((= start_opp "M") (setq start_opp "Match"))
((= start_opp "I") (setq start_opp "Increment"))
)
(princ " \nIndica una opción [Cambio/Match/Incremento] <")
(princ start_opp)
(setq start_opp_x (strcase (getstring "> :")))
(cond ((= start_opp_x "")
(cond ((= start_opp "Cambio") (setq start_opp_case "C"))
((= start_opp "Match") (setq start_opp_case "M"))
((= start_opp "Incremento") (setq start_opp_case "I"))
)
(setq start_opp start_opp_case)
)
((/= start_opp_x "") (setq start_opp start_opp_x))
)
(cond ((= start_opp "I")
(setq ascii_or_int (strcase (getstring "\nIncremento anchura [Letras/Numeros]:")))
(cond ((= ascii_or_int "N")
(setq start_num (getstring "\nNumero de comienzo? :"))
(setq incre (getint "\nIncremento entre Números: "))
(setq att_fin_num (rtos (atoi start_num) 2 0))
(setq att_num "")
(while (/= att_num nil)
(setvar "errno" 0)
(setq att_num nil)
(setq att_num (car (nentselp "\nSeleccione el texto de destino de atributo")))
(cond ((/= att_num nil)
(setq att_num_check (cdr (assoc 0 (entget att_num))))
(if (/= att_num_check "ATTRIB")
(progn (alert not_att) (setq att_num_x nil))
(setq att_num_x "go")
)
(if (/= att_num_x nil)
(progn (setq att_num_select (cdr (assoc -1 (entget att_num))))
(command "_attedit" "" "" "" "" att_num_select "_v" "_r" att_fin_num "")
(setq att_fin_num (rtos (+ incre (atoi att_fin_num)) 2 0))
)
)
)
((= (getvar "errno") 7) (setq att_num "") (princ "\n*** Nada seleccionado ***") (princ))
)
)
)
((= ascii_or_int "L")
(setq start_lett (getstring "\nLo que la carta hace usted quiere comenzar? :"))
(setq att_fin_lett_x (ascii start_lett))
(setq att_fin_lett (chr att_fin_lett_x))
(setq att_lett "")
(while (/= att_lett nil)
(setvar "errno" 0)
(setq att_lett nil)
(setq att_lett (car (nentselp "\nSeleccione el texto de destino de atributo")))
(cond ((/= att_lett nil)
(setq att_lett_check (cdr (assoc 0 (entget att_lett))))
(if (/= att_lett_check "ATTRIB")
(progn (alert not_att) (setq att_lett_x nil))
(setq att_lett_x "go")
)
(if (/= att_lett_x nil)
(progn (command "_attedit" "" "" "" "" att_lett "_v" "_r" att_fin_lett "")
(setq att_fin_lett (chr (1+ (ascii att_fin_lett))))
)
)
)
((= (getvar "errno") 7) (setq att_lett "") (princ "\n*** Nada seleccionado ***") (princ))
)
)
)
)
)
((/= start_opp "I")
(cond ((= start_opp "C")
(princ "\nQue es el nuevo valor para el atributo? <")
(princ att_match_text)
(setq att_match_text_x (getstring "> :" pause))
(cond ((= att_match_text_x "") (setq att_match_text att_match_text))
((/= att_match_text_x "")
(if (= att_match_text_x "`")
(setq att_match_text nil)
(setq att_match_text att_match_text_x)
)
)
)
)
((= start_opp "M")
(setq att_match_text_x nil)
(while (= att_match_text_x nil)
(setq att_match_text_x (car (nentselp "\nSeleccione el texto de atributo para hacer juego")))
(cond ((/= att_match_text_x nil)
(setq att_check1 (cdr (assoc 0 (entget att_match_text_x))))
(if (/= att_check1 "ATTRIB")
(progn (alert not_att) (setq att_match_text_x nil))
)
)
)
)
(setq att_match_text (cdr (assoc 1 (entget att_match_text_x))))
)
)
(setq att_2match_text2_x "")
(while (/= att_2match_text2_x nil)
(setvar "errno" 0)
(setq att_2match_text2_x nil)
(setq att_2match_text2_x (car (nentselp "\nSeleccione el texto de destino de atributo")))
(cond ((/= att_2match_text2_x nil)
(setq att_check2 (cdr (assoc 0 (entget att_2match_text2_x))))
(if (/= att_check2 "ATTRIB")
(progn (alert not_att) (setq att_2match_text2_x2 nil))
(setq att_2match_text2_x2 "go")
)
(if (/= att_2match_text2_x2 nil)
(progn (setq att_select (cdr (assoc -1 (entget att_2match_text2_x))))
(command "_attedit" "" "" "" "" att_select "_v" "_r" att_match_text "")
)
)
)
((= (getvar "errno") 7) (setq att_2match_text2_x "") (princ "\n*** Nada seleccionado ***") (princ))
)
)
)
)
(prin1)
)
avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por bernie67 el Vie Abr 28, 2017 6:27 pm

avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por bernie67 el Vie Abr 28, 2017 6:28 pm

Otra opción.
http://www.lee-mac.com/numinc.html

Saludos
Bernardo Corradine
avatar
bernie67

Mensajes : 53
Fecha de inscripción : 22/03/2016
Edad : 50
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por arielbnvo el Sáb Abr 29, 2017 8:14 pm

¡Gracias bernie y saulo!! voy a investigar el tema de los bloques dinamicos y los atributos por que lo unico que se usar es el parametro lineal, siempre que quise hacer algo no me salio.

Hoy me puse a investigar y haciendo prueba y error encontre una solucion con copy, no se si se hace asi pero funciono. Por lo menos es mas rapido y queda prolijo, despues habria que ir numerando cada modulo con las express.
Lo dejo aca por si a alguien le sirve o por ahi se lo pueda mejorar. Gracias!!!

Código:
   defunc:cocheras ()

( while
       (setq pt1 (getpoint "\nPrimer punto: "))
       (setq pt2 (getpoint "\nSegundo punto: "))

        (setq dis (distance pt1 pt2 ))






        (setq pt3 (getpoint "\nprimer linea: "))

        (setq pt4 (getpoint "\nultim linea: "))

           (setq ang (angle pt3 pt4 ))

         (setq distotal (distance pt3 pt4 ) )
            
            (setq cant ( / distotal dis ))
           (setq entero ( fix cant  ))



            (setq centro ( / dis 2 ) )

            (setq pt5 ( polar pt3 ( + 0 ang) centro ))
            (setq pt6 (polar pt5 ( + 0 ang) ( * 2 centro)  ))


            (command "_circle"  pt5 1 )

                  
                          ( setq nº (- entero 1 ))


 (repeat  nº

 (setq sel (ssget "L" ))      

 (command "_copy" sel ""  pt5 pt6 )
 
)



 (command "_text"     "U"    "MC"    pt5    1     0      "nº"    )




           (repeat   nº      




 (setq selec (ssget "L" ))      

 (command "_copy" selec ""  pt5 pt6 )
)

)


arielbnvo

Mensajes : 8
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por nolo el Dom Abr 30, 2017 6:32 pm

Precisamente hace unos días alguien me recordó que yo tenía una antigua rutina para esto
La rutina te guía para que hagas una polilinea  por donde quieras que salgan los números y luego la utiliza para encontrar el centro entre cada dos intersecciones con las líneas que marcan las plazas y dibuja allí el circulo, ademas de poner el número correlativamente.
Código:
(defun c:plazar2( / lista inicial ult htext listap lista pt x0 By Nolo _2017)
(setq ult (getvar 'osmode))
(setvar 'cmdecho 0)(setvar 'osmode 0)

(defun pon_text(punto res ang)
 (entmakex (list '(0 . "TEXT")
 (cons 10 punto)
 (cons 40 htext)
 (cons 1 res)(cons 50 ang)
 '(41 . 1.0)'(51 . 0.0)
 (cons 7 (getvar 'textstyle))
 '(71 . 0)'(72 . 4)(cons 11 punto)
))
 (entmakex (list'(0 . "CIRCLE")(cons 10 punto) (cons 40 radio)))
)

(setq radio (getreal "\nRadio del circulo :")
 radio (if radio radio 1.20)
 inicial (getreal "\nNumero inicial :")
 inicial (if inicial (- inicial 1) 0)
)
(if (> (setq htext(getvar 'textsize)) (* 2 radio))
 (progn (setq htext (* 1.2 radio))(princ"\n¡OJO! altura del -textsize- mayor que diámetro"))
)

(while (not (progn
 (princ "\nPuntos polilinea trazado guía :")
 (command "._pline")(while (> (getvar 'CmdActive) 0) (command pause))
 (setq x0 (getvar "VIEWCTR")by  (getvar "VIEWSIZE") pt (getvar 'lastpoint))
 (command "_.ZOOM" "_O" (entlast) "")
 (setq listap (mapcar'cdr(vl-remove-if'(lambda(a)(/=(car a) 10))(entget(entlast)))))
 (entdel(entlast))
 (setq listap (mapcar '(lambda(a b) (ssget "_f" (list a b))) listap (cdr listap)))
 ;;;; o mejor (ssget "_f" (list a b) '((8 . "Capa marcas")) )
 (command"_.ZOOM" "_C" x0 by)
 (setq listap (vl-remove nil listap))
)))

(foreach lista listap
(setq lista (reverse(ssnamex lista))
 lista (vl-remove-if'(lambda(a)(/=(type a)'LIST))(apply 'append lista))
 lista (mapcar '(lambda(a)(cons (distance (cadar lista) (cadr a)) (cadr a))) lista)
 lista (mapcar '(lambda(a)(cdr (nth a lista)))(vl-sort-i (mapcar 'car lista)'>))
 lista (mapcar '(lambda(a b)(mapcar '/(mapcar '+ a b) '(2 2))) lista (cdr lista))
)

 (mapcar '(lambda(a)
 (pon_text a (rtos(setq inicial(+ inicial 1)) 2 0) 0. )
 ) lista )
)

(mapcar 'setvar '(osmode cmdecho)  (list ult 1))
(princ)
)
Espero te sirva

Un saludo


Última edición por nolo el Dom Abr 30, 2017 10:22 pm, editado 1 vez

nolo

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por arielbnvo el Dom Abr 30, 2017 9:38 pm

¡Esta buenisima!!! es justamente lo que buscaba. Muchas gracias !!!

arielbnvo

Mensajes : 8
Fecha de inscripción : 21/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por nolo el Dom Abr 30, 2017 10:25 pm

De nada, se puede mejorar pero habría que ver como están las capas organizas y las escalas de trabajo, porque ahora cualquier intersección la considera como un lateral de una plaza y puede producir errores.

Un saludo

nolo

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por cybor el Mar Mayo 02, 2017 5:05 pm

Hola, muy interesante tu rutina nolo, pero podría tener la opción de generar si o no el circulo, muchas gracias.

cybor

Mensajes : 20
Fecha de inscripción : 16/05/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por nolo el Mar Mayo 02, 2017 11:24 pm

Es muy fácil, solo tienes que poner puntos y comas delante de esta línea, así ...
Código:
;;; (entmakex (list'(0 . "CIRCLE")(cons 10 punto) (cons 40 radio)))

Un saludo

nolo

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: ¿se puede generar puntos automaticamente??

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

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