Waardes uit DCL niet overgenomen

Gestart door A3, do 22 10 2009, 08:55:35

Vorige topic - Volgende topic

A3

Hallo,

Mijn programma is bijna klaar maar ik zit nog met een klein probleem.
Ik heb een DCL  bestand waar ik waardes in kan vullen.
Als ik echter in geen enkel vak iets nieuws invul maar de ingestelde "value" accepteer en meteen op <OK> druk dan geeft hij in het LSP bestand een foutmelding en wordt er niets getekend.
Als ik alle waardes in het DCL bestand wel "opnieuw"invul dan werkt het wel.

Wat doe ik verkeerd ?

Alvast bedankt.

Adri

DCL bestand :

BOX2 : dialog {
   label="LAMELLENROOSTERS";
   : text {label="Invoer roostergegevens"; }
   : spacer {height=1;}
   : edit_box {label="Roosterlengte   "; key="9lengte";edit_width=10;value="1000";}
   : edit_box {label="Roosterbreedte  "; key="9breedte";edit_width=10;value="1000";}
   : edit_box {label="Dragerhoogte    "; key="9draaghoog";edit_width=10;value="30";}
   : edit_box {label="Dragerdikte     "; key="9draagdik";edit_width=10;value="2";}
   : edit_box {label="Vullerhoogte    "; key="9vulhoog";edit_width=10;value="40";}
   : edit_box {label="Vullerdikte     "; key="9vuldik";edit_width=10;value="2";}
   : edit_box {label="Randhoogte      "; key="9randhoog";edit_width=10;value="30";}
   : edit_box {label="Randdikte       "; key="9randdik";edit_width=10;value="5";}
   : edit_box {label="Maaswijdte 1    "; key="9maas1";edit_width=10;value="66.66";}
   : edit_box {label="Maaswijdte 2    "; key="9maas2";edit_width=10;value="33.33";}
   : edit_box {label="Hoek lamellen   "; key="9hoek";edit_width=10;value="45";}
   ok_cancel;

   }   


LSP bestand :

(defun lamel (/)
;-----------------------------------------------------------------------------
; automatisch tekenen van rooster met zijaanzicht van lamellen
; auteur : A. Bongers 09-10-2009
;-----------------------------------------------------------------------------
     (command "layer" "s" "werk" "")
   (setq oldosmode (getvar "osmode"))   
   (setvar "osmode" 0)

   (setq nummer (load_dialog "c:/rooster/lsp/lamel.dcl")) (new_dialog "BOX2" nummer)

;-----------------------------------------------------------------------------
; omzetten STRING waardes naar getallen
;-----------------------------------------------------------------------------

   (action_tile "9lengte" "(setq 99lengte (atof $value))")
   (action_tile "9breedte" "(setq 99breedte (atof $value))")
   (action_tile "9draaghoog" "(setq 99draaghoog (atof $value))")
   (action_tile "9draagdik" "(setq 99draagdik (atof $value))")
   (action_tile "9vulhoog" "(setq 99vulhoog (atof $value))")
   (action_tile "9vuldik" "(setq 99vuldik (atof $value))")
   (action_tile "9randhoog" "(setq 99randhoog (atof $value))")
   (action_tile "9randdik" "(setq 99randdik (atof $value))")
   (action_tile "9maas1" "(setq 99maas1 (atof $value))")
   (action_tile "9maas2" "(setq 99maas2 (atof $value))")
   (action_tile "9hoek" "(setq 99hoek (atof $value))")

   (start_dialog)

   (unload_dialog nummer)

   (setq 99plaats (getpoint "Plaatsingspunt linksboven : "))

;-----------------------------------------------------------------------------
; roosteromranding
;-----------------------------------------------------------------------------
   (setq 99punt2 (list (+ (car 99plaats) 99breedte) (cadr 99plaats) (caddr 99plaats)))
   (setq 99punt3 (list (car 99punt2) (- (cadr 99plaats) 99lengte) (caddr 99plaats)))
     (setq 99punt4 (list (car 99plaats) (cadr 99punt3) (caddr 99plaats)))

   (command "pline" 99plaats 99punt2 99punt3 99punt4 "close")
;-----------------------------------------------------------------------------
; randdikte roosteromranding
;-----------------------------------------------------------------------------
   (setq 99punt5 (list (+ (car 99plaats) 99randdik) (-(cadr 99plaats) 99randdik) (caddr 99plaats)))
   (setq 99punt6 (list (- (+ (car 99plaats) 99breedte) 99randdik) (cadr 99punt5) (caddr 99plaats)))
   (setq 99punt7 (list (car 99punt6) (+ (- (cadr 99plaats) 99lengte) 99randdik) (caddr 99plaats)))
   (setq 99punt8 (list (car 99punt5) (cadr 99punt7) (caddr 99plaats)))

   (command "pline" 99punt5 99punt6 99punt7 99punt8 "close")

(setvar "osmode" oldosmode)
)

roy_043

Je kunt twee dingen doen:

1. Voordat je de waardes met action_tile uitleest, lees je de reeds ingevulde waardes uit:

(setq
      99lengte (atof (get_tile "9lengte"))
      99breedte (atof (get_tile "9breedte"))
      ...
)
(action_tile "9lengte" "(setq 99lengte (atof $value))")
(action_tile "9breedte" "(setq 99breedte (atof $value))")
...


2. Een nettere oplossing is om aan de OK-knop een action te koppelen:
Code (dcl: met dank aan H@rm) Selecteer
BOX2 : dialog {
   label="LAMELLENROOSTERS";
   : text {label="Invoer roostergegevens"; }
   : spacer {height=1;}
   : edit_box {label="Roosterlengte   "; key="9lengte";edit_width=10;value="1000";}
   : edit_box {label="Roosterbreedte  "; key="9breedte";edit_width=10;value="1000";}
   : edit_box {label="Dragerhoogte    "; key="9draaghoog";edit_width=10;value="30";}
   : edit_box {label="Dragerdikte     "; key="9draagdik";edit_width=10;value="2";}
   : edit_box {label="Vullerhoogte    "; key="9vulhoog";edit_width=10;value="40";}
   : edit_box {label="Vullerdikte     "; key="9vuldik";edit_width=10;value="2";}
   : edit_box {label="Randhoogte      "; key="9randhoog";edit_width=10;value="30";}
   : edit_box {label="Randdikte       "; key="9randdik";edit_width=10;value="5";}
   : edit_box {label="Maaswijdte 1    "; key="9maas1";edit_width=10;value="66.66";}
   : edit_box {label="Maaswijdte 2    "; key="9maas2";edit_width=10;value="33.33";}
   : edit_box {label="Hoek lamellen   "; key="9hoek";edit_width=10;value="45";}
   : row {
      : spacer { width = 1; }
      : button {    // defines the OK button
      label = "OK";
      is_default = true;
      key = "accept";
      width = 8;
      fixed_width = true;
      }
      : button {    // defines the Cancel button
      label = "Cancel";
      is_cancel = true;
      key = "cancel";
      width = 8;
      fixed_width = true;
      }
      : spacer { width = 1;}
   }
}


(action_tile
"accept"
"
(setq
99lengte (get_tile \"9lengte\")
99breedte (get_tile \"9breedte\")
...
)
(done_dialog)
"
)

Let hierbij op het gebruik van: \

roy_043

Nog een kleine tip:
plaats dit:
   (setvar "osmode" 0)
na dit:
   (setq 99plaats (getpoint "Plaatsingspunt linksboven : "))
dan kan de gebruiker nog wel gewoon "snappen".

A3

Werkt perfect (1e oplossing)

Bedankt.
Adri