Zobrazit plnou verzi příspěvku: AutoLisp

I.Kroutil
07.12.2006, 11:37
Dobrý den, jelikož programuji v Lispu jen ojediněle, obracím se na vás s touto prosbou. Dělám prográmek obsahující výběrový filtr a potřeboval bych poradit, jakým způsobem lze provést následující.

(setq a_sez) má hodnotu (8 . "TEXT")
(setq b_sez) má hodnotu (62 . 256)
(setq c_sez) má hodnotu (7 . "Isocp")
(setq d_sez) má hodnotu (40 . 3.5)

dále by mohlo následovat
(ssget (list a_sez b_sez c_sez d_sez)) má hodnotu
(ssget ((8 . "TEXT") (62 . 256) (7 . "Isocp") (40 . 3.5)) a bude fungovat

Já ale potřebuji dosáhnout dotatečného doplnění nebo jiného obsahu v seznamu. Jednotlivé hodnoty proměnných jsou závislé na vybrání v dialogovém panelu. Takže může dojít k následujícímu

(setq a_sez) má hodnotu (8 . "TEXT")
(setq b_sez) má hodnotu (62 . 256)
(setq c_sez) má hodnotu (7 . "Isocp")
(setq d_sez) má hodnotu nil (nebyla vybrána)

a v takovém případě
(ssget ((8 . "TEXT") (62 . 256) (7 . "Isocp") nil) samozřejmě končí.
Zatím jsem nebyl schopen dosáhnout postupného přidáváni jednotlivých hodnot do seznamu podle pravdivých hodnot proměnných.
Pokud by měl někdo radu, předem děkuji.

pavelstyl
07.12.2006, 13:13
Pisi z hlavy:
(setq seznam nil)

(if a_sez (setq seznam (append (seznam (list a_sez)))))
(if b_sez (setq seznam (append (seznam (list b_sez)))))
(if c_sez (setq seznam (append (seznam (list c_sez)))))
...
...
(ssget seznam)
 
Pavel Styl

I.Kroutil
07.12.2006, 14:17
Ano, to je ono. Po menší úpravě dle vašeho návrhu mohu zvolat heuréka. Děkuji, moc jste mi pomohl. S pozdravem I.Kroutil