CADsite forum

AutoCAD => Autolisp => Topic gestart door: julien op wo 14 09 2005, 14:48:52

Titel: eerste dcl poging
Bericht door: julien op wo 14 09 2005, 14:48:52
Ik gebruik al een hele tijd:
;*****************************   bm.LSP    *************************
;*   *
;*  julien   02/09/2003           *
;*  Dit routinnetje is geschreven om automatisch verschillende     *
;*  lijnen te verdelen met een vooropgesteld block volgens een     *
;*  vooropgestelde lengte   *
;*  Wens je deze procedure te verdelen?                            *
;*  geen probleem, maar vraag het even: info@cadsite.be            *
;*  Bezoek ook: http://www.cadsite.be                              *
;*  Met dank aan Leon Dooijes!   *
;*********************** HOOFDPROGRAMMA ****************************

(defun C:BM ()
 (if blocknaam
   (setq
     blocknaamHulp
      (getstring
   (strcat "\nVoer de blocknaam in <" blocknaam ">: ")
      )
   )
   (setq blocknaamHulp (getstring "\nVoer de blocknaam in: "))
 )
 (if (not (eq blocknaamHulp ""))
   (setq blocknaam blocknaamHulp)
 )
 (if segmentlengte
   (setq segmentlengteHulp
     (getdist (strcat "\nGeef de segmentlengte: <"
            (rtos segmentlengte)
            ">: "
         )
     )
   )
   (progn (initget 3)
     (setq segmentlengteHulp (getdist "\nGeef de segmentlengte: "))
   )
 )
 (if segmentlengteHulp
   (setq segmentlengte segmentlengteHulp)
 )
 (setq
   lijn
    (entsel
      "\nDuid de lijn aan of druk op ENTER om af te sluiten: "
    )
 )
 (while (/= lijn nill)
   (command "measure" lijn "b" blocknaam "y" segmentlengte)
   (setq
     lijn (entsel
       "\nDuid de lijn aan of druk op ENTER om af te sluiten: "
     )
   )
   (princ)
 )
)

Nu had ik graag gehad dat in de plaats van een blocknaam in te typen dat ik een keuze venster krijg.
Hoe begin ik hier best aan?
Titel: eerste dcl poging
Bericht door: WebRacer op wo 14 09 2005, 17:32:01
even heel vlug gekeken naar uw vraag...
voor de lisp:

;*****************************   bm.LSP    *************************
;*                           *
;*  julien   02/09/2003                          *
;*  Dit routinnetje is geschreven om automatisch verschillende     *
;*  lijnen te verdelen met een vooropgesteld block volgens een     *
;*  vooropgestelde lengte                  *
;*  Wens je deze procedure te verdelen?                            *
;*  geen probleem, maar vraag het even: info@cadsite.be            *
;*  Bezoek ook: http://www.cadsite.be                              *
;*  Met dank aan Leon Dooijes!                  *
;*********************** HOOFDPROGRAMMA ****************************

(defun C:BM ()
 (vl-load-com)
 (setq ok_ "ok")
 (blocks_tot_lijst)
 (setq dia_id (load_dialog "bm"))
 (new_dialog "bm" dia_id)
 (start_list "blk_lst")
 (mapcar 'add_list blk_lst)
 (end_list)
 (start_list "blk_lst")
 (action_tile "blk_lst" "(setq blok (nth (atoi $value) blk_lst))")
 (action_tile "cancel" "(SETQ ok_ nil)")
 (start_dialog)
 (done_dialog)
 (unload_dialog dia_id)
 
 (if (not (eq blok ""))
   (setq blocknaam blok)
 )
 (if segmentlengte
   (setq segmentlengteHulp
     (getdist (strcat "\nGeef de segmentlengte: <"
            (rtos segmentlengte)
            ">: "
         )
     )
   )
   (progn (initget 3)
     (setq segmentlengteHulp (getdist "\nGeef de segmentlengte: "))
   )
 )
 (if segmentlengteHulp
   (setq segmentlengte segmentlengteHulp)
 )
 (setq
   lijn
    (entsel
      "\nDuid de lijn aan of druk op ENTER om af te sluiten: "
    )
 )
 (while (/= lijn nill)
   (command "measure" lijn "b" blocknaam "y" segmentlengte)
   (setq
     lijn (entsel
       "\nDuid de lijn aan of druk op ENTER om af te sluiten: "
     )
   )
   (princ)
 )
)
--------------------------------------------------------------
| maak blokken lijst
--------------------------------------------------------------
(defun blocks_tot_lijst ()
 (setq blk_lst nil)
 (setq blk (tblnext "BLOCK" T))
 (while (/= blk nil)
   (setq blk_lst (append (list (cdr (assoc 2 blk))) blk_lst))
   (setq blk (tblnext "BLOCK"))
 )
 (setq blk_lst (acad_strlsort (reverse blk_lst)))
)


voor de dcl:

bm : dialog { label = "Blocks";
: list_box {
fixed_height = true ;
fixed_width = true ;
key = "blk_lst" ;
label = "Bestaande blocks:" ;
width = 25 ;}
ok_cancel ;
  }


die dan ook bm.dcl moet noemen...
Titel: eerste dcl poging
Bericht door: julien op wo 14 09 2005, 17:36:09
Dit werkt perfect!
bedankt.  :pintje: