CADsite forum

AutoCAD => Autolisp => Topic gestart door: Lyrix op wo 22 03 2006, 12:39:19

Titel: DCL Radio button
Bericht door: Lyrix op wo 22 03 2006, 12:39:19
Ik ben weer aan de slag met de lisp programatuur en wil nu met DCL een simpel menutje maken.

Alleen nu stuit ik uiteraard weer op een probleem.

Ik heb een menu met 3 popups waar ik waarde's in heb gezet.
Die waardes krijg ik weer aangeroepen in me lisp.
Alleen hoe krijg ik nu de waardes van een radio button gedefiieerd?
Stel ik vink de radio button raam aan... hoe krijg ik die waarde raam dan gedefiieerd??

Hier het voorbeeld:

veha.dcl
VEHA : dialog {
          label = "Veha functie - Mampaey Installatie Techniek BV  A.B. 2006";
          : column {
            : boxed_row {
      label = "Type" ;   
              : popup_list {
                key = "radlengte";
                label = "Lengte";
                fixed_width_font = true;
                width = 15;
                value = "";
              }
              : popup_list {
                key = "radhoogte";
                label = "Hoogte";
                fixed_width_font = true;
                width = 15;
                value = "";
              }
         : popup_list {
                key = "radtype";
                label = "Type";
                fixed_width_font = true;
                width = 10;
                value = "";
              }
         }
      
            : boxed_row {
              key = "bemating";
              : radio_button {
                key = "but1";
                label = "Raam";
      value = "1";
              }
              : radio_button {
                key = "but2";
                label = "Hoek";
              }
              : radio_button {
                key = "but3";
                label = "Muur";
              }
             }

            : boxed_row {
              : button {
                key = "ok";
                label = " ok ";
                is_default = true;
              }
              }
    }
}

veha.lisp


