Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor, Revit a další produkty Autodesk - od firmy CAD Studio [www.cadforum.cz]
Česky Slovensky English Deutsch
Přihlášení:
▶ Registrace

 právě nás čte: 4520 
RSS tipy RSS kanál - CAD tipy
RSS diskuze RSS kanál - CAD 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 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

Automatické prohození hodnot atributů v blocích

 Odpovědět Odpovědět archiv
Autor
sumi Zobrazit panel
Diskutér
Diskutér

Přihlášen: 16.pro.2007
Lokalita: ČR (Pha)
Používám:
AUTOCAD LT 2008
Stav: Offline
Bodů: 62
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace sumi Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Téma: Automatické prohození hodnot atributů v blocích
    Zasláno: 09.bře.2020 v 12:16
Poprosím Vás o radu viz. níže.
Potřeboval bych automaticky prohodit vyplněné hodnoty atributů v blocích.
Bloky mají své atributy např. název "A" a "B", potřebuji vyplněné hodnoty "A"=1 "B"=2 prohodit tzn. po vykonání "funkce" bude mít v bloku atribut "A" hodnotu 2 a "B" hodnotu 1.
Bloky mají různé názvy, tzn.: funkce by neměla brát v potaz název bloku ale najít atribut "A" a atribut "B" v libovolných názvech bloků a hodnoty prohodit (bez ohledu na název bloku).


Připojené náhledyPřihlaste se pro zobrazení plné verze - 5651/ZMENA_ATR.JPG


Jen to nebude označovat barevně, ale prohodí atribut A s atributem B.



Upravil sumi - 09.bře.2020 v 12:34
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 2020
Stav: Offline
Bodů: 1481
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: 09.bře.2020 v 13:18
(defun c:AttSwap ( / ss t1 t2 i en v1 v2)

  (if (and (setq ss (ssget ":L" '((0 . "INSERT") (66 . 1))))
   (setq t1 (getstring "\nTag 1: "))
   (setq t2 (getstring "\nTag 2: "))
   )
    (repeat (setq i (sslength ss))
      (setq en (ssname ss (setq i (1- i))))
      (and (setq v1 (getpropertyvalue en t1))
   (setq v2 (getpropertyvalue en t2))
   (not (setpropertyvalue en t1 v2))
   (not (setpropertyvalue en t2 v1)))))
  (princ)
  )
Zpět nahoru
sumi Zobrazit panel
Diskutér
Diskutér

Přihlášen: 16.pro.2007
Lokalita: ČR (Pha)
Používám:
AUTOCAD LT 2008
Stav: Offline
Bodů: 62
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace sumi Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 09.bře.2020 v 13:32
Vrací chybu žádná definice funkce GETPROPERTYVALUE
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 2020
Stav: Offline
Bodů: 1481
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: 09.bře.2020 v 14:53
Hmm, máte docela starý autocad.
Pak použijte místo get/setpropertyvalue tyto:


Aspon se něco naučíte.
Zpět nahoru
sumi Zobrazit panel
Diskutér
Diskutér

Přihlášen: 16.pro.2007
Lokalita: ČR (Pha)
Používám:
AUTOCAD LT 2008
Stav: Offline
Bodů: 62
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace sumi Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 09.bře.2020 v 15:55
Zkuste mě prosím trochu více popostrčit. Jsem úplný začátečník a je to pro začátek velké sousto.
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 2020
Stav: Offline
Bodů: 1481
Možnosti příspěvku Možnosti příspěvku   Poděkování (2) Poděkování2   Citace johny Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 09.bře.2020 v 17:19
(defun c:AttSwap ( / ss t1 t2 i en v1 v2)

  (if (and (setq ss (ssget ":L" '((0 . "INSERT") (66 . 1))))
   (setq t1 (getstring "\nTag 1: "))
   (setq t2 (getstring "\nTag 2: "))
   )
    (repeat (setq i (sslength ss))
      (setq en (ssname ss (setq i (1- i))))
      (and (setq v1 (LM:getattributevalue  en t1))
   (setq v2 (LM:getattributevalue  en t2))
   (LM:setattributevalue  en t1 v2)
   (LM:setattributevalue  en t2 v1))))
  (princ)
  )



;; Get Attribute Value  -  Lee Mac
;; Returns the value held by the specified tag within the supplied block, if present.
;; blk - [ent] Block (Insert) Entity Name
;; tag - [str] Attribute TagString
;; Returns: [str] Attribute value, else nil if tag is not found.

(defun LM:getattributevalue ( blk tag / enx )
    (if (and (setq blk (entnext blk)) (= "ATTRIB" (cdr (assoc 0 (setq enx (entget blk))))))
        (if (= (strcase tag) (strcase (cdr (assoc 2 enx))))
            (cdr (assoc 1 (reverse enx)))
            (LM:getattributevalue blk tag))))

;; Set Attribute Value  -  Lee Mac
;; Sets the value of the first attribute with the given tag found within the block, if present.
;; blk - [ent] Block (Insert) Entity Name
;; tag - [str] Attribute TagString
;; val - [str] Attribute Value
;; Returns: [str] Attribute value if successful, else nil.

(defun LM:setattributevalue ( blk tag val / enx )
    (if (and (setq blk (entnext blk)) (= "ATTRIB" (cdr (assoc 0 (setq enx (entget blk))))))
        (if (= (strcase tag) (strcase (cdr (assoc 2 enx))))
            (if (entmod (subst (cons 1 val) (assoc 1 (reverse enx)) enx))
                (progn
                    (entupd blk)
                    val))
            (LM:setattributevalue blk tag val))))
Zpět nahoru
sumi Zobrazit panel
Diskutér
Diskutér

Přihlášen: 16.pro.2007
Lokalita: ČR (Pha)
Používám:
AUTOCAD LT 2008
Stav: Offline
Bodů: 62
Možnosti příspěvku Možnosti příspěvku   Poděkování (0) Poděkování0   Citace sumi Citace  OdpovědětOdpověď Přímý odkaz na tuto zprávu Zasláno: 10.bře.2020 v 18:59
Skvělé Big smile
Funguje jak má, děkuji.
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 626:Potřebujete přidat atribut do bloku a chcete přitom zachovat existující již vložené bloky?
Tip 5338:VIPAutomatický atribut s hodnotou souřadnice přepočtenou koeficientem (aritmetický výraz v textovém poli).
Tip 3817:Jak rozložit bloky AutoCADu se zachováním hodnoty atributů?
Tip 5318:Jak v bloku nastavovat dva atributy vždy na stejnou hodnotu?
Tip 11567:AttDefault resetuje atributy bloků na výchozí hodnoty.
Tip 7176:Jak k atributu bloku přidat masku pozadí?


 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,203 sekund.