foutmelding stringp nil (opgelost)

Gestart door A3, do 07 01 2010, 08:01:10

Vorige topic - Volgende topic

A3

Hoi,
Ik heb een Lisp routine en een DCL bestand welke tot voor kort altijd werkte. Ik heb nu sinds kort Autocad 2010 waaronder hij ook werkte. Ik heb nu in autocad 2010 wat instellingen veranderd onder tools/options en nu krijg ik bij de lsp-routine de melding stringp nil.
Wat heb ik verkeerd gedaan ?

Hieronder het LSP bestand en het DCL bestand

Deel van het betreffende LSP bestand lamel.lsp :
(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
;-----------------------------------------------------------------------------

(princ 9lengte)


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

   (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 : "))

;-----------------------------------------------------------------------------

Het betreffende DCL bestand lamel.dcl :
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;

   }   






; 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

roy_043

#1
Ik vermoed dat (princ 9lengte) de schuldige is. Verwijder deze regel en test opnieuw. Is er nog steeds een probleem geef dan in jouw volgende bericht aan op welk punt de lisp strandt.

Jouw probleem<EDIT>, als dit het probleem is, </EDIT>is overigens terug te voeren op het niet declareren van de variabelen. Zie hier voor meer info.

A3

Deze regel had ik er tussengezet om te bepalen waar hij vastloopt. Op deze plek (princ 9lengte) loopt hij vast.
als ik deze regel weghaal blijft het probleem hetzelfde. Voor mij wel vreemd dat het smorgens nog werkt en smiddags niet meer.

Alvast hartelijk dank voor je moeite.

Adri

roy_043

Ik zat er in mijn vorige bijdrage goed naast.
(Maar het declareren van variabelen blijft natuurlijk essentieel...)

Pas jouw code aan zoals hieronder en test opnieuw:
(defun lamel (/ nummer dialogFound) ; ik declareer slechts 2 variabelen, de rest laat ik aan jou over...
;-----------------------------------------------------------------------------
; 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"))
   (setq dialogFound (new_dialog "BOX2" nummer))

(princ "\n...\n")
(princ nummer)
(princ "\n...\n")
(princ dialogFound)
(princ "\n...")

;-----------------------------------------------------------------------------
; omzetten STRING waardes naar getallen
;-----------------------------------------------------------------------------
; ... de rest niet wijzigen


Krijg je dit op het scherm:
...
-1
...
NIL
...

dan worden het dcl-bestand en de dialog box niet gevonden als gevolg van, waarschijnlijk, een (zoek)paden-probleem.
Als dat zo is loopt jouw programma hier vast:
(atof (get_tile "9lengte"))
Hetgeen evalueert als:
(atof nil)

A3

Dat krijg ik inderdaad op het scherm. Hoe los ik het  zoekpaden probleem op dat hij het dcl bestand niet kan vinden.
Bij mijn weten heb ik niets veranderd waardoor het nu ineens niet meer werkt.

Adri

roy_043

Dit kan er aan de hand zijn:


  • Het bestand lamel.dcl bestaat wel maar bevindt zich niet op deze plaats: "c:/rooster/lsp/lamel.dcl".
    Voorheen werd dit bestand ergens anders in het zoekpad gevonden. Mogelijke oorzaken:


    • Tot nu toe stond er steeds een bestand lamel.dcl in de dwg-map (de dwg-map is altijd onderdeel van het zoekpad)

    • Het zoekpad is ondertussen aangepast:
      Citaat van: A3 op do 07 01 2010, 08:01:10Ik heb nu in autocad 2010 wat instellingen veranderd onder tools/options

  • Het bestand lamel.dcl is ondertussen gewist.

A3

Klopt, met mijn nieuwe autocad versie alles gekopieerd naar een andere directory c:/rooster2010.
De oude directory c:/rooster wel laten bestaan. Gisteren heb ik toen alles bleek te werken de oude hernoemd naar c:/roosteroud. Toen kon hij het bestand dus niet meer vinden.

Hartelijk dank, probleem opgelost.

Adri