(defun C:veha()
   (setq radlengte(list "400" "500" "600" "700" "800" "900" "1000" "1100" "1200" "1400" "1600" "1800" "2000" "2200" "2400" "2600" "2800" "3000"))
     (setq radhoogte(list "300" "400" "500" "600" "700" "900"))
   (setq radtype(list "10" "11" "20" "21" "22" "33"))
   (setq dcl_id (load_dialog "VEHA.DCL"))      ;;;--- Load the dcl file
   (if (not (new_dialog "VEHA" dcl_id))      ;;;--- Load the dialog definition if it is not already loaded
       (progn
        (alert "The veha.DCL file could not be loaded!")
         (exit)
       )
)


(defun HOEKEN ()
   (setq hk1 0)
   (setq hk2 (+ hk1 (* 0.5 pi)))
   (setq hk3 (+ hk1 pi))
   (setq hk4 (+ hk1 (* 1.5 pi)))
)
   
(defun VEHATYPE ()   
     (setq ds1(get_tile "radlengte"))
   (setq dsl (nth (atoi ds1) radlengte))
   (setq ds2(get_tile "radhoogte"))
   (setq dsh (nth (atoi ds2) radhoogte))
   (setq ds3(get_tile "radtype"))
   (setq dst (nth (atoi ds3) radtype))

)

(defun saveVars()

  ;;;--- Get the key of the choice made
  ;;;    [ returns "but1" "but2" "but3" or "but4" whichever is selected.]
  (setq bemating(get_tile "bemating"))

  ;;;--- Get the value of each item
 (setq choice1(atoi(get_tile "but1")))  // 0 = not chosen    1 = chosen  
  (setq choice2(atoi(get_tile "but2")))  // 0 = not chosen    1 = chosen
  (setq choice3(atoi(get_tile "but3")))  // 0 = not chosen    1 = chosen
  (setq choice4(atoi(get_tile "but4")))  // 0 = not chosen    1 = chosen
)

(defun Radiatoren ()
   (setq pt1 (getpoint "\nGeef invoegpunt radiator: "))
   (hoeken)
   (setq os (getvar "osmode"))
   (setvar "osmode" 0)
   (setq pt2 (polar pt1 hk3 55))
   (setq pt3 (polar pt2 hk2 50))
   (setq pt4 (polar pt3 hk1 (atof dsl)))
   (setq pt5 (polar pt4 hk4 50))
   (setq pt6 (polar pt2 hk2 25))
   (setq pt7 (polar pt6 hk1 25))
   (setq pt8 (polar pt7 hk1 60))
   (setq pt9 (polar pt3 hk1 25))
   (setq pt10 (polar pt9 hk1 60))
   (setq pt11 (polar pt9 hk2 150))
   (setq pt12 (polar pt10 hk2 150))
   (command "-layer" "m" "WL561---_CV-SYMBOOL" "C" "7" "" "")
   (command "line" pt5 pt2 "")
   (command "line" pt2 pt3 "")
   (command "line" pt3 pt4 "")
   (command "line" pt4 pt5 "")
   (command "circle" pt7 "d" "50")
   (command "circle" pt8 "d" "50")   
   (command "-layer" "m" "WL561---_CV-AANVOER" "C" "3" "" "")
   (command "line" pt9 pt11 "")
   (command "line" pt10 pt12 "")
   (princ (strcat "\n You chose "  " from the first popup list box."))
   (setvar "OSMODE" os)
  (princ)
)


 
(start_list "radlengte" 3)       ;;;--- Load the dialog definition if it is not already loaded
(mapcar 'add_list radlengte)
(end_list)
(start_list "radhoogte" 3)
(mapcar 'add_list radhoogte)
(end_list)
(start_list "radtype" 3)
(mapcar 'add_list radtype)
(end_list)
(action_tile "ok" "(VEHATYPE)(done_dialog)")
(start_dialog)            ;;;--- Display the dialog box
(unload_dialog dcl_id)         ;;;--- Unload the dialog box
  (if(= ddiag 1)
   (progn         ;;;--- If the user pressed the Cancel button
       (princ "\n veha fuctie onderbroken!")
   )
   (cond
        ((= bemating "but1")(setg bmvh raam))
        ((= bemating "but2")(setg bmvh hoek))
        ((= bemating "but3")(setg bmvh muur))
        )   
  )
(Radiatoren)
)
     



Titel: Re: DCL Radio button
Bericht door: Kenny H op wo 22 03 2006, 19:18:33
Voeg dit eens toe voor Start_dialog

  (action_tile
    "but1"
    "(SETQ choice1 1
    choice2 0
    choice3 0)"
)
(action_tile
    "but2"
    "(SETQ choice2 1
    choice1 0
    choice3 0)"
)
(action_tile
    "but3"
    "(SETQ choice3 1
    choice1 0
    choice2 0)"
)
Titel: Re: DCL Radio button
Bericht door: Kenny H op ma 03 04 2006, 20:26:06
Is het u gelukt?
Titel: Re: DCL Radio button
Bericht door: Lyrix op wo 05 04 2006, 13:02:37
Citaat van: Kenny H op ma 03 04 2006, 20:26:06
Is het u gelukt?

Niet helemaal, maar ik ben wel tot een oplossing gekomen.
Hier onder het resultaat:

veha.lsp

;Created by A.Bentlage 2006

(defun *error* (msg)
   (if (/= msg "Cancel")
      (if (= msg "quit / exit abort")
         (princ)
         (princ (strcat "\n Radiator tool onderbroken........"))
      )
      (princ)
   )
   (setvar "osmode" os)
)

(defun hoeken ()
   (setq hk1 0)
   (setq hk2 (+ hk1 (* 0.5 pi)))
   (setq hk3 (+ hk1 pi))
   (setq hk4 (+ hk1 (* 1.5 pi)))
)

(defun vehatype ()   
     (setq ds1(get_tile "radlengte"))
   (setq dsl (nth (atoi ds1) radlengte))
   (setq ds2(get_tile "radhoogte"))
   (setq dsh (nth (atoi ds2) radhoogte))
   (setq ds3(get_tile "radtype"))
   (setq dst (nth (atoi ds3) radtype))
   (if (= dst "10")(setq dsk 50))
   (if (= dst "11")(setq dsk 40))
   (if (= dst "20")(setq dsk 60))
   (if (= dst "21")(setq dsk 60))
   (if (= dst "22")(setq dsk 80))
   (if (= dst "33")(setq dsk 80))
)

