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?
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...
Dit werkt perfect!
bedankt. :pintje: