• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Ersetzen Sie den Standardattributwert mit dem im Block eingefügten Wert

  • Ersteller Ersteller 77marco77
  • Erstellt am Erstellt am

77marco77

Guest
Guten Morgen.
in einer Zeichnung (die als Blockquelle für neue Designs verwendet wird) mit über 6000 Blöcken möchte ich den Standardwert des Attribut-Tags durch den bereits eingefügten Wert manuell im Block ersetzen.

Ich fand diesen Code von lee mac:
Code:
;; lee-mac - 2017
(defun c:defatt)
(if (= "" (setq bln (strcase (getstring t "\nspecify block name filter (use * for all) < *))))
(setq bln "*)
)
(if (= "" (setq tag (strcase (getstring "\nspecify tag name filter (use * for all) < *))))
(setq tag "*")
)
(setq def (getstring t "\nspecify new default value: "))
(vlax-for blk (vla-get-blöcke (vla-get-activedocument (vlax-get-acad-object)))
(wenn (und (= :vlax-false (vla-get-islayout blk) (vla-get-isxref blk))))) (wcmatch (strcase (vla-get-name blk)))))
(vlax-for obj blk)
(wenn (und (= "acdbattributedefinition" (vla-get-objectname obj))
(wcmatch (strcase (vla-get-tagstring obj)) tag
(vlax-write-enabled-p obj)
)
(vla-put-textstring obj def)
)
)
)
)
(princ)
)
(vl-load-com) (princ)
das tut, was ich brauche, aber ich muss den Blocknamen eingeben (ich kann nicht auswählen), den Tag-Namen und den neuen Standardwert des Tags, aber sie sind viele Blöcke und jeder hat zwischen 12 und 20 Attribute..
Ist es möglich, die Blockauswahl (oder mehrere Blöcke) schneller zu machen, das Attribut (oder mehrere Attribute), das den bereits eingefügten Wert liest und als neuer Standard eingeben lässt?
 
Es ist nicht das Maximum, Sie müssen einen Block zu einer Zeit wählen, aber ein wenig Geschwindigkeiten (Ich hoffe, sie sind nicht 6000 Blöcke alle mit verschiedenen Namen!). Sie müssen einmal auf den Block und einmal auf das Attribut klicken.
Code:
(Rückgang c:defatt2 ()
(setq blk (vlax-ename->vla object (car (entsel "\nselezionire blockco: "))))
Tag
blk (fla-get-blocks (vla-get-active document (vla-get-acad object)))
)
(vlax-für elem blk)
(wenn (und (= fla-get-objectname elem) "addbattributeddefinition")
(= bla-get-tagstring elem) (vla-get-tagstring tag)
)
(fla-put-textstring elem (fla-get-textstring tag))
)
)
)
 
Es ist nicht das Maximum, Sie müssen einen Block zu einer Zeit wählen, aber ein wenig Geschwindigkeiten (Ich hoffe, sie sind nicht 6000 Blöcke alle mit verschiedenen Namen!). Sie müssen einmal auf den Block und einmal auf das Attribut klicken.
Code:
(Rückgang c:defatt2 ()
(setq blk (vlax-ename->vla object (car (entsel "\nselezionire blockco: "))))
Tag
blk (fla-get-blocks (vla-get-active document (vla-get-acad object)))
)
(vlax-für elem blk)
(wenn (und (= fla-get-objectname elem) "addbattributeddefinition")
(= bla-get-tagstring elem) (vla-get-tagstring tag)
)
(fla-put-textstring elem (fla-get-textstring tag))
)
)
)
Vielen Dank, jetzt werde ich sicherlich schneller sein, leider sind sie wirklich 6358 Blöcke (alle mit verschiedenen Namen...) und jeder mit 12 bis 20 Attributen (zum Glück muss ich nur 4 oder 5 aktualisieren) aber zumindest jetzt habe ich das Kabel nur durch Klicken statt zu schreiben :).
Danke noch mal!
 
Es ist nicht das Maximum, Sie müssen einen Block zu einer Zeit wählen, aber ein wenig Geschwindigkeiten (Ich hoffe, sie sind nicht 6000 Blöcke alle mit verschiedenen Namen!). Sie müssen einmal auf den Block und einmal auf das Attribut klicken.
Code:
(Rückgang c:defatt2 ()
(setq blk (vlax-ename->vla object (car (entsel "\nselezionire blockco: "))))
Tag
blk (fla-get-blocks (vla-get-active document (vla-get-acad object)))
)
(vlax-für elem blk)
(wenn (und (= fla-get-objectname elem) "addbattributeddefinition")
(= bla-get-tagstring elem) (vla-get-tagstring tag)
)
(fla-put-textstring elem (fla-get-textstring tag))
)
)
)
Ich habe angefangen, etwa 56.000 Klicks + einzugeben, aber der Finger hat schon aufgehört zu arbeiten. .
Wenn es nicht zu kompliziert ist, denken Sie, dass Sie im Code die Anweisungen hinzufügen können, damit der Befehl wieder gestartet und automatisch den zuvor ausgewählten Block ausgewählt wird? Dies würde mir erlauben, den Block zum ersten Mal zu wählen, um einfach nacheinander die einzigen Attribute zu aktualisieren, wenn ich fertig drücken esc und ich neu starten Sie es für den nächsten Block (sie würden 28,000 Klicks und ohne die Tastatur, um den Befehl für jedes Attribut neu eingeben).
Danke in jedem Fall :)
 
Also sollte es gehen. das Programm wird Sie Attribute fragen, bis Sie drücken <enter>.
</enter>
Code:
(Defun c:defatt3()
(setq blk (vlax-ename->vla-object (car (entsel "\nselezionare blocco:")))
(vla-get-Blöcke (vla-get-activedocument (vlax-get-acad-object))
Gelistet "()
)
(while (setq tag)
(falls genommen)
(Prog.)
(setq tag (vlax-ename->vla-object)
(Setq aufgeführt)
)
)
)
(Setq aufgeführt)
(Foreach Elem1 aufgeführt)
(vlax-für elem blk)
(wenn (und = (vla-get-objectname elem) "acdbattributedefinition")
(vla-get-tagstring elem) (vla-get-tagstring elem1))
)
(vla-put-textstring elem (vla-get-textstring elem1))
)
)
)
)
 
Sehr gut. Aber der Spieß ist der Spieß. nicht die, die Sie in Italien in Supermärkten finden. Du musst dort essen, es ist ein weiterer Planet. Es ist wie ein Vergleich Parmesan
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben