CADsite forum

AutoCAD => Autolisp => Topic gestart door: gery op do 31 03 2016, 19:38:57

Titel: OPGELOST - attrib. definition van meerdere external blocks automatisch wijzigen
Bericht door: gery op do 31 03 2016, 19:38:57
Ik heb honderden externe blocks (*.dwg) die alle eenzelfde "attribute definition" hebben, dus met eenzelfde "tag", nl. tag "1001". Echter, de "prompts" van die "attribute definitions" zijn leeg. (zie bijlage 1)

Ik zoek nu een manier (LISP) om die "prompts" in al deze blocks automatisch in te vullen met eenzelfde tekst, nl. "Component nr." (zie bijlage 2)

Heeft iemand een kant en klare oplossing, of een aanzet in de goede richting?

Titel: Re: attribute definition van meerdere external blocks automatisch wijzigen
Bericht door: EddyBeerke op do 31 03 2016, 21:52:43
Het geliefde babe van joop zou een uitkomst kunnen bieden.
Samen met een lisproutine baarbij je de attribute selecteerd en dan de wijigingen doet.
Zal morgen even naar kijken.
Als ik een antwoord heb dan laat ik je dat weten...

Verstuurd vanaf mijn LG-E975 met Tapatalk

Titel: Re: attribute definition van meerdere external blocks automatisch wijzigen
Bericht door: EddyBeerke op ma 04 04 2016, 09:25:14
Om je alvast op weg te helpen:
;;; Attribute aanpassen
(vl-load-com)
(defun c:att_change_prompt ( /  e o PromptString )
(setq e (car (entsel))
(setq o (vlax-ename->vla-object e))
(vla-put-PromptString o "Vul hier de nieuwe prompt in"))
(princ)
)


Gebruik het comando "att_change_prompt" om de lisp uit te voeren.
Titel: Re: attribute definition van meerdere external blocks automatisch wijzigen
Bericht door: EddyBeerke op ma 04 04 2016, 09:30:02
Babe is hier te vinden:
http://www.cadsite.be/tips/BaBe.zip
Titel: OPGELOST: attribute definition van meerdere external blocks automatisch wijzigen
Bericht door: gery op di 05 04 2016, 15:02:00
Bedankt Eddy!

'k heb ondertussen 2 "oplossingen":

1. met LISP code:

(setq #OldEntData (entget (ssname (ssget "x" '((-4 . "<or") (2 . "1001") (-4 . "or>"))) 0)))
(setq #OldPrompt (assoc 3 #OldEntData))
(setq #NewPrompt (cons 3 "Component nr."))
(setq #NewEntData (subst #NewPrompt #OldPrompt #OldEntData))
(entmod #NewEntData)

2. met LISP en VLISP code:

(vla-put-PromptString (vlax-ename->vla-object (ssname (ssget "x" '((-4 . "<or") (2 . "1001") (-4 . "or>"))) 0)) "Component nr.")