(defun raammaatl ()
   (setq os (getvar "osmode"))
   (setvar "osmode" 2)
   (setq pt1 (getpoint "\nGeef invoegpunt radiator: "))
   (setvar "osmode" 0)
   (hoeken)
   (setq pt2 (polar pt1 hk1 (/ (atoi dsl) 2)))
   (setq pt3 (polar pt2 hk4 80))
   (setq pt4 (polar pt3 hk3 (atoi dsl)))
   (setq pt5 (polar pt4 hk3 50))
   (setq pt6 (polar pt5 hk3 80))
   (setq pt7 (polar pt5 hk2 30))
   (setq pt8 (polar pt6 hk2 30))
   (setq pt9 (polar pt5 hk4 30))
   (setq pt10 (polar pt6 hk4 30))
   (setq pt11 (polar pt7 hk2 600))
   (setq pt12 (polar pt3 hk1 300))
   (setq pt13 (polar pt9 hk4 500))
   (setq pt14 (polar pt10 hk4 500))
   (setq pt15 (polar pt9 hk4 300))
   (setq pt16 (polar pt10 hk4 300))
   (setq pt17 (polar pt16 hk4 1))
   (setq pt18 (polar pt1 hk2 1100))
   (setq pt19 (polar pt18 hk4 200))
   (command "-layer" "m" "WL561---_CV-SYMBOOL" "C" "7" "" "")
   (command "pline" pt3 "w" "100" "100" pt4 "cl")
   (command "circle" pt5 "d" "60")
   (command "circle" pt6 "d" "60")
   (command "-layer" "m" "WL561---_CV-MAATV" "C" "1" "" "")
   (command "dimlinear" pt7 pt8 "t" "35" pt11)
   (command "dimlinear" pt15 pt16 "t" "%%c14x2" pt17)
   (command "dimlinear" pt2 pt3 "t" dsk pt12)
   (command "dimlinear" pt7 pt1 "t" (+ (/ (atoi dsl) 2) 25) pt11)
   (command "-layer" "m" "WL561---_CV-A" "C" "3" "" "")
   (command "line" pt10 pt14 "")
   (command "-layer" "m" "WL561---_CV-R" "C" "3" "" "")
   (command "line" pt9 pt13 "")
   (setq radcode2 0)
   (setq NewTextString  (strcat dsl "-" dsh "-" dst))
   (setvar "OSMODE" os)
)

(defun raammaatr ()
   (setq os (getvar "osmode"))
   (setvar "osmode" 2)
   (setq pt1 (getpoint "\nGeef invoegpunt radiator: "))
   (setvar "osmode" 0)
   (hoeken)
   (setq pt2 (polar pt1 hk3 (/ (atoi dsl) 2)))
   (setq pt3 (polar pt2 hk4 80))
   (setq pt4 (polar pt3 hk1 (atoi dsl)))
   (setq pt5 (polar pt4 hk1 50))
   (setq pt6 (polar pt5 hk1 80))
   (setq pt7 (polar pt5 hk2 30))
   (setq pt8 (polar pt6 hk2 30))
   (setq pt9 (polar pt5 hk4 30))
   (setq pt10 (polar pt6 hk4 30))
   (setq pt11 (polar pt7 hk2 600))
   (setq pt12 (polar pt3 hk3 300))
   (setq pt13 (polar pt9 hk4 500))
   (setq pt14 (polar pt10 hk4 500))
   (setq pt15 (polar pt9 hk4 300))
   (setq pt16 (polar pt10 hk4 300))
   (setq pt17 (polar pt16 hk4 1))
   (setq pt18 (polar pt1 hk2 1000))
   (setq pt19 (polar pt18 hk4 200))
   (command "-layer" "m" "WL561---_CV-SYMBOOL" "C" "7" "" "")
   (command "pline" pt3 "w" "100" "100" pt4 "cl")
   (command "circle" pt5 "d" "60")
   (command "circle" pt6 "d" "60")
   (command "-layer" "m" "WL561---_CV-MAATV" "C" "1" "" "")
   (command "dimlinear" pt7 pt8 "t" "35" pt11)
   (command "dimlinear" pt15 pt16 "t" "%%c14x2" pt17)
   (command "dimlinear" pt2 pt3 "t" dsk pt12)
   (command "dimlinear" pt7 pt1 "t" (+ (/ (atoi dsl) 2) 25) pt11)
   (command "-layer" "m" "WL561---_CV-A" "C" "3" "" "")
   (command "line" pt10 pt14 "")
   (command "-layer" "m" "WL561---_CV-R" "C" "3" "" "")
   (command "line" pt9 pt13 "")
   (setq radcode2 0)
   (setq NewTextString  (strcat dsl "-" dsh "-" dst))
   (setvar "OSMODE" os)
)

(defun raammaatd ()
   (setq os (getvar "osmode"))
   (setvar "osmode" 2)
   (setq pt1 (getpoint "\nGeef invoegpunt radiator: "))
   (setvar "osmode" 0)
   (hoeken)
   (setq pt2 (polar pt1 hk1 (/ (atoi dsl) 2)))
   (setq pt3 (polar pt2 hk4 80))
   (setq pt4 (polar pt3 hk3 (atoi dsl)))
   (setq pt5 (polar pt4 hk3 50))
   (setq pt6 (polar pt3 hk1 50))
   (setq pt7 (polar pt5 hk2 30))
   (setq pt8 (polar pt6 hk2 30))
   (setq pt9 (polar pt5 hk4 30))
   (setq pt10 (polar pt6 hk4 30))
   (setq pt11 (polar pt7 hk2 600))
   (setq pt12 (polar pt6 hk1 30))
   (setq pt13 (polar pt12 hk2 80))
   (setq pt14 (polar pt12 hk1 300))
   (setq pt15 (polar pt9 hk4 500))
   (setq pt16 (polar pt10 hk4 500))
   (setq pt17 (polar pt9 hk4 300))
   (setq pt18 (polar pt1 hk2 1000))
   (setq pt19 (polar pt18 hk4 200))
   (setq pt20 (polar pt17 hk4 1))
   (command "-layer" "m" "WL561---_CV-SYMBOOL" "C" "7" "" "")
   (command "pline" pt3 "w" "100" "100" pt4 "cl")
   (command "circle" pt5 "d" "60")
   (command "circle" pt6 "d" "60")
   (command "-layer" "m" "WL561---_CV-MAATV" "C" "1" "" "")
   (command "dimlinear" pt9 pt9 "t" "%%c14x2" pt20)
   (command "dimlinear" pt13 pt12 "t" dsk pt14)
   (command "dimlinear" pt1 pt7 "t" (+ (/ (atoi dsl) 2) 25) pt11)
   (command "dimlinear" pt1 pt8 "t" (+ (/ (atoi dsl) 2) 25) pt11)
   (command "-layer" "m" "WL561---_CV-A" "C" "3" "" "")
   (command "line" pt9 pt15 "")
   (command "-layer" "m" "WL561---_CV-R" "C" "3" "" "")
   (command "line" pt10 pt16 "")
   (setq radcode2 0)
   (setq NewTextString  (strcat dsl "-" dsh "-" dst))
   (setvar "OSMODE" os)
)

(defun raammaat ()
   (if (= choice2 "No4")(raammaatl))
   (if (= choice2 "No5")(raammaatr))
   (if (= choice2 "No6")(raammaatd))
)


(defun muurmaat ()
   (if (= choice2 "No4")(muurmaatl))
   (if (= choice2 "No5")(muurmaatr))
   (if (= choice2 "No6")(muurmaatd))
)



(defun hoekmaat ()
   (if (= choice2 "No4")(hoekmtl))
   (if (= choice2 "No5")(hoekmatr))
   (if (= choice2 "No6")(hoekmaatd))
)

(defun C:veha ()
   (setq radlengte(list "400" "500" "600" "700" "800" "900" "1000" "1100" "1200" "1400" "1600" "1800" "2000" "2200" "2400" "2600" "2800" "3000"))
   (setq radhoogte(list "300" "400" "500" "600" "700" "900"))
   (setq radtype(list "10" "11" "20" "21" "22" "33"))
   (setq choice "No1")            
   (setq choice2 "No4")            
   (setq dcl_id (load_dialog "veha.dcl"))      
   (if (not (new_dialog "veha" dcl_id))(exit))
   (start_list "radlengte" 3)          
   (mapcar 'add_list radlengte)
   (end_list)
   (start_list "radhoogte" 3)
   (mapcar 'add_list radhoogte)
   (end_list)
   (start_list "radtype" 3)
   (mapcar 'add_list radtype)
   (end_list)
   (action_tile "raam" "(setq choice \"No1\")")   
   (action_tile "muur" "(setq choice \"No2\")")   
   (action_tile "hoek" "(setq choice \"No3\")")   
   (action_tile "links" "(setq choice2 \"No4\")")   
   (action_tile "rechts" "(setq choice2 \"No5\")")   
   (action_tile "dubbel" "(setq choice2 \"No6\")")
   (action_tile "accept" "(vehatype)(done_dialog) (setq userclick T)")
   (action_tile "cancel" "(done_dialog) (setq userclick nil)")
   (start_dialog)      
   (unload_dialog dcl_id)   
      (if userclick      
         (progn
         (if (= choice "No1")(raammaat))
         (if (= choice "No2")(muurmaat))
         (if (= choice "No3")(hoekmaat))
      )   
   )
   (princ)
)


veha.dcl

veha : dialog {
label = "Veha radiator tool" ;
   
   : boxed_row {
      label = "Type" ;   
      : popup_list {
      key = "radlengte";
      label = "Lengte";
      fixed_width_font = true;
      width = 15;
      value = "";
      }
      : popup_list {
      key = "radhoogte";
      label = "Hoogte";
      fixed_width_font = true;
      width = 15;
      value = "";
      }
      : popup_list {
      key = "radtype";
      label = "Type";
      fixed_width_font = true;
      width = 10;
      value = "";
      }
   }

   : boxed_row {
      label = "Maat" ;
      : radio_button {
      key = "raam" ;
      label = "Raam" ;
      value = "1" ;
      }

      : radio_button {
      key = "muur" ;
      label = "Muur" ;
      }

      : radio_button {
      key = "hoek" ;
      label = "Hoek" ;
      }
   }
   
   : boxed_row {
      label = "Aansluiting" ;
            : radio_button {
      key = "links" ;
      label = "Links" ;
      value = "1" ;
      }

      : radio_button {
      key = "rechts" ;
      label = "Rechts" ;
      }
   
      : radio_button {
      key = "dubbel" ;
      label = "Dubbelzijdig" ;
      }
   }
   
   : boxed_row {
      ok_cancel;
      : text {
      label = "Done by Lyrix";
      }
   }
}

Het gebruik van DCL menu's is echt super.
Je kan je lisp er enorm mee vereenvoudigen en snel variabelen invullen.
Ik ga er zeker meer gebruik van maken.

Ik heb hier boven niet de hele lisp code gepost.
Die was redelijk groot.
Je kan hem wel testen, alleen de raam optie , links rechts en dubbel werkt.
Als je meer opties wil in het menu moet je gewoon choice3 4 5 enz aanmaken.
Met het commando if kan je em laten selecteren op je keuze.


Kenny H bedankt voor je hulp!



Titel: Re: DCL Radio button
Bericht door: Kenny H op wo 05 04 2006, 18:05:24
Graag gedaan.  :wink:

Je kunt via lisp zaken al veel sneller laten tekenen, uitrekenen enz.
Als je daarbij nog eens een handig dialoogboxje (dcl) creëert, dan is het gebruik van lisp nog leuker.

Groeten

Kenny