Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor, Revit a další produkty Autodesk - od firmy Arkance Systems [www.cadforum.cz]
CZ | SK | EN | DE
Přihlášení
či registrace
   právě nás čte: 5490 
RSS kanál - CAD tipy RSS tipy
RSS diskuze

Diskuze Diskuzní fórum, poradna

 

NápovědaCAD diskuze, rady, výměna zkušeností

 
CAD Fórum - Homepage Veřejné diskuzní fórum k CAD aplikacím - ptejte se na libovolné otázky týkající se oboru CAx, podělte se o vaše znalosti a zkušenosti s programy AutoCAD, Inventor, Revit, Fusion 360, 3ds Max a s dalšími CAD aplikacemi. Zaregistrujte se nebo se přihlašte a zašlete váš příspěvek do odpovídajícího fóra. Viz další informace o CAD Fóru. Nechcete se registrovat? Zeptejte se v naší Facebook poradně.
Fórum nenahrazuje technický support firmy Arkance Systems (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.cadstudio.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Vložení bloku s konkrétním stavem viditelnosti

 Odpovědět Odpovědět archiv
Autor
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace PepaR Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Téma: Vložení bloku s konkrétním stavem viditelnosti
    Zasláno: 22.úno.2024 v 04:51
Dobrý den,

rád bych se zeptal, zdali lze v AutoCADu připravit makro, které by vkládalo dynamický blok s konkrétním stavem viditelnosti?


Předem dekuji za radu
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21490
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace Vladimír Michl Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 22.úno.2024 v 07:11
Lze, ale není to úplně triviální. Zde je příklad kódu od Lee Maca (dotaz na soubor bloku jde nahradit dotazem na jméno bloku, stav viditelnosti lze zvolit také přímým zadáním jména):

;Lee Mac (defun c:InsertDyn ( / *error* att blk def doc ent new obj par spc tmp vis ) (defun *error* ( msg ) (if (= 'int (type att)) (setvar 'attreq att) ) (foreach obj (list new def) (if (and (= 'vla-object (type obj)) (not (vlax-erased-p obj))) (vl-catch-all-apply 'vla-delete (list obj)) ) ) (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")) (princ (strcat "\nError: " msg)) ) (princ) ) (cond ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (getvar 'clayer)))))) (princ "\nCurrent layer locked.") ) ( (null (setq blk (getfiled "Select Dynamic Block with Visibility States" "" "dwg" 16))) (princ "\n*Cancel*") ) ( (progn (setq doc (vla-get-activedocument (vlax-get-acad-object)) spc (vlax-get-property doc (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace)) obj (vlax-invoke spc 'insertblock '(0.0 0.0 0.0) blk 1.0 1.0 1.0 0.0) ) (vla-put-visible obj :vlax-false) (= :vlax-false (vla-get-isdynamicblock obj)) ) (princ "\nSelected block is not dynamic.") (vla-delete obj) ) ( (null (setq par (LM:getvisibilityparametername obj))) (princ "\nSelected block does not have a visibility parameter.") (vla-delete obj) ) ( (null (setq vis (car (LM:listbox "Choose a Visibility State" (acad_strlsort (LM:getdynpropallowedvalues obj par)) 0)))) (princ "\n*Cancel*") (vla-delete obj) ) ( t (LM:setdynpropvalue obj par vis) (setq tmp 0) (while (tblsearch "block" (setq blk (strcat "tmp" (itoa (setq tmp (1+ tmp))))))) (vla-put-visible (car (vlax-invoke doc 'copyobjects (list obj) (setq def (vlax-invoke (vla-get-blocks doc) 'add '(0.0 0.0 0.0) blk)) ) ) :vlax-true ) (vla-delete obj) (setq ent (entlast) att (getvar 'attreq) ) (setvar 'attreq 0) (if (and (vl-cmdf "_.-insert" blk "_S" 1.0 "_R" 0.0 "\\") (not (eq ent (setq ent (entlast)))) (= "AcDbBlockReference" (vla-get-objectname (setq new (vlax-ename->vla-object ent)))) ) (progn (vla-explode new) (vla-delete new) ) ) (vl-catch-all-apply 'vla-delete (list def)) ) ) (princ) ) ;; Get Visibility Parameter Name - Lee Mac ;; Returns the name of the Visibility Parameter of a Dynamic Block (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; Returns: [str] Name of Visibility Parameter, else nil (defun LM:getvisibilityparametername ( blk / vis ) (if (and (vlax-property-available-p blk 'effectivename) (setq blk (vla-item (vla-get-blocks (vla-get-document blk)) (vla-get-effectivename blk) ) ) (= :vlax-true (vla-get-isdynamicblock blk)) (= :vlax-true (vla-get-hasextensiondictionary blk)) (setq vis (vl-some '(lambda ( pair ) (if (and (= 360 (car pair)) (= "BLOCKVISIBILITYPARAMETER" (cdr (assoc 0 (entget (cdr pair))))) ) (cdr pair) ) ) (dictsearch (vlax-vla-object->ename (vla-getextensiondictionary blk)) "acad_enhancedblock" ) ) ) ) (cdr (assoc 301 (entget vis))) ) ) ;; Get Dynamic Block Property Allowed Values - Lee Mac ;; Returns the allowed values for a specific Dynamic Block property. ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) ;; Returns: [lst] List of allowed values for property, else nil if no restrictions (defun LM:getdynpropallowedvalues ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'allowedvalues))) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;; Set Dynamic Block Property Value - Lee Mac ;; Modifies the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) ;; val - [any] New value for property ;; Returns: [any] New value if successful, else nil (defun LM:setdynpropvalue ( blk prp val ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (progn (vla-put-value x (vlax-make-variant val (vlax-variant-type (vla-get-value x)))) (cond (val) (t)) ) ) ) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;; List Box - Lee Mac ;; Displays a DCL list box allowing the user to make a selection from the supplied data. ;; msg - [str] Dialog label ;; lst - [lst] List of strings to display ;; bit - [int] 1=allow multiple; 2=return indexes ;; Returns: [lst] List of selected items/indexes, else nil (defun LM:listbox ( msg lst bit / dch des tmp rtn ) (cond ( (not (and (setq tmp (vl-filename-mktemp nil nil ".dcl")) (setq des (open tmp "w")) (write-line (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select=" (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}" ) des ) (not (close des)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch) ) ) (prompt "\nError Loading List Box Dialog.") ) ( t (start_list "list") (foreach itm lst (add_list itm)) (end_list) (setq rtn (set_tile "list" "0")) (action_tile "list" "(setq rtn $value)") (setq rtn (if (= 1 (start_dialog)) (if (= 2 (logand 2 bit)) (read (strcat "(" rtn ")")) (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")"))) ) ) ) ) ) (if (< 0 dch) (unload_dialog dch) ) (if (and tmp (setq tmp (findfile tmp))) (vl-file-delete tmp) ) rtn ) (vl-load-com) (princ)
Vladimír Michl (moderátor)
Arkance Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
johny Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 24.led.2006
Lokalita: ČR (JM)
Používám:
C3D 2022
Stav: Offline
Bodů: 1682
Možnosti příspěvku Možnosti příspěvku   Poděkování (1) Poděkování1   Citace johny Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 22.úno.2024 v 12:05
Kdyby stačilo jej změnit až po vložení, čiliže náhled bude defaultní blok, ale po vložení se změní, pak by ten kód mohl být drobátko kratší.

(progn (command-s "_.-insert" "Blok") (setpropertyvalue (entlast) "AcDbDynBlockPropertyViditelnost" "StavViditelnosti1") (princ))



Upravil johny - 22.úno.2024 v 12:08
Zpět nahoru
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace PepaR Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 23.úno.2024 v 04:32
Děkuji moc za nasměrování.
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 12085:Viditelné označení předběžného, neschváleného výkresu.
Tip 12171:Jak objekt skrýt či zobrazit ve všech stavech viditelnosti?
Tip 10760:Proč atribut dynamického bloku nereaguje na stav viditelnosti?
Tip 7024:Jak vložit značku drsnosti povrchu?
Tip 8287:Vytvoření dynamického bloku dle rozměrové tabulky.
Tip 7582:Výběr dynamických bloků podle dynamické vlastnosti nebo stavu viditelnosti.


 Odpovědět Odpovědět

Přejít na fórum Oprávnění fóra Zobrazit panel



Stránka byla vygenerována za 0,973 sekund.