Vytisknout stránku | Zavřít okno

Převedení bloku, v bloku, v bloku, v bloku.... do

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=5556
Datum vytištění: 11.kvě.2026 v 17:47


Téma: Převedení bloku, v bloku, v bloku, v bloku.... do
Odeslal: chlebovsky
Předmět: Převedení bloku, v bloku, v bloku, v bloku.... do
Datum odeslání: 27.lis.2007 v 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


-------------
Ing. Martin Chlebovský

www.kde-je-auto.cz

GPS monitoring provozu vozidel a osob.

WebDeveloper.

Programátor aplikací pro Autocad a MS Office.

Tvorba WWW aplikací.

Modelování domů a staveb.&l



Vytisknout stránku | Zavřít okno