Ayuda y consejo con DCL
2 participantes
Página 1 de 1.
Ayuda y consejo con DCL
Buen día a todos.
De nuevo por aquí molestando.
Pasa que quiero correr antes de empezar a caminar y me he puesto a “jugar” un poco con un cuadro de dialogo para una rutina. He buscado ejemplos y más ejemplos y he llegado a esto:
El LISP
El DCL
El anterior lisp pide seleccionar un arco y de ese arco se obtienen los elementos de la curva : Arco Cuerda Radio Delta Area.
Sé que este cuadro de dialogo puede mejorarse en un todo y si es posible modificarlo para que quede mejor les agradecería; por el lisp pero sobre todo para entender un poco la programación en dcl
Ahora mi pregunta:
Es posible colocar dentro del lisp el dcl para tener un solo archivo?
Les agradezco el tiempo y la ayuda que me puedan dar
De nuevo por aquí molestando.
Pasa que quiero correr antes de empezar a caminar y me he puesto a “jugar” un poco con un cuadro de dialogo para una rutina. He buscado ejemplos y más ejemplos y he llegado a esto:
El LISP
- Código:
(defun c:tec ()
(setq dcl_id (load_dialog "tec.dcl"))
(if (< dcl_id 0)
(progn
(alert "The tec.DCL file could not be loaded.")
(exit)
)
)
(if (not (new_dialog "tec" dcl_id))
(progn
(alert
"DCL file loaded but not definition, internal problem with files"
)
(exit)
)
)
(setgraphvars)
(action_tile "dsh" "(savevars) (done_dialog 2)")
(action_tile "dsv" "(savevars) (done_dialog 3)")
(action_tile "cancel" "(done_dialog 0)")
(ACTION_TILE "Def1" "(resetgraph)")
(setq ddiag (start_dialog))
(unload_dialog dcl_id)
(if (= ddiag 2)
(dcuh)
)
(if (= ddiag 3)
(dcuv)
)
)
(defun savevars ()
(setq escala (atof (get_tile "escala")))
)
(defun setgraphvars ()
(if escala
(set_tile "escala" (rtos escala 2 2))
(set_tile "escala" "500")
)
)
(defun resetgraph ()
(set_tile "escala" "500")
)
(defun dcuh (/ msc ht curva obj rcurva area cuerda
delta grados minutos grd mint pt x1
y1 y2 pt1
)
(vl-load-com)
(vl-cmdf "setvar" "angdir" "1")
(vl-cmdf "setvar" "angbase" "270")
(setq esc escala)
(setq msc (/ 1000 esc))
(setq ht (/ 2 msc))
;;el arco como entidad de Acad
(setq curva (entsel "\nSeleccione curva: "))
;;el arco como objeto de Acad
(setq obj (vlax-ename->vla-object (car curva)))
;;propiedad radio del objeto arco
(setq rcurva (vla-get-radius obj))
;;propiedad área del objeto arco
(setq area (vlax-curve-getarea obj))
;;propiedad longitud del objeto arco entre Inicio y Fin de curva
(setq
arco (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj))
)
;;distancia entre Punto inic y Punto final = cuerda del arco
(setq cuerda (distance
(vlax-curve-getStartPoint Obj)
;;punto inicial arco
(vlax-curve-getEndPoint Obj)
;;punto final arco
)
)
(setq
delta
(* 180
(/
(setq
delta (* 2
(atan (/ (setq a (/ cuerda 2))
(sqrt (- (* rcurva rcurva) (* a a)))
)
)
)
)
pi
)
)
)
(setq grados (fix delta))
(setq minutos (* (- delta grados) 60))
(setq grd (itoa grados))
(setq mint (rtos minutos 2 1))
(setq radio (strcat "Radio= "
(rtos rcurva 2 2)
"m"
" Delta= "
grd
"%%d"
" "
mint
"'"
" Arco= "
(rtos arco 2 2)
"m"
" Cuerda= "
(rtos Cuerda 2 2)
"m"
" Area= "
(rtos area 2 2)
"m²"
)
)
(setq pt (getpoint "\nSeleccione punto base del texto: "))
(setq x1 (nth 0 pt))
(setq y1 (nth 1 pt))
(setq p (* ht 2))
(setq y2 (- y1 p))
(setq pt1 (list x1 y2))
(vl-cmdf "_osnap" "OFF" "")
(vl-cmdf "_text" pt ht "90" "Datos de Curva")
(vl-cmdf "_text" pt1 ht "90" radio)
(princ)
)
;********************************************************
(DEFUN dcuv (/ cont hn rotu msc fsc ht curva
rcurva area arco cuerda delta grados minutos
grd mint punto1 cont s1 s2 s3 s4
s5 s6 s7 y1 E1 N1 E N
ptx1 punto3 punto4 D ptx2 punto5 punto6 punto7
punto8 punto9 punto10
)
(vl-load-com)
(setvar "CMDECHO" 0)
(vl-cmdf "setvar" "angdir" "1")
(vl-cmdf "setvar" "angbase" "270")
(setq esc escala)
(setq msc (/ 1000 esc))
(setq fsc (/ esc 1000))
(setq ht (/ 2 msc))
;;el arco como entidad de Acad
(setq curva (entsel "\nSeleccione curva: "))
;;el arco como objeto de Acad
(setq obj (vlax-ename->vla-object (car curva)))
;;propiedad radio del objeto arco
(setq rcurva (vla-get-radius obj))
;;propiedad área del objeto arco
(setq area (vlax-curve-getarea obj))
;;propiedad longitud del objeto arco entre Inicio y Fin de curva
(setq
arco (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj))
)
;;distancia entre Punto inic y Punto final = cuerda del arco
(setq cuerda (distance
(vlax-curve-getStartPoint Obj)
;;punto inicial arco
(vlax-curve-getEndPoint Obj)
;;punto final arco
)
)
(setq
delta
(* 180
(/
(setq
delta (* 2
(atan (/ (setq a (/ cuerda 2))
(sqrt (- (* rcurva rcurva) (* a a)))
)
)
)
)
pi
)
)
)
(setq grados (fix delta))
(setq minutos (* (- delta grados) 60))
(setq grd (itoa grados))
(setq mint (rtos minutos 2 1))
(vl-cmdf "style" "romans" "ROMANS.SHX" "" "" 0 "" "" "")
(vl-cmdf "_osnap" "OFF")
;(setq linea (getstring esc "\nLinea : "))
(setq punto1 (getpoint "\nEn que punto quiero la tabla: "))
(setq x1 (nth 0 punto1))
(setq y1 (nth 1 punto1))
(setq cont 1)
(setq s1 (* 35.0 fsc))
(setq s2 (* 6.0 fsc))
(setq s3 (* 15.0 fsc))
(setq s4 (* 3.0 fsc))
(setq s5 (* 4.0 fsc))
(setq s6 (* 6.0 fsc))
(setq s7 (* 32.50 fsc))
(setq s8 (* 25.0 fsc))
(setq punto2 (polar punto1 0 s1))
(setq y1 (- y1 s2))
(setq E1 (nth 0 punto1))
(setq N1 (nth 1 punto1))
(command "color" "4")
(setq E (+ E1 s4))
(setq N (- N1 s5))
(setq ptx1 (list E N))
(vl-cmdf "_text" ptx1 ht "90" "Datos de Curva")
(setq punto3 (list x1 y1))
(setq punto4 (polar punto3 0 s1))
(command "line" punto3 punto4 "")
(setq E1 (nth 0 punto3))
(setq N1 (nth 1 punto3))
(setq D (+ E1 s7))
(setq W (+ E1 S8))
(setq E (+ E1 s4))
(setq N (- N1 s5))
(setq ptx0 (list W N))
(setq ptx1 (list E N))
(setq ptx2 (list D N))
(command "color" "bylayer")
(vl-cmdf "_text" ptx1 ht "90" "Linea ")
;(vl-cmdf "_text" "C" ptx0 ht "90" linea)
(setq ptx2 (list D N))
(setq N (- N s6))
(setq ptx1 (list E N))
(vl-cmdf "_text" ptx1 ht "90" "Delta ")
(setq ptx2 (list D N))
(vl-cmdf "_text"
"R"
ptx2
ht
"90"
(strcat grd "%%d" " " mint "'")
)
(setq N (- N s6))
(setq ptx1 (list E N))
(vl-cmdf "_text" ptx1 ht "90" "Radio ")
(setq ptx2 (list D N))
(vl-cmdf "_text"
"R"
ptx2
ht
"90"
(strcat (rtos rcurva 2 2) "m")
)
(setq N (- N s6))
(setq ptx1 (list E N))
(vl-cmdf "_text" ptx1 ht "90" "Curva ")
(setq ptx2 (list D N))
(vl-cmdf "_text"
"R"
ptx2
ht
"90"
(strcat (rtos arco 2 2) "m")
)
(setq N (- N s6))
(setq ptx1 (list E N))
(vl-cmdf "_text" ptx1 ht "90" "Cuerda ")
(setq ptx2 (list D N))
(vl-cmdf "_text"
"R"
ptx2
ht
"90"
(strcat (rtos cuerda 2 2) "m")
)
(setq N (- N s6))
(setq ptx1 (list E N))
(vl-cmdf "_text" ptx1 ht "90" "Area ")
(setq ptx2 (list D N))
(vl-cmdf "_text"
"R"
ptx2
ht
"90"
(strcat (rtos area 2 2) "m²")
)
(while (< cont 6)
(setq y1 (- y1 s2))
(setq punto5 (list x1 y1))
(setq punto6 (polar punto5 0 s1))
(command "line" punto5 punto6 "")
(setq cont (+ cont 1))
)
(setq y1 (- y1 s2))
(setq punto7 (list x1 y1))
(setq punto8 (polar punto7 0 s1))
(setq punto9 (polar punto3 0 s3))
(setq punto10 (polar punto7 0 s3))
(command "color" "4")
(command "line" punto9 punto10 "")
(command "color" "5")
(command "pline" punto1 punto2 punto8 punto7 punto1 "")
(command "color" "bylayer")
(SETVAR "OSMODE" 45)
)
El DCL
- Código:
tec:dialog {
label = " Datos de Curva Horizontal ";
:row {
:edit_box {
label = " Escala 1 :";fixed_width=true;alignment=centered;
key ="escala";}
}
:row {
:button {
key = "dsh";
label = " Datos en sentido Horizontal ";
is_default = false; }
:button {
key = "dsv";
label = " Datos en sentido Vertical";
is_default = false; }
}
: boxed_row {
: button {
key = "cancel";
label = "Cancel ";fixed_width=true;alignment=centered;
is_default = false;
is_cancel = true; }
:button {
label="De&fecto";fixed_width=true;alignment=centered;
key="Def1";}
}
}
El anterior lisp pide seleccionar un arco y de ese arco se obtienen los elementos de la curva : Arco Cuerda Radio Delta Area.
Sé que este cuadro de dialogo puede mejorarse en un todo y si es posible modificarlo para que quede mejor les agradecería; por el lisp pero sobre todo para entender un poco la programación en dcl
Ahora mi pregunta:
Es posible colocar dentro del lisp el dcl para tener un solo archivo?
Les agradezco el tiempo y la ayuda que me puedan dar
José Francisco- Mensajes : 46
Fecha de inscripción : 30/03/2016
Claro que se puede
Naturalmente que se puede fusionar un archivo.DCL en un archivo.LSP de hecho yo ya nunca mas hago los programas por separado.
Un saludo
Un saludo
Dominguez- Mensajes : 151
Fecha de inscripción : 20/03/2016
Edad : 74
Localización : Zaragoza (España)
Re: Ayuda y consejo con DCL
Buen día para todos.
Señor Domiguez, muchas gracias por su respuesta, y una pregunta:
Le es posible compartir un par de ejemplos, en código abierto, que tengan fusionados el LISP y el DCL?
Le agradezco su tiempo y la ayuda que pueda brindarme.
Saludos
Señor Domiguez, muchas gracias por su respuesta, y una pregunta:
Le es posible compartir un par de ejemplos, en código abierto, que tengan fusionados el LISP y el DCL?
Le agradezco su tiempo y la ayuda que pueda brindarme.
Saludos
José Francisco- Mensajes : 46
Fecha de inscripción : 30/03/2016
Re: Ayuda y consejo con DCL
José Francisco escribió:Buen día para todos.
Señor Domiguez, muchas gracias por su respuesta, y una pregunta:
Le es posible compartir un par de ejemplos, en código abierto, que tengan fusionados el LISP y el DCL?
Le agradezco su tiempo y la ayuda que pueda brindarme.
Saludos
Pues aqui tienes lo que quieres, te lo he arreglado un poco, pero no se tus gustos, asi que en tus manos dejo las mejoras que quieras realizar.
Un saludo
- Código:
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun dialog_tec ()
(setq file (vl-filename-mktemp nil nil ".dcl"))
(setq indi (open file "W"))
(foreach str ;
(list "temp:dialog{label=\"DATOS DE CURVA HORIZONTAL\";" ;
" :edit_box{label=\"Escala 1 :\";" ;
" key=\"escala\";" ;
" fixed_width=true;" ;
" edit_width=5;" ;
" edit_limit=5;" ;
" alignment=centered;" ;
" }" ;
" :button{label=\"Datos en sentido Horizontal\";" ;
" key=\"dsh\";" ;
" fixed_width=true;" ;
" alignment=centered;" ;
" }" ;
" :button{label=\"Datos en sentido Vertical\";" ;
" key=\"dsv\";" ;
" fixed_width=true;" ;
" alignment=centered;" ;
" }" ;
" :boxed_row{fixed_width=true;alignment=centered;" ;
" :button{label=\"Cancel\";key=\"cancel\";is_cancel=true;}" ;
" :button{label=\"Defecto\";key=\"Def1\";}" ;
" }" ;
"}" ;
)
(write-line str indi)
)
(close indi)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun cuadro_tec ()
(if escala
(set_tile "escala" (rtos escala 2 2))
(set_tile "escala" "500")
)
(action_tile "dsh" "(savevars) (done_dialog 2)")
(action_tile "dsv" "(savevars) (done_dialog 3)")
(action_tile "cancel" "(done_dialog 0)")
(action_tile "Def1" "(resetgraph)")
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun savevars () (setq escala (atof (get_tile "escala"))))
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun resetgraph () (set_tile "escala" "500"))
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun dcuh (/ msc ht curva obj rcurva area cuerda delta grados minutos grd mint pt x1 y1 y2 pt1)
(vl-load-com)
(vl-cmdf "_setvar" "angdir" "1")
(vl-cmdf "_setvar" "angbase" "270")
(setq esc escala)
(setq msc (/ 1000 esc))
(setq ht (/ 2 msc))
;;el arco como entidad de Acad
(setq curva (entsel "\nSeleccione curva: "))
;;el arco como objeto de Acad
(setq obj (vlax-ename->vla-object (car curva)))
;;propiedad radio del objeto arco
(setq rcurva (vla-get-radius obj))
;;propiedad área del objeto arco
(setq area (vlax-curve-getarea obj))
;;propiedad longitud del objeto arco entre Inicio y Fin de curva
(setq arco (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)))
;;distancia entre Punto inic y Punto final = cuerda del arco
(setq cuerda (distance (vlax-curve-getstartpoint obj)
;;punto inicial arco
(vlax-curve-getendpoint obj)
;;punto final arco
)
)
(setq delta (* 180
(/ (setq delta (* 2 (atan (/ (setq a (/ cuerda 2)) (sqrt (- (* rcurva rcurva) (* a a))))))) pi)
)
)
(setq grados (fix delta))
(setq minutos (* (- delta grados) 60))
(setq grd (itoa grados))
(setq mint (rtos minutos 2 1))
(setq radio (strcat "Radio= "
(rtos rcurva 2 2)
"m"
" Delta= "
grd
"%%d"
" "
mint
"'"
" Arco= "
(rtos arco 2 2)
"m"
" Cuerda= "
(rtos cuerda 2 2)
"m"
" Area= "
(rtos area 2 2)
"m²"
)
)
(setq pt (getpoint "\nSeleccione punto base del texto: "))
(setq x1 (nth 0 pt))
(setq y1 (nth 1 pt))
(setq p (* ht 2))
(setq y2 (- y1 p))
(setq pt1 (list x1 y2))
(vl-cmdf "_osnap" "OFF" "")
(vl-cmdf "_text" pt ht "90" "Datos de Curva")
(vl-cmdf "_text" pt1 ht "90" radio)
(princ)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun dcuv (/ cont hn rotu msc fsc ht curva rcurva area arco cuerda delta grados minutos grd mint punto1 cont s1 s2 s3 s4 s5
s6 s7 y1 e1 n1 e n ptx1 punto3 punto4 d ptx2 punto5 punto6 punto7 punto8 punto9 punto10
)
(vl-load-com)
(setvar "CMDECHO" 0)
(vl-cmdf "_setvar" "angdir" "1")
(vl-cmdf "_setvar" "angbase" "270")
(setq esc escala)
(setq msc (/ 1000 esc))
(setq fsc (/ esc 1000))
(setq ht (/ 2 msc))
;;el arco como entidad de Acad
(setq curva (entsel "\nSeleccione curva: "))
;;el arco como objeto de Acad
(setq obj (vlax-ename->vla-object (car curva)))
;;propiedad radio del objeto arco
(setq rcurva (vla-get-radius obj))
;;propiedad área del objeto arco
(setq area (vlax-curve-getarea obj))
;;propiedad longitud del objeto arco entre Inicio y Fin de curva
(setq arco (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)))
;;distancia entre Punto inic y Punto final = cuerda del arco
(setq cuerda (distance (vlax-curve-getstartpoint obj)
;;punto inicial arco
(vlax-curve-getendpoint obj)
;;punto final arco
)
)
(setq delta (* 180
(/ (setq delta (* 2 (atan (/ (setq a (/ cuerda 2)) (sqrt (- (* rcurva rcurva) (* a a))))))) pi)
)
)
(setq grados (fix delta))
(setq minutos (* (- delta grados) 60))
(setq grd (itoa grados))
(setq mint (rtos minutos 2 1))
(vl-cmdf "_style" "romans" "ROMANS.SHX" "" "" 0 "" "" "")
(vl-cmdf "_osnap" "_OFF") ;(setq linea (getstring esc "\nLinea : "))
(setq punto1 (getpoint "\nEn que punto quiero la tabla: "))
(setq x1 (nth 0 punto1))
(setq y1 (nth 1 punto1))
(setq cont 1)
(setq s1 (* 35.0 fsc))
(setq s2 (* 6.0 fsc))
(setq s3 (* 15.0 fsc))
(setq s4 (* 3.0 fsc))
(setq s5 (* 4.0 fsc))
(setq s6 (* 6.0 fsc))
(setq s7 (* 32.50 fsc))
(setq s8 (* 25.0 fsc))
(setq punto2 (polar punto1 0 s1))
(setq y1 (- y1 s2))
(setq e1 (nth 0 punto1))
(setq n1 (nth 1 punto1))
(command "_color" "4")
(setq e (+ e1 s4))
(setq n (- n1 s5))
(setq ptx1 (list e n))
(vl-cmdf "_text" ptx1 ht "90" "Datos de Curva")
(setq punto3 (list x1 y1))
(setq punto4 (polar punto3 0 s1))
(command "_line" punto3 punto4 "")
(setq e1 (nth 0 punto3))
(setq n1 (nth 1 punto3))
(setq d (+ e1 s7))
(setq w (+ e1 s8))
(setq e (+ e1 s4))
(setq n (- n1 s5))
(setq ptx0 (list w n))
(setq ptx1 (list e n))
(setq ptx2 (list d n))
(command "_color" "bylayer")
(vl-cmdf "_text" ptx1 ht "90" "Linea ") ;(vl-cmdf "_text" "C" ptx0 ht "90" linea)
(setq ptx2 (list d n))
(setq n (- n s6))
(setq ptx1 (list e n))
(vl-cmdf "_text" ptx1 ht "90" "Delta ")
(setq ptx2 (list d n))
(vl-cmdf "_text" "_R" ptx2 ht "90" (strcat grd "%%d" " " mint "'"))
(setq n (- n s6))
(setq ptx1 (list e n))
(vl-cmdf "_text" ptx1 ht "90" "Radio ")
(setq ptx2 (list d n))
(vl-cmdf "_text" "_R" ptx2 ht "90" (strcat (rtos rcurva 2 2) "m"))
(setq n (- n s6))
(setq ptx1 (list e n))
(vl-cmdf "_text" ptx1 ht "90" "Curva ")
(setq ptx2 (list d n))
(vl-cmdf "_text" "_R" ptx2 ht "90" (strcat (rtos arco 2 2) "m"))
(setq n (- n s6))
(setq ptx1 (list e n))
(vl-cmdf "_text" ptx1 ht "90" "Cuerda ")
(setq ptx2 (list d n))
(vl-cmdf "_text" "_R" ptx2 ht "90" (strcat (rtos cuerda 2 2) "m"))
(setq n (- n s6))
(setq ptx1 (list e n))
(vl-cmdf "_text" ptx1 ht "90" "Area ")
(setq ptx2 (list d n))
(vl-cmdf "_text" "_R" ptx2 ht "90" (strcat (rtos area 2 2) "m²"))
(while (< cont 6)
(setq y1 (- y1 s2))
(setq punto5 (list x1 y1))
(setq punto6 (polar punto5 0 s1))
(command "_line" punto5 punto6 "")
(setq cont (1+ cont))
)
(setq y1 (- y1 s2))
(setq punto7 (list x1 y1))
(setq punto8 (polar punto7 0 s1))
(setq punto9 (polar punto3 0 s3))
(setq punto10 (polar punto7 0 s3))
(command "_color" "4")
(command "_line" punto9 punto10 "")
(command "_color" "5")
(command "_pline" punto1 punto2 punto8 punto7 punto1 "")
(command "_color" "bylayer")
(setvar "osmode" 45)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(defun c:tec ()
(dialog_tec)
(setq indi (load_dialog file))
(new_dialog "temp" indi)
(cuadro_tec)
(vl-file-delete file)
(setq ddiag (start_dialog))
(unload_dialog indi)
(if (= ddiag 2)
(dcuh)
)
(if (= ddiag 3)
(dcuv)
)
)
;;;oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Dominguez- Mensajes : 151
Fecha de inscripción : 20/03/2016
Edad : 74
Localización : Zaragoza (España)
Re: Ayuda y consejo con DCL
Buen día para todos.
Señor Dominguez, mis respetos.
En verdad le agradezco la ayuda que me ha brindado.
Saludos cordiales.
Señor Dominguez, mis respetos.
En verdad le agradezco la ayuda que me ha brindado.
Saludos cordiales.
José Francisco- Mensajes : 46
Fecha de inscripción : 30/03/2016
Temas similares
» Ayuda con DCL
» AYUDA CON PASAR DWG 3D EN 2D
» Ayuda con un lisp
» ayuda con rutina
» Ayuda con este lisp
» AYUDA CON PASAR DWG 3D EN 2D
» Ayuda con un lisp
» ayuda con rutina
» Ayuda con este lisp
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|