Vytisknout stránku | Zavřít okno

KOPIE hladiny v rámci několika výřezů

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: AutoCAD
Popis fóra: Otázky kolem aplikací AutoCAD a AutoCAD LT, AutoCAD web, prohlížečů, DWG a DXF, Design Review, Navisworks, nadstavby, Drive a cloud Autodesk
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=28311
Datum vytištění: 05.čer.2026 v 06:05


Téma: KOPIE hladiny v rámci několika výřezů
Odeslal: Koluch
Předmět: KOPIE hladiny v rámci několika výřezů
Datum odeslání: 24.led.2019 v 06:41
Dobrý den,
prosím Vás, dá se nějak zkopírovat hladina?
Mám hladinu a tu si chci zkopírovat a přejmenovat. Jde mi o to, aby měla stejné vlastnosti (viditelnost/neviditelnost) v daných výřezech.
Při vytvoření nové hladiny jde buď všude zmrazit nebo všude vidět.
Děkuji za radu.
Lukáš Kolúch



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 24.led.2019 v 07:22
Většinu vlastností nová hladina zdědí od hladiny, která je ve Správci vybrána v okamžiku, kdy použijete funkci Nová.

Viz též úskalí https://www.cadforum.cz/cadforum/nelze-vytvorit-novou-hladinu-vyhovujici-aktivnimu-filtru-hladin-tip10675 - https://www.cadforum.cz/cadforum/nelze-vytvorit-novou-hladinu-vyhovujici-aktivnimu-filtru-hladin-tip10675

Nebo jste měl na mysli obsah hladiny?

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Koluch
Datum odeslání: 24.led.2019 v 09:08
Nene obsah hladiny nechci kopírovat.
 
Mám 50 rozvržení, ve 30 mám hladinu X zmraženou a ve 20 rozvrženích hladinu X odmraženou.
Nyní chci vytvořit hladinu Y a od té chci, aby to co do ní budu kreslit, tak šlo vidět v těch rozvrženích, jako hladina X.
 
Pokud vytvořím novou hladinu, tak buď bude viditelná všude, nebo neviditelná všude
 
V podstatě kopie hladiny (bez obsahu hladiny).
 
Jde to?
 
Děkuji.
 
LK


Odeslal: Vladimír Michl
Datum odeslání: 24.led.2019 v 10:14
To asi jednoduše nepůjde. Přepsání hladin funguje na výřezy, ne na rozvržení. Vlastnosti hladin zkopírujete mezi výřezy přes [CMD]KOPIEVLAST[/CMD], ale to asi nebude vyhovovat kvůli přenosu ostatních vlastností.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Koluch
Datum odeslání: 24.led.2019 v 10:16
Omlouvám se, jde o výřezy samozřejmě.


Odeslal: Koluch
Datum odeslání: 25.led.2019 v 06:28
Jde to teda nějak?
 


Odeslal: Vladimír Michl
Datum odeslání: 25.led.2019 v 07:47
Viz výše - částečně přes MATCHPROP, ale přes uživatelské prostředí to jinak zřejmě nepůjde. Jedině asi napsat nějaký programový nástroj.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Koluch
Datum odeslání: 25.led.2019 v 11:31
Přijde mi to jako základní funkce.
Dva měsíce člověk něco kreslí a chce pak něco doplnit, tak pak přece nebude klikat na všechny výřezy (jeden výřez na jednom rozvržení).


Odeslal: Koluch
Datum odeslání: 25.led.2019 v 13:41
OK zeptám se jinak.
 
Jak vytvořit novou hladinu, která bude zmražená pouze v některých rozvrženích (co rozvržení to výřez)?
Pokud kreslím od nuly, tak mám například Hladinu1 zmraženou ve výřezu 1,3,5,100 (a použiji funkci zmrazit v nových výřezech).
Teď chci však dokreslit něco v nové Hladině2, která se tematicky váže k Hladině1 a tudíž musí být opět zmražena ve výřezech 1,3,5,100. Jak toho docílit?


Odeslal: johny
Datum odeslání: 25.led.2019 v 20:03
Kopírujete hladinu vybraného objektu nebo aktuální hladinu.
Hledejte jak použít LISP, pokud nevíte.

(vl-load-com)


(defun c:CopyLayer (/ *error* ctb cme doc vpfreeze new old ss ids)
  
  (defun *error* (errmsg)
    (if (not (wcmatch errmsg "Function cancelled,quit / exit abort,console break,end"))
      (princ (strcat "\nError: " errmsg)))
    (if ctb (setvar 'CTAB ctb))
    (if cme (setvar 'CMDECHO cme))
    (if doc (vla-endundomark doc))
    (princ))
  
  ;----
  (defun :CopyLayer (new old / ed )
    (if (setq ed (entget (tblobjname "LAYER" old)))
      (entmake (list '(0 . "LAYER")
                     '(100 . "AcDbSymbolTableRecord")
                     '(100 . "AcDbLayerTableRecord")
                     (cons 2    new)
                     (assoc 70  ed)
                     (assoc 62  ed)
                     (assoc 6   ed)
                     (assoc 290 ed)
                     (assoc 370 ed)
                     (assoc 390 ed)))))

  
  ; -----------------------------------------------------------------------------------------------------------
  ; -----------------------------------------------------------------------------------------------------------

  
  (setq old (if (setq ssl (ssget))
              (cdr (assoc 8 (entget (ssname ssl 0))))
              (getvar 'CLAYER))
        new ""
        
        ctb (getvar 'CTAB)
        cme (getvar 'CMDECHO))
  
  (vla-startundomark (setq doc (vla-get-activedocument (vlax-get-acad-object))))
  (setvar 'CMDECHO 0)
  
  
  (while (or (not (snvalid new 0))
             (tblsearch "LAYER" new))
    (setq new (lisped old)))
  
  (if (:CopyLayer new old)
    (foreach e (layoutlist)
      (if (setq ss (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 e) (cons -4 "!=") (cons 69 1))))
        (progn
          (setq ids nil)
          (repeat (setq i (sslength ss))
            (if (and (setq ent (ssname ss (setq i (1- i))))
                     (setq lst (vl-remove-if-not '(lambda (x) (= 331 (car x))) (entget ent)))
                     (setq lst (vl-remove-if-not '(lambda (x) (= old (cdr (assoc 2 (entget (cdr x)))))) lst))
                     )
              (setq ids (cons (cdr (assoc 69 (entget ent))) ids))))
          (if ids
            (progn
              (setvar 'CTAB e)
              (command "_.MSPACE")
              (foreach id ids
                (setvar 'CVPORT id)
                (command "_.VPLAYER" "_Freeze" new "_Current" ""))
              (command "_.PSPACE")))))))
  
  (*error* "end")
  )


Odeslal: Vladimír Michl
Datum odeslání: 25.led.2019 v 22:45
Taky jsem se do toho pustil - zkuste utilitu/příkaz CopyAllVP ze sekce Download (načíst přes APLČTI a napsat příkaz CopyAllVP). Zkopíruje stav hladin jednoho rozvržení do všech ostatních. Používá jiný postup než aplikace Johnyho, stavy hladin. Tak si můžete vybrat :-)

DOPLNĚNO: Pardon, ten CopyAllVP řeší trochu jiný problém - pro duplikaci hladiny použijte ten výše uvedený program, funguje dobře. Zde lehce upraven/doplněn:

uploads/9/CopyLayer.lsp" rel="nofollow - CopyLayer.lsp
(doplněn 27.1. 16:14 a 28.1. 8:25)

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Koluch
Datum odeslání: 26.led.2019 v 12:28
Lisp (copylayer) se mi načte, příkaz spustím, ale:
 
napíše mi to? úprava víceřádkového textu a po kliknutí na Plný editor to napíše Error: nesprávný typ argumentu: stringp -1.
 
Navíc příkaz nelze ukončit ESC, ani OK ani storno.
 
 


Odeslal: Vladimír Michl
Datum odeslání: 27.led.2019 v 16:13
Plný editor zde nemá žádný smysl. Johny jej zde použil zřejmě pro pohodlnou modifikaci názvu kopie hladiny. Když vypnete CMDDIA, můžete název zadávat klasicky v příkazovém řádku. A ukliknutí na Plný editor je nyní v upravené verzi také ošetřeno. Já myslím, že to dělá to chcete.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Koluch
Datum odeslání: 27.led.2019 v 17:30

OK, když použiji LISP copylayer, tak se mi vytvoří nová hladina ***_copy.

 
Když v té hladině ***_copy něco nakreslím, tak se mi to objeví ve výřezech, ve kterých to nechci,
 
Nevím co všechno COPYLAYER kopíruje za vlastnosti, ale zmraženost/rozmraženost asi ne.
Nebo dělám něco špatně?


Odeslal: johny
Datum odeslání: 27.led.2019 v 20:25
Toto by mohlo pomoci. 

(foreach l (layoutlist)
      (if (and (setq lst (vl-remove-if-not
   '(lambda (e) (vl-remove-if-not
  '(lambda (x) (= old (cdr (assoc 2 (entget (cdr x))))))
  (vl-remove-if-not ; just vp-frozen entities
    '(lambda (x) (= 331 (car x)))
    (entget e)))) ; entity's def. list inc. vp-frozen
   (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 l)))))))) ; all entities
       (setvar 'CTAB l)
       (vl-cmdf "_.ZOOM" "_Extents" "_.MSPACE")
       (setq lst (vl-sort (mapcar '(lambda (e) (cdr (assoc 69 (entget e)))) lst) '<))
       )
(progn
  (setq lst (if (setq 1st (= (car lst) 1))
      (cdr lst)
      lst))
  (foreach e lst
    (setvar 'CVPORT e)
    (vl-cmdf "_.VPLAYER" "_Freeze" new "_Current" ""))
  (vl-cmdf "_.PSPACE" "_ZOOM" "_Previous")
  (if 1st (vl-cmdf "_.VPLAYER" "_Freeze" new "_Current" "")))))


Odeslal: Vladimír Michl
Datum odeslání: 28.led.2019 v 08:27
Opět jsem si dovolil johnyho aktualizaci promítnout do LSP soubor viz výše - zkuste tuto aktualizovanou verzi.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Koluch
Datum odeslání: 28.led.2019 v 09:47
johny a Vladimír Michl jsou borci

Vůbec nerozumím zdrojovému kódu, ale funguje tak jak jsem potřeboval, děkuji.
Regenerace přes výřezy a rozvržení probíhala cca 3 minuty, ale udělalo to to co mělo.
Takže ještě jednou děkuji.
Lukáš Kolúch


Odeslal: Vladimír Michl
Datum odeslání: 28.led.2019 v 10:06
Poděkování patří hlavně johnymu, v tomto případě jsem byl jen "údržbář" :-)

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)



Vytisknout stránku | Zavřít okno