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
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