Zobrazit plnou verzi příspěvku: Převedení bloku, v bloku, v bloku, v bloku.... do

chlebovsky
27.11.2007, 15:02
Zdravím.  Dost často se mi stává že mám výkres s blokama, v něm bloky, a v tom zase bloky....  a potřebuji to vše převést do jediné hladiny s jednou barvou. A pak to používám jako referenci.
 
Např, dostanu elektro a převedu do hladiny elektro s barvou 10 a podložím.... tím pádem to mám jen v jedné hladině.... a dobře se s tím pracuje (jako podklad)
 
Ale nebaví mne pořád editovat každý blok zvlášť a upravovat.
Tak jsem si udělal malou procedurku přikládám i s dialogem, jenže funguje až do té doby než narazí na křivku, pokud je v bloku nějaké křivka, tak tu prostě ignoruje.....
 
Nevíte někdo proč "entmod" nefunguje na záznam křivky bloku s tabulce výkresu ???
 
Program :
Bloky_Do_Nuly.Lsp
(defun c:blok_do_nuly (/ blk dialog hlad fce bar sez i ent sez_blk sez_ent)  (princ "\nVyber bloky pro převedení")  (setq blk (ssget (list (cons 0 "INSERT"))))  (if blk    (progn      (setq dialog (load_dialog "AD-programy-dialog.DCL"))      (new_dialog "HLADINA" dialog)      (setq fce (start_dialog))      (setq hlad (if (= fce 1)(getvar "clayer") "0"))      (new_dialog "BARVA" dialog)      (setq fce (start_dialog))      (setq bar (if (= fce 1)(atoi (getvar "cecolor")) 0))      (if (= (getvar "cecolor") "BYLAYER")(setq bar 256))      (if (= (getvar "cecolor") "BYBLOCK")(setq bar 0))      (setq sez nil i 0)      (repeat (sslength blk) (setq ent (cdr (assoc 2 (entget (ssname blk i))))) ;;; najdu všechny bloky (if (not (member ent sez))(setq sez (append sez (list ent)))) (setq i (1+ i))      )      ;;; mám seznam sez - názvy všech vybraných bloků
      ;;; hledám entity v blokách a bloky v blokách      (setq i 0 sez_ent nil)      (while (< i (length sez)) (setq blk (cdr (assoc -2 (tblsearch "BLOCK" (nth i sez))))) (while blk   (setq blk (entget blk))   (if (not (assoc (cdr (assoc 5 blk)) sez_ent))(setq sez_ent (append sez_ent (list (cons (cdr (assoc 5 blk)) 1)))))   (if (= (cdr (assoc 0 blk)) "INSERT")     (progn       (setq naz (cdr (assoc 2 blk)))       (if (not (member naz sez))(setq sez (append sez (list naz))))     )   )   (setq blk (entnext (cdr (assoc -1 blk)))) ) (setq i (1+ i))      )      (if sez_ent (progn   (setq i 0)   (repeat (length sez_ent)     (setq ent (entget (handent (car (nth i sez_ent)))))     (if (assoc 62 ent)(setq ent (list (assoc -1 ent)(cons 8 hlad)(cons 62 bar))))     (entmod ent)     (setq i (1+ i))   ) )      )      (command "_regen")    )    (alert "Nebyly vybrány žádné bloky")  ))
Dialog : AD-programy-dialog.DCL
HLADINA : dialog {  label = "Dotaz";  : row {    : button {key = "AKT"; label = "Použít aktuální hladinu"; width = 20; fixed_width = true; alignment = top; is_default = true;}    : button {key = "NULA";  label = "Použít hladinu ""0""";  width = 20; fixed_width = true; alignment = top; is_cancel = true;}  }}
BARVA : dialog {  label = "Dotaz";  : row {    : button {key = "AKT"; label = "Použít aktuální barvu"; width = 20; fixed_width = true; alignment = top; is_default = true;}    : button {key = "NULA";  label = "Použít barvu dlebloku";  width = 20; fixed_width = true; alignment = top; is_cancel = true;}  }}
 
 
 
Předem moc dík. Martin