¿se puede generar puntos automaticamente??
5 participantes
Página 1 de 1.
¿se puede generar puntos automaticamente??
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.
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 : 20
Fecha de inscripción : 21/03/2016
Re: ¿se puede generar puntos automaticamente??
A mi me pareciera que seria mejor utilizar BLOQUES DINAMICOS....
Saludos
Saludos
saulo2016- Mensajes : 210
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: ¿se puede generar puntos automaticamente??
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)
)
;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)
)
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
Re: ¿se puede generar puntos automaticamente??
O pega una chequeada a este enlace
http://www.cadforum.cz/cadforum_en/autonumbering-of-autocad-blocks-incremental-counter-tip6678
http://www.cadforum.cz/cadforum_en/autonumbering-of-autocad-blocks-incremental-counter-tip6678
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
bernie67- Mensajes : 98
Fecha de inscripción : 22/03/2016
Edad : 56
Localización : Bogota DC-Colombia
Re: ¿se puede generar puntos automaticamente??
¡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!!!
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 : 20
Fecha de inscripción : 21/03/2016
Re: ¿se puede generar puntos automaticamente??
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.
Un saludo
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)
)
Un saludo
Última edición por nolo el Dom Abr 30, 2017 10:22 pm, editado 1 vez
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: ¿se puede generar puntos automaticamente??
¡Esta buenisima!!! es justamente lo que buscaba. Muchas gracias !!!
arielbnvo- Mensajes : 20
Fecha de inscripción : 21/03/2016
Re: ¿se puede generar puntos automaticamente??
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
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: ¿se puede generar puntos automaticamente??
Hola, muy interesante tu rutina nolo, pero podría tener la opción de generar si o no el circulo, muchas gracias.
cyberactive- Mensajes : 28
Fecha de inscripción : 16/05/2016
Re: ¿se puede generar puntos automaticamente??
Es muy fácil, solo tienes que poner puntos y comas delante de esta línea, así ...
Un saludo
- Código:
;;; (entmakex (list'(0 . "CIRCLE")(cons 10 punto) (cons 40 radio)))
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Temas similares
» ERROR en un LIPS para escalar en autocad
» Ayuda y consejo con DCL
» Generar Cuadrado con entmake
» Generar boundary "exterior"
» ¿se puede ingresar un valor al comando getreal desde excel?
» Ayuda y consejo con DCL
» Generar Cuadrado con entmake
» Generar boundary "exterior"
» ¿se puede ingresar un valor al comando getreal desde excel?
